summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SystemUI/Android.bp36
-rw-r--r--packages/SystemUI/legacy/recents/AndroidManifest.xml51
-rw-r--r--packages/SystemUI/legacy/recents/proguard.flags14
-rw-r--r--packages/SystemUI/legacy/recents/res/anim/recents_fast_toggle_app_home_exit.xml27
-rw-r--r--packages/SystemUI/legacy/recents/res/anim/recents_from_launcher_enter.xml28
-rw-r--r--packages/SystemUI/legacy/recents/res/anim/recents_from_launcher_exit.xml28
-rw-r--r--packages/SystemUI/legacy/recents/res/anim/recents_from_unknown_enter.xml28
-rw-r--r--packages/SystemUI/legacy/recents/res/anim/recents_from_unknown_exit.xml28
-rw-r--r--packages/SystemUI/legacy/recents/res/anim/recents_launch_next_affiliated_task_bounce.xml49
-rw-r--r--packages/SystemUI/legacy/recents/res/anim/recents_launch_next_affiliated_task_source.xml34
-rw-r--r--packages/SystemUI/legacy/recents/res/anim/recents_launch_next_affiliated_task_target.xml28
-rw-r--r--packages/SystemUI/legacy/recents/res/anim/recents_launch_prev_affiliated_task_bounce.xml33
-rw-r--r--packages/SystemUI/legacy/recents/res/anim/recents_launch_prev_affiliated_task_source.xml27
-rw-r--r--packages/SystemUI/legacy/recents/res/anim/recents_launch_prev_affiliated_task_target.xml36
-rw-r--r--packages/SystemUI/legacy/recents/res/anim/recents_to_launcher_enter.xml28
-rw-r--r--packages/SystemUI/legacy/recents/res/anim/recents_to_launcher_exit.xml28
-rw-r--r--packages/SystemUI/legacy/recents/res/drawable-hdpi/recents_lower_gradient.9.pngbin203 -> 0 bytes
-rw-r--r--packages/SystemUI/legacy/recents/res/drawable-hdpi/recents_status_gradient.9.pngbin169 -> 0 bytes
-rw-r--r--packages/SystemUI/legacy/recents/res/drawable-mdpi/recents_lower_gradient.9.pngbin181 -> 0 bytes
-rw-r--r--packages/SystemUI/legacy/recents/res/drawable-mdpi/recents_status_gradient.9.pngbin163 -> 0 bytes
-rw-r--r--packages/SystemUI/legacy/recents/res/drawable-xhdpi/recents_lower_gradient.9.pngbin220 -> 0 bytes
-rw-r--r--packages/SystemUI/legacy/recents/res/drawable-xhdpi/recents_status_gradient.9.pngbin186 -> 0 bytes
-rw-r--r--packages/SystemUI/legacy/recents/res/drawable-xxhdpi/recents_lower_gradient.9.pngbin265 -> 0 bytes
-rw-r--r--packages/SystemUI/legacy/recents/res/drawable-xxhdpi/recents_status_gradient.9.pngbin223 -> 0 bytes
-rw-r--r--packages/SystemUI/legacy/recents/res/drawable-xxhdpi/recents_task_shadow.9.pngbin2540 -> 0 bytes
-rw-r--r--packages/SystemUI/legacy/recents/res/drawable/recents_dismiss_dark.xml29
-rw-r--r--packages/SystemUI/legacy/recents/res/drawable/recents_dismiss_light.xml29
-rw-r--r--packages/SystemUI/legacy/recents/res/drawable/recents_empty.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/drawable/recents_grid_task_view_focus_frame_background.xml19
-rw-r--r--packages/SystemUI/legacy/recents/res/drawable/recents_info_dark.xml24
-rw-r--r--packages/SystemUI/legacy/recents/res/drawable/recents_info_light.xml24
-rw-r--r--packages/SystemUI/legacy/recents/res/drawable/recents_lock_to_app_pin.xml25
-rw-r--r--packages/SystemUI/legacy/recents/res/drawable/recents_lock_to_task_button_bg.xml26
-rw-r--r--packages/SystemUI/legacy/recents/res/drawable/recents_low_ram_stack_button_background.xml22
-rw-r--r--packages/SystemUI/legacy/recents/res/drawable/recents_move_task_fullscreen_dark.xml37
-rw-r--r--packages/SystemUI/legacy/recents/res/drawable/recents_move_task_fullscreen_light.xml37
-rw-r--r--packages/SystemUI/legacy/recents/res/drawable/recents_stack_action_background.xml25
-rw-r--r--packages/SystemUI/legacy/recents/res/interpolator/recents_from_launcher_exit_interpolator.xml23
-rw-r--r--packages/SystemUI/legacy/recents/res/interpolator/recents_launch_next_affiliated_task_bounce_scale.xml20
-rw-r--r--packages/SystemUI/legacy/recents/res/interpolator/recents_launch_prev_affiliated_task_bounce_ydelta.xml20
-rw-r--r--packages/SystemUI/legacy/recents/res/interpolator/recents_to_launcher_enter_interpolator.xml23
-rw-r--r--packages/SystemUI/legacy/recents/res/layout/recents.xml44
-rw-r--r--packages/SystemUI/legacy/recents/res/layout/recents_empty.xml30
-rw-r--r--packages/SystemUI/legacy/recents/res/layout/recents_grid_task_view.xml35
-rw-r--r--packages/SystemUI/legacy/recents/res/layout/recents_incompatible_app_overlay.xml31
-rw-r--r--packages/SystemUI/legacy/recents/res/layout/recents_low_ram_stack_action_button.xml34
-rw-r--r--packages/SystemUI/legacy/recents/res/layout/recents_search_bar.xml30
-rw-r--r--packages/SystemUI/legacy/recents/res/layout/recents_stack_action_button.xml37
-rw-r--r--packages/SystemUI/legacy/recents/res/layout/recents_task_view.xml35
-rw-r--r--packages/SystemUI/legacy/recents/res/layout/recents_task_view_header.xml75
-rw-r--r--packages/SystemUI/legacy/recents/res/layout/recents_task_view_header_overlay.xml52
-rw-r--r--packages/SystemUI/legacy/recents/res/layout/recents_task_view_header_progress_bar.xml22
-rw-r--r--packages/SystemUI/legacy/recents/res/layout/recents_task_view_incompatible_app_toast.xml26
-rw-r--r--packages/SystemUI/legacy/recents/res/layout/recents_task_view_lock_to_app.xml34
-rw-r--r--packages/SystemUI/legacy/recents/res/values-af/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-am/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-ar/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-as/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-az/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-b+sr+Latn/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-be/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-bg/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-bn/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-bs/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-ca/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-cs/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-da/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-de/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-el/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-en-rAU/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-en-rCA/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-en-rGB/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-en-rIN/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-en-rXC/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-es-rUS/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-es/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-et/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-eu/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-fa/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-fi/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-fr-rCA/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-fr/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-gl/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-gu/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-hi/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-hr/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-hu/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-hy/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-in/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-is/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-it/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-iw/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-ja/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-ka/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-kk/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-km/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-kn/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-ko/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-ky/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-lo/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-lt/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-lv/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-mk/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-ml/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-mn/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-mr/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-ms/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-my/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-nb/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-ne/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-nl/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-or/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-pa/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-pl/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-pt-rBR/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-pt-rPT/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-pt/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-ro/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-ru/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-si/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-sk/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-sl/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-sq/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-sr/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-sv/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-sw/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-sw600dp/dimens.xml21
-rw-r--r--packages/SystemUI/legacy/recents/res/values-ta/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-te/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-th/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-tl/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-tr/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-uk/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-ur/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-uz/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-vi/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-zh-rCN/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-zh-rHK/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-zh-rTW/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values-zu/strings.xml43
-rw-r--r--packages/SystemUI/legacy/recents/res/values/attrs.xml26
-rw-r--r--packages/SystemUI/legacy/recents/res/values/colors.xml51
-rw-r--r--packages/SystemUI/legacy/recents/res/values/config.xml75
-rw-r--r--packages/SystemUI/legacy/recents/res/values/dimens.xml110
-rw-r--r--packages/SystemUI/legacy/recents/res/values/dimens_grid.xml28
-rw-r--r--packages/SystemUI/legacy/recents/res/values/strings.xml67
-rw-r--r--packages/SystemUI/legacy/recents/res/values/styles.xml55
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/Constants.java34
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/IRecentsNonSystemUserCallbacks.aidl38
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/IRecentsSystemUserCallbacks.aidl36
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/LegacyRecentsImpl.java750
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/RecentsActivity.java858
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/RecentsActivityLaunchState.java53
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/RecentsConfiguration.java126
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/RecentsDebugFlags.java29
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/RecentsImpl.java1118
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/RecentsImplProxy.java161
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/RecentsSystemUser.java121
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/RecentsSystemUserService.java53
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/EventBus.java763
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/AppTransitionFinishedEvent.java25
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/CancelEnterRecentsWindowAnimationEvent.java34
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/ConfigurationChangedEvent.java38
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/DismissRecentsToHomeAnimationStarted.java31
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/DockedFirstAnimationFrameEvent.java25
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/DockedTopTaskEvent.java34
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/EnterRecentsWindowAnimationCompletedEvent.java28
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/EnterRecentsWindowLastAnimationFrameEvent.java22
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/ExitRecentsWindowFirstAnimationFrameEvent.java28
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/HideRecentsEvent.java34
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/HideStackActionButtonEvent.java36
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/LaunchMostRecentTaskRequestEvent.java26
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/LaunchNextTaskRequestEvent.java27
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/LaunchTaskEvent.java56
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/LaunchTaskFailedEvent.java26
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/LaunchTaskStartedEvent.java36
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/LaunchTaskSucceededEvent.java31
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/MultiWindowStateChangedEvent.java38
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/PackagesChangedEvent.java37
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/RecentsActivityStartingEvent.java26
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/ShowEmptyViewEvent.java25
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/ShowStackActionButtonEvent.java32
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/TaskStackUpdatedEvent.java37
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/ToggleRecentsEvent.java26
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/UndockingTaskEvent.java28
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/component/ActivityPinnedEvent.java31
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/component/ActivityUnpinnedEvent.java25
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/component/ExpandPipEvent.java25
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/component/HidePipMenuEvent.java26
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/component/RecentsVisibilityChangedEvent.java36
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/component/ScreenPinningRequestEvent.java35
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/component/SetWaitingForTransitionStartEvent.java31
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/component/ShowUserToastEvent.java33
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/AllTaskViewsDismissedEvent.java31
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/DeleteTaskDataEvent.java33
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/DismissAllTaskViewsEvent.java27
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/DismissTaskViewEvent.java32
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/DraggingInRecentsEndedEvent.java15
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/DraggingInRecentsEvent.java15
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/HideIncompatibleAppOverlayEvent.java26
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/RecentsDrawnEvent.java26
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/RecentsGrowingEvent.java26
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/ShowApplicationInfoEvent.java32
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/ShowIncompatibleAppOverlayEvent.java26
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/StackViewScrolledEvent.java37
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/TaskSnapshotChangedEvent.java34
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/TaskViewDismissedEvent.java38
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/UserInteractionEvent.java26
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/dragndrop/DragDropTargetChangedEvent.java36
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/dragndrop/DragEndCancelledEvent.java38
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/dragndrop/DragEndEvent.java38
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/dragndrop/DragStartEvent.java46
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/dragndrop/DragStartInitializeDropTargetsEvent.java40
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/focus/DismissFocusedTaskViewEvent.java27
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/focus/FocusNextTaskViewEvent.java26
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/focus/FocusPreviousTaskViewEvent.java26
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/focus/NavigateTaskViewEvent.java49
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/misc/DozeTrigger.java106
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/misc/FreePathInterpolator.java177
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/misc/ReferenceCountedTrigger.java130
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/misc/SysUiTaskStackChangeListener.java35
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/misc/SystemServicesProxy.java535
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/model/BackgroundTaskLoader.java169
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/model/FilteredTaskList.java125
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/model/HighResThumbnailLoader.java247
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/model/RecentsTaskLoadPlan.java216
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/model/RecentsTaskLoader.java421
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/model/TaskFilter.java28
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/model/TaskKeyStrongCache.java73
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/model/TaskResourceLoadQueue.java61
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/model/TaskStack.java402
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/utilities/AnimationProps.java229
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/utilities/Utilities.java339
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/AnimateableViewBounds.java135
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/DockState.java351
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/DropTarget.java31
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/FakeShadowDrawable.java290
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/FixedSizeFrameLayout.java97
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/FixedSizeImageView.java77
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/RecentsEntrancePathInterpolator.java47
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/RecentsTransitionComposer.java175
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/RecentsView.java1077
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/RecentsViewTouchHandler.java286
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/SystemBarScrimViews.java194
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/TaskStackAnimationHelper.java705
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/TaskStackLayoutAlgorithm.java1283
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/TaskStackView.java2291
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/TaskStackViewScroller.java347
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/TaskStackViewTouchHandler.java706
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/TaskView.java737
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/TaskViewAccessibilityDelegate.java94
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/TaskViewHeader.java685
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/TaskViewThumbnail.java392
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/TaskViewTransform.java203
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/ViewPool.java86
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/grid/AnimateableGridViewBounds.java32
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/grid/GridTaskView.java72
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/grid/GridTaskViewThumbnail.java192
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/grid/TaskGridLayoutAlgorithm.java325
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/grid/TaskViewFocusFrame.java141
-rw-r--r--packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/lowram/TaskStackLowRamLayoutAlgorithm.java261
261 files changed, 0 insertions, 26025 deletions
diff --git a/packages/SystemUI/Android.bp b/packages/SystemUI/Android.bp
index 37fefc2d37d7..0c582c4ec5e9 100644
--- a/packages/SystemUI/Android.bp
+++ b/packages/SystemUI/Android.bp
@@ -170,39 +170,3 @@ android_app {
required: ["privapp_whitelist_com.android.systemui"],
}
-
-// Only used for products that are shipping legacy Recents
-android_app {
- name: "SystemUIWithLegacyRecents",
- overrides: [
- "SystemUI",
- ],
-
- platform_apis: true,
- certificate: "platform",
- privileged: true,
-
- dxflags: ["--multi-dex"],
- optimize: {
- proguard_flags_files: ["proguard.flags", "legacy/recents/proguard.flags"],
- },
-
- static_libs: [
- "SystemUI-core",
- ],
- libs: [
- "telephony-common",
- ],
-
- kotlincflags: ["-Xjvm-default=enable"],
-
- srcs: [
- "legacy/recents/src/**/*.java",
- "legacy/recents/src/**/I*.aidl",
- ],
- resource_dirs: [
- "legacy/recents/res",
- ],
-
- manifest: "legacy/recents/AndroidManifest.xml",
-}
diff --git a/packages/SystemUI/legacy/recents/AndroidManifest.xml b/packages/SystemUI/legacy/recents/AndroidManifest.xml
deleted file mode 100644
index 0d8b3cd26c1a..000000000000
--- a/packages/SystemUI/legacy/recents/AndroidManifest.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
- * Copyright (c) 2018 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
--->
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- package="com.android.systemui"
- android:sharedUserId="android.uid.systemui"
- coreApp="true">
-
- <application
- android:name="com.android.systemui.SystemUIApplication">
-
- <!-- Service used by secondary users to register themselves with the system user. -->
- <service android:name=".recents.RecentsSystemUserService"
- android:exported="false"
- android:permission="com.android.systemui.permission.SELF" />
-
- <!-- Alternate Recents -->
- <activity android:name=".recents.RecentsActivity"
- android:label="@string/accessibility_desc_recent_apps"
- android:exported="false"
- android:launchMode="singleInstance"
- android:excludeFromRecents="true"
- android:stateNotNeeded="true"
- android:resumeWhilePausing="true"
- android:resizeableActivity="true"
- android:configChanges="orientation|screenSize|smallestScreenSize|screenLayout|keyboard|keyboardHidden"
- android:theme="@style/RecentsTheme.Wallpaper">
- <intent-filter>
- <action android:name="com.android.systemui.recents.TOGGLE_RECENTS" />
- </intent-filter>
- </activity>
-
- </application>
-</manifest>
diff --git a/packages/SystemUI/legacy/recents/proguard.flags b/packages/SystemUI/legacy/recents/proguard.flags
deleted file mode 100644
index c3589491865d..000000000000
--- a/packages/SystemUI/legacy/recents/proguard.flags
+++ /dev/null
@@ -1,14 +0,0 @@
--keepclassmembers class ** {
- public void onBusEvent(**);
- public void onInterprocessBusEvent(**);
-}
--keepclassmembers class ** extends **.EventBus$InterprocessEvent {
- public <init>(android.os.Bundle);
-}
-
--keep class com.android.systemui.recents.views.TaskView {
- public int getDim();
- public void setDim(int);
- public float getTaskProgress();
- public void setTaskProgress(float);
-} \ No newline at end of file
diff --git a/packages/SystemUI/legacy/recents/res/anim/recents_fast_toggle_app_home_exit.xml b/packages/SystemUI/legacy/recents/res/anim/recents_fast_toggle_app_home_exit.xml
deleted file mode 100644
index 69edcc757ba9..000000000000
--- a/packages/SystemUI/legacy/recents/res/anim/recents_fast_toggle_app_home_exit.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2012, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-<!-- Recents Activity -->
-<set xmlns:android="http://schemas.android.com/apk/res/android"
- android:shareInterpolator="false"
- android:zAdjustment="top">
- <alpha android:fromAlpha="1.0" android:toAlpha="1.0"
- android:fillEnabled="true"
- android:fillBefore="true" android:fillAfter="true"
- android:duration="250"/>
-</set>
diff --git a/packages/SystemUI/legacy/recents/res/anim/recents_from_launcher_enter.xml b/packages/SystemUI/legacy/recents/res/anim/recents_from_launcher_enter.xml
deleted file mode 100644
index 00b3dfda135e..000000000000
--- a/packages/SystemUI/legacy/recents/res/anim/recents_from_launcher_enter.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2012, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<set xmlns:android="http://schemas.android.com/apk/res/android"
- android:shareInterpolator="false"
- android:zAdjustment="normal">
- <alpha android:fromAlpha="0.0" android:toAlpha="1.0"
- android:fillEnabled="true"
- android:fillBefore="true" android:fillAfter="true"
- android:interpolator="@android:interpolator/linear_out_slow_in"
- android:duration="150"/>
-</set>
diff --git a/packages/SystemUI/legacy/recents/res/anim/recents_from_launcher_exit.xml b/packages/SystemUI/legacy/recents/res/anim/recents_from_launcher_exit.xml
deleted file mode 100644
index 33831b8c0a32..000000000000
--- a/packages/SystemUI/legacy/recents/res/anim/recents_from_launcher_exit.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2012, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<set xmlns:android="http://schemas.android.com/apk/res/android"
- android:shareInterpolator="false"
- android:zAdjustment="top">
- <alpha android:fromAlpha="1.0" android:toAlpha="0.0"
- android:fillEnabled="true"
- android:fillBefore="true" android:fillAfter="true"
- android:interpolator="@interpolator/recents_from_launcher_exit_interpolator"
- android:duration="133"/>
-</set>
diff --git a/packages/SystemUI/legacy/recents/res/anim/recents_from_unknown_enter.xml b/packages/SystemUI/legacy/recents/res/anim/recents_from_unknown_enter.xml
deleted file mode 100644
index da1dee007546..000000000000
--- a/packages/SystemUI/legacy/recents/res/anim/recents_from_unknown_enter.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2012, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<set xmlns:android="http://schemas.android.com/apk/res/android"
- android:shareInterpolator="false"
- android:zAdjustment="top">
- <alpha android:fromAlpha="0.0" android:toAlpha="1.0"
- android:fillEnabled="true"
- android:fillBefore="true" android:fillAfter="true"
- android:interpolator="@android:interpolator/linear"
- android:duration="200"/>
-</set>
diff --git a/packages/SystemUI/legacy/recents/res/anim/recents_from_unknown_exit.xml b/packages/SystemUI/legacy/recents/res/anim/recents_from_unknown_exit.xml
deleted file mode 100644
index 31cf26a9fdfd..000000000000
--- a/packages/SystemUI/legacy/recents/res/anim/recents_from_unknown_exit.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2012, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<set xmlns:android="http://schemas.android.com/apk/res/android"
- android:shareInterpolator="false"
- android:zAdjustment="normal">
- <alpha android:fromAlpha="1.0" android:toAlpha="0.0"
- android:fillEnabled="true"
- android:fillBefore="true" android:fillAfter="true"
- android:interpolator="@android:interpolator/fast_out_slow_in"
- android:duration="200"/>
-</set>
diff --git a/packages/SystemUI/legacy/recents/res/anim/recents_launch_next_affiliated_task_bounce.xml b/packages/SystemUI/legacy/recents/res/anim/recents_launch_next_affiliated_task_bounce.xml
deleted file mode 100644
index 74f2814b2ce8..000000000000
--- a/packages/SystemUI/legacy/recents/res/anim/recents_launch_next_affiliated_task_bounce.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2014, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<set xmlns:android="http://schemas.android.com/apk/res/android"
- android:background="#ff000000" android:shareInterpolator="false" android:zAdjustment="normal">
-
-
- <translate android:fromYDelta="0" android:toYDelta="2%"
- android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true"
- android:interpolator="@android:interpolator/fast_out_slow_in"
- android:duration="133"/>
-
- <scale android:fromXScale="1.0" android:toXScale="0.98"
- android:fromYScale="1.0" android:toYScale="0.98"
- android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true"
- android:pivotX="50%p" android:pivotY="50%p"
- android:interpolator="@android:interpolator/fast_out_slow_in"
- android:duration="133" />
-
- <translate android:fromYDelta="0" android:toYDelta="-2%"
- android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true"
- android:interpolator="@interpolator/recents_launch_prev_affiliated_task_bounce_ydelta"
- android:startOffset="133"
- android:duration="217"/>
-
- <scale android:fromXScale="1.0" android:toXScale="1.02040816326531"
- android:fromYScale="1.0" android:toYScale="1.02040816326531"
- android:fillEnabled="true" android:fillBefore="false" android:fillAfter="true"
- android:pivotX="50%p" android:pivotY="50%p"
- android:interpolator="@interpolator/recents_launch_next_affiliated_task_bounce_scale"
- android:startOffset="133"
- android:duration="217" />
-</set> \ No newline at end of file
diff --git a/packages/SystemUI/legacy/recents/res/anim/recents_launch_next_affiliated_task_source.xml b/packages/SystemUI/legacy/recents/res/anim/recents_launch_next_affiliated_task_source.xml
deleted file mode 100644
index f0fd68458801..000000000000
--- a/packages/SystemUI/legacy/recents/res/anim/recents_launch_next_affiliated_task_source.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2014, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<set xmlns:android="http://schemas.android.com/apk/res/android"
- android:background="#ff000000" android:shareInterpolator="false" android:zAdjustment="normal">
-
- <alpha android:fromAlpha="1.0" android:toAlpha="0.6"
- android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true"
- android:interpolator="@android:interpolator/accelerate_cubic"
- android:duration="150"/>
-
- <scale android:fromXScale="1.0" android:toXScale="0.9"
- android:fromYScale="1.0" android:toYScale="0.9"
- android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true"
- android:pivotX="50%p" android:pivotY="50%p"
- android:interpolator="@android:interpolator/fast_out_slow_in"
- android:duration="300" />
-</set> \ No newline at end of file
diff --git a/packages/SystemUI/legacy/recents/res/anim/recents_launch_next_affiliated_task_target.xml b/packages/SystemUI/legacy/recents/res/anim/recents_launch_next_affiliated_task_target.xml
deleted file mode 100644
index 170ac829c3c2..000000000000
--- a/packages/SystemUI/legacy/recents/res/anim/recents_launch_next_affiliated_task_target.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2014, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<set xmlns:android="http://schemas.android.com/apk/res/android"
- android:background="#ff000000" android:shareInterpolator="false" android:zAdjustment="top">
-
- <translate android:fromYDelta="110%" android:toYDelta="0%"
- android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true"
- android:interpolator="@android:interpolator/decelerate_quint"
- android:startOffset="50"
- android:duration="250" />
-</set> \ No newline at end of file
diff --git a/packages/SystemUI/legacy/recents/res/anim/recents_launch_prev_affiliated_task_bounce.xml b/packages/SystemUI/legacy/recents/res/anim/recents_launch_prev_affiliated_task_bounce.xml
deleted file mode 100644
index b19167da3dde..000000000000
--- a/packages/SystemUI/legacy/recents/res/anim/recents_launch_prev_affiliated_task_bounce.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2014, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<set xmlns:android="http://schemas.android.com/apk/res/android"
- android:background="#ff000000" android:shareInterpolator="false" android:zAdjustment="top">
-
- <translate android:fromYDelta="0%" android:toYDelta="10%"
- android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true"
- android:interpolator="@android:interpolator/fast_out_slow_in"
- android:duration="133" />
-
- <translate android:fromYDelta="0%" android:toYDelta="-10%"
- android:fillEnabled="true" android:fillBefore="false" android:fillAfter="true"
- android:interpolator="@interpolator/recents_launch_prev_affiliated_task_bounce_ydelta"
- android:startOffset="133"
- android:duration="217" />
-</set> \ No newline at end of file
diff --git a/packages/SystemUI/legacy/recents/res/anim/recents_launch_prev_affiliated_task_source.xml b/packages/SystemUI/legacy/recents/res/anim/recents_launch_prev_affiliated_task_source.xml
deleted file mode 100644
index ad5341bf8ff3..000000000000
--- a/packages/SystemUI/legacy/recents/res/anim/recents_launch_prev_affiliated_task_source.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2014, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<set xmlns:android="http://schemas.android.com/apk/res/android"
- android:background="#ff000000" android:shareInterpolator="false" android:zAdjustment="top">
-
- <translate android:fromYDelta="0%" android:toYDelta="110%"
- android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true"
- android:interpolator="@android:interpolator/accelerate_quint"
- android:duration="300" />
-</set> \ No newline at end of file
diff --git a/packages/SystemUI/legacy/recents/res/anim/recents_launch_prev_affiliated_task_target.xml b/packages/SystemUI/legacy/recents/res/anim/recents_launch_prev_affiliated_task_target.xml
deleted file mode 100644
index 7687f0286f25..000000000000
--- a/packages/SystemUI/legacy/recents/res/anim/recents_launch_prev_affiliated_task_target.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2014, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<set xmlns:android="http://schemas.android.com/apk/res/android"
- android:background="#ff000000" android:shareInterpolator="false" android:zAdjustment="normal">
-
- <alpha android:fromAlpha="0.6" android:toAlpha="1.0"
- android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true"
- android:interpolator="@android:interpolator/decelerate_cubic"
- android:startOffset="75"
- android:duration="150"/>
-
- <scale android:fromXScale="0.9" android:toXScale="1.0"
- android:fromYScale="0.9" android:toYScale="1.0"
- android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true"
- android:interpolator="@android:interpolator/linear_out_slow_in"
- android:pivotX="50%p" android:pivotY="50%p"
- android:startOffset="75"
- android:duration="225" />
-</set> \ No newline at end of file
diff --git a/packages/SystemUI/legacy/recents/res/anim/recents_to_launcher_enter.xml b/packages/SystemUI/legacy/recents/res/anim/recents_to_launcher_enter.xml
deleted file mode 100644
index 544ec88d2bfa..000000000000
--- a/packages/SystemUI/legacy/recents/res/anim/recents_to_launcher_enter.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2012, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<set xmlns:android="http://schemas.android.com/apk/res/android"
- android:shareInterpolator="false"
- android:zAdjustment="normal">
- <alpha android:fromAlpha="0.0" android:toAlpha="1.0"
- android:fillEnabled="true"
- android:fillBefore="true" android:fillAfter="true"
- android:interpolator="@interpolator/recents_to_launcher_enter_interpolator"
- android:duration="133"/>
-</set>
diff --git a/packages/SystemUI/legacy/recents/res/anim/recents_to_launcher_exit.xml b/packages/SystemUI/legacy/recents/res/anim/recents_to_launcher_exit.xml
deleted file mode 100644
index 226edb85d049..000000000000
--- a/packages/SystemUI/legacy/recents/res/anim/recents_to_launcher_exit.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2012, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<set xmlns:android="http://schemas.android.com/apk/res/android"
- android:shareInterpolator="false"
- android:zAdjustment="top">
- <alpha android:fromAlpha="1.0" android:toAlpha="0.0"
- android:fillEnabled="true"
- android:fillBefore="true" android:fillAfter="true"
- android:interpolator="@android:interpolator/linear_out_slow_in"
- android:duration="1"/>
-</set>
diff --git a/packages/SystemUI/legacy/recents/res/drawable-hdpi/recents_lower_gradient.9.png b/packages/SystemUI/legacy/recents/res/drawable-hdpi/recents_lower_gradient.9.png
deleted file mode 100644
index 17100f773a16..000000000000
--- a/packages/SystemUI/legacy/recents/res/drawable-hdpi/recents_lower_gradient.9.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/legacy/recents/res/drawable-hdpi/recents_status_gradient.9.png b/packages/SystemUI/legacy/recents/res/drawable-hdpi/recents_status_gradient.9.png
deleted file mode 100644
index e969d4c26717..000000000000
--- a/packages/SystemUI/legacy/recents/res/drawable-hdpi/recents_status_gradient.9.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/legacy/recents/res/drawable-mdpi/recents_lower_gradient.9.png b/packages/SystemUI/legacy/recents/res/drawable-mdpi/recents_lower_gradient.9.png
deleted file mode 100644
index b53bd8f92a00..000000000000
--- a/packages/SystemUI/legacy/recents/res/drawable-mdpi/recents_lower_gradient.9.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/legacy/recents/res/drawable-mdpi/recents_status_gradient.9.png b/packages/SystemUI/legacy/recents/res/drawable-mdpi/recents_status_gradient.9.png
deleted file mode 100644
index 657f710ac8d6..000000000000
--- a/packages/SystemUI/legacy/recents/res/drawable-mdpi/recents_status_gradient.9.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/legacy/recents/res/drawable-xhdpi/recents_lower_gradient.9.png b/packages/SystemUI/legacy/recents/res/drawable-xhdpi/recents_lower_gradient.9.png
deleted file mode 100644
index 09606f629b67..000000000000
--- a/packages/SystemUI/legacy/recents/res/drawable-xhdpi/recents_lower_gradient.9.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/legacy/recents/res/drawable-xhdpi/recents_status_gradient.9.png b/packages/SystemUI/legacy/recents/res/drawable-xhdpi/recents_status_gradient.9.png
deleted file mode 100644
index a444c551d430..000000000000
--- a/packages/SystemUI/legacy/recents/res/drawable-xhdpi/recents_status_gradient.9.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/legacy/recents/res/drawable-xxhdpi/recents_lower_gradient.9.png b/packages/SystemUI/legacy/recents/res/drawable-xxhdpi/recents_lower_gradient.9.png
deleted file mode 100644
index 427cad9f6326..000000000000
--- a/packages/SystemUI/legacy/recents/res/drawable-xxhdpi/recents_lower_gradient.9.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/legacy/recents/res/drawable-xxhdpi/recents_status_gradient.9.png b/packages/SystemUI/legacy/recents/res/drawable-xxhdpi/recents_status_gradient.9.png
deleted file mode 100644
index 29cf44bf381f..000000000000
--- a/packages/SystemUI/legacy/recents/res/drawable-xxhdpi/recents_status_gradient.9.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/legacy/recents/res/drawable-xxhdpi/recents_task_shadow.9.png b/packages/SystemUI/legacy/recents/res/drawable-xxhdpi/recents_task_shadow.9.png
deleted file mode 100644
index 36e7e45494ef..000000000000
--- a/packages/SystemUI/legacy/recents/res/drawable-xxhdpi/recents_task_shadow.9.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/legacy/recents/res/drawable/recents_dismiss_dark.xml b/packages/SystemUI/legacy/recents/res/drawable/recents_dismiss_dark.xml
deleted file mode 100644
index b837ebef78eb..000000000000
--- a/packages/SystemUI/legacy/recents/res/drawable/recents_dismiss_dark.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<!--
-Copyright (C) 2014 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-android:width="24dp"
-android:height="24dp"
-android:viewportWidth="24"
-android:viewportHeight="24">
-
-<path
- android:fillColor="@color/recents_task_bar_dark_icon_color"
- android:pathData="M18.3 5.71a.996 .996 0 0 0-1.41 0L12 10.59 7.11 5.7A.996 .996 0 1 0 5.7
-7.11L10.59 12 5.7 16.89a.996 .996 0 1 0 1.41 1.41L12 13.41l4.89 4.89a.996 .996 0
-1 0 1.41-1.41L13.41 12l4.89-4.89c.38-.38 .38 -1.02 0-1.4z" />
-<path
- android:pathData="M0 0h24v24H0z" />
-</vector> \ No newline at end of file
diff --git a/packages/SystemUI/legacy/recents/res/drawable/recents_dismiss_light.xml b/packages/SystemUI/legacy/recents/res/drawable/recents_dismiss_light.xml
deleted file mode 100644
index 2b2081404b69..000000000000
--- a/packages/SystemUI/legacy/recents/res/drawable/recents_dismiss_light.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<!--
-Copyright (C) 2014 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-android:width="24dp"
-android:height="24dp"
-android:viewportWidth="24"
-android:viewportHeight="24">
-
-<path
- android:fillColor="@color/recents_task_bar_light_icon_color"
- android:pathData="M18.3 5.71a.996 .996 0 0 0-1.41 0L12 10.59 7.11 5.7A.996 .996 0 1 0 5.7
-7.11L10.59 12 5.7 16.89a.996 .996 0 1 0 1.41 1.41L12 13.41l4.89 4.89a.996 .996 0
-1 0 1.41-1.41L13.41 12l4.89-4.89c.38-.38 .38 -1.02 0-1.4z" />
-<path
- android:pathData="M0 0h24v24H0z" />
-</vector> \ No newline at end of file
diff --git a/packages/SystemUI/legacy/recents/res/drawable/recents_empty.xml b/packages/SystemUI/legacy/recents/res/drawable/recents_empty.xml
deleted file mode 100644
index 5506de1d583f..000000000000
--- a/packages/SystemUI/legacy/recents/res/drawable/recents_empty.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="100dp"
- android:height="132dp"
- android:viewportWidth="100"
- android:viewportHeight="132">
-
- <path
- android:fillColor="#5AFFFFFF"
- android:pathData="M86.91,68.67H13.09c-4.96,0-9,4.04-9,9V119c0,4.96,4.04,9,9,9h73.82c4.96,0,9-4.04,9-9V77.67
-C95.91,72.7,91.87,68.67,86.91,68.67z M27.59,77.27h26.72v3.94H27.59V77.27z
-M18.73,74.74c2.49,0,4.5,2.01,4.5,4.5
-c0,2.49-2.01,4.5-4.5,4.5s-4.5-2.01-4.5-4.5C14.23,76.75,16.24,74.74,18.73,74.74z
-M89.91,119c0,1.65-1.35,3-3,3H13.09 c-1.65,0-3-1.35-3-3V88.67h79.82V119z" />
- <path
- android:fillColor="#5AFFFFFF"
- android:pathData="M86.91,36.3H13.09c-4.96,0-9,4.04-9,9v23c1.65-1.58,3.71-2.73,6-3.28v-9.08h79.82v9.08
-c2.29,0.55,4.35,1.69,6,3.28v-23C95.91,40.34,91.87,36.3,86.91,36.3z
-M18.73,51.38c-2.49,0-4.5-2.01-4.5-4.5s2.01-4.5,4.5-4.5
-s4.5,2.01,4.5,4.5S21.22,51.38,18.73,51.38z M54.31,48.84H27.59v-3.94h26.72V48.84z" />
- <path
- android:fillColor="#5AFFFFFF"
- android:pathData="M86.91,4H13.09c-4.96,0-9,4.04-9,9v22.94c1.65-1.58,3.71-2.73,6-3.28V24h79.82v8.67
-c2.29,0.55,4.35,1.69,6,3.28V13C95.91,8.04,91.87,4,86.91,4z
-M18.73,18.5c-2.49,0-4.5-2.01-4.5-4.5s2.01-4.5,4.5-4.5
-s4.5,2.01,4.5,4.5S21.22,18.5,18.73,18.5z M54.31,15.97H27.59v-3.94h26.72V15.97z" />
- <path
- android:pathData="M 0 0 H 100 V 132 H 0 V 0 Z" />
-</vector> \ No newline at end of file
diff --git a/packages/SystemUI/legacy/recents/res/drawable/recents_grid_task_view_focus_frame_background.xml b/packages/SystemUI/legacy/recents/res/drawable/recents_grid_task_view_focus_frame_background.xml
deleted file mode 100644
index 4987f9bcf610..000000000000
--- a/packages/SystemUI/legacy/recents/res/drawable/recents_grid_task_view_focus_frame_background.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-<shape xmlns:android="http://schemas.android.com/apk/res/android">
- <solid android:color="#61FFFFFF" />
- <corners android:radius="@dimen/recents_grid_task_view_focused_frame_rounded_corners_radius"/>
-</shape> \ No newline at end of file
diff --git a/packages/SystemUI/legacy/recents/res/drawable/recents_info_dark.xml b/packages/SystemUI/legacy/recents/res/drawable/recents_info_dark.xml
deleted file mode 100644
index 555a69ae9123..000000000000
--- a/packages/SystemUI/legacy/recents/res/drawable/recents_info_dark.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<!--
-Copyright (C) 2014 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="24.0dp"
- android:height="24.0dp"
- android:viewportWidth="24.0"
- android:viewportHeight="24.0">
- <path
- android:fillColor="@color/recents_task_bar_dark_icon_color"
- android:pathData="M12.000000,2.000000C6.500000,2.000000 2.000000,6.500000 2.000000,12.000000s4.500000,10.000000 10.000000,10.000000c5.500000,0.000000 10.000000,-4.500000 10.000000,-10.000000S17.500000,2.000000 12.000000,2.000000zM13.000000,17.000000l-2.000000,0.000000l0.000000,-6.000000l2.000000,0.000000L13.000000,17.000000zM13.000000,9.000000l-2.000000,0.000000L11.000000,7.000000l2.000000,0.000000L13.000000,9.000000z"/>
-</vector>
diff --git a/packages/SystemUI/legacy/recents/res/drawable/recents_info_light.xml b/packages/SystemUI/legacy/recents/res/drawable/recents_info_light.xml
deleted file mode 100644
index 65e7bf5fa41d..000000000000
--- a/packages/SystemUI/legacy/recents/res/drawable/recents_info_light.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<!--
-Copyright (C) 2014 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="24.0dp"
- android:height="24.0dp"
- android:viewportWidth="24.0"
- android:viewportHeight="24.0">
- <path
- android:pathData="M12.000000,2.000000C6.500000,2.000000 2.000000,6.500000 2.000000,12.000000s4.500000,10.000000 10.000000,10.000000c5.500000,0.000000 10.000000,-4.500000 10.000000,-10.000000S17.500000,2.000000 12.000000,2.000000zM13.000000,17.000000l-2.000000,0.000000l0.000000,-6.000000l2.000000,0.000000L13.000000,17.000000zM13.000000,9.000000l-2.000000,0.000000L11.000000,7.000000l2.000000,0.000000L13.000000,9.000000z"
- android:fillColor="#FFFFFF"/>
-</vector>
diff --git a/packages/SystemUI/legacy/recents/res/drawable/recents_lock_to_app_pin.xml b/packages/SystemUI/legacy/recents/res/drawable/recents_lock_to_app_pin.xml
deleted file mode 100644
index 317f858f662d..000000000000
--- a/packages/SystemUI/legacy/recents/res/drawable/recents_lock_to_app_pin.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<!--
-Copyright (C) 2014 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="24.0dp"
- android:height="24.0dp"
- android:viewportWidth="24.0"
- android:viewportHeight="24.0">
-
- <path
- android:fillColor="#FFffffff"
- android:pathData="M16.000000,12.000000L16.000000,4.000000l1.000000,0.000000L17.000000,2.000000L7.000000,2.000000l0.000000,2.000000l1.000000,0.000000l0.000000,8.000000l-2.000000,2.000000l0.000000,2.000000l5.200000,0.000000l0.000000,6.000000l1.600000,0.000000l0.000000,-6.000000L18.000000,16.000000l0.000000,-2.000000L16.000000,12.000000z"/>
-</vector>
diff --git a/packages/SystemUI/legacy/recents/res/drawable/recents_lock_to_task_button_bg.xml b/packages/SystemUI/legacy/recents/res/drawable/recents_lock_to_task_button_bg.xml
deleted file mode 100644
index 8a8164a94122..000000000000
--- a/packages/SystemUI/legacy/recents/res/drawable/recents_lock_to_task_button_bg.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<ripple xmlns:android="http://schemas.android.com/apk/res/android"
- android:color="#ff9cdfd9">
- <item>
- <shape android:shape="oval">
- <solid android:color="#9cc8c4" />
- <size android:width="@dimen/recents_lock_to_app_size"
- android:height="@dimen/recents_lock_to_app_size" />
- </shape>
- </item>
-</ripple> \ No newline at end of file
diff --git a/packages/SystemUI/legacy/recents/res/drawable/recents_low_ram_stack_button_background.xml b/packages/SystemUI/legacy/recents/res/drawable/recents_low_ram_stack_button_background.xml
deleted file mode 100644
index bff97f6f8fe4..000000000000
--- a/packages/SystemUI/legacy/recents/res/drawable/recents_low_ram_stack_button_background.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
- ~ Copyright (C) 2017 The Android Open Source Project
- ~
- ~ Licensed under the Apache License, Version 2.0 (the "License");
- ~ you may not use this file except in compliance with the License.
- ~ You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing, software
- ~ distributed under the License is distributed on an "AS IS" BASIS,
- ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ~ See the License for the specific language governing permissions and
- ~ limitations under the License.
- -->
-<shape xmlns:android="http://schemas.android.com/apk/res/android" >
-
- <corners android:radius="@dimen/borderless_button_radius" />
-
- <solid android:color="?attr/clearAllBackgroundColor" />
-
-</shape>
diff --git a/packages/SystemUI/legacy/recents/res/drawable/recents_move_task_fullscreen_dark.xml b/packages/SystemUI/legacy/recents/res/drawable/recents_move_task_fullscreen_dark.xml
deleted file mode 100644
index fd468c1ff25e..000000000000
--- a/packages/SystemUI/legacy/recents/res/drawable/recents_move_task_fullscreen_dark.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<!--
-Copyright (C) 2015 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="24dp"
- android:height="24dp"
- android:viewportWidth="24"
- android:viewportHeight="24">
- <group
- android:translateX="-252.000000"
- android:translateY="-602.000000">
- <group
- android:translateX="109.000000"
- android:translateY="514.000000">
- <group
- android:translateX="144.000000"
- android:translateY="89.000000">
- <path
- android:strokeColor="@color/recents_task_bar_dark_icon_color"
- android:strokeWidth="2"
- android:pathData="M17,17 L5,17 L5,5 L17,5 L17,17 Z" />
- </group>
- </group>
- </group>
-</vector> \ No newline at end of file
diff --git a/packages/SystemUI/legacy/recents/res/drawable/recents_move_task_fullscreen_light.xml b/packages/SystemUI/legacy/recents/res/drawable/recents_move_task_fullscreen_light.xml
deleted file mode 100644
index 532290637d74..000000000000
--- a/packages/SystemUI/legacy/recents/res/drawable/recents_move_task_fullscreen_light.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<!--
-Copyright (C) 2015 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="24dp"
- android:height="24dp"
- android:viewportWidth="24"
- android:viewportHeight="24">
- <group
- android:translateX="-252.000000"
- android:translateY="-602.000000">
- <group
- android:translateX="109.000000"
- android:translateY="514.000000">
- <group
- android:translateX="144.000000"
- android:translateY="89.000000">
- <path
- android:strokeColor="@color/recents_task_bar_light_icon_color"
- android:strokeWidth="2"
- android:pathData="M19,19 L3,19 L3,3 L19,3 L19,5 L19,18 L19,19 Z" />
- </group>
- </group>
- </group>
-</vector> \ No newline at end of file
diff --git a/packages/SystemUI/legacy/recents/res/drawable/recents_stack_action_background.xml b/packages/SystemUI/legacy/recents/res/drawable/recents_stack_action_background.xml
deleted file mode 100644
index 2a40dd0ec613..000000000000
--- a/packages/SystemUI/legacy/recents/res/drawable/recents_stack_action_background.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<!--
-Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2 (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.
--->
-
-<ripple xmlns:android="http://schemas.android.com/apk/res/android"
- android:color="?android:attr/colorControlHighlight">
- <item android:id="@android:id/mask">
- <shape>
- <corners android:radius="@dimen/recents_task_view_rounded_corners_radius" />
- <solid android:color="@android:color/white" />
- </shape>
- </item>
-</ripple> \ No newline at end of file
diff --git a/packages/SystemUI/legacy/recents/res/interpolator/recents_from_launcher_exit_interpolator.xml b/packages/SystemUI/legacy/recents/res/interpolator/recents_from_launcher_exit_interpolator.xml
deleted file mode 100644
index 4a7fff67eac5..000000000000
--- a/packages/SystemUI/legacy/recents/res/interpolator/recents_from_launcher_exit_interpolator.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2014, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-<pathInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
- android:controlX1="0"
- android:controlY1="0"
- android:controlX2="0.8"
- android:controlY2="1" />
diff --git a/packages/SystemUI/legacy/recents/res/interpolator/recents_launch_next_affiliated_task_bounce_scale.xml b/packages/SystemUI/legacy/recents/res/interpolator/recents_launch_next_affiliated_task_bounce_scale.xml
deleted file mode 100644
index c4e5d972222c..000000000000
--- a/packages/SystemUI/legacy/recents/res/interpolator/recents_launch_next_affiliated_task_bounce_scale.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2014, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-<pathInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
- android:pathData="M 0,0 c 0.8,0 0.2,1 1,1" />
diff --git a/packages/SystemUI/legacy/recents/res/interpolator/recents_launch_prev_affiliated_task_bounce_ydelta.xml b/packages/SystemUI/legacy/recents/res/interpolator/recents_launch_prev_affiliated_task_bounce_ydelta.xml
deleted file mode 100644
index 40a08b97160d..000000000000
--- a/packages/SystemUI/legacy/recents/res/interpolator/recents_launch_prev_affiliated_task_bounce_ydelta.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2014, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-<pathInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
- android:pathData="M 0,0 c 0.6,0 0.2,1 1,1" />
diff --git a/packages/SystemUI/legacy/recents/res/interpolator/recents_to_launcher_enter_interpolator.xml b/packages/SystemUI/legacy/recents/res/interpolator/recents_to_launcher_enter_interpolator.xml
deleted file mode 100644
index c61dfd87d842..000000000000
--- a/packages/SystemUI/legacy/recents/res/interpolator/recents_to_launcher_enter_interpolator.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2014, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-<pathInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
- android:controlX1="0.4"
- android:controlY1="0"
- android:controlX2="1"
- android:controlY2="1" />
diff --git a/packages/SystemUI/legacy/recents/res/layout/recents.xml b/packages/SystemUI/legacy/recents/res/layout/recents.xml
deleted file mode 100644
index ae89631219fb..000000000000
--- a/packages/SystemUI/legacy/recents/res/layout/recents.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<FrameLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent">
-
- <!-- Recents View -->
- <com.android.systemui.recents.views.RecentsView
- android:id="@+id/recents_view"
- android:layout_width="match_parent"
- android:layout_height="match_parent">
- </com.android.systemui.recents.views.RecentsView>
-
- <!-- Incompatible task overlay -->
- <ViewStub android:id="@+id/incompatible_app_overlay_stub"
- android:inflatedId="@+id/incompatible_app_overlay"
- android:layout="@layout/recents_incompatible_app_overlay"
- android:layout_width="match_parent"
- android:layout_height="128dp"
- android:layout_gravity="center_horizontal|top" />
-
- <!-- Nav Bar Scrim View -->
- <ImageView
- android:id="@+id/nav_bar_scrim"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_gravity="center_horizontal|bottom"
- android:scaleType="fitXY"
- android:src="@drawable/recents_lower_gradient" />
-</FrameLayout>
diff --git a/packages/SystemUI/legacy/recents/res/layout/recents_empty.xml b/packages/SystemUI/legacy/recents/res/layout/recents_empty.xml
deleted file mode 100644
index d7f058ce4a9d..000000000000
--- a/packages/SystemUI/legacy/recents/res/layout/recents_empty.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<TextView
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:gravity="center"
- android:drawableTop="@drawable/recents_empty"
- android:drawablePadding="25dp"
- android:textSize="16sp"
- android:drawableTint="?attr/wallpaperTextColor"
- android:textColor="?attr/wallpaperTextColor"
- android:text="@string/recents_empty_message"
- android:fontFamily="sans-serif"
- android:visibility="gone" /> \ No newline at end of file
diff --git a/packages/SystemUI/legacy/recents/res/layout/recents_grid_task_view.xml b/packages/SystemUI/legacy/recents/res/layout/recents_grid_task_view.xml
deleted file mode 100644
index 1c9b9ac5f5f2..000000000000
--- a/packages/SystemUI/legacy/recents/res/layout/recents_grid_task_view.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<com.android.systemui.recents.views.grid.GridTaskView
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:focusable="true">
- <com.android.systemui.recents.views.grid.GridTaskViewThumbnail
- android:id="@+id/task_view_thumbnail"
- android:layout_width="match_parent"
- android:layout_height="match_parent" />
-
- <include layout="@layout/recents_task_view_header" />
-
- <!-- TODO: Move this into a view stub -->
- <include layout="@layout/recents_task_view_lock_to_app"/>
-
- <!-- The incompatible app toast -->
- <include layout="@layout/recents_task_view_incompatible_app_toast"/>
-</com.android.systemui.recents.views.grid.GridTaskView>
-
-
diff --git a/packages/SystemUI/legacy/recents/res/layout/recents_incompatible_app_overlay.xml b/packages/SystemUI/legacy/recents/res/layout/recents_incompatible_app_overlay.xml
deleted file mode 100644
index a1c1e5bd32c7..000000000000
--- a/packages/SystemUI/legacy/recents/res/layout/recents_incompatible_app_overlay.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<FrameLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:alpha="0"
- android:background="#88000000"
- android:forceHasOverlappingRendering="false">
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:drawableTop="@drawable/recents_info_light"
- android:drawablePadding="8dp"
- android:text="@string/dock_non_resizeble_failed_to_dock_text"
- android:textColor="@android:color/white" />
-</FrameLayout> \ No newline at end of file
diff --git a/packages/SystemUI/legacy/recents/res/layout/recents_low_ram_stack_action_button.xml b/packages/SystemUI/legacy/recents/res/layout/recents_low_ram_stack_action_button.xml
deleted file mode 100644
index dca891103c4e..000000000000
--- a/packages/SystemUI/legacy/recents/res/layout/recents_low_ram_stack_action_button.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- ~ 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.
- -->
-<TextView
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/button"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:paddingStart="26dp"
- android:paddingEnd="26dp"
- android:paddingTop="17dp"
- android:paddingBottom="17dp"
- android:text="@string/recents_stack_action_button_label"
- android:textSize="14sp"
- android:textColor="#FFFFFF"
- android:textAllCaps="true"
- android:fontFamily="sans-serif-medium"
- android:background="@drawable/recents_low_ram_stack_button_background"
- android:visibility="invisible"
- android:forceHasOverlappingRendering="false"
- style="?attr/clearAllStyle" />
diff --git a/packages/SystemUI/legacy/recents/res/layout/recents_search_bar.xml b/packages/SystemUI/legacy/recents/res/layout/recents_search_bar.xml
deleted file mode 100644
index 915283e30f65..000000000000
--- a/packages/SystemUI/legacy/recents/res/layout/recents_search_bar.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<FrameLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:background="@drawable/search_bg_transparent">
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:text="@string/recents_search_bar_label"
- android:textColor="#99ffffff"
- android:textSize="18sp"
- android:textAllCaps="true" />
-</FrameLayout>
-
diff --git a/packages/SystemUI/legacy/recents/res/layout/recents_stack_action_button.xml b/packages/SystemUI/legacy/recents/res/layout/recents_stack_action_button.xml
deleted file mode 100644
index 4707a8ca843f..000000000000
--- a/packages/SystemUI/legacy/recents/res/layout/recents_stack_action_button.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2015 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<TextView
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/button"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:paddingStart="14dp"
- android:paddingEnd="14dp"
- android:paddingTop="12dp"
- android:paddingBottom="12dp"
- android:text="@string/recents_stack_action_button_label"
- android:textSize="14sp"
- android:textColor="?attr/wallpaperTextColor"
- android:textAllCaps="true"
- android:shadowColor="#99000000"
- android:shadowDx="0"
- android:shadowDy="2"
- android:shadowRadius="5"
- android:fontFamily="sans-serif-medium"
- android:background="@drawable/recents_stack_action_background"
- android:visibility="invisible"
- android:forceHasOverlappingRendering="false"
- style="?attr/clearAllStyle" />
diff --git a/packages/SystemUI/legacy/recents/res/layout/recents_task_view.xml b/packages/SystemUI/legacy/recents/res/layout/recents_task_view.xml
deleted file mode 100644
index 015e4a2006bb..000000000000
--- a/packages/SystemUI/legacy/recents/res/layout/recents_task_view.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<com.android.systemui.recents.views.TaskView
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:focusable="true">
- <com.android.systemui.recents.views.TaskViewThumbnail
- android:id="@+id/task_view_thumbnail"
- android:layout_width="match_parent"
- android:layout_height="match_parent" />
-
- <include layout="@layout/recents_task_view_header" />
-
- <!-- TODO: Move this into a view stub -->
- <include layout="@layout/recents_task_view_lock_to_app"/>
-
- <!-- The incompatible app toast -->
- <include layout="@layout/recents_task_view_incompatible_app_toast"/>
-</com.android.systemui.recents.views.TaskView>
-
-
diff --git a/packages/SystemUI/legacy/recents/res/layout/recents_task_view_header.xml b/packages/SystemUI/legacy/recents/res/layout/recents_task_view_header.xml
deleted file mode 100644
index 1734506dbaba..000000000000
--- a/packages/SystemUI/legacy/recents/res/layout/recents_task_view_header.xml
+++ /dev/null
@@ -1,75 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2014 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<!-- The layouts params are calculated in TaskViewHeader.java -->
-<com.android.systemui.recents.views.TaskViewHeader
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/task_view_bar"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_gravity="top|center_horizontal">
- <com.android.systemui.recents.views.FixedSizeImageView
- android:id="@+id/icon"
- android:contentDescription="@string/recents_app_info_button_label"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center_vertical|start"
- android:paddingTop="8dp"
- android:paddingBottom="8dp"
- android:paddingStart="16dp"
- android:paddingEnd="12dp" />
- <TextView
- android:id="@+id/title"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_gravity="center_vertical|start"
- android:textSize="16sp"
- android:textColor="#ffffffff"
- android:text="@string/recents_empty_message"
- android:fontFamily="sans-serif-medium"
- android:singleLine="true"
- android:maxLines="1"
- android:ellipsize="marquee"
- android:fadingEdge="horizontal"
- android:forceHasOverlappingRendering="false" />
- <com.android.systemui.recents.views.FixedSizeImageView
- android:id="@+id/move_task"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center_vertical|end"
- android:padding="@dimen/recents_task_view_header_button_padding"
- android:src="@drawable/star"
- android:background="?android:selectableItemBackground"
- android:alpha="0"
- android:visibility="gone" />
- <com.android.systemui.recents.views.FixedSizeImageView
- android:id="@+id/dismiss_task"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center_vertical|end"
- android:padding="@dimen/recents_task_view_header_button_padding"
- android:src="@drawable/recents_dismiss_light"
- android:background="?android:selectableItemBackground"
- android:alpha="0"
- android:visibility="gone" />
-
- <!-- The app overlay shows as the user long-presses on the app icon -->
- <ViewStub android:id="@+id/app_overlay_stub"
- android:inflatedId="@+id/app_overlay"
- android:layout="@layout/recents_task_view_header_overlay"
- android:layout_width="match_parent"
- android:layout_height="match_parent" />
-</com.android.systemui.recents.views.TaskViewHeader>
diff --git a/packages/SystemUI/legacy/recents/res/layout/recents_task_view_header_overlay.xml b/packages/SystemUI/legacy/recents/res/layout/recents_task_view_header_overlay.xml
deleted file mode 100644
index cf09b1d108ec..000000000000
--- a/packages/SystemUI/legacy/recents/res/layout/recents_task_view_header_overlay.xml
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<!-- The layouts params are calculated in TaskViewHeader.java -->
-<FrameLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent">
- <com.android.systemui.recents.views.FixedSizeImageView
- android:id="@+id/app_icon"
- android:contentDescription="@string/recents_app_info_button_label"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center_vertical|start"
- android:paddingTop="8dp"
- android:paddingBottom="8dp"
- android:paddingStart="16dp"
- android:paddingEnd="12dp" />
- <TextView
- android:id="@+id/app_title"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_gravity="center_vertical|start"
- android:textSize="16sp"
- android:textColor="#ffffffff"
- android:text="@string/recents_empty_message"
- android:fontFamily="sans-serif-medium"
- android:singleLine="true"
- android:maxLines="2"
- android:ellipsize="marquee"
- android:fadingEdge="horizontal" />
- <com.android.systemui.recents.views.FixedSizeImageView
- android:id="@+id/app_info"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center_vertical|end"
- android:padding="@dimen/recents_task_view_header_button_padding"
- android:background="?android:selectableItemBackground"
- android:src="@drawable/recents_info_light" />
-</FrameLayout> \ No newline at end of file
diff --git a/packages/SystemUI/legacy/recents/res/layout/recents_task_view_header_progress_bar.xml b/packages/SystemUI/legacy/recents/res/layout/recents_task_view_header_progress_bar.xml
deleted file mode 100644
index f3526322f52d..000000000000
--- a/packages/SystemUI/legacy/recents/res/layout/recents_task_view_header_progress_bar.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<ProgressBar
- xmlns:android="http://schemas.android.com/apk/res/android"
- style="?android:attr/progressBarStyleHorizontal"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:indeterminateOnly="false"
- android:visibility="invisible" /> \ No newline at end of file
diff --git a/packages/SystemUI/legacy/recents/res/layout/recents_task_view_incompatible_app_toast.xml b/packages/SystemUI/legacy/recents/res/layout/recents_task_view_incompatible_app_toast.xml
deleted file mode 100644
index d573d6b881d2..000000000000
--- a/packages/SystemUI/legacy/recents/res/layout/recents_task_view_incompatible_app_toast.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<ViewStub
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/incompatible_app_toast_stub"
- android:inflatedId="@+id/incompatible_app_toast"
- android:layout="@*android:layout/transient_notification"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="top|center_horizontal"
- android:layout_marginTop="48dp"
- android:layout_marginLeft="16dp"
- android:layout_marginRight="16dp" /> \ No newline at end of file
diff --git a/packages/SystemUI/legacy/recents/res/layout/recents_task_view_lock_to_app.xml b/packages/SystemUI/legacy/recents/res/layout/recents_task_view_lock_to_app.xml
deleted file mode 100644
index 8cece1149ce7..000000000000
--- a/packages/SystemUI/legacy/recents/res/layout/recents_task_view_lock_to_app.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<com.android.systemui.statusbar.AlphaOptimizedFrameLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/lock_to_app_fab"
- android:layout_width="@dimen/recents_lock_to_app_size"
- android:layout_height="@dimen/recents_lock_to_app_size"
- android:layout_gravity="bottom|end"
- android:layout_marginEnd="15dp"
- android:layout_marginBottom="15dp"
- android:translationZ="4dp"
- android:contentDescription="@string/recents_lock_to_app_button_label"
- android:background="@drawable/recents_lock_to_task_button_bg"
- android:visibility="invisible"
- android:alpha="0">
- <ImageView
- android:layout_width="@dimen/recents_lock_to_app_icon_size"
- android:layout_height="@dimen/recents_lock_to_app_icon_size"
- android:layout_gravity="center"
- android:src="@drawable/recents_lock_to_app_pin" />
-</com.android.systemui.statusbar.AlphaOptimizedFrameLayout> \ No newline at end of file
diff --git a/packages/SystemUI/legacy/recents/res/values-af/strings.xml b/packages/SystemUI/legacy/recents/res/values-af/strings.xml
deleted file mode 100644
index 736c81034c06..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-af/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Oorsig."</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Maak <xliff:g id="APP">%s</xliff:g> toe."</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> is toegemaak."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Alle onlangse programme is toegemaak."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Maak <xliff:g id="APP">%s</xliff:g>-programinligting oop."</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Begin tans <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"Geen onlangse items nie"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Jy het alles toegemaak"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"Programinligting"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"skermvaspen"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"soek"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"Kon nie <xliff:g id="APP">%s</xliff:g> begin nie."</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> is in veiligmodus gedeaktiveer."</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Vee alles uit"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"Sleep hierheen om verdeelde skerm te gebruik"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Verdeel horisontaal"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Verdeel vertikaal"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Verdeel gepasmaak"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Verdeel skerm na bo"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Verdeel skerm na links"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Verdeel skerm na regs"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-am/strings.xml b/packages/SystemUI/legacy/recents/res/values-am/strings.xml
deleted file mode 100644
index 2870be712779..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-am/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"አጠቃላይ እይታ።"</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"<xliff:g id="APP">%s</xliff:g> አስወግድ።"</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> ተሰናብቷል።"</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"ሁሉም የቅርብ ጊዜ ማመልከቻዎች ተሰናብተዋል።"</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"የ<xliff:g id="APP">%s</xliff:g> መተግበሪያ መረጃውን ይክፈቱ።"</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"<xliff:g id="APP">%s</xliff:g> በመጀመር ላይ።"</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"ምንም የቅርብ ጊዜ ንጥሎች የሉም"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"ሁሉንም ነገር አጽድተዋል"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"የመተግበሪያ መረጃ"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"ማያ ገጽ መሰካት"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"ፈልግ"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"<xliff:g id="APP">%s</xliff:g>ን መጀመር አልተቻለም።"</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> በጥንቃቄ ሁነታ ውስጥ ታግዷል።"</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"ሁሉንም አጽዳ"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"የተከፈለ ማያ ገጽን ለመጠቀም እዚህ ላይ ይጎትቱ"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"አግድም ክፈል"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"ቁልቁል ክፈል"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"በብጁ ክፈል"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"ማያ ገጽ ወደ ላይ ክፈል"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"ማያ ገጽ ወደ ግራ ክፈል"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"ማያ ገጽ ወደ ቀኝ ክፈል"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-ar/strings.xml b/packages/SystemUI/legacy/recents/res/values-ar/strings.xml
deleted file mode 100644
index 004de41891a0..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-ar/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"النظرة عامة"</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"إزالة <xliff:g id="APP">%s</xliff:g>"</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"تمَّت إزالة <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"تمَّت إزالة كل التطبيقات المستخدمة مؤخرًا."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"فتح معلومات تطبيق <xliff:g id="APP">%s</xliff:g>"</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"جارٍ بدء <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"ليست هناك عناصر تم استخدامها مؤخرًا"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"لقد محوتَ كل شيء"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"معلومات التطبيق"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"تثبيت الشاشة"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"بحث"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"تعذَّر بدء <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"تم إيقاف <xliff:g id="APP">%s</xliff:g> في الوضع الآمن."</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"محو الكل"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"اسحب هنا لاستخدام وضع تقسيم الشاشة"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"تقسيم أفقي"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"تقسيم رأسي"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"تقسيم مخصَّص"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"تقسيم الشاشة بمحاذاة الجزء العلوي"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"تقسيم الشاشة بمحاذاة اليسار"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"تقسيم الشاشة بمحاذاة اليمين"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-as/strings.xml b/packages/SystemUI/legacy/recents/res/values-as/strings.xml
deleted file mode 100644
index c742dab230e6..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-as/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"অৱলোকন।"</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"শেহতীয়া-ৰ তালিকাৰ পৰা <xliff:g id="APP">%s</xliff:g>ক আঁতৰাওক।"</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"শেহতীয়া-ৰ তালিকাৰ পৰা <xliff:g id="APP">%s</xliff:g>ক আঁতৰোৱা হ’ল।"</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"শেহতীয়া-ৰ তালিকাৰ পৰা সকলো এপ্লিকেশ্বন আঁতৰোৱা হ’ল।"</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"<xliff:g id="APP">%s</xliff:g> এপ্লিকেশ্বনৰ তথ্য খোলক।"</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"<xliff:g id="APP">%s</xliff:g>ক আৰম্ভ কৰা হৈছে।"</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"কোনো শেহতীয়া বস্তু নাই"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"আপুনি সকলো খালী কৰিলে"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"এপ্লিকেশ্বনৰ তথ্য"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"স্ক্ৰীণ পিনিং"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"সন্ধান কৰক"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"<xliff:g id="APP">%s</xliff:g>ক আৰম্ভ কৰিব পৰা নগ’ল।"</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g>টো সুৰক্ষিত ম’ডত অক্ষম কৰা হ’ল।"</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"সকলো মচক"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"বিভাজিত স্ক্ৰীণ ব্যৱহাৰ কৰিবলৈ ইয়ালৈ টানি আনি এৰক"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"আনুভূমিকভাৱে বিভাজন কৰক"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"উলম্বভাৱে বিভাজন কৰক"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"কাষ্টম বিভাজন কৰক"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"স্ক্ৰীণখনক ওপৰফাললৈ ভাগ কৰক"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"স্ক্ৰীণখনক বাওঁফাললৈ ভাগ কৰক"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"স্ক্ৰীণখনক সোঁফাললৈ ভাগ কৰক"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-az/strings.xml b/packages/SystemUI/legacy/recents/res/values-az/strings.xml
deleted file mode 100644
index 76ae02aa0f24..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-az/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"İcmal."</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"<xliff:g id="APP">%s</xliff:g> tətbiqini silin."</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> silindi."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Bütün son tətbiqlər silindi."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"<xliff:g id="APP">%s</xliff:g> tətbiq məlumatını açın."</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"<xliff:g id="APP">%s</xliff:g> başladılır."</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"Ən son element yoxdur"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Hər şeyi sildiniz"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"Tətbiq məlumatı"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"ekran sancağı"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"axtarış"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"<xliff:g id="APP">%s</xliff:g> başladılmadı."</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> təhlükəsiz rejimdə deaktiv edildi."</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Hamısını silin"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"Bölünmüş ekrandan istifadə etmək üçün bura sürüşdürün"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Horizontal Bölün"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Vertikal Bölün"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Fərdi Bölün"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Ekranı yuxarıya doğru bölün"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Ekranı sola doğru bölün"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Ekranı sağa doğru bölün"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-b+sr+Latn/strings.xml b/packages/SystemUI/legacy/recents/res/values-b+sr+Latn/strings.xml
deleted file mode 100644
index 3117eeac77f7..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-b+sr+Latn/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Pregled."</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Odbacite aplikaciju <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"Aplikacija <xliff:g id="APP">%s</xliff:g> je odbačena."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Sve nedavno korišćene aplikacije su odbačene."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Otvorite informacije o aplikaciji <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Pokreće se <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"Nema nedavnih stavki"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Obrisali ste sve"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"Informacije o aplikaciji"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"kačenje ekrana"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"pretraži"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"Pokretanje aplikacije <xliff:g id="APP">%s</xliff:g> nije uspelo."</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"Aplikacija <xliff:g id="APP">%s</xliff:g> je onemogućena u bezbednom režimu."</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Obriši sve"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"Prevucite ovde da biste koristili razdeljeni ekran"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Podeli horizontalno"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Podeli vertikalno"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Podeli prilagođeno"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Podeli ekran nagore"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Podeli ekran nalevo"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Podeli ekran nadesno"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-be/strings.xml b/packages/SystemUI/legacy/recents/res/values-be/strings.xml
deleted file mode 100644
index 812184651e6e..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-be/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Агляд."</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Закрыць праграму \"<xliff:g id="APP">%s</xliff:g>\"."</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"Праграма \"<xliff:g id="APP">%s</xliff:g>\" закрыта."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Усе нядаўнія праграмы закрыты."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Адкрыць інфармацыю пра праграму \"<xliff:g id="APP">%s</xliff:g>\"."</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Запускаецца праграма \"<xliff:g id="APP">%s</xliff:g>\"."</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"Няма нядаўніх элементаў"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Вы ўсё выдалілі"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"Інфармацыя пра праграму"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"замацаванне экрана"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"пошук"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"Не ўдалося запусціць праграму \"<xliff:g id="APP">%s</xliff:g>\"."</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"Праграма \"<xliff:g id="APP">%s</xliff:g>\" адключана ў бяспечным рэжыме."</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Ачысціць усё"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"Перацягніце сюды, каб перайсці ў рэжым падзеленага экрана"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Падзяліць гарызантальна"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Падзяліць вертыкальна"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Падзяліць іншым чынам"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Падзяліць экран зверху"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Падзяліць экран злева"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Падзяліць экран справа"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-bg/strings.xml b/packages/SystemUI/legacy/recents/res/values-bg/strings.xml
deleted file mode 100644
index 3dda34fa00be..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-bg/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Общ преглед."</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Отхвърляне на <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"Приложението <xliff:g id="APP">%s</xliff:g> е отхвърлено."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Всички скорошни приложения са отхвърлени."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Отворете информацията за приложението <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"<xliff:g id="APP">%s</xliff:g> се стартира."</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"Няма скорошни елементи"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Изчистихте всичко"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"Информация за приложението"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"фиксиране на екрана"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"търсене"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"<xliff:g id="APP">%s</xliff:g> не можа да стартира."</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"Приложението <xliff:g id="APP">%s</xliff:g> е деактивирано в безопасния режим."</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Изчистване на всичко"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"Преместете тук с плъзгане, за да използвате режим за разделен екран"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Хоризонтално разделяне"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Вертикално разделяне"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Персонализирано разделяне"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Разделяне на екрана нагоре"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Разделяне на екрана наляво"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Разделяне на екрана надясно"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-bn/strings.xml b/packages/SystemUI/legacy/recents/res/values-bn/strings.xml
deleted file mode 100644
index b22672e1dc6a..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-bn/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"এক নজরে।"</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"<xliff:g id="APP">%s</xliff:g> খারিজ করুন।"</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> খারিজ করা হয়েছে।"</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"সব সাম্প্রতিক অ্যাপ্লিকেশন খারিজ করা হয়েছে।"</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"<xliff:g id="APP">%s</xliff:g> অ্যাপ্লিকেশনের তথ্য খুলুন।"</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"<xliff:g id="APP">%s</xliff:g> শুরু করা হচ্ছে।"</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"কোনো সাম্প্রতিক আইটেম নেই"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"আপনি সবকিছু মুছে দিয়েছেন"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"অ্যাপ্লিকেশনের তথ্য"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"স্ক্রিন পিন করা"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"খুঁজুন"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"<xliff:g id="APP">%s</xliff:g> চালু করা যায়নি।"</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"নিরাপদ মোডে <xliff:g id="APP">%s</xliff:g> বন্ধ করা আছে।"</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"সবগুলি মুছে দিন"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"স্প্লিট স্ক্রিন ব্যবহার করতে এখানে টেনে আনুন"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"অনুভূমিক স্প্লিট করুন"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"উল্লম্ব স্প্লিট করুন"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"কাস্টম স্প্লিট করুন"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"স্ক্রিনটি উপরের দিকে স্প্লিট করুন"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"স্ক্রিনটি বাঁদিকে স্প্লিট করুন"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"স্ক্রিনটি ডানদিকে স্প্লিট করুন"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-bs/strings.xml b/packages/SystemUI/legacy/recents/res/values-bs/strings.xml
deleted file mode 100644
index 8e149ba800bb..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-bs/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Pregled."</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Odbaci aplikaciju <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"Aplikacija <xliff:g id="APP">%s</xliff:g> je odbačena."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Sve nedavno korištene aplikacije su odbačene."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Otvaranje informacija o aplikaciji <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Pokretanje aplikacije <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"Nema nedavnih stavki"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Sve ste obrisali"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"Informacije o aplikaciji"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"kačenje ekrana"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"pretraži"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"Aplikacija <xliff:g id="APP">%s</xliff:g> nije pokrenuta."</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"Aplikacija <xliff:g id="APP">%s</xliff:g> je onemogućena u sigurnom načinu rada."</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Obriši sve"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"Povucite ovdje za korištenje podijeljenog ekrana"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Podjela po horizontali"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Podjela po vertikali"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Prilagođena podjela"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Dijeli ekran nagore"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Dijeli ekran nalijevo"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Dijeli ekran nadesno"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-ca/strings.xml b/packages/SystemUI/legacy/recents/res/values-ca/strings.xml
deleted file mode 100644
index fff525ce6fd6..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-ca/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Aplicacions recents."</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Ignora <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"S\'ha ignorat <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"S\'han ignorat totes les aplicacions recents."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Obre la informació sobre l\'aplicació <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"S\'està iniciant <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"No hi ha cap element recent"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Ho has esborrat tot"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"Informació de l\'aplicació"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"fixació de pantalla"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"cerca"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"No s\'ha pogut iniciar <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"En mode segur, l\'aplicació <xliff:g id="APP">%s</xliff:g> està desactivada."</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Esborra-ho tot"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"Arrossega-ho aquí per utilitzar la pantalla dividida"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Divisió horitzontal"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Divisió vertical"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Divisió personalitzada"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Divideix la pantalla cap amunt"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Divideix la pantalla cap a l\'esquerra"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Divideix la pantalla cap a la dreta"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-cs/strings.xml b/packages/SystemUI/legacy/recents/res/values-cs/strings.xml
deleted file mode 100644
index 200f7a8aded7..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-cs/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Přehled"</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Zavřít aplikaci <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"Aplikace <xliff:g id="APP">%s</xliff:g> byla odebrána."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Všechny naposledy použité aplikace byly odstraněny."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Otevře informace o aplikaci <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Spouštění aplikace <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"Žádné nedávné položky"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Vše je vymazáno"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"Informace o aplikaci"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"připnutí obrazovky"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"hledat"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"Aplikaci <xliff:g id="APP">%s</xliff:g> nelze spustit."</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"Aplikace <xliff:g id="APP">%s</xliff:g> je v nouzovém režimu zakázána."</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Vymazat vše"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"Přetáhnutím sem aktivujete rozdělenou obrazovku"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Vodorovné rozdělení"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Svislé rozdělení"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Vlastní rozdělení"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Rozdělit obrazovku nahoru"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Rozdělit obrazovku vlevo"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Rozdělit obrazovku vpravo"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-da/strings.xml b/packages/SystemUI/legacy/recents/res/values-da/strings.xml
deleted file mode 100644
index 0a1690e4dd59..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-da/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Oversigt."</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Fjern <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> er fjernet."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Alle de seneste apps er fjernet."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Åbn appoplysningerne for <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"<xliff:g id="APP">%s</xliff:g> åbnes."</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"Ingen nye elementer"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Du har ryddet alt"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"Appoplysninger"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"skærmfastholdelse"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"søg"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"<xliff:g id="APP">%s</xliff:g> kunne ikke åbnes."</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> er deaktiveret i sikker tilstand."</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Ryd alle"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"Træk hertil for at bruge opdelt skærm"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Opdel vandret"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Opdel lodret"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Opdel brugerdefineret"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Opdelt skærm øverst"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Opdelt skærm til venstre"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Opdelt skærm til højre"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-de/strings.xml b/packages/SystemUI/legacy/recents/res/values-de/strings.xml
deleted file mode 100644
index 4a089bff6b79..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-de/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Übersicht."</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"<xliff:g id="APP">%s</xliff:g> entfernen."</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> wurde entfernt."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Alle kürzlich verwendeten Apps wurden entfernt."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Infos zur <xliff:g id="APP">%s</xliff:g> App öffnen."</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"<xliff:g id="APP">%s</xliff:g> wird gestartet."</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"Keine kürzlich verwendeten Elemente"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Du hast alles gelöscht"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"App-Info"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"Bildschirm anpinnen"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"Suchen"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"<xliff:g id="APP">%s</xliff:g> konnte nicht gestartet werden."</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> ist im abgesicherten Modus deaktiviert."</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Alle löschen"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"Hierher ziehen, um den Bildschirm zu teilen"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Geteilt – horizontal"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Geteilt – vertikal"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Geteilt – benutzerdefiniert"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Geteilten Bildschirm oben anzeigen"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Geteilten Bildschirm links anzeigen"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Geteilten Bildschirm rechts anzeigen"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-el/strings.xml b/packages/SystemUI/legacy/recents/res/values-el/strings.xml
deleted file mode 100644
index 90baf52342e8..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-el/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Επισκόπηση."</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Παράβλεψη εφαρμογής <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"Η εφαρμογή <xliff:g id="APP">%s</xliff:g> απορρίφθηκε."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Όλες οι πρόσφατες εφαρμογές παραβλέφθηκαν."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Άνοιγμα πληροφοριών εφαρμογής <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Έναρξη εφαρμογής <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"Δεν υπάρχουν πρόσφατα στοιχεία"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Διαγράψατε όλα τα στοιχεία"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"Πληροφορίες εφαρμογής"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"καρφίτσωμα οθόνης"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"αναζήτηση"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"Δεν ήταν δυνατή η έναρξη της εφαρμογής <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"Η εφαρμογή <xliff:g id="APP">%s</xliff:g> έχει απενεργοποιηθεί στην ασφαλή λειτουργία."</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Διαγραφή όλων"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"Σύρετε εδώ για να χρησιμοποιήσετε τον διαχωρισμό οθόνης"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Οριζόντιος διαχωρισμός"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Κάθετος διαχωρισμός"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Προσαρμοσμένος διαχωρισμός"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Διαχωρισμός οθόνης στην κορυφή"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Διαχωρισμός οθόνης στα αριστερά"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Διαχωρισμός οθόνης στα δεξιά"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-en-rAU/strings.xml b/packages/SystemUI/legacy/recents/res/values-en-rAU/strings.xml
deleted file mode 100644
index af1d055d65d2..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-en-rAU/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Overview."</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Dismiss <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> dismissed."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"All recent applications dismissed."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Open <xliff:g id="APP">%s</xliff:g> application info."</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Starting <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"No recent items"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"You\'ve cleared everything"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"Application Info"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"screen pinning"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"search"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"Could not start <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> is disabled in safe-mode."</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Clear all"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"Drag here to use split screen"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Split Horizontal"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Split Vertical"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Split Custom"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Split screen to the top"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Split screen to the left"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Split screen to the right"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-en-rCA/strings.xml b/packages/SystemUI/legacy/recents/res/values-en-rCA/strings.xml
deleted file mode 100644
index af1d055d65d2..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-en-rCA/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Overview."</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Dismiss <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> dismissed."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"All recent applications dismissed."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Open <xliff:g id="APP">%s</xliff:g> application info."</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Starting <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"No recent items"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"You\'ve cleared everything"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"Application Info"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"screen pinning"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"search"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"Could not start <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> is disabled in safe-mode."</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Clear all"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"Drag here to use split screen"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Split Horizontal"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Split Vertical"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Split Custom"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Split screen to the top"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Split screen to the left"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Split screen to the right"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-en-rGB/strings.xml b/packages/SystemUI/legacy/recents/res/values-en-rGB/strings.xml
deleted file mode 100644
index af1d055d65d2..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-en-rGB/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Overview."</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Dismiss <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> dismissed."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"All recent applications dismissed."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Open <xliff:g id="APP">%s</xliff:g> application info."</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Starting <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"No recent items"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"You\'ve cleared everything"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"Application Info"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"screen pinning"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"search"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"Could not start <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> is disabled in safe-mode."</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Clear all"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"Drag here to use split screen"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Split Horizontal"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Split Vertical"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Split Custom"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Split screen to the top"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Split screen to the left"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Split screen to the right"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-en-rIN/strings.xml b/packages/SystemUI/legacy/recents/res/values-en-rIN/strings.xml
deleted file mode 100644
index af1d055d65d2..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-en-rIN/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Overview."</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Dismiss <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> dismissed."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"All recent applications dismissed."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Open <xliff:g id="APP">%s</xliff:g> application info."</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Starting <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"No recent items"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"You\'ve cleared everything"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"Application Info"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"screen pinning"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"search"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"Could not start <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> is disabled in safe-mode."</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Clear all"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"Drag here to use split screen"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Split Horizontal"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Split Vertical"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Split Custom"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Split screen to the top"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Split screen to the left"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Split screen to the right"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-en-rXC/strings.xml b/packages/SystemUI/legacy/recents/res/values-en-rXC/strings.xml
deleted file mode 100644
index ceb6b1330558..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-en-rXC/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‏‏‎‏‎‏‏‏‏‎‎‏‎‏‏‏‎‏‏‏‏‎‎‏‏‏‎‎‏‎‏‎‎‎‎‎‎‎‏‎‏‏‎‏‏‏‏‎‏‎‎‎‏‏‏‎‏‎Overview.‎‏‎‎‏‎"</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‏‎‏‏‎‎‎‏‏‏‎‎‎‏‏‎‏‎‏‎‎‏‏‎‎‎‏‎‎‎‏‎‎‏‎‎‎‏‏‏‏‏‎‎‎‏‎‎‎‏‏‎‏‏‏‎‎Dismiss ‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>‎‏‎‎‏‏‏‎.‎‏‎‎‏‎"</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‎‏‏‎‏‏‎‎‎‏‎‏‎‏‏‎‏‏‏‎‎‎‎‎‎‎‎‎‏‏‎‏‏‏‏‎‎‏‎‎‏‏‎‎‏‏‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>‎‏‎‎‏‏‏‎ dismissed.‎‏‎‎‏‎"</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‏‎‎‎‎‎‎‏‎‎‏‎‏‎‏‎‎‎‏‏‏‎‏‏‏‏‎‏‎‏‎‎‏‎‎‎‎‏‎‏‎‏‎‎‎‎‎‏‎‏‏‏‎‏‏‏‎‎All recent applications dismissed.‎‏‎‎‏‎"</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‏‎‏‎‎‎‏‏‏‎‏‏‎‎‎‎‎‎‎‎‏‏‏‎‏‏‎‎‏‏‏‏‏‏‎‎‏‎‏‏‎‎‎‎‏‎‏‎‏‏‏‏‏‏‎‎‎‎Open ‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>‎‏‎‎‏‏‏‎ application info.‎‏‎‎‏‎"</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‎‏‎‏‏‏‎‎‏‏‏‏‏‏‎‎‏‏‎‎‏‏‎‏‏‏‏‎‎‏‏‏‏‎‏‏‎‏‏‎‎‎‎‏‎‎‏‎‏‏‏‎‏‏‏‏‏‎Starting ‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>‎‏‎‎‏‏‏‎.‎‏‎‎‏‎"</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‎‎‏‎‎‏‏‎‎‎‎‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‎‎‎‎‏‎‎‎‏‎‏‏‎‎‎‎‏‎‏‏‎‎‏‏‏‏‏‏‎No recent items‎‏‎‎‏‎"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‏‏‎‏‎‏‏‎‏‎‏‎‎‏‎‎‎‎‏‎‏‏‏‎‎‏‎‏‏‏‎‎‎‎‏‏‎‏‎‏‏‎‎‏‎‎‎‎‎‎‏‎‏‏‏‏‏‎You\'ve cleared everything‎‏‎‎‏‎"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‎‏‏‎‎‎‏‏‎‎‏‎‏‏‎‎‏‏‏‏‎‏‎‏‏‏‏‏‎‏‏‎‎‏‎‎‏‎‏‎‎‎‎‎‏‏‏‎‎‎‎‏‎‏‎‎Application Info‎‏‎‎‏‎"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‎‎‏‏‏‏‏‎‎‎‎‎‎‏‎‎‎‏‎‎‎‏‏‎‏‏‏‏‎‎‏‏‏‎‏‏‎‏‎‎‎‎‏‎‏‎‏‎‏‎‎‏‏‎‏‎‏‎screen pinning‎‏‎‎‏‎"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‎‏‏‎‏‏‎‏‏‎‎‎‏‏‎‎‏‏‎‏‏‎‏‏‎‏‏‏‏‏‏‎‏‎‎‏‏‎‏‎‏‏‎‎‏‎‎‏‎‎‏‎‏‎‏‎‏‎search‎‏‎‎‏‎"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‎‏‏‎‏‎‏‏‎‏‏‏‎‏‏‏‎‏‎‎‏‎‏‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‎Could not start ‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>‎‏‎‎‏‏‏‎.‎‏‎‎‏‎"</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‏‏‎‏‏‏‏‎‎‎‎‎‏‎‏‏‏‎‏‎‎‎‎‎‏‏‎‎‎‎‏‎‎‏‏‏‏‏‎‏‏‎‎‏‎‏‎‎‎‏‏‏‎‏‏‎‏‏‎‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>‎‏‎‎‏‏‏‎ is disabled in safe-mode.‎‏‎‎‏‎"</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‏‏‎‏‏‎‎‏‏‎‎‎‎‎‎‏‏‏‎‎‏‏‎‎‎‎‎‎‏‎‏‎‏‏‎‎‎‎‎‎‎‏‎‏‏‏‎‏‎‎‏‎‎‏‏‎‎‏‎Clear all‎‏‎‎‏‎"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‎‎‏‏‏‏‎‎‎‏‎‏‎‎‎‏‏‎‎‏‏‏‎‏‎‏‎‏‎‏‎‎‏‎‎‎‎‏‏‎‎‎‎‏‎‏‏‎‎‎‏‎‎‏‎‎‎‎Drag here to use split screen‎‏‎‎‏‎"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‎‏‏‎‎‏‎‎‏‎‎‏‏‏‎‏‏‏‏‎‎‏‎‏‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‎‏‏‏‎‏‎‏‎‎‏‏‎‏‎‏‏‎Split Horizontal‎‏‎‎‏‎"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‏‎‏‎‏‎‏‏‎‎‎‎‎‎‎‎‏‏‎‎‎‏‏‎‎‎‎‏‏‏‎‏‏‏‏‎‏‏‎‏‏‏‎‏‏‎‏‏‏‎‎‏‎‎‏‏‎‏‎Split Vertical‎‏‎‎‏‎"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‎‎‏‎‎‎‎‎‏‏‏‎‏‎‏‏‎‎‎‏‏‎‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‎‎‎‏‎‎‏‏‎‏‎‏‎‎‏‎‏‎‏‏‎Split Custom‎‏‎‎‏‎"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‎‎‎‎‎‏‏‏‎‎‎‎‎‎‏‎‎‏‏‎‎‎‎‎‎‎‏‏‏‎‏‏‏‎‎‎‏‎‎‏‏‏‏‎‏‏‎‎‎‏‏‏‎‎‎Split screen to the top‎‏‎‎‏‎"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‏‎‎‎‎‎‎‏‏‏‎‎‏‎‏‏‎‎‎‎‎‏‎‎‎‏‎‏‎‏‎‏‏‎‎‏‏‎‏‎‎‎‎‏‏‏‏‎‏‏‎‎‏‎‎‏‎‎‎Split screen to the left‎‏‎‎‏‎"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‏‎‎‏‏‎‏‎‎‏‏‏‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‎‎‎‏‎‏‏‎‏‏‏‎‏‎‎‏‎‏‎‎‎‎‎‏‎‏‎‎Split screen to the right‎‏‎‎‏‎"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-es-rUS/strings.xml b/packages/SystemUI/legacy/recents/res/values-es-rUS/strings.xml
deleted file mode 100644
index f212b027a1ec..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-es-rUS/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Recientes"</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Permite descartar <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"Se descartó <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Se descartaron todas las aplicaciones recientes."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Permite abrir la información de la aplicación de <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Iniciando <xliff:g id="APP">%s</xliff:g>"</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"No hay elementos recientes"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Todo borrado"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"Información de la aplicación"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"Fijar pantalla"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"Buscar"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"No se pudo iniciar <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> está inhabilitada en modo seguro."</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Borrar todo"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"Arrastra hasta aquí para usar la pantalla dividida"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"División horizontal"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"División vertical"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"División personalizada"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Dividir pantalla en la parte superior"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Dividir pantalla a la izquierda"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Dividir pantalla a la derecha"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-es/strings.xml b/packages/SystemUI/legacy/recents/res/values-es/strings.xml
deleted file mode 100644
index 8bcfe84a6700..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-es/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Aplicaciones recientes."</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Cerrar <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"Se ha ignorado la aplicación <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Se han ignorado todas las aplicaciones recientes."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Abre la información de la aplicación <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Iniciando la aplicación <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"No hay elementos recientes"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Has borrado todo"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"Información de la aplicación"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"fijar pantalla"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"buscar"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"No se ha podido iniciar la aplicación <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"La aplicación <xliff:g id="APP">%s</xliff:g> se ha inhabilitado en modo seguro."</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Borrar todo"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"Arrastra el elemento hasta aquí para utilizar la pantalla dividida"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"División horizontal"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"División vertical"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"División personalizada"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Dividir la pantalla en la parte superior"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Dividir la pantalla a la izquierda"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Dividir la pantalla a la derecha"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-et/strings.xml b/packages/SystemUI/legacy/recents/res/values-et/strings.xml
deleted file mode 100644
index c1903af60ec9..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-et/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Ülevaade."</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Rakendusest <xliff:g id="APP">%s</xliff:g> loobumine."</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"Rakendusest <xliff:g id="APP">%s</xliff:g> on loobutud."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Kõikidest hiljutistest rakendustest on loobutud."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Rakenduse <xliff:g id="APP">%s</xliff:g> teabe avamine."</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Rakenduse <xliff:g id="APP">%s</xliff:g> käivitamine."</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"Hiljutisi üksusi pole"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Olete kõik ära kustutanud"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"Rakenduse teave"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"ekraanikuva kinnitamine"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"otsi"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"Rakendust <xliff:g id="APP">%s</xliff:g> ei saanud käivitada."</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"Rakendus <xliff:g id="APP">%s</xliff:g> on turvarežiimis keelatud."</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Kustuta kõik"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"Jagatud ekraani kasutamiseks lohistage siia"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Horisontaalne poolitamine"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Vertikaalne poolitamine"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Kohandatud poolitamine"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Poolita ekraan üles"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Poolita ekraan vasakule"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Poolita ekraan paremale"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-eu/strings.xml b/packages/SystemUI/legacy/recents/res/values-eu/strings.xml
deleted file mode 100644
index 91e250f50411..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-eu/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Ikuspegi orokorra."</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Baztertu <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"Baztertu da <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Baztertu dira azken aplikazio guztiak."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Ireki <xliff:g id="APP">%s</xliff:g> aplikazioari buruzko informazioa."</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"<xliff:g id="APP">%s</xliff:g> abiarazten."</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"Ez dago azkenaldi honetako ezer"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Dena garbitu duzu"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"Aplikazioaren informazioa"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"pantaila-ainguratzea"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"bilatu"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"Ezin izan da abiarazi <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> desgaituta dago modu seguruan."</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Garbitu guztiak"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"Arrastatu hona pantaila zatitzeko"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Zatitze horizontala"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Zatitze bertikala"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Zatitze pertsonalizatua"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Zatitu pantaila eta ezarri goian"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Zatitu pantaila eta ezarri ezkerrean"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Zatitu pantaila eta ezarri eskuinean"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-fa/strings.xml b/packages/SystemUI/legacy/recents/res/values-fa/strings.xml
deleted file mode 100644
index 61e87c113774..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-fa/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"نمای کلی."</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"رد کردن <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> نادیده گرفته شد."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"همه برنامه‌های اخیر رد شدند."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"باز کردن اطلاعات برنامه <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"<xliff:g id="APP">%s</xliff:g> درحال شروع به کار است."</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"بدون موارد اخیر"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"همه‌چیز را پاک کرده‌اید"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"اطلاعات برنامه"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"پین کردن صفحه"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"جستجو"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"<xliff:g id="APP">%s</xliff:g> شروع نشد."</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> در حالت ایمن غیرفعال است."</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"پاک کردن همه"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"برای استفاده از تقسیم صفحه، به اینجا بکشید"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"تقسیم افقی"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"تقسیم عمودی"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"سفارشی کردن تقسیم"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"تقسیم کردن صفحه به بالا"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"تقسیم کردن صفحه به چپ"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"تقسیم کردن صفحه به راست"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-fi/strings.xml b/packages/SystemUI/legacy/recents/res/values-fi/strings.xml
deleted file mode 100644
index bf2e46112abc..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-fi/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Viimeisimmät"</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Hylkää <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> hylättiin."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Kaikki viimeisimmät sovellukset on hylätty."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Avaa sovelluksen <xliff:g id="APP">%s</xliff:g> tiedot."</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Käynnistetään <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"Ei viimeaikaisia kohteita"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Kaikki on hoidettu"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"Sovellustiedot"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"näytön kiinnitys"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"haku"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"<xliff:g id="APP">%s</xliff:g> ei käynnistynyt."</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> on poistettu käytöstä vikasietotilassa."</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Poista kaikki"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"Jaa näyttö vetämällä tähän."</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Vaakasuuntainen jako"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Pystysuuntainen jako"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Oma jako"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Jaa näyttö ylös"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Jaa näyttö vasemmalle"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Jaa näyttö oikealle"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-fr-rCA/strings.xml b/packages/SystemUI/legacy/recents/res/values-fr-rCA/strings.xml
deleted file mode 100644
index e60727e38074..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-fr-rCA/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Aperçu"</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Supprimer <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> supprimée."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Toutes les applications récentes ont été supprimées."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Ouvre les détails de l\'application <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Lancement de <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"Aucun élément récent"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Vous avez tout effacé"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"Détails de l\'application"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"épinglage d\'écran"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"rechercher"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"Impossible de lancer <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> est désactivée en mode sans échec."</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Tout effacer"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"Glissez l\'élément ici pour utiliser l\'écran partagé"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Séparation horizontale"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Séparation verticale"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Séparation personnalisée"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Écran partagé dans le haut"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Écran partagé à la gauche"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Écran partagé à la droite"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-fr/strings.xml b/packages/SystemUI/legacy/recents/res/values-fr/strings.xml
deleted file mode 100644
index 5b0d611c2588..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-fr/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Aperçu"</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Supprimer l\'application <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"Application <xliff:g id="APP">%s</xliff:g> supprimée."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Toutes les applications récentes ont été supprimées."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Ouvre les informations sur l\'application <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Lancement de l\'application <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"Aucun élément récent"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Vous avez tout effacé"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"Informations sur l\'application"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"épinglage d\'écran"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"rechercher"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"Impossible de lancer l\'application <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"L\'application <xliff:g id="APP">%s</xliff:g> est désactivée en mode sécurisé."</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Tout fermer"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"Faire glisser ici pour utiliser l\'écran partagé"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Séparation horizontale"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Séparation verticale"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Séparation personnalisée"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Partager l\'écran en haut"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Partager l\'écran sur la gauche"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Partager l\'écran sur la droite"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-gl/strings.xml b/packages/SystemUI/legacy/recents/res/values-gl/strings.xml
deleted file mode 100644
index 008c7761c8e7..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-gl/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Visión xeral."</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Rexeita <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"Rexeitouse <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Rexeitáronse todas as aplicacións recentes."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Abre a información da aplicación <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Iniciando <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"Non hai elementos recentes"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Borraches todo"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"Información da aplicación"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"fixación de pantalla"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"buscar"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"Non se puido iniciar <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"A aplicación <xliff:g id="APP">%s</xliff:g> está desactivada no modo seguro."</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Borrar todo"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"Arrastra aquí para usar a pantalla dividida"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Dividir horizontalmente"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Dividir verticalmente"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Dividir de xeito personalizado"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Dividir pantalla arriba"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Dividir pantalla á esquerda"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Dividir pantalla á dereita"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-gu/strings.xml b/packages/SystemUI/legacy/recents/res/values-gu/strings.xml
deleted file mode 100644
index 33dc7e8c7ee0..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-gu/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"ઝલક."</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"<xliff:g id="APP">%s</xliff:g> કાઢી નાખો."</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> કાઢી નાખી."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"તાજેતરની બધી ઍપ્લિકેશનો કાઢી નાખવામાં આવી."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"<xliff:g id="APP">%s</xliff:g>ની ઍપ્લિકેશન માહિતી ખોલો."</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"<xliff:g id="APP">%s</xliff:g>ને શરૂ કરી રહ્યાં છીએ."</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"તાજેતરની કોઈ આઇટમ નથી"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"તમે બધું સાફ કર્યું"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"ઍપ્લિકેશનની માહિતી"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"સ્ક્રીન પિનિંગ"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"શોધો"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"<xliff:g id="APP">%s</xliff:g>ને શરૂ કરી શકાઈ નથી."</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"સુરક્ષિત મોડમાં <xliff:g id="APP">%s</xliff:g>ને બંધ કરવામાં આવી છે."</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"બધું સાફ કરો"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"વિભાજિત સ્ક્રીનનો ઉપયોગ કરવા માટે અહીં ખેંચો"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"સ્ક્રીનને આડી વિભાજિત કરો"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"સ્ક્રીનને ઊભી વિભાજિત કરો"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"સ્ક્રીનને કસ્ટમ વિભાજિત કરો"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"સ્ક્રીનને ઉપરની તરફ વિભાજિત કરો"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"સ્ક્રીનને ડાબી તરફ વિભાજિત કરો"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"સ્ક્રીનને જમણી તરફ વિભાજિત કરો"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-hi/strings.xml b/packages/SystemUI/legacy/recents/res/values-hi/strings.xml
deleted file mode 100644
index 3f19f3378348..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-hi/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"खास जानकारी."</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"<xliff:g id="APP">%s</xliff:g> को खारिज करें."</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> खारिज किया गया."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"हाल के सभी ऐप्लिकेशन खारिज कर दिए गए हैं."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"<xliff:g id="APP">%s</xliff:g> ऐप्लिकेशन की जानकारी खोलें."</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"<xliff:g id="APP">%s</xliff:g> शुरू किया जा रहा है."</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"हाल का कोई आइटम नहीं है"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"आपने सब कुछ हटा दिया है"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"ऐप्लिकेशन की जानकारी"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"स्क्रीन पिन करना"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"खोजें"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"<xliff:g id="APP">%s</xliff:g> शुरू नहीं किया जा सका."</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> को सुरक्षित-मोड में बंद किया गया."</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"सभी ऐप्लिकेशन बंद करें"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"स्क्रीन को दो हिस्सों में बाँटने (स्प्लिट स्क्रीन) के लिए यहां से खींचें और छोड़ें"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"क्षैतिज रूप से दो हिस्सों में बाँटें (स्प्लिट करें)"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"लम्बवत रूप से दो हिस्सों में बाँटें (स्प्लिट करें)"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"अपने मुताबिक दो हिस्सों में बाँटें (स्प्लिट स्क्रीन करें)"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"ऊपर की ओर दूसरी स्क्रीन बनाएं"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"बाईं ओर दूसरी स्क्रीन बनाएं"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"दाईं ओर दूसरी स्क्रीन बनाएं"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-hr/strings.xml b/packages/SystemUI/legacy/recents/res/values-hr/strings.xml
deleted file mode 100644
index 88926a4f8c76..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-hr/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Pregled."</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Odbacivanje aplikacije <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"Odbačena je aplikacija <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Odbačene su sve nedavne aplikacije."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Otvaranje informacija o aplikaciji <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Pokreće se aplikacija <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"Nema nedavnih stavki"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Izbrisali ste sve"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"Informacije o aplikaciji"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"prikačivanje zaslona"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"pretraživanje"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"Aplikacija <xliff:g id="APP">%s</xliff:g> nije pokrenuta."</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"Aplikacija <xliff:g id="APP">%s</xliff:g> onemogućena je u sigurnom načinu."</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Izbriši sve"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"Povucite ovdje da biste upotrebljavali podijeljeni zaslon"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Podijeli vodoravno"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Podijeli okomito"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Podijeli prilagođeno"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Podijeli zaslon na vrhu"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Podijeli zaslon slijeva"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Podijeli zaslon zdesna"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-hu/strings.xml b/packages/SystemUI/legacy/recents/res/values-hu/strings.xml
deleted file mode 100644
index d0429e76fb40..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-hu/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Áttekintés."</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"A(z) <xliff:g id="APP">%s</xliff:g> elvetése."</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> eltávolítva."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Az összes alkalmazás eltávolítva a nemrég használtak közül."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"A(z) <xliff:g id="APP">%s</xliff:g> alkalmazás adatainak megnyitása."</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"A(z) <xliff:g id="APP">%s</xliff:g> indítása."</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"Nincsenek mostanában használt elemek"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Mindent törölt"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"Az alkalmazás adatai"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"képernyő rögzítése"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"keresés"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"Nem lehet elindítani a következőt: <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"A(z) <xliff:g id="APP">%s</xliff:g> csökkentett módban le van tiltva."</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Összes törlése"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"Húzza ide az osztott képernyő használatához"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Osztott vízszintes"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Osztott függőleges"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Osztott egyéni"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Osztott képernyő felülre"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Osztott képernyő balra"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Osztott képernyő jobbra"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-hy/strings.xml b/packages/SystemUI/legacy/recents/res/values-hy/strings.xml
deleted file mode 100644
index c56b691ed126..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-hy/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Համատեսք:"</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Հեռացնել <xliff:g id="APP">%s</xliff:g> հավելվածը ցուցակից:"</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> հավելվածը հեռացվել է ցուցակից:"</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Բոլոր վերջին հավելվածները հեռացվել են ցուցակից:"</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Բացել <xliff:g id="APP">%s</xliff:g> հավելվածի մասին տեղեկությունները"</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"<xliff:g id="APP">%s</xliff:g> հավելվածը գործարկվում է:"</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"Այստեղ դեռ ոչինչ չկա"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Ցուցակը դատարկ է"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"Հավելվածի մասին"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"էկրանի ամրացում"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"որոնում"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"Չհաջողվեց գործարկել <xliff:g id="APP">%s</xliff:g> հավելվածը:"</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> հավելվածը անվտանգ ռեժիմում անջատված է:"</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Ջնջել բոլորը"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"Քաշեք այստեղ՝ էկրանի տրոհումն օգտագործելու համար"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Հորիզոնական տրոհում"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Ուղղահայաց տրոհում"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Հատուկ տրոհում"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Տրոհել էկրանը վերևից"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Տրոհել էկրանը ձախից"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Տրոհել էկրանն աջից"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-in/strings.xml b/packages/SystemUI/legacy/recents/res/values-in/strings.xml
deleted file mode 100644
index aa9dcfe1b197..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-in/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Ringkasan."</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Hapus <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> dihapus."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Semua aplikasi yang baru dibuka telah dihapus."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Buka info aplikasi <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Memulai <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"Tidak ada item yang baru dibuka"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Anda sudah menghapus semua"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"Info Aplikasi"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"pin ke layar"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"telusuri"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"Tidak dapat memulai <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> dinonaktifkan dalam mode aman."</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Hapus semua"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"Tarik ke sini untuk menggunakan layar terpisah"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Pisahkan Horizontal"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Pisahkan Vertikal"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Pisahkan Khusus"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Pisahkan layar ke atas"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Pisahkan layar ke kiri"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Pisahkan layar ke kanan"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-is/strings.xml b/packages/SystemUI/legacy/recents/res/values-is/strings.xml
deleted file mode 100644
index e0a555e63976..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-is/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Yfirlit."</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Fjarlægja <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> fjarlægt."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Öll nýleg forrit fjarlægð."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Opna forritsupplýsingar <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Ræsir <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"Engin nýleg atriði"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Þú hefur hreinsað allt"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"Forritsupplýsingar"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"skjáfesting"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"leita"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"Ekki var hægt að ræsa <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"Slökkt er á <xliff:g id="APP">%s</xliff:g> í öruggri stillingu."</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Hreinsa allt"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"Dragðu hingað til að skipta skjánum"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Lárétt skipting"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Lóðrétt skipting"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Sérsniðin skipting"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Skipta skjá að ofanverðu"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Skipta skjá til vinstri"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Skipta skjá til hægri"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-it/strings.xml b/packages/SystemUI/legacy/recents/res/values-it/strings.xml
deleted file mode 100644
index e04d56038ac1..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-it/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Panoramica."</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Elimina <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> eliminata."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Tutte le applicazioni recenti sono state rimosse."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Mostra informazioni sull\'applicazione <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Avvio di <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"Nessun elemento recente"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Hai cancellato tutto"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"Informazioni sull\'applicazione"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"blocco su schermo"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"cerca"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"Impossibile avviare <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"L\'app <xliff:g id="APP">%s</xliff:g> è stata disattivata in modalità provvisoria."</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Cancella tutto"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"Trascina qui per utilizzare la modalità Schermo diviso"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Divisione in orizzontale"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Divisione in verticale"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Divisione personalizzata"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Schermo diviso in alto"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Schermo diviso a sinistra"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Schermo diviso a destra"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-iw/strings.xml b/packages/SystemUI/legacy/recents/res/values-iw/strings.xml
deleted file mode 100644
index a96c709b4be6..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-iw/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"סקירה כללית."</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"הסרה של <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> הוסרה."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"כל האפליקציות האחרונות הוסרו."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"פתיחת מידע על האפליקציה <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"מפעיל את <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"אין פריטים אחרונים"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"מחקת הכול"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"מידע על האפליקציה"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"הקפאת מסך"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"חיפוש"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"לא ניתן היה להפעיל את <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> מושבתת במצב בטוח."</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"ניקוי הכול"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"יש לגרור לכאן כדי להשתמש במסך מפוצל"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"פיצול אופקי"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"פיצול אנכי"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"פיצול מותאם אישית"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"פיצול מסך למעלה"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"פיצול מסך לשמאל"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"פיצול מסך לימין"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-ja/strings.xml b/packages/SystemUI/legacy/recents/res/values-ja/strings.xml
deleted file mode 100644
index 4d7524c72300..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-ja/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"最近"</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"<xliff:g id="APP">%s</xliff:g>を削除します。"</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g>を削除しました。"</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"最近のアプリをすべて削除しました。"</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"<xliff:g id="APP">%s</xliff:g>のアプリ情報を開きます。"</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"<xliff:g id="APP">%s</xliff:g>を開始しています。"</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"最近のアイテムはありません"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"すべてのタスクを削除しました"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"アプリ情報"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"画面固定"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"検索"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"<xliff:g id="APP">%s</xliff:g>を開始できませんでした。"</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g>はセーフモードでは無効になります。"</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"すべて消去"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"分割画面を使用するにはここにドラッグします"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"横に分割"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"縦に分割"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"分割(カスタム)"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"画面を上に分割"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"画面を左に分割"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"画面を右に分割"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-ka/strings.xml b/packages/SystemUI/legacy/recents/res/values-ka/strings.xml
deleted file mode 100644
index 088388bfdc70..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-ka/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"მიმოხილვა"</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"<xliff:g id="APP">%s</xliff:g>-ის დახურვა."</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> დაიხურა."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"ყველა ბოლოდროინდელი აპლიკაცია დაიხურა."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"<xliff:g id="APP">%s</xliff:g> აპლიკაციის ინფორმაციის გახსნა."</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"მიმდინარეობს <xliff:g id="APP">%s</xliff:g>-ის გაშვება."</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"ბოლოდროინდელი ერთეულები არ არის"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"ყველაფერი გასუფთავდა"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"აპლიკაციის ინფორმაცია"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"ეკრანზე ჩამაგრება"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"ძიება"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"<xliff:g id="APP">%s</xliff:g>-ის გაშვება ვერ მოხერხდა."</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> გათიშულია უსაფრთხო რეჟიმში."</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"ყველას გასუფთავება"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"ეკრანის გასაყოფად ჩავლებით გადმოიტანეთ აქ"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"ჰორიზონტალური გაყოფა"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"ვერტიკალური გაყოფა"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"მორგებული გაყოფა"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"ეკრანის გაყოფა ზემოთ"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"ეკრანის გაყოფა მარცხნივ"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"ეკრანის გაყოფა მარჯვნივ"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-kk/strings.xml b/packages/SystemUI/legacy/recents/res/values-kk/strings.xml
deleted file mode 100644
index 9d4e01c138ee..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-kk/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Жалпы ақпарат."</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"<xliff:g id="APP">%s</xliff:g> қолданбасын өшіру."</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> өшірілді."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Барлық қолданбалар \"Соңғылар\" тізімінен өшірілді."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"<xliff:g id="APP">%s</xliff:g> қолданбасы туралы ақпаратты ашу."</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"<xliff:g id="APP">%s</xliff:g> іске қосылды."</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"Ешқандай соңғы элементтер жоқ"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Барлығын өшірдіңіз"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"Қолданба туралы ақпарат"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"экранды бекіту"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"іздеу"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"<xliff:g id="APP">%s</xliff:g> іске қосылмады."</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> қауіпсіз режимде өшіріледі."</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Барлығын өшіру"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"Экранды бөлу үшін осы жерге сүйреңіз"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Көлденеңінен бөлу"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Тігінен бөлу"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Бөлу (арнаулы)"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Экранды жоғары жағынан бөлу"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Экранды сол жағынан бөлу"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Экранды оң жағынан бөлу"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-km/strings.xml b/packages/SystemUI/legacy/recents/res/values-km/strings.xml
deleted file mode 100644
index b7bfba67bbcf..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-km/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"ទិដ្ឋភាពរួម។"</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"ច្រានចោល <xliff:g id="APP">%s</xliff:g> ។"</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"បាន​ច្រានចោល <xliff:g id="APP">%s</xliff:g> ។"</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"បាន​ច្រានចោល​កម្មវិធីថ្មីៗ​ទាំងអស់។"</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"បើក​ព័ត៌មាន​កម្មវិធី <xliff:g id="APP">%s</xliff:g> ។"</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"កំពុង​ចាប់ផ្ដើម <xliff:g id="APP">%s</xliff:g> ។"</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"មិនមានធាតុថ្មីៗទេ"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"អ្នក​បានសម្អាត​អ្វីៗ​គ្រប់យ៉ាង"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"ព័ត៌មាន​កម្មវិធី"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"ការ​ភ្ជាប់​អេក្រង់"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"ស្វែង​រក"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"មិន​អាច​ចាប់ផ្ដើម <xliff:g id="APP">%s</xliff:g> បានទេ។"</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> ត្រូវបាន​បិទ​ដំណើរការ​ក្នុងមុខងារ​សុវត្ថិភាព។"</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"សម្អាត​ទាំងអស់"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"អូសនៅទីនេះដើម្បីប្រើអេក្រង់បំបែក"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"បំបែកផ្តេក"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"បំបែកបញ្ឈរ"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"បំបែកផ្ទាល់ខ្លួន"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"បំបែក​អេក្រង់​ទៅ​ខាងលើ"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"បំបែក​អេក្រង់​ទៅ​ខាងឆ្វេង"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"បំបែក​អេក្រង់​ទៅ​ខាងស្តាំ"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-kn/strings.xml b/packages/SystemUI/legacy/recents/res/values-kn/strings.xml
deleted file mode 100644
index 84894c12c7e8..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-kn/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"ಸಮಗ್ರ ನೋಟ."</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"<xliff:g id="APP">%s</xliff:g> ವಜಾಗೊಳಿಸಿ."</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> ವಜಾಗೊಳಿಸಲಾಗಿದೆ."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"ಇತ್ತೀಚಿನ ಎಲ್ಲಾ ಆ್ಯಪ್‌ಗಳನ್ನು ವಜಾಗೊಳಿಸಲಾಗಿದೆ."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"<xliff:g id="APP">%s</xliff:g> ಆ್ಯಪ್ ಮಾಹಿತಿ ತೆರೆಯಿರಿ."</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"<xliff:g id="APP">%s</xliff:g> ಪ್ರಾರಂಭಿಸಲಾಗುತ್ತಿದೆ."</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"ಯಾವುದೇ ಇತ್ತೀಚಿನ ಐಟಂಗಳಿಲ್ಲ"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"ನೀವು ಎಲ್ಲವನ್ನೂ ತೆರವುಗೊಳಿಸಿರುವಿರಿ"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"ಆ್ಯಪ್ ಮಾಹಿತಿ"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"ಸ್ಕ್ರೀನ್ ಪಿನ್ನಿಂಗ್"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"ಹುಡುಕಾಟ"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"<xliff:g id="APP">%s</xliff:g> ಪ್ರಾರಂಭಿಸಲು ಸಾದ್ಯವಾಗಲಿಲ್ಲ."</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> ಅನ್ನು ಸುರಕ್ಷಿತ ಮೋಡ್‌ನಲ್ಲಿ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ."</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"ಎಲ್ಲವನ್ನೂ ತೆರವುಗೊಳಿಸಿ"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"ವಿಭಜಿತ ಸ್ಕ್ರೀನ್ ಅನ್ನು ಬಳಸಲು ಇಲ್ಲಿ ಡ್ರ್ಯಾಗ್‌ ಮಾಡಿ"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"ಅಡ್ಡಲಾಗಿ ವಿಭಜಿಸಿದ"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"ಲಂಬವಾಗಿ ವಿಭಜಿಸಿದ"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"ಕಸ್ಟಮ್ ವಿಭಜಿಸಿದ"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"ಮೇಲ್ಭಾಗಕ್ಕೆ ಸ್ಕ್ರೀನ್ ಅನ್ನು ವಿಭಜಿಸಿ"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"ಎಡಕ್ಕೆ ಸ್ಕ್ರೀನ್ ಅನ್ನು ವಿಭಜಿಸಿ"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"ಬಲಕ್ಕೆ ಸ್ಕ್ರೀನ್ ಅನ್ನು ವಿಭಜಿಸಿ"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-ko/strings.xml b/packages/SystemUI/legacy/recents/res/values-ko/strings.xml
deleted file mode 100644
index ee856bd21418..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-ko/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"최근 사용"</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"<xliff:g id="APP">%s</xliff:g>을(를) 닫습니다."</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> 애플리케이션을 닫았습니다."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"최근 사용한 애플리케이션을 모두 닫았습니다."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"<xliff:g id="APP">%s</xliff:g> 애플리케이션 정보를 엽니다."</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"<xliff:g id="APP">%s</xliff:g>을(를) 시작하는 중입니다."</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"최근 항목이 없습니다."</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"모든 항목을 삭제했습니다."</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"애플리케이션 정보"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"화면 고정"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"검색"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"<xliff:g id="APP">%s</xliff:g>을(를) 시작할 수 없습니다."</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g>은(는) 안전 모드에서 사용 중지됩니다."</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"모두 삭제"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"여기를 드래그하여 분할 화면 사용하기"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"수평 분할"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"수직 분할"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"맞춤 분할"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"위쪽으로 화면 분할"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"왼쪽으로 화면 분할"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"오른쪽으로 화면 분할"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-ky/strings.xml b/packages/SystemUI/legacy/recents/res/values-ky/strings.xml
deleted file mode 100644
index 879e492f6330..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-ky/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Сереп салуу."</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"<xliff:g id="APP">%s</xliff:g> колдонмосун өчүрүү."</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> колдонмосу өчүрүлдү."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Акыркы колдонмолордун баары өчүрүлдү."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"<xliff:g id="APP">%s</xliff:g> колдонмосу жөнүндө маалыматты ачыңыз."</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"<xliff:g id="APP">%s</xliff:g> ачылууда."</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"Акыркы колдонмолор жок"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Баарын тазаладыңыз"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"Колдонмо жөнүндө маалымат"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"экран кадоо"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"издөө"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"<xliff:g id="APP">%s</xliff:g> колдонмосу ачылган жок"</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> коопсуз режиминде өчүрүлдү."</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Баарын тазалоо"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"Экранды бөлүү үчүн бул жерге сүйрөңүз"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Туурасынан бөлүү"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Тигинен бөлүү"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Ыңгайлаштырылган бөлүү"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Экранды өйдө жакка бөлүү"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Экранды сол жакка бөлүү"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Экранды оң жакка бөлүү"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-lo/strings.xml b/packages/SystemUI/legacy/recents/res/values-lo/strings.xml
deleted file mode 100644
index 17f56b457ad7..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-lo/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"ພາບຮວມ."</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"ປິດ <xliff:g id="APP">%s</xliff:g> ໄວ້."</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"ປິດ <xliff:g id="APP">%s</xliff:g> ແລ້ວ."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"ທຸກແອັບພລິເຄຊັນບໍ່ດົນມານີ້ຖືກປິດໄວ້ແລ້ວ."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"ເປີດຂໍ້ມູນແອັບພລິເຄຊັນ <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"ກຳລັງເປີດ <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"ບໍ່ມີລາຍການຫຼ້າສຸດ"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"ທ່ານລຶບລ້າງທຸກຢ່າງແລ້ວ"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"ຂໍ້ມູນແອັບພລິເຄຊັນ"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"ການປັກໝຸດໜ້າຈໍ"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"ຊອກຫາ"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"ບໍ່ສາມາດເລີ່ມ <xliff:g id="APP">%s</xliff:g> ໄດ້."</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> ຖືກປິດໃຊ້ໃນໂໝດຄວາມມປອດໄພ."</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"ລຶບລ້າງທັງໝົດ"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"ລາກມາບ່ອນນີ້ເພື່ອໃຊ້ການແບ່ງໜ້າຈໍ"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"ການແຍກລວງຂວາງ"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"ການແຍກລວງຕັ້ງ"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"ການແຍກກຳນົດເອງ"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"ແຍກໜ້າຈໍໄປທາງເທິງ"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"ແຍກໜ້າຈໍໄປທາງຊ້າຍ"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"ແຍກໜ້າຈໍໄປທາງຂວາ"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-lt/strings.xml b/packages/SystemUI/legacy/recents/res/values-lt/strings.xml
deleted file mode 100644
index 4a9eb83bf3d5..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-lt/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Apžvalga."</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Atsisakyti programos „<xliff:g id="APP">%s</xliff:g>“."</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"Atsisakyta programos „<xliff:g id="APP">%s</xliff:g>“."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Atsisakyta visų naujausių programų."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Atidaryti programos „<xliff:g id="APP">%s</xliff:g>“ informaciją."</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Paleidžiama programa „<xliff:g id="APP">%s</xliff:g>“."</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"Nėra jokių naujausių elementų"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Viską išvalėte"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"Programos informacija"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"ekrano prisegimas"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"ieškoti"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"Nepavyko paleisti programos „<xliff:g id="APP">%s</xliff:g>“."</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"Programa „<xliff:g id="APP">%s</xliff:g>“ išjungta saugos režimu."</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Išvalyti viską"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"Vilkite čia, kad naudotumėte skaidytą ekraną"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Horizontalus skaidymas"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Vertikalus skaidymas"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Tinkintas skaidymas"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Skaidyti ekraną į viršų"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Skaidyti ekraną į kairę"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Skaidyti ekraną į dešinę"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-lv/strings.xml b/packages/SystemUI/legacy/recents/res/values-lv/strings.xml
deleted file mode 100644
index 7d87e0033777..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-lv/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Pārskats."</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Nerādīt lietotni <xliff:g id="APP">%s</xliff:g>"</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"Vairs netiek rādīta lietotne <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Vairs netiek rādīta neviena nesen izmantotā lietojumprogramma."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Atveriet lietojumprogrammas <xliff:g id="APP">%s</xliff:g> informāciju."</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Notiek lietotnes <xliff:g id="APP">%s</xliff:g> palaišana."</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"Nav nesenu vienumu"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Visi uzdevumi ir notīrīti"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"Lietojumprogrammas informācija"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"Piespraust ekrānu"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"Meklēt"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"Nevarēja palaist lietotni <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"Lietotne <xliff:g id="APP">%s</xliff:g> ir atspējota drošajā režīmā."</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Notīrīt visu"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"Velciet šeit, lai izmantotu ekrāna sadalīšanu"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Horizontāls dalījums"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Vertikāls dalījums"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Pielāgots dalījums"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Sadalīt ekrānu augšdaļā"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Sadalīt ekrānu kreisajā pusē"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Sadalīt ekrānu labajā pusē"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-mk/strings.xml b/packages/SystemUI/legacy/recents/res/values-mk/strings.xml
deleted file mode 100644
index d8ced0b55310..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-mk/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Преглед."</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Отфрлете ја <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> е отфрлена."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Сите неодамнешни апликации се отфрлени."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Отворете информации за апликацијата <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Се стартува <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"Нема неодамнешни ставки"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Избришавте сѐ"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"Информации за апликацијата"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"прикачување екран"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"пребарувај"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"<xliff:g id="APP">%s</xliff:g> не можеше да се стартува."</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> е оневозможена во безбеден режим."</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Избриши сѐ"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"Повлечете тука за да користите поделен екран"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Подели хоризонтално"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Подели вертикално"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Подели приспособено"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Подели го екранот во горниот дел"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Подели го екранот на левата страна"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Подели го екранот на десната страна"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-ml/strings.xml b/packages/SystemUI/legacy/recents/res/values-ml/strings.xml
deleted file mode 100644
index 6dd797e450e9..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-ml/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"അവലോകനം."</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"<xliff:g id="APP">%s</xliff:g> ഡിസ്‌മിസ് ചെയ്യുക."</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> ഡിസ്‌മിസ് ചെയ്‌തു."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"അടുത്തിടെയുള്ള എല്ലാ ആപ്പുകളും ഡിസ്‌മിസ് ചെയ്‌തു."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"<xliff:g id="APP">%s</xliff:g> ആപ്പ് വിവരങ്ങൾ തുറക്കുക."</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"<xliff:g id="APP">%s</xliff:g> ആരംഭിക്കുന്നു."</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"സമീപകാല ഇനങ്ങൾ ഒന്നുമില്ല"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"നിങ്ങൾ എല്ലാം മായ്ച്ചിരിക്കുന്നു"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"ആപ്പ് വിവരങ്ങൾ"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"സ്ക്രീൻ പിൻ ചെയ്യൽ"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"തിരയുക"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"<xliff:g id="APP">%s</xliff:g> ആരംഭിക്കാനായില്ല"</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"സുരക്ഷിത മോഡിൽ <xliff:g id="APP">%s</xliff:g> പ്രവർത്തനരഹിതമാക്കിയിരിക്കുന്നു."</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"എല്ലാം മായ്‌ക്കുക"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"സ്പ്ലിറ്റ് സ്ക്രീൻ ഉപയോഗിക്കാൻ, ഇവിടെ വലിച്ചിടുക"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"തിരശ്ചീനമായി സ്‌പ്ലിറ്റ് ചെയ്യുക"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"ലംബമായി സ്‌പ്ലിറ്റ് ചെയ്യുക"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"ഇഷ്‌ടാനുസൃതമായി സ്‌പ്ലിറ്റ് ചെയ്യുക"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"സ്ക്രീൻ മുകളിലോട്ട് സ്പ്ലിറ്റ് ചെയ്യുക"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"സ്ക്രീൻ ഇടത്തോട്ട് സ്പ്ലിറ്റ് ചെയ്യുക"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"സ്ക്രീൻ വലത്തോട്ട് സ്‌പ്ലിറ്റ് ചെയ്യുക"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-mn/strings.xml b/packages/SystemUI/legacy/recents/res/values-mn/strings.xml
deleted file mode 100644
index 205f56c233d0..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-mn/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Тойм."</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"<xliff:g id="APP">%s</xliff:g>-г үл хэрэгсэнэ үү."</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g>-г үл хэрэгссэн."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Саяхны бүх аппыг үл хэрэгссэн."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"<xliff:g id="APP">%s</xliff:g> аппын мэдээллийг нээнэ үү."</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"<xliff:g id="APP">%s</xliff:g>-г эхлүүлж байна."</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"Саяхны зүйлс алга"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Та бүгдийг нь устгасан"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"Аппын мэдээлэл"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"дэлгэц тогтоох"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"хайх"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"<xliff:g id="APP">%s</xliff:g>-г эхлүүлж чадсангүй."</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g>-г аюулгүй горимд идэвхгүй болгосон."</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Бүгдийг устгах"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"Хуваасан дэлгэцийг ашиглахын тулд энд чирэх"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Хэвтээ чиглэлд хуваах"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Босоо чиглэлд хуваах"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Хүссэн хэлбэрээр хуваах"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Дэлгэцийг дээд хэсэгт хуваах"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Дэлгэцийг зүүн хэсэгт хуваах"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Дэлгэцийг баруун хэсэгт хуваах"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-mr/strings.xml b/packages/SystemUI/legacy/recents/res/values-mr/strings.xml
deleted file mode 100644
index 51bce6d41422..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-mr/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"अवलोकन."</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"<xliff:g id="APP">%s</xliff:g> डिसमिस करा."</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> डिसमिस केले"</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"अलीकडील सर्व अॅप्लिकेशन डिसमिस झाले."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"<xliff:g id="APP">%s</xliff:g> अॅप्लिकेशन माहिती उघडा."</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"<xliff:g id="APP">%s</xliff:g> सुरू करत आहे."</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"कोणतेही अलीकडील आयटम नाहीत"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"तुम्ही सर्वकाही साफ केले"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"अॅप्लिकेशन माहिती"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"स्‍क्रीन पिन करणे"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"शोधा"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"<xliff:g id="APP">%s</xliff:g> सुरू करता आले नाही."</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> सुरक्षित मोडमध्ये बंद केले आहे."</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"सर्व साफ करा"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"स्प्लिट स्क्रीन वापर करण्यासाठी येथे ड्रॅग करा"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"आडवे स्प्लिट करा"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"उभे स्प्लिट करा"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"कस्टम स्प्लिट करा"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"स्क्रीन वर स्प्लिट करा"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"स्क्रीन डावीकडे स्प्लिट करा"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"स्क्रीन उजवीकडे स्प्लिट करा"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-ms/strings.xml b/packages/SystemUI/legacy/recents/res/values-ms/strings.xml
deleted file mode 100644
index ae4461d19b78..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-ms/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Ikhtisar."</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Ketepikan <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> diketepikan."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Semua aplikasi terbaharu diketepikan."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Buka maklumat aplikasi <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Memulakan <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"Tiada item terbaharu"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Anda telah mengetepikan semua item"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"Maklumat Aplikasi"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"penyematan skrin"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"cari"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"Tidak dapat memulakan <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> dilumpuhkan dalam mod selamat."</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Kosongkan semua"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"Seret ke sini untuk menggunakan skrin pisah"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Pisah Mendatar"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Pisah Menegak"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Pisah Tersuai"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Pisahkan skrin ke atas"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Pisahkan skrin ke kiri"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Pisahkan skrin ke kanan"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-my/strings.xml b/packages/SystemUI/legacy/recents/res/values-my/strings.xml
deleted file mode 100644
index 7b5870e1c123..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-my/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"အနှစ်ချုပ်။"</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"<xliff:g id="APP">%s</xliff:g> ကို ပယ်မည်။"</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> ကို ဖယ်ထုတ်ထားသည်။"</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"လတ်တလော အပလီကေးရှင်းအားလုံး ဖယ်ထုတ်ထားသည်။"</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"<xliff:g id="APP">%s</xliff:g> အပလီကေးရှင်း အချက်အလက်ကို ဖွင့်မည်။"</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"<xliff:g id="APP">%s</xliff:g> ကို စတင်နေသည်။"</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"လတ်တလော ဖွင့်ထားသည်များ မရှိပါ"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"အားလုံးကို ဖယ်ရှားပြီးပါပြီ"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"အပလီကေးရှင်း အချက်အလက်"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"မျက်နှာပြင် ပင်ထိုးမှု"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"ရှာရန်"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"<xliff:g id="APP">%s</xliff:g> ကို စတင်၍ မရပါ။"</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"အန္တရာယ်ကင်းမှု စနစ်တွင် <xliff:g id="APP">%s</xliff:g> ကို ပိတ်ထားပါသည်။"</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"အားလုံး ဖယ်ရှားရန်"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"မျက်နှာပြင် ခွဲ၍ပြသခြင်းကို အသုံးပြုရန် ဤနေရာသို့ ဖိဆွဲပါ"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"အလျားလိုက် ခွဲရန်"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"ဒေါင်လိုက် ခွဲရန်"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"စိတ်ကြိုက် ခွဲရန်"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"မျက်နှာပြင်ကို အပေါ်သို့ ခွဲရန်"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"မျက်နှာပြင်ကို ဘယ်ဘက်သို့ ခွဲရန်"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"မျက်နှာပြင်ကို ညာဘက်သို့ ခွဲရန်"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-nb/strings.xml b/packages/SystemUI/legacy/recents/res/values-nb/strings.xml
deleted file mode 100644
index 176986ab5132..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-nb/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Oversikt."</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Avvis <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> er avvist."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Alle nylig brukte apper er avvist."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Åpne appinformasjonen for <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Starter <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"Ingen nylige elementer"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Du har fjernet alt"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"Appinformasjon"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"én-appsmodus"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"søk"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"Kunne ikke starte <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> er slått av i sikker modus."</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Fjern alt"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"Dra hit for å bruke delt skjerm"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Del horisontalt"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Del vertikalt"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Del tilpasset"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Delt skjerm øverst"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Delt skjerm til venstre"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Delt skjerm til høyre"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-ne/strings.xml b/packages/SystemUI/legacy/recents/res/values-ne/strings.xml
deleted file mode 100644
index 011383337348..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-ne/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"परिदृश्य।"</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"<xliff:g id="APP">%s</xliff:g> खारेज गर्नुहोस्।"</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> खारेज गरिएको छ।"</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"हालका सबै अनुप्रयोगहरू खारेज गरियो।"</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"<xliff:g id="APP">%s</xliff:g> अनुप्रयोग सम्बन्धी जानकारी खोल्नुहोस्।"</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"<xliff:g id="APP">%s</xliff:g> सुरु गर्दै।"</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"हालसालैको कुनै पनि वस्तु छैन"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"तपाईंले सबै कुरा खाली गर्नुभएको छ"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"अनुप्रयोगको जानकारी"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"स्क्रिन पिनिसङ"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"खोज्नुहोस्"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"<xliff:g id="APP">%s</xliff:g> सुरु गर्न सकिएन।"</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> लाई सुरक्षित मोडमा असक्षम पारिएको छ।"</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"सबै हटाउनुहोस्"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"विभाजित स्क्रिनको प्रयोग गर्न यहाँ तान्नुहोस्"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"तेर्सो रूपमा विभाजन गर्नुहोस्"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"ठाडो रूपमा विभाजन गर्नुहोस्"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"आफू अनुकूल विभाजन गर्नुहोस्"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"विभाजित स्क्रिन शीर्ष स्थानमा राख्नुहोस्‌"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"विभाजित स्क्रिन बायाँतर्फ राख्नुहोस्‌"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"विभाजित स्क्रिन दायाँतर्फ राख्नुहोस्‌"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-nl/strings.xml b/packages/SystemUI/legacy/recents/res/values-nl/strings.xml
deleted file mode 100644
index 97140229319a..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-nl/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Overzicht."</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"<xliff:g id="APP">%s</xliff:g> sluiten."</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> verwijderd."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Alle recente apps gesloten."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"App-gegevens voor <xliff:g id="APP">%s</xliff:g> openen."</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"<xliff:g id="APP">%s</xliff:g> starten."</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"Geen recente items"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Je hebt alles gewist"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"App-informatie"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"scherm vastzetten"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"zoeken"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"Kan <xliff:g id="APP">%s</xliff:g> niet starten."</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> is uitgeschakeld in de veilige modus"</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Alles wissen"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"Sleep hier naartoe om het scherm te splitsen"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Horizontaal splitsen"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Verticaal splitsen"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Aangepast splitsen"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Scherm bovenaan gesplitst"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Scherm links gesplitst"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Scherm rechts gesplitst"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-or/strings.xml b/packages/SystemUI/legacy/recents/res/values-or/strings.xml
deleted file mode 100644
index 7ffcc94194a7..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-or/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"ସଂକ୍ଷିପ୍ତ ବିବରଣୀ"</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"<xliff:g id="APP">%s</xliff:g> ଖାରଜ।"</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> ଖାରଜ କରିଦିଆଗଲା।"</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"ସମସ୍ତ ସମ୍ପ୍ରତି ଆପ୍ଲିକେସନ୍‍ଗୁଡ଼ିକ ଖାରଜ କରାଯାଇଛି।"</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"<xliff:g id="APP">%s</xliff:g> ଆପ୍ଲିକେସନ୍‍ ସୂଚନା ଖୋଲନ୍ତୁ।"</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"<xliff:g id="APP">%s</xliff:g> ଆରମ୍ଭ ହେଉଛି।"</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"କୌଣସି ସାମ୍ପ୍ରତିକ ଆଇଟମ୍ ନାହିଁ"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"ଆପଣ ସୁବୁକିଛି ଖାଲି କରିଦେଇଛନ୍ତି"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"ଆପ୍ଲିକେସନ୍‍ ସୂଚନା"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"ସ୍କ୍ରିନ୍‌ ଲକ୍‌"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"ଖୋଜନ୍ତୁ"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"<xliff:g id="APP">%s</xliff:g> କୁ ଆରମ୍ଭ କରାଯାଇପାରିଲା ନାହିଁ।"</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> ସୁରକ୍ଷିତ-ମୋଡ୍‌ରେ ଅକ୍ଷମ ଅଟେ।"</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"ସବୁ ଖାଲି କରନ୍ତୁ"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"ସ୍ପ୍ଲିଟ୍‍ ସ୍କ୍ରିନ୍‍ ବ୍ୟବହାର କରିବା ପାଇଁ ଏଠାକୁ ଡ୍ରାଗ୍‌ କରନ୍ତୁ"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"ଭୂସମାନ୍ତରଭାବରେ ଭାଗ କରନ୍ତୁ"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"ଭୂଲମ୍ବଭାବରେ ଭାଗ କରନ୍ତୁ"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"କଷ୍ଟମ୍‍ କରି ଭାଗ କରନ୍ତୁ"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"ସ୍କ୍ରିନ୍‌କୁ ଉପର ଆଡ଼କୁ ଭାଗ କରନ୍ତୁ"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"ସ୍କ୍ରିନ୍‌କୁ ବାମ ଆଡ଼କୁ ଭାଗ କରନ୍ତୁ"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"ସ୍କ୍ରିନ୍‌କୁ ଡାହାଣ ଆଡ଼କୁ ଭାଗ କରନ୍ତୁ"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-pa/strings.xml b/packages/SystemUI/legacy/recents/res/values-pa/strings.xml
deleted file mode 100644
index 4608561fa1ce..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-pa/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"ਰੂਪ-ਰੇਖਾ।"</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"<xliff:g id="APP">%s</xliff:g> ਨੂੰ ਖਾਰਜ ਕਰੋ।"</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> ਖਾਰਜ ਕੀਤੀ ਗਈ।"</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"ਸਾਰੀਆਂ ਹਾਲੀਆ ਐਪਲੀਕੇਸ਼ਨਾਂ ਖਾਰਜ ਕੀਤੀਆਂ ਗਈਆਂ।"</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"<xliff:g id="APP">%s</xliff:g> ਐਪਲੀਕੇਸ਼ਨਾਂ ਜਾਣਕਾਰੀ ਖੋਲ੍ਹੋ।"</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"<xliff:g id="APP">%s</xliff:g> ਚਾਲੂ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ।"</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"ਕੋਈ ਹਾਲੀਆ ਆਈਟਮਾਂ ਨਹੀਂ"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"ਤੁਸੀਂ ਸਭ ਕੁਝ ਸਾਫ਼ ਕਰ ਦਿੱਤਾ ਹੈ"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"ਐਪਲੀਕੇਸ਼ਨ ਜਾਣਕਾਰੀ"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"ਸਕ੍ਰੀਨ ਪਿਨਿੰਗ"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"ਖੋਜ"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"<xliff:g id="APP">%s</xliff:g> ਨੂੰ ਚਾਲੂ ਨਹੀਂ ਕਰ ਸਕੇ।"</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> ਨੂੰ ਸੁਰੱਖਿਅਤ-ਮੋਡ ਵਿੱਚ ਬੰਦ ਕੀਤਾ ਗਿਆ ਹੈ।"</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"ਸਭ ਕਲੀਅਰ ਕਰੋ"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"ਸਪਲਿਟ ਸਕ੍ਰੀਨ ਦੀ ਵਰਤੋਂ ਕਰਨ ਲਈ ਇੱਥੇ ਘਸੀਟੋ"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"ਲੇਟਵੀਂ ਵੰਡ"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"ਖੜ੍ਹਵੀਂ ਵੰਡ"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"ਵਿਉਂਤੀ ਵੰਡ"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"ਸਕ੍ਰੀਨ ਨੂੰ ਉੱਪਰ ਵੱਲ ਵੰਡੋ"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"ਸਕ੍ਰੀਨ ਨੂੰ ਖੱਬੇ ਪਾਸੇ ਵੰਡੋ"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"ਸਕ੍ਰੀਨ ਨੂੰ ਸੱਜੇ ਪਾਸੇ ਵੰਡੋ"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-pl/strings.xml b/packages/SystemUI/legacy/recents/res/values-pl/strings.xml
deleted file mode 100644
index 50b4ad009490..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-pl/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Przegląd."</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Zamknij aplikację <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"Aplikacja <xliff:g id="APP">%s</xliff:g> została zamknięta."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Wszystkie ostatnie aplikacje zostały zamknięte."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Otwórz informacje o aplikacji <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Uruchamiam aplikację <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"Brak ostatnich elementów"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Wszystko zostało wyczyszczone"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"Informacje o aplikacji"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"przypinanie ekranu"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"szukaj"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"Nie udało się uruchomić aplikacji <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"Aplikacja <xliff:g id="APP">%s</xliff:g> została wyłączona w trybie bezpiecznym."</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Wyczyść wszystko"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"Przeciągnij tutaj, by podzielić ekran"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Podziel poziomo"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Podziel pionowo"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Podziel niestandardowo"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Podziel ekran u góry"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Podziel ekran z lewej"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Podziel ekran z prawej"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-pt-rBR/strings.xml b/packages/SystemUI/legacy/recents/res/values-pt-rBR/strings.xml
deleted file mode 100644
index b557ad2db67e..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-pt-rBR/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Visão geral."</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Dispensar <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> dispensado."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Todos os aplicativos recentes foram dispensados."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Abre informações do aplicativo <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Iniciando <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"Nenhum item recente"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Você limpou tudo"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"Informações do aplicativo"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"Fixar tela"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"pesquisar"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"Não foi possível iniciar <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"O app <xliff:g id="APP">%s</xliff:g> fica desativado no modo de segurança."</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Limpar tudo"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"Arraste aqui para usar a tela dividida"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Divisão horizontal"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Divisão vertical"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Divisão personalizada"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Dividir a tela para a parte superior"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Dividir a tela para a esquerda"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Dividir a tela para a direita"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-pt-rPT/strings.xml b/packages/SystemUI/legacy/recents/res/values-pt-rPT/strings.xml
deleted file mode 100644
index e62e1c62034a..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-pt-rPT/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Vista geral."</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Ignorar <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"Aplicação <xliff:g id="APP">%s</xliff:g> ignorada."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Todas as aplicações recentes foram ignoradas."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Abrir as informações da aplicação <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"A iniciar a aplicação <xliff:g id="APP">%s</xliff:g>…"</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"Nenhum item recente"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Limpou tudo"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"Informações da aplicação"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"afixação no ecrã"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"pesquisar"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"Não foi possível iniciar a aplicação <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"A aplicação <xliff:g id="APP">%s</xliff:g> está desativada no modo de segurança."</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Limpar tudo"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"Arraste aqui para utilizar o ecrã dividido"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Divisão horizontal"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Divisão vertical"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Divisão personalizada"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Ecrã dividido na parte superior"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Ecrã dividido à esquerda"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Ecrã dividido à direita"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-pt/strings.xml b/packages/SystemUI/legacy/recents/res/values-pt/strings.xml
deleted file mode 100644
index b557ad2db67e..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-pt/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Visão geral."</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Dispensar <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> dispensado."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Todos os aplicativos recentes foram dispensados."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Abre informações do aplicativo <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Iniciando <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"Nenhum item recente"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Você limpou tudo"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"Informações do aplicativo"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"Fixar tela"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"pesquisar"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"Não foi possível iniciar <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"O app <xliff:g id="APP">%s</xliff:g> fica desativado no modo de segurança."</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Limpar tudo"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"Arraste aqui para usar a tela dividida"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Divisão horizontal"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Divisão vertical"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Divisão personalizada"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Dividir a tela para a parte superior"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Dividir a tela para a esquerda"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Dividir a tela para a direita"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-ro/strings.xml b/packages/SystemUI/legacy/recents/res/values-ro/strings.xml
deleted file mode 100644
index 7f8f018be6bc..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-ro/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Recente."</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Închideți <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> a fost închisă."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Toate aplicațiile recente au fost închise."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Deschideți informațiile despre aplicația <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Se inițiază <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"Niciun element recent"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Ați șters tot"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"Informații despre aplicație"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"fixare pe ecran"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"căutați"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"<xliff:g id="APP">%s</xliff:g> nu a putut porni."</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"Aplicația <xliff:g id="APP">%s</xliff:g> este dezactivată în modul sigur."</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Ștergeți tot"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"Trageți aici pentru a folosi ecranul împărțit"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Împărțiți pe orizontală"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Împărțiți pe verticală"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Împărțiți personalizat"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Împărțiți ecranul în partea de sus"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Împărțiți ecranul la stânga"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Împărțiți ecranul la dreapta"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-ru/strings.xml b/packages/SystemUI/legacy/recents/res/values-ru/strings.xml
deleted file mode 100644
index 1e988bb21502..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-ru/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Обзор."</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Удалить приложение <xliff:g id="APP">%s</xliff:g> из списка."</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"Приложение <xliff:g id="APP">%s</xliff:g> удалено из списка."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Все недавние приложения удалены из списка."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Открыть информацию о приложении <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Запуск приложения <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"Здесь пока ничего нет."</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Список пуст."</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"Сведения о приложении"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"блокировка в приложении"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"поиск"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"Не удалось запустить приложение \"<xliff:g id="APP">%s</xliff:g>\"."</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"Приложение \"<xliff:g id="APP">%s</xliff:g>\" отключено в безопасном режиме."</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Удалить все"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"Перетащите сюда, чтобы разделить экран"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Разделить по горизонтали"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Разделить по вертикали"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Разделить по-другому"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Разделить экран по верхнему краю"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Разделить экран по левому краю"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Разделить экран по правому краю"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-si/strings.xml b/packages/SystemUI/legacy/recents/res/values-si/strings.xml
deleted file mode 100644
index cae835740254..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-si/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"දළ විශ්ලේෂණය."</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"<xliff:g id="APP">%s</xliff:g> ඉවත ලන්න."</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> ඉවත දමා ඇත."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"සියලුම මෑත යෙඳුම් ඉවත ලන ලදී."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"<xliff:g id="APP">%s</xliff:g> යෙදුම් තොරතුරු විවෘත කරයි."</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"<xliff:g id="APP">%s</xliff:g> ආරම්භ කරමින්."</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"මෑත අයිතම නැත"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"ඔබ සියලු දේ හිස් කර ඇත"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"යෙදුම් තොරතුරු"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"තිර ඇමිණීම"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"සෙවීම"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"<xliff:g id="APP">%s</xliff:g> ආරම්භ කළ නොහැකි විය."</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> ආරක්ෂිත ප්‍රකාරය තුළ අබලයි."</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"සියල්ල හිස් කරන්න"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"බෙදුම් තිරය භාවිත කිරීමට මෙතැනට අදින්න"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"තිරස්ව වෙන් කරන්න"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"සිරස්ව වෙන් කරන්න"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"අභිමත ලෙස වෙන් කරන්න"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"තිරය ඉහළට බෙදන්න"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"තිරය වමට බෙදන්න"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"තිරය දකුණට බෙදන්න"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-sk/strings.xml b/packages/SystemUI/legacy/recents/res/values-sk/strings.xml
deleted file mode 100644
index 9c3a8570d75e..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-sk/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Prehľad"</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Zavrieť aplikáciu <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"Aplikácia <xliff:g id="APP">%s</xliff:g> bola zrušená."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Všetky nedávne aplikácie boli zrušené."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Otvoriť informácie o aplikácii <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Spúšťa sa aplikácia <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"Žiadne nedávne položky"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Vymazali ste všetko"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"Informácie o aplikácii"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"pripnutie obrazovky"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"hľadať"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"Aplikáciu <xliff:g id="APP">%s</xliff:g> sa nepodarilo spustiť."</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"Aplikácia <xliff:g id="APP">%s</xliff:g> je v núdzovom režime zakázaná."</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Vymazať všetko"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"Presuňte okno sem a použite tak rozdelenú obrazovku"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Rozdeliť vodorovné"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Rozdeliť zvislé"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Rozdeliť vlastné"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Rozdelená obrazovka hore"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Rozdelená obrazovka naľavo"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Rozdelená obrazovka napravo"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-sl/strings.xml b/packages/SystemUI/legacy/recents/res/values-sl/strings.xml
deleted file mode 100644
index 56b2ddb63314..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-sl/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Pregled."</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Opustitev aplikacije <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"Aplikacija <xliff:g id="APP">%s</xliff:g> je bila odstranjena."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Vse nedavne aplikacije so bile opuščene."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Odpiranje podatkov o aplikaciji <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Zaganjanje aplikacije <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"Ni nedavnih elementov"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Vse ste počistili"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"Podatki o aplikaciji"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"pripenjanje zaslona"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"išči"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"Aplikacije <xliff:g id="APP">%s</xliff:g> ni bilo mogoče zagnati."</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"Aplikacija <xliff:g id="APP">%s</xliff:g> je v varnem načinu onemogočena."</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Počisti vse"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"Povlecite sem za razdeljeni zaslon"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Razdeli vodoravno"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Razdeli navpično"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Razdeli po meri"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Razdeljen zaslon na vrhu"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Razdeljen zaslon na levi"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Razdeljen zaslon na desni"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-sq/strings.xml b/packages/SystemUI/legacy/recents/res/values-sq/strings.xml
deleted file mode 100644
index 48aab371087c..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-sq/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Përmbledhja."</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Largo <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> është hequr."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Të gjitha aplikacionet e fundit u larguan."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Hap informacionin e aplikacionit <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Po nis <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"Nuk ka asnjë artikull të fundit"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"I ke pastruar të gjitha"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"Informacioni i aplikacionit"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"kyçja e ekranit"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"kërko"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"<xliff:g id="APP">%s</xliff:g> nuk mund të nisej."</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> është i çaktivizuar në modalitetin e sigurt."</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Pastroji të gjitha"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"Zvarrit këtu për të përdorur ekranin e ndarë"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Horizontal i ndarë"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Vertikal i ndarë"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"I personalizuar i ndarë"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Ndaje ekranin lart"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Ndaje ekranin në të majtë"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Ndaje ekranin në të djathtë"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-sr/strings.xml b/packages/SystemUI/legacy/recents/res/values-sr/strings.xml
deleted file mode 100644
index 9d5f126181bd..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-sr/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Преглед."</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Одбаците апликацију <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"Апликација <xliff:g id="APP">%s</xliff:g> је одбачена."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Све недавно коришћене апликације су одбачене."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Отворите информације о апликацији <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Покреће се <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"Нема недавних ставки"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Обрисали сте све"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"Информације о апликацији"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"качење екрана"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"претражи"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"Покретање апликације <xliff:g id="APP">%s</xliff:g> није успело."</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"Апликација <xliff:g id="APP">%s</xliff:g> је онемогућена у безбедном режиму."</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Обриши све"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"Превуците овде да бисте користили раздељени екран"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Подели хоризонтално"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Подели вертикално"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Подели прилагођено"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Подели екран нагоре"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Подели екран налево"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Подели екран надесно"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-sv/strings.xml b/packages/SystemUI/legacy/recents/res/values-sv/strings.xml
deleted file mode 100644
index b2ee34fbd284..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-sv/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Översikt."</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Ta bort <xliff:g id="APP">%s</xliff:g> från listan."</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> togs bort från listan."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Alla appar har tagits bort från listan Senaste."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Öppna appinformation för <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Startar <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"Listan är tom"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Du har tömt listan"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"Appinformation"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"fästa skärmen"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"sök"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"Det gick inte att starta appen <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> är inaktiverad i säkert läge."</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Rensa alla"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"Dra hit för att dela upp skärmen"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Dela vågrätt"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Dela lodrätt"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Dela anpassat"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Delad skärm till överkanten"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Delad skärm åt vänster"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Delad skärm åt höger"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-sw/strings.xml b/packages/SystemUI/legacy/recents/res/values-sw/strings.xml
deleted file mode 100644
index 49e7fb80e435..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-sw/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Muhtasari."</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Ondoa <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> imeondolewa."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Programu za hivi majuzi zimeondolewa."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Fungua maelezo kuhusu programu ya <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Inaanzisha <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"Hakuna vipengee vya hivi majuzi"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Umeondoa vipengee vyote"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"Maelezo ya Programu"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"kubandika kwenye skirini"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"tafuta"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"Imeshindwa kuanzisha <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> imezimwa katika hali salama."</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Ondoa zote"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"Buruta hapa ili utumie skrini iliyogawanywa"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Gawanya Mlalo"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Gawanya Wima"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Maalum Iliyogawanywa"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Gawa skrini kuelekea juu"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Gawa skrini upande wa kushoto"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Gawa skrini upande wa kulia"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-sw600dp/dimens.xml b/packages/SystemUI/legacy/recents/res/values-sw600dp/dimens.xml
deleted file mode 100644
index 20d6670cb5b9..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-sw600dp/dimens.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- * Copyright (c) 2012, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
-*/
--->
-<resources>
- <!-- The offsets the tasks animate from when recents is launched while docking -->
- <dimen name="recents_task_stack_animation_launched_while_docking_offset">192dp</dimen>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-ta/strings.xml b/packages/SystemUI/legacy/recents/res/values-ta/strings.xml
deleted file mode 100644
index 91643fd01bdf..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-ta/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"மேலோட்டப் பார்வை."</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"<xliff:g id="APP">%s</xliff:g> ஆப்ஸை அகற்றும்."</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> அகற்றப்பட்டது."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"அனைத்துச் சமீபத்திய ஆப்ஸும் அகற்றப்பட்டன."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"<xliff:g id="APP">%s</xliff:g> ஆப்ஸ் பற்றிய தகவலைத் திறக்கும்."</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"<xliff:g id="APP">%s</xliff:g> ஆப்ஸைத் தொடங்குகிறது."</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"சமீபத்தியவை எதுவுமில்லை"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"அனைத்தையும் அழித்துவிட்டீர்கள்"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"ஆப்ஸ் பற்றிய தகவல்"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"திரையைப் பின் செய்"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"தேடு"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"<xliff:g id="APP">%s</xliff:g> ஆப்ஸைத் தொடங்க இயலவில்லை."</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"பாதுகாப்புப் பயன்முறையில் <xliff:g id="APP">%s</xliff:g> முடக்கப்பட்டது."</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"அனைத்தையும் அழி"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"\'திரைப் பிரிப்பைப்\' பயன்படுத்த இங்கே இழுக்கவும்"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"கிடைமட்டமாகப் பிரி"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"செங்குத்தாகப் பிரி"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"தனிப்பயன் விருப்பத்தில் பிரி"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"திரையை மேற்புறமாகப் பிரிக்கும்"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"திரையை இடப்புறமாகப் பிரிக்கும்"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"திரையை வலப்புறமாகப் பிரிக்கும்"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-te/strings.xml b/packages/SystemUI/legacy/recents/res/values-te/strings.xml
deleted file mode 100644
index ea4e638aa68c..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-te/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"అవలోకనం."</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"<xliff:g id="APP">%s</xliff:g>ని తీసివేయండి."</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> తీసివేయబడింది."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"అన్ని ఇటీవలి యాప్‌లు తీసివేయబడ్డాయి."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"<xliff:g id="APP">%s</xliff:g> యాప్ సమాచారాన్ని తెరుస్తుంది."</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"<xliff:g id="APP">%s</xliff:g>ని ప్రారంభిస్తోంది."</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"ఇటీవలి అంశాలు ఏవీ లేవు"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"మీరు అన్నింటినీ తీసివేసారు"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"యాప్ సమాచారం"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"స్క్రీన్‌కు పిన్ చేయడం"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"వెతుకు"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"<xliff:g id="APP">%s</xliff:g>ని ప్రారంభించడం సాధ్యపడలేదు."</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> సురక్షిత-మోడ్‌లో నిలిపివేయబడింది."</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"అన్నీ తీసివేయి"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"విభజన స్క్రీన్‌ను ఉపయోగించడానికి ఇక్కడ లాగండి"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"అడ్డంగా విభజించు"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"నిలువుగా విభజించు"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"అనుకూలంగా విభజించు"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"స్క్రీన్‌ని ఎగువకు విభజించు"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"స్క్రీన్‌ని ఎడమ వైపుకి విభజించు"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"స్క్రీన్‌ని కుడి వైపుకి విభజించు"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-th/strings.xml b/packages/SystemUI/legacy/recents/res/values-th/strings.xml
deleted file mode 100644
index b88d05eddace..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-th/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"ภาพรวม"</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"ยกเลิก <xliff:g id="APP">%s</xliff:g>"</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> ถูกนำออกไปแล้ว"</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"ปิดแอปพลิเคชันล่าสุดทั้งหมดแล้ว"</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"เปิดข้อมูลแอปพลิเคชัน <xliff:g id="APP">%s</xliff:g>"</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"กำลังเริ่มต้น <xliff:g id="APP">%s</xliff:g>"</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"ไม่มีรายการล่าสุด"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"คุณได้ล้างทุกอย่างแล้ว"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"ข้อมูลแอปพลิเคชัน"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"การตรึงหน้าจอ"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"ค้นหา"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"เริ่มใช้ <xliff:g id="APP">%s</xliff:g> ไม่ได้"</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> ปิดใช้ในโหมดปลอดภัย"</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"ล้างทั้งหมด"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"ลากมาที่นี่เพื่อใช้การแยกหน้าจอ"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"แยกในแนวนอน"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"แยกในแนวตั้ง"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"แยกแบบกำหนดเอง"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"แยกหน้าจอไปด้านบน"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"แยกหน้าจอไปทางซ้าย"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"แยกหน้าจอไปทางขวา"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-tl/strings.xml b/packages/SystemUI/legacy/recents/res/values-tl/strings.xml
deleted file mode 100644
index d940d4e5663b..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-tl/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Overview"</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"I-dismiss ang <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"Na-dismiss ang <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Na-dismiss ang lahat ng kamakailang application."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Buksan ang impormasyon ng <xliff:g id="APP">%s</xliff:g> application."</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Sinisimulan ang <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"Walang kamakailang item"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Na-clear mo ang lahat"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"Impormasyon ng Application"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"pag-pin sa screen"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"hanapin"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"Hindi masimulan ang <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"Naka-disable ang <xliff:g id="APP">%s</xliff:g> sa safe-mode."</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"I-clear lahat"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"I-drag dito para magamit ang split screen"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"I-split Pahalang"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"I-split Patayo"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Split Custom"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"I-split ang screen pataas"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"I-split ang screen pakaliwa"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"I-split ang screen pakanan"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-tr/strings.xml b/packages/SystemUI/legacy/recents/res/values-tr/strings.xml
deleted file mode 100644
index 982c57ef79ac..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-tr/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Genel Bakış."</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"<xliff:g id="APP">%s</xliff:g> uygulamasını kapatır."</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> kaldırıldı."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Tüm son uygulamalar kapatıldı."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"<xliff:g id="APP">%s</xliff:g> uygulama bilgilerini açar."</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"<xliff:g id="APP">%s</xliff:g> başlatılıyor."</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"Yeni öğe yok"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Her şeyi sildiniz"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"Uygulama Bilgileri"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"ekran sabitleme"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"ara"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"<xliff:g id="APP">%s</xliff:g> başlatılamadı."</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g>, güvenli modda devre dışıdır."</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Tümünü temizle"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"Ekranı bölünmüş olarak kullanmak için buraya sürükleyin"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Yatay Ayırma"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Dikey Ayırma"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Özel Ayırma"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Ekranı yukarıya doğru böl"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Ekranı sola doğru böl"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Ekranı sağa doğru böl"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-uk/strings.xml b/packages/SystemUI/legacy/recents/res/values-uk/strings.xml
deleted file mode 100644
index 0c0b70927d1e..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-uk/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Огляд."</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Закрити додаток <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"Додаток <xliff:g id="APP">%s</xliff:g> закрито."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Усі останні додатки закрито."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Відкрити інформацію про додаток <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Запуск додатка <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"Немає останніх елементів"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Ви очистили все"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"Інформація про додаток"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"закріпити екран"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"пошук"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"Не вдалося запустити додаток <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"Додаток <xliff:g id="APP">%s</xliff:g> вимкнено в безпечному режимі."</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Очистити все"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"Перетягніть сюди, щоб розділити екран"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Розділити горизонтально"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Розділити вертикально"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Розділити (власний варіант)"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Розділити екран угору"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Розділити екран уліво"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Розділити екран управо"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-ur/strings.xml b/packages/SystemUI/legacy/recents/res/values-ur/strings.xml
deleted file mode 100644
index 46033daebe09..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-ur/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"عمومی جائزہ۔"</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"<xliff:g id="APP">%s</xliff:g> کو مسترد کریں۔"</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> کو مسترد کر دیا گیا۔"</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"سبھی حالیہ ایپلیکیشنز کو مسترد کر دیا گیا۔"</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"<xliff:g id="APP">%s</xliff:g> ایپلیکیشن کی معلومات کھولیں۔"</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"<xliff:g id="APP">%s</xliff:g> شروع ہو رہی ہے۔"</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"کوئی حالیہ آئٹم نہیں"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"آپ نے سب کچھ صاف کر دیا ہے"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"ایپلیکیشن کی معلومات"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"اسکرین کو پن کرنا"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"تلاش کریں"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"<xliff:g id="APP">%s</xliff:g> کو شروع نہیں کیا جا سکا۔"</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"محفوظ موڈ میں <xliff:g id="APP">%s</xliff:g> غیر فعال ہے۔"</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"سبھی کو ہٹائیں"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"اسپلٹ اسکرین استعمال کرنے کے لیے یہاں گھسیٹیں"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"بلحاظ افقی تقسیم کریں"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"بلحاظ عمودی تقسیم کریں"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"بلحاظ حسب ضرورت تقسیم کریں"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"اسکرین کو اوپر کی جانب تقسیم کریں"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"اسکرین کو بائیں جانب تقسیم کریں"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"اسکرین کو دائیں جانب تقسیم کریں"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-uz/strings.xml b/packages/SystemUI/legacy/recents/res/values-uz/strings.xml
deleted file mode 100644
index 6f8b153b4b5b..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-uz/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Umumiy nazar."</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Olib tashlash: <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"<xliff:g id="APP">%s</xliff:g> olib tashlangan."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Yaqinda ishlatilgan barcha ilovalar olib tashlandi."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"<xliff:g id="APP">%s</xliff:g> ilovasi haqidagi axborotlarni ochadi."</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"<xliff:g id="APP">%s</xliff:g> ishga tushirilmoqda."</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"Yaqinda ishlatilgan ilovalar yoʻq"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Hammasi tozalandi"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"Ilova haqida axborot"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"ekranni mahkamlash"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"qidiruv"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"<xliff:g id="APP">%s</xliff:g> ilovasi ishga tushmadi."</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"Xavfsiz rejimda <xliff:g id="APP">%s</xliff:g> ilovasi yopildi."</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Ha"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"Ekranni boʻlish xususiyatidan foydalanish uchun bu yerga torting"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Gorizontal yoʻnalishda boʻlish"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Vertikal yoʻnalishda boʻlish"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Boshqa usulda boʻlish"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Ekranni tepaga qadash"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Ekranni chap tomonga qadash"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Ekranni oʻng tomonga qadash"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-vi/strings.xml b/packages/SystemUI/legacy/recents/res/values-vi/strings.xml
deleted file mode 100644
index aefeae92a8a4..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-vi/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Tổng quan."</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Loại bỏ <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"Đã loại bỏ <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Đã loại bỏ tất cả các ứng dụng gần đây."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Mở thông tin ứng dụng <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Khởi động <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"Không có mục gần đây nào"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Bạn đã xóa mọi nội dung"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"Thông tin ứng dụng"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"khóa màn hình"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"tìm kiếm"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"Không thể khởi động <xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g> bị tắt ở chế độ an toàn."</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Xóa tất cả"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"Kéo vào đây để sử dụng chế độ chia đôi màn hình"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Chia ngang"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Phân tách dọc"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Tùy chỉnh phân tách"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Chia đôi màn hình lên trên"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Chia đôi màn hình sang trái"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Chia đôi màn hình sang phải"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-zh-rCN/strings.xml b/packages/SystemUI/legacy/recents/res/values-zh-rCN/strings.xml
deleted file mode 100644
index 993bfaea9637..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-zh-rCN/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"概览。"</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"移除<xliff:g id="APP">%s</xliff:g>。"</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"已移除<xliff:g id="APP">%s</xliff:g>"</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"已关闭所有最近用过的应用。"</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"打开<xliff:g id="APP">%s</xliff:g>应用信息。"</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"正在启动<xliff:g id="APP">%s</xliff:g>。"</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"近期没有任何内容"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"您已清除所有内容"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"应用信息"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"固定屏幕"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"搜索"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"无法启动<xliff:g id="APP">%s</xliff:g>。"</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"<xliff:g id="APP">%s</xliff:g>已在安全模式下停用。"</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"全部清除"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"拖动到此处即可使用分屏功能"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"水平分割"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"垂直分割"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"自定义分割"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"将屏幕分隔线移到上方"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"将屏幕分隔线移到左侧"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"将屏幕分隔线移到右侧"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-zh-rHK/strings.xml b/packages/SystemUI/legacy/recents/res/values-zh-rHK/strings.xml
deleted file mode 100644
index b93d246255cc..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-zh-rHK/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"概覽。"</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"關閉「<xliff:g id="APP">%s</xliff:g>」。"</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"「<xliff:g id="APP">%s</xliff:g>」已關閉。"</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"所有最近使用的應用程式均已關閉。"</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"開啟「<xliff:g id="APP">%s</xliff:g>」應用程式的資料。"</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"正在啟動「<xliff:g id="APP">%s</xliff:g>」。"</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"最近沒有任何項目"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"您已清除所有工作"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"應用程式資料"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"螢幕固定"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"搜尋"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"無法啟動「<xliff:g id="APP">%s</xliff:g>」。"</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"「<xliff:g id="APP">%s</xliff:g>」在安全模式下為停用狀態。"</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"全部清除"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"拖曳這裡即可分割螢幕"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"水平分割"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"垂直分割"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"自訂分割"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"將分割畫面顯示喺頂部"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"將分割畫面顯示喺左邊"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"將分割畫面顯示喺右邊"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-zh-rTW/strings.xml b/packages/SystemUI/legacy/recents/res/values-zh-rTW/strings.xml
deleted file mode 100644
index 54d656dd63b8..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-zh-rTW/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"總覽。"</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"關閉「<xliff:g id="APP">%s</xliff:g>」。"</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"「<xliff:g id="APP">%s</xliff:g>」已關閉。"</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"最近使用的應用程式已全部關閉。"</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"開啟「<xliff:g id="APP">%s</xliff:g>」應用程式資訊。"</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"正在啟動「<xliff:g id="APP">%s</xliff:g>」。"</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"最近沒有任何項目"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"你已清除所有工作"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"應用程式資訊"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"螢幕固定"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"搜尋"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"無法啟動「<xliff:g id="APP">%s</xliff:g>」。"</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"「<xliff:g id="APP">%s</xliff:g>」在安全模式中為停用狀態。"</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"全部清除"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"拖曳到這裡即可使用分割畫面"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"水平分割"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"垂直分割"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"自訂分割"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"將分割畫面顯示在頂端"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"將分割畫面顯示在左邊"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"將分割畫面顯示在右邊"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values-zu/strings.xml b/packages/SystemUI/legacy/recents/res/values-zu/strings.xml
deleted file mode 100644
index 9cbc439a84d0..000000000000
--- a/packages/SystemUI/legacy/recents/res/values-zu/strings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_desc_recent_apps" msgid="2427210347871321373">"Buka konke."</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="2355882496933479534">"Cashisa i-<xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_dismissed" msgid="4816790842084268400">"I-<xliff:g id="APP">%s</xliff:g> icashisiwe."</string>
- <string name="accessibility_recents_all_items_dismissed" msgid="5693205751863608046">"Zonke izinhlelo zokusebenza zakamuva zicashisiwe."</string>
- <string name="accessibility_recents_item_open_app_info" msgid="3406797323476801016">"Vula ulwazi lohlelo lokusebenza le-<xliff:g id="APP">%s</xliff:g>."</string>
- <string name="accessibility_recents_item_launched" msgid="4519918148638221791">"Iqala i-<xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_empty_message" msgid="7967713254531861311">"Azikho izinto zakamuva"</string>
- <string name="recents_empty_message_dismissed_all" msgid="1850214584987361375">"Usule yonke into"</string>
- <string name="recents_app_info_button_label" msgid="8732926607391786762">"Ulwazi lohlelo lokusebenza"</string>
- <string name="recents_lock_to_app_button_label" msgid="6087750201863853365">"ukuphina isikrini"</string>
- <string name="recents_search_bar_label" msgid="638132045925945941">"sesha"</string>
- <string name="recents_launch_error_message" msgid="9107963563503438012">"Ayikwazanga ukuqalisa i-<xliff:g id="APP">%s</xliff:g>."</string>
- <string name="recents_launch_disabled_message" msgid="826461671965217243">"I-<xliff:g id="APP">%s</xliff:g> ikhutshaziwe kumodi yokuphepha."</string>
- <string name="recents_stack_action_button_label" msgid="1974273390109881497">"Sula konke"</string>
- <string name="recents_drag_hint_message" msgid="610417221848280136">"Hudulela lapha ukuze usebenzise ukuhlukanisa kwesikrini"</string>
- <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="488987777874979435">"Hlukanisa ngokuvundlile"</string>
- <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="2498375296906391117">"Hlukanisa ngokumile"</string>
- <string name="recents_multistack_add_stack_dialog_split_custom" msgid="7368405969130304811">"Hlukanisa ngokwezifiso"</string>
- <string name="recents_accessibility_split_screen_top" msgid="8773505308411722524">"Hlukanisela isikrini phezulu"</string>
- <string name="recents_accessibility_split_screen_left" msgid="722594718192007972">"Hlukanisela isikrini ngakwesokunxele"</string>
- <string name="recents_accessibility_split_screen_right" msgid="2479764030969301514">"Hlukanisela isikrini ngakwesokudla"</string>
-</resources>
diff --git a/packages/SystemUI/legacy/recents/res/values/attrs.xml b/packages/SystemUI/legacy/recents/res/values/attrs.xml
deleted file mode 100644
index ef4cd5b959de..000000000000
--- a/packages/SystemUI/legacy/recents/res/values/attrs.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<resources>
-
- <declare-styleable name="RecentsPanelView">
- <attr name="recentItemLayout" format="reference" />
- <!-- Style for the "Clear all" button. -->
- <attr name="clearAllStyle" format="reference" />
- <attr name="clearAllBackgroundColor" format="reference" />
- </declare-styleable>
-
-</resources> \ No newline at end of file
diff --git a/packages/SystemUI/legacy/recents/res/values/colors.xml b/packages/SystemUI/legacy/recents/res/values/colors.xml
deleted file mode 100644
index 88b9b70956ef..000000000000
--- a/packages/SystemUI/legacy/recents/res/values/colors.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
- * Copyright 2010, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
--->
-<resources>
- <!-- The disabled recents task bar background color. -->
- <color name="recents_task_bar_disabled_background_color">#ff676767</color>
- <!-- The default recents task bar background color. -->
- <color name="recents_task_bar_default_background_color">#ffe6e6e6</color>
- <!-- The default recents task view background color. -->
- <color name="recents_task_view_default_background_color">#fff3f3f3</color>
- <!-- The recents task bar light text color to be drawn on top of dark backgrounds. -->
- <color name="recents_task_bar_light_text_color">#ffeeeeee</color>
- <!-- The recents task bar dark text color to be drawn on top of light backgrounds. -->
- <color name="recents_task_bar_dark_text_color">#cc000000</color>
- <!-- The recents task bar light dismiss icon color to be drawn on top of dark backgrounds. -->
- <color name="recents_task_bar_light_icon_color">#ccffffff</color>
- <!-- The recents task bar dark dismiss icon color to be drawn on top of light backgrounds. -->
- <color name="recents_task_bar_dark_icon_color">#99000000</color>
- <!-- The lock to task button background color. -->
- <color name="recents_task_view_lock_to_app_button_background_color">#ffe6e6e6</color>
- <!-- The lock to task button foreground color. -->
- <color name="recents_task_view_lock_to_app_button_color">#ff666666</color>
- <!-- The background color for the freeform workspace. -->
- <color name="recents_freeform_workspace_bg_color">#33FFFFFF</color>
-
- <!-- The background color for clear all button on light backgrounds if not transparent. -->
- <color name="recents_clear_all_button_bg_light_color">#CCFFFFFF</color>
- <!-- The background color for clear all button on dark backgrounds if not transparent. -->
- <color name="recents_clear_all_button_bg_dark_color">#CC000000</color>
-
- <!-- Shadow color for the first pixels around the fake shadow for recents. -->
- <color name="fake_shadow_start_color">#44000000</color>
-
- <!-- Shadow color for the furthest pixels around the fake shadow for recents. -->
- <color name="fake_shadow_end_color">#03000000</color>
-</resources> \ No newline at end of file
diff --git a/packages/SystemUI/legacy/recents/res/values/config.xml b/packages/SystemUI/legacy/recents/res/values/config.xml
deleted file mode 100644
index 2ff9abf4003d..000000000000
--- a/packages/SystemUI/legacy/recents/res/values/config.xml
+++ /dev/null
@@ -1,75 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2009, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<!-- These resources are around just to allow their values to be customized
- for different hardware and product builds. -->
-<resources>
-
- <!-- Component to be used as the recents implementation. Must implement the
- RecentsImplementation interface. This name is in the ComponentName flattened format
- (package/class) -->
- <string name="config_recentsComponent" translatable="false">com.android.systemui.recents.LegacyRecentsImpl</string>
-
- <!-- Whether recents should use hardware layers for its taskviews. This flag can be enabled
- for devices where the java drawing of round rects may be slow -->
- <bool name="config_recents_use_hardware_layers">false</bool>
-
- <!-- The number of app thumbnails we keep in memory -->
- <integer name="config_recents_max_thumbnail_count">10</integer>
-
- <!-- The number of app icons we keep in memory -->
- <integer name="config_recents_max_icon_count">20</integer>
-
- <!-- Whether to use cheap, less good looking shadows for recents -->
- <bool name="config_recents_fake_shadows">false</bool>
-
- <!-- The duration in seconds to wait before the dismiss buttons are shown. -->
- <integer name="recents_task_bar_dismiss_delay_seconds">1000</integer>
-
- <!-- The duration for animating the task decorations in after transitioning from an app. -->
- <integer name="recents_task_enter_from_app_duration">200</integer>
-
- <!-- The duration for animating the task decorations in after transitioning from an app. -->
- <integer name="recents_task_enter_from_affiliated_app_duration">125</integer>
-
- <!-- The duration for animating the task decorations out before transitioning to an app. -->
- <integer name="recents_task_exit_to_app_duration">125</integer>
-
- <!-- The min animation duration for animating the nav bar scrim in. -->
- <integer name="recents_nav_bar_scrim_enter_duration">400</integer>
-
- <!-- The animation duration for scrolling the stack to a particular item. -->
- <integer name="recents_animate_task_stack_scroll_duration">200</integer>
-
- <!-- The delay to enforce between each alt-tab key press. -->
- <integer name="recents_alt_tab_key_delay">200</integer>
-
- <!-- Svelte specific logic, see RecentsConfiguration.SVELTE_* constants. -->
- <integer name="recents_svelte_level">0</integer>
-
- <!-- Recents: The relative range of visible tasks from the current scroll position
- while the stack is focused. -->
- <item name="recents_layout_focused_range_min" format="float" type="integer">-3</item>
- <item name="recents_layout_focused_range_max" format="float" type="integer">2</item>
-
- <!-- Recents: The relative range of visible tasks from the current scroll position
- while the stack is not focused. -->
- <item name="recents_layout_unfocused_range_min" format="float" type="integer">-2</item>
- <item name="recents_layout_unfocused_range_max" format="float" type="integer">2.5</item>
-</resources> \ No newline at end of file
diff --git a/packages/SystemUI/legacy/recents/res/values/dimens.xml b/packages/SystemUI/legacy/recents/res/values/dimens.xml
deleted file mode 100644
index 528610e4c990..000000000000
--- a/packages/SystemUI/legacy/recents/res/values/dimens.xml
+++ /dev/null
@@ -1,110 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- * Copyright (c) 2006, 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.
-*/
--->
-<resources>
-<!-- Recents Layout -->
-
- <!-- The amount to inset the stack, specifically at the top and the other sides. We also
- don't want this to change across configurations that Recents can be opened in, so we
- define them statically for all display sizes. -->
- <dimen name="recents_layout_min_margin">16dp</dimen>
- <dimen name="recents_layout_top_margin_phone">16dp</dimen>
- <dimen name="recents_layout_top_margin_tablet">32dp</dimen>
- <dimen name="recents_layout_top_margin_tablet_xlarge">40dp</dimen>
- <dimen name="recents_layout_bottom_margin">16dp</dimen>
- <dimen name="recents_layout_side_margin_phone">16dp</dimen>
- <dimen name="recents_layout_side_margin_tablet">48dp</dimen>
- <dimen name="recents_layout_side_margin_tablet_docked">16dp</dimen>
- <dimen name="recents_layout_side_margin_tablet_xlarge">64dp</dimen>
- <dimen name="recents_layout_side_margin_tablet_xlarge_docked">16dp</dimen>
-
- <!-- The height between the top margin and the top of the focused task. -->
- <dimen name="recents_layout_top_peek_size">48dp</dimen>
- <!-- The height between the bottom margin and the top of task in front of the focused task. -->
- <dimen name="recents_layout_bottom_peek_size">56dp</dimen>
-
- <!-- The offset from the top and bottom of the stack of the focused task. The bottom offset
- will be additionally offset by the bottom system insets since it goes under the nav bar
- in certain orientations. -->
- <dimen name="recents_layout_initial_top_offset_phone_port">128dp</dimen>
- <dimen name="recents_layout_initial_bottom_offset_phone_port">80dp</dimen>
- <dimen name="recents_layout_initial_top_offset_phone_land">72dp</dimen>
- <dimen name="recents_layout_initial_bottom_offset_phone_land">72dp</dimen>
- <dimen name="recents_layout_initial_top_offset_tablet">160dp</dimen>
- <dimen name="recents_layout_initial_bottom_offset_tablet">112dp</dimen>
-
- <!-- The min/max translationZ for the tasks in the stack. -->
- <dimen name="recents_layout_z_min">3dp</dimen>
- <dimen name="recents_layout_z_max">24dp</dimen>
-
- <!-- The margin between the freeform and stack. We also don't want this to change across
- configurations that Recents can be opened in, so we define them statically for all
- display sizes. -->
- <dimen name="recents_freeform_layout_bottom_margin">16dp</dimen>
-
- <!-- The padding between each freeform task. -->
- <dimen name="recents_freeform_layout_task_padding">8dp</dimen>
-
-<!-- Recents Views -->
-
- <!-- The height of a task view bar. This has to be large enough to cover the action bar
- height in either orientation at this smallest width. -->
- <dimen name="recents_task_view_header_height">56dp</dimen>
- <dimen name="recents_task_view_header_height_tablet_land">64dp</dimen>
-
- <!-- The padding of a button in the recents task view header. -->
- <dimen name="recents_task_view_header_button_padding">16dp</dimen>
- <dimen name="recents_task_view_header_button_padding_tablet_land">20dp</dimen>
-
- <!-- The radius of the rounded corners on a task view and its shadow (which can be larger
- to create a softer corner effect. -->
- <dimen name="recents_task_view_rounded_corners_radius">2dp</dimen>
- <dimen name="recents_task_view_shadow_rounded_corners_radius">6dp</dimen>
-
- <!-- The amount of highlight to make on each task view. -->
- <dimen name="recents_task_view_highlight">1dp</dimen>
-
- <!-- The size of the lock-to-app button and its icon. -->
- <dimen name="recents_lock_to_app_size">56dp</dimen>
- <dimen name="recents_lock_to_app_icon_size">28dp</dimen>
-
- <!-- The amount of overscroll allowed when flinging to the end of the stack. -->
- <dimen name="recents_fling_overscroll_distance">24dp</dimen>
-
- <!-- The size of the drag hint text. -->
- <dimen name="recents_drag_hint_text_size">14sp</dimen>
-
- <!-- The min alpha to apply to a task affiliation group color. -->
- <item name="recents_task_affiliation_color_min_alpha_percentage" format="float" type="dimen">0.6</item>
-
- <!-- The amount to offset when animating into an affiliate group. -->
- <dimen name="recents_task_stack_animation_affiliate_enter_offset">32dp</dimen>
-
- <!-- The offsets the tasks animate from when recents is launched while docking -->
- <dimen name="recents_task_stack_animation_launched_while_docking_offset">144dp</dimen>
-
- <!-- The amount to translate when animating the removal of a task. -->
- <dimen name="recents_task_view_remove_anim_translation_x">100dp</dimen>
-
- <!-- The alpha to apply to the recents row when it doesn't have focus -->
- <item name="recents_recents_row_dim_alpha" format="float" type="dimen">0.5</item>
-
- <!-- The speed in dp/s at which the user needs to be scrolling in recents such that we start
- loading full resolution screenshots. -->
- <dimen name="recents_fast_fling_velocity">600dp</dimen>
-
-</resources> \ No newline at end of file
diff --git a/packages/SystemUI/legacy/recents/res/values/dimens_grid.xml b/packages/SystemUI/legacy/recents/res/values/dimens_grid.xml
deleted file mode 100644
index febf65b834ee..000000000000
--- a/packages/SystemUI/legacy/recents/res/values/dimens_grid.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- * Copyright (c) 2016, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
-*/
--->
-<resources>
- <dimen name="recents_grid_padding_left_right">32dp</dimen>
- <dimen name="recents_grid_padding_top_bottom">150dp</dimen>
- <dimen name="recents_grid_padding_task_view">20dp</dimen>
- <dimen name="recents_grid_task_view_header_height">44dp</dimen>
- <dimen name="recents_grid_task_view_header_button_padding">8dp</dimen>
- <dimen name="recents_grid_task_view_focused_frame_thickness">8dp</dimen>
- <dimen name="recents_grid_task_view_rounded_corners_radius">4dp</dimen>
- <dimen name="recents_grid_task_view_focused_frame_rounded_corners_radius">8dp</dimen>
-</resources>
-
diff --git a/packages/SystemUI/legacy/recents/res/values/strings.xml b/packages/SystemUI/legacy/recents/res/values/strings.xml
deleted file mode 100644
index 4b44ba969d6e..000000000000
--- a/packages/SystemUI/legacy/recents/res/values/strings.xml
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-
- <!-- Content description for the recent apps panel (not shown on the screen). [CHAR LIMIT=NONE] -->
- <string name="accessibility_desc_recent_apps">Overview.</string>
-
- <!-- Content description to tell the user that this button will remove an application from recents -->
- <string name="accessibility_recents_item_will_be_dismissed">Dismiss <xliff:g id="app" example="Calendar">%s</xliff:g>.</string>
- <!-- Content description to tell the user an application has been removed from recents -->
- <string name="accessibility_recents_item_dismissed"><xliff:g id="app" example="Calendar">%s</xliff:g> dismissed.</string>
- <!-- Content description to tell the user all applications has been removed from recents -->
- <string name="accessibility_recents_all_items_dismissed">All recent applications dismissed.</string>
- <!-- Content description to tell the user that this button will open application info for an application in recents -->
- <string name="accessibility_recents_item_open_app_info">Open <xliff:g id="app" example="Calendar">%s</xliff:g> application info.</string>
- <!-- Content description to tell the user an application has been launched from recents -->
- <string name="accessibility_recents_item_launched">Starting <xliff:g id="app" example="Calendar">%s</xliff:g>.</string>
-
- <!-- Recents: The empty recents string. [CHAR LIMIT=NONE] -->
- <string name="recents_empty_message">No recent items</string>
- <!-- Recents: The empty recents string after dismissing all tasks. [CHAR LIMIT=NONE] -->
- <string name="recents_empty_message_dismissed_all">You\'ve cleared everything</string>
- <!-- Recents: The info panel app info button string. [CHAR LIMIT=NONE] -->
- <string name="recents_app_info_button_label">Application Info</string>
- <!-- Recents: The screen pinning button. [CHAR LIMIT=NONE] -->
- <string name="recents_lock_to_app_button_label">screen pinning</string>
- <!-- Recents: Temporary string for the button in the recents search bar. [CHAR LIMIT=NONE] -->
- <string name="recents_search_bar_label">search</string>
- <!-- Recents: Launch error string. [CHAR LIMIT=NONE] -->
- <string name="recents_launch_error_message">Could not start <xliff:g id="app" example="Calendar">%s</xliff:g>.</string>
- <!-- Recents: Launch disabled string. [CHAR LIMIT=NONE] -->
- <string name="recents_launch_disabled_message"><xliff:g id="app" example="Calendar">%s</xliff:g> is disabled in safe-mode.</string>
- <!-- Recents: Stack action button string. [CHAR LIMIT=NONE] -->
- <string name="recents_stack_action_button_label">Clear all</string>
- <!-- Recents: Hint text that shows on the drop targets to start multiwindow. [CHAR LIMIT=NONE] -->
- <string name="recents_drag_hint_message">Drag here to use split screen</string>
-
- <!-- Recents: MultiStack add stack split horizontal radio button. [CHAR LIMIT=NONE] -->
- <string name="recents_multistack_add_stack_dialog_split_horizontal">Split Horizontal</string>
- <!-- Recents: MultiStack add stack split vertical radio button. [CHAR LIMIT=NONE] -->
- <string name="recents_multistack_add_stack_dialog_split_vertical">Split Vertical</string>
- <!-- Recents: MultiStack add stack split custom radio button. [CHAR LIMIT=NONE] -->
- <string name="recents_multistack_add_stack_dialog_split_custom">Split Custom</string>
- <!-- Recents: Accessibility split to the top -->
- <string name="recents_accessibility_split_screen_top">Split screen to the top</string>
- <!-- Recents: Accessibility split to the left -->
- <string name="recents_accessibility_split_screen_left">Split screen to the left</string>
- <!-- Recents: Accessibility split to the right -->
- <string name="recents_accessibility_split_screen_right">Split screen to the right</string>
-
-</resources> \ No newline at end of file
diff --git a/packages/SystemUI/legacy/recents/res/values/styles.xml b/packages/SystemUI/legacy/recents/res/values/styles.xml
deleted file mode 100644
index eb16be7c95b6..000000000000
--- a/packages/SystemUI/legacy/recents/res/values/styles.xml
+++ /dev/null
@@ -1,55 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2006 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.
--->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android">
-
- <style name="RecentsTheme" parent="@android:style/Theme.Material">
- <!-- NoTitle -->
- <item name="android:windowNoTitle">true</item>
- <!-- Misc -->
- <item name="android:statusBarColor">@android:color/transparent</item>
- <item name="android:navigationBarColor">@android:color/transparent</item>
- <item name="android:windowDrawsSystemBarBackgrounds">true</item>
- <item name="android:windowAnimationStyle">@null</item>
- <item name="android:ambientShadowAlpha">0.35</item>
- </style>
-
- <!-- Recents theme -->
- <style name="RecentsTheme.Wallpaper">
- <item name="android:windowBackground">@*android:color/transparent</item>
- <item name="android:colorBackgroundCacheHint">@null</item>
- <item name="android:windowShowWallpaper">true</item>
- <item name="android:windowDisablePreview">true</item>
- <item name="clearAllStyle">@style/ClearAllButtonDefaultMargins</item>
- <item name="clearAllBackgroundColor">@color/recents_clear_all_button_bg_dark_color</item>
- <item name="wallpaperTextColor">@*android:color/primary_text_material_dark</item>
- <item name="wallpaperTextColorSecondary">@*android:color/secondary_text_material_dark</item>
- </style>
-
- <style name="RecentsTheme.Wallpaper.Light">
- <item name="clearAllBackgroundColor">@color/recents_clear_all_button_bg_light_color</item>
- <item name="wallpaperTextColor">@*android:color/primary_text_material_light</item>
- <item name="wallpaperTextColorSecondary">@*android:color/secondary_text_material_light</item>
- </style>
-
- <!-- Performance optimized Recents theme (no wallpaper) -->
- <style name="RecentsTheme.NoWallpaper">
- <item name="android:windowBackground">@android:color/black</item>
- <item name="wallpaperTextColor">@android:color/white</item>
- <item name="wallpaperTextColorSecondary">@android:color/white</item>
- </style>
-
- </resources> \ No newline at end of file
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/Constants.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/Constants.java
deleted file mode 100644
index 003379fe0bf8..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/Constants.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents;
-
-/**
- * Constants
- */
-public class Constants {
-
- // TODO: Move into RecentsMetrics
- public static class Metrics {
- // DO NOT MODIFY THE ORDER OF THESE METRICS
- public static final int DismissSourceKeyboard = 0;
- public static final int DismissSourceSwipeGesture = 1;
- public static final int DismissSourceHeaderButton = 2;
- @Deprecated
- public static final int DismissSourceHistorySwipeGesture = 3;
- }
-
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/IRecentsNonSystemUserCallbacks.aidl b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/IRecentsNonSystemUserCallbacks.aidl
deleted file mode 100644
index 90c10992bc94..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/IRecentsNonSystemUserCallbacks.aidl
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents;
-
-import android.graphics.Rect;
-
-/**
- * Due to the fact that RecentsActivity is per-user, we need to establish an
- * interface (this) for the system user to callback to the secondary users in
- * response to UI events coming in from the system user's SystemUI.
- */
-oneway interface IRecentsNonSystemUserCallbacks {
- void preloadRecents();
- void cancelPreloadingRecents();
- void showRecents(boolean triggeredFromAltTab, boolean draggingInRecents, boolean animate,
- int recentsGrowTarget);
- void hideRecents(boolean triggeredFromAltTab, boolean triggeredFromHomeKey);
- void toggleRecents(int recentsGrowTarget);
- void onConfigurationChanged();
- void splitPrimaryTask(int topTaskId, int stackCreateMode, in Rect initialBounds);
- void onDraggingInRecents(float distanceFromTop);
- void onDraggingInRecentsEnded(float velocity);
- void showCurrentUserToast(int msgResId, int msgLength);
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/IRecentsSystemUserCallbacks.aidl b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/IRecentsSystemUserCallbacks.aidl
deleted file mode 100644
index e97714486dcf..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/IRecentsSystemUserCallbacks.aidl
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents;
-
-import android.graphics.Rect;
-
-/**
- * Due to the fact that RecentsActivity is per-user, we need to establish an
- * interface (this) for the non-system user to register itself for callbacks and to
- * callback to the system user to update internal state.
- */
-oneway interface IRecentsSystemUserCallbacks {
- void registerNonSystemUserCallbacks(IBinder nonSystemUserCallbacks, int userId);
-
- void updateRecentsVisibility(boolean visible);
- void startScreenPinning(int taskId);
- void sendRecentsDrawnEvent();
- void sendDockingTopTaskEvent(in Rect initialRect);
- void sendLaunchRecentsEvent();
- void sendDockedFirstAnimationFrameEvent();
- void setWaitingForTransitionStartEvent(boolean waitingForTransitionStart);
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/LegacyRecentsImpl.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/LegacyRecentsImpl.java
deleted file mode 100644
index a150de95fcf0..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/LegacyRecentsImpl.java
+++ /dev/null
@@ -1,750 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents;
-
-import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME;
-import static android.app.WindowConfiguration.ACTIVITY_TYPE_RECENTS;
-import static android.app.WindowConfiguration.ACTIVITY_TYPE_UNDEFINED;
-import static com.android.systemui.statusbar.phone.StatusBar.SYSTEM_DIALOG_REASON_RECENT_APPS;
-
-import android.app.ActivityManager;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-import android.content.ServiceConnection;
-import android.content.pm.ActivityInfo;
-import android.content.res.Configuration;
-import android.content.res.Resources;
-import android.graphics.Point;
-import android.graphics.Rect;
-import android.hardware.display.DisplayManager;
-import android.os.Handler;
-import android.os.IBinder;
-import android.os.RemoteException;
-import android.os.UserHandle;
-import android.util.EventLog;
-import android.util.Log;
-import android.view.Display;
-import android.widget.Toast;
-import com.android.internal.logging.MetricsLogger;
-import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
-import com.android.systemui.EventLogConstants;
-import com.android.systemui.EventLogTags;
-import com.android.systemui.R;
-import com.android.systemui.SysUiServiceProvider;
-import com.android.systemui.pip.PipUI;
-import com.android.systemui.recents.events.EventBus;
-import com.android.systemui.recents.events.activity.ConfigurationChangedEvent;
-import com.android.systemui.recents.events.activity.DockedFirstAnimationFrameEvent;
-import com.android.systemui.recents.events.activity.DockedTopTaskEvent;
-import com.android.systemui.recents.events.activity.LaunchTaskFailedEvent;
-import com.android.systemui.recents.events.activity.RecentsActivityStartingEvent;
-import com.android.systemui.recents.events.component.ExpandPipEvent;
-import com.android.systemui.recents.events.component.HidePipMenuEvent;
-import com.android.systemui.recents.events.component.RecentsVisibilityChangedEvent;
-import com.android.systemui.recents.events.component.ScreenPinningRequestEvent;
-import com.android.systemui.recents.events.component.SetWaitingForTransitionStartEvent;
-import com.android.systemui.recents.events.component.ShowUserToastEvent;
-import com.android.systemui.recents.events.ui.RecentsDrawnEvent;
-import com.android.systemui.recents.events.ui.RecentsGrowingEvent;
-import com.android.systemui.recents.misc.SystemServicesProxy;
-import com.android.systemui.recents.model.RecentsTaskLoader;
-import com.android.systemui.shared.system.ActivityManagerWrapper;
-import com.android.systemui.stackdivider.Divider;
-import java.io.PrintWriter;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.Set;
-
-/**
- * An implementation of the SystemUI recents component, which supports both system and secondary
- * users.
- */
-public class LegacyRecentsImpl implements RecentsImplementation {
-
- private final static String TAG = "Recents";
-
- public final static int EVENT_BUS_PRIORITY = 1;
- public final static int BIND_TO_SYSTEM_USER_RETRY_DELAY = 5000;
-
- public final static Set<String> RECENTS_ACTIVITIES = new HashSet<>();
- static {
- RECENTS_ACTIVITIES.add(RecentsImpl.RECENTS_ACTIVITY);
- }
-
- private static final String COUNTER_WINDOW_SUPPORTED = "window_enter_supported";
- private static final String COUNTER_WINDOW_UNSUPPORTED = "window_enter_unsupported";
- private static final String COUNTER_WINDOW_INCOMPATIBLE = "window_enter_incompatible";
-
- private static SystemServicesProxy sSystemServicesProxy;
- private static RecentsDebugFlags sDebugFlags;
- private static RecentsTaskLoader sTaskLoader;
- private static RecentsConfiguration sConfiguration;
-
- private Context mContext;
- private SysUiServiceProvider mSysUiServiceProvider;
- private Handler mHandler;
- private RecentsImpl mImpl;
-
- // Only For system user, this is the callbacks instance we return to each secondary user
- private RecentsSystemUser mSystemToUserCallbacks;
-
- // Only for secondary users, this is the callbacks instance provided by the system user to make
- // calls back
- private IRecentsSystemUserCallbacks mUserToSystemCallbacks;
-
- // The set of runnables to run after binding to the system user's service.
- private final ArrayList<Runnable> mOnConnectRunnables = new ArrayList<>();
-
- // Only for secondary users, this is the death handler for the binder from the system user
- private final IBinder.DeathRecipient mUserToSystemCallbacksDeathRcpt = new IBinder.DeathRecipient() {
- @Override
- public void binderDied() {
- mUserToSystemCallbacks = null;
- EventLog.writeEvent(EventLogTags.SYSUI_RECENTS_CONNECTION,
- EventLogConstants.SYSUI_RECENTS_CONNECTION_USER_SYSTEM_UNBOUND,
- sSystemServicesProxy.getProcessUser());
-
- // Retry after a fixed duration
- mHandler.postDelayed(new Runnable() {
- @Override
- public void run() {
- registerWithSystemUser();
- }
- }, BIND_TO_SYSTEM_USER_RETRY_DELAY);
- }
- };
-
- // Only for secondary users, this is the service connection we use to connect to the system user
- private final ServiceConnection mUserToSystemServiceConnection = new ServiceConnection() {
- @Override
- public void onServiceConnected(ComponentName name, IBinder service) {
- if (service != null) {
- mUserToSystemCallbacks = IRecentsSystemUserCallbacks.Stub.asInterface(
- service);
- EventLog.writeEvent(EventLogTags.SYSUI_RECENTS_CONNECTION,
- EventLogConstants.SYSUI_RECENTS_CONNECTION_USER_SYSTEM_BOUND,
- sSystemServicesProxy.getProcessUser());
-
- // Listen for system user's death, so that we can reconnect later
- try {
- service.linkToDeath(mUserToSystemCallbacksDeathRcpt, 0);
- } catch (RemoteException e) {
- Log.e(TAG, "Lost connection to (System) SystemUI", e);
- }
-
- // Run each of the queued runnables
- runAndFlushOnConnectRunnables();
- }
-
- // Unbind ourselves now that we've registered our callbacks. The
- // binder to the system user are still valid at this point.
- mContext.unbindService(this);
- }
-
- @Override
- public void onServiceDisconnected(ComponentName name) {
- // Do nothing
- }
- };
-
- /**
- * Returns the callbacks interface that non-system users can call.
- */
- public IBinder getSystemUserCallbacks() {
- return mSystemToUserCallbacks;
- }
-
- public static RecentsTaskLoader getTaskLoader() {
- return sTaskLoader;
- }
-
-
- public static SystemServicesProxy getSystemServices() {
- return sSystemServicesProxy;
- }
-
- public static RecentsConfiguration getConfiguration() {
- return sConfiguration;
- }
-
- public static RecentsDebugFlags getDebugFlags() {
- return sDebugFlags;
- }
-
- @Override
- public void onStart(Context context, SysUiServiceProvider sysUiServiceProvider) {
- mContext = context;
- mSysUiServiceProvider = sysUiServiceProvider;
- final Resources res = mContext.getResources();
- final int defaultTaskBarBackgroundColor =
- mContext.getColor(R.color.recents_task_bar_default_background_color);
- final int defaultTaskViewBackgroundColor =
- mContext.getColor(R.color.recents_task_view_default_background_color);
- sDebugFlags = new RecentsDebugFlags();
- sSystemServicesProxy = SystemServicesProxy.getInstance(mContext);
- sConfiguration = new RecentsConfiguration(mContext);
- sTaskLoader = new RecentsTaskLoader(mContext,
- // TODO: Once we start building the AAR, move these into the loader
- res.getInteger(R.integer.config_recents_max_thumbnail_count),
- res.getInteger(R.integer.config_recents_max_icon_count),
- res.getInteger(R.integer.recents_svelte_level));
- sTaskLoader.setDefaultColors(defaultTaskBarBackgroundColor, defaultTaskViewBackgroundColor);
- mHandler = new Handler();
- mImpl = new RecentsImpl(mContext);
-
- // Register with the event bus
- EventBus.getDefault().register(this, EVENT_BUS_PRIORITY);
- EventBus.getDefault().register(sSystemServicesProxy, EVENT_BUS_PRIORITY);
- EventBus.getDefault().register(sTaskLoader, EVENT_BUS_PRIORITY);
-
- // Due to the fact that RecentsActivity is per-user, we need to establish and interface for
- // the system user's Recents component to pass events (like show/hide/toggleRecents) to the
- // secondary user, and vice versa (like visibility change, screen pinning).
- final int processUser = sSystemServicesProxy.getProcessUser();
- if (sSystemServicesProxy.isSystemUser(processUser)) {
- // For the system user, initialize an instance of the interface that we can pass to the
- // secondary user
- mSystemToUserCallbacks = new RecentsSystemUser(mContext, mImpl);
- } else {
- // For the secondary user, bind to the primary user's service to get a persistent
- // interface to register its implementation and to later update its state
- registerWithSystemUser();
- }
- }
-
- @Override
- public void onBootCompleted() {
- mImpl.onBootCompleted();
- }
-
-
- @Override
- public void growRecents() {
- EventBus.getDefault().send(new RecentsGrowingEvent());
- }
-
- /**
- * Shows the Recents.
- */
- @Override
- public void showRecentApps(boolean triggeredFromAltTab) {
- ActivityManagerWrapper.getInstance().closeSystemWindows(SYSTEM_DIALOG_REASON_RECENT_APPS);
- int recentsGrowTarget = getComponent(Divider.class).getView().growsRecents();
- int currentUser = sSystemServicesProxy.getCurrentUser();
- if (sSystemServicesProxy.isSystemUser(currentUser)) {
- mImpl.showRecents(triggeredFromAltTab, false /* draggingInRecents */,
- true /* animate */, recentsGrowTarget);
- } else {
- if (mSystemToUserCallbacks != null) {
- IRecentsNonSystemUserCallbacks callbacks =
- mSystemToUserCallbacks.getNonSystemUserRecentsForUser(currentUser);
- if (callbacks != null) {
- try {
- callbacks.showRecents(triggeredFromAltTab, false /* draggingInRecents */,
- true /* animate */, recentsGrowTarget);
- } catch (RemoteException e) {
- Log.e(TAG, "Callback failed", e);
- }
- } else {
- Log.e(TAG, "No SystemUI callbacks found for user: " + currentUser);
- }
- }
- }
- }
-
- /**
- * Hides the Recents.
- */
- @Override
- public void hideRecentApps(boolean triggeredFromAltTab, boolean triggeredFromHomeKey) {
- int currentUser = sSystemServicesProxy.getCurrentUser();
- if (sSystemServicesProxy.isSystemUser(currentUser)) {
- mImpl.hideRecents(triggeredFromAltTab, triggeredFromHomeKey);
- } else {
- if (mSystemToUserCallbacks != null) {
- IRecentsNonSystemUserCallbacks callbacks =
- mSystemToUserCallbacks.getNonSystemUserRecentsForUser(currentUser);
- if (callbacks != null) {
- try {
- callbacks.hideRecents(triggeredFromAltTab, triggeredFromHomeKey);
- } catch (RemoteException e) {
- Log.e(TAG, "Callback failed", e);
- }
- } else {
- Log.e(TAG, "No SystemUI callbacks found for user: " + currentUser);
- }
- }
- }
- }
-
- /**
- * Toggles the Recents activity.
- */
- @Override
- public void toggleRecentApps() {
- int growTarget = getComponent(Divider.class).getView().growsRecents();
- int currentUser = sSystemServicesProxy.getCurrentUser();
- if (sSystemServicesProxy.isSystemUser(currentUser)) {
- mImpl.toggleRecents(growTarget);
- } else {
- if (mSystemToUserCallbacks != null) {
- IRecentsNonSystemUserCallbacks callbacks =
- mSystemToUserCallbacks.getNonSystemUserRecentsForUser(currentUser);
- if (callbacks != null) {
- try {
- callbacks.toggleRecents(growTarget);
- } catch (RemoteException e) {
- Log.e(TAG, "Callback failed", e);
- }
- } else {
- Log.e(TAG, "No SystemUI callbacks found for user: " + currentUser);
- }
- }
- }
- }
-
- /**
- * Preloads info for the Recents activity.
- */
- @Override
- public void preloadRecentApps() {
- int currentUser = sSystemServicesProxy.getCurrentUser();
- if (sSystemServicesProxy.isSystemUser(currentUser)) {
- mImpl.preloadRecents();
- } else {
- if (mSystemToUserCallbacks != null) {
- IRecentsNonSystemUserCallbacks callbacks =
- mSystemToUserCallbacks.getNonSystemUserRecentsForUser(currentUser);
- if (callbacks != null) {
- try {
- callbacks.preloadRecents();
- } catch (RemoteException e) {
- Log.e(TAG, "Callback failed", e);
- }
- } else {
- Log.e(TAG, "No SystemUI callbacks found for user: " + currentUser);
- }
- }
- }
- }
-
- @Override
- public void cancelPreloadRecentApps() {
- int currentUser = sSystemServicesProxy.getCurrentUser();
- if (sSystemServicesProxy.isSystemUser(currentUser)) {
- mImpl.cancelPreloadingRecents();
- } else {
- if (mSystemToUserCallbacks != null) {
- IRecentsNonSystemUserCallbacks callbacks =
- mSystemToUserCallbacks.getNonSystemUserRecentsForUser(currentUser);
- if (callbacks != null) {
- try {
- callbacks.cancelPreloadingRecents();
- } catch (RemoteException e) {
- Log.e(TAG, "Callback failed", e);
- }
- } else {
- Log.e(TAG, "No SystemUI callbacks found for user: " + currentUser);
- }
- }
- }
- }
-
- @Override
- public boolean splitPrimaryTask(int stackCreateMode, Rect initialBounds, int metricsDockAction) {
- Point realSize = new Point();
- if (initialBounds == null) {
- mContext.getSystemService(DisplayManager.class).getDisplay(Display.DEFAULT_DISPLAY)
- .getRealSize(realSize);
- initialBounds = new Rect(0, 0, realSize.x, realSize.y);
- }
-
- int currentUser = sSystemServicesProxy.getCurrentUser();
- ActivityManager.RunningTaskInfo runningTask =
- ActivityManagerWrapper.getInstance().getRunningTask();
- final int activityType = runningTask != null
- ? runningTask.configuration.windowConfiguration.getActivityType()
- : ACTIVITY_TYPE_UNDEFINED;
- boolean screenPinningActive = ActivityManagerWrapper.getInstance().isScreenPinningActive();
- boolean isRunningTaskInHomeOrRecentsStack =
- activityType == ACTIVITY_TYPE_HOME || activityType == ACTIVITY_TYPE_RECENTS;
- if (runningTask != null && !isRunningTaskInHomeOrRecentsStack && !screenPinningActive) {
- logDockAttempt(mContext, runningTask.topActivity, runningTask.resizeMode);
- if (runningTask.supportsSplitScreenMultiWindow) {
- if (metricsDockAction != -1) {
- MetricsLogger.action(mContext, metricsDockAction,
- runningTask.topActivity.flattenToShortString());
- }
- if (sSystemServicesProxy.isSystemUser(currentUser)) {
- mImpl.splitPrimaryTask(runningTask.id, stackCreateMode, initialBounds);
- } else {
- if (mSystemToUserCallbacks != null) {
- IRecentsNonSystemUserCallbacks callbacks =
- mSystemToUserCallbacks.getNonSystemUserRecentsForUser(currentUser);
- if (callbacks != null) {
- try {
- callbacks.splitPrimaryTask(runningTask.id, stackCreateMode,
- initialBounds);
- } catch (RemoteException e) {
- Log.e(TAG, "Callback failed", e);
- }
- } else {
- Log.e(TAG, "No SystemUI callbacks found for user: " + currentUser);
- }
- }
- }
-
- return true;
- } else {
- EventBus.getDefault().send(new ShowUserToastEvent(
- R.string.dock_non_resizeble_failed_to_dock_text, Toast.LENGTH_SHORT));
- return false;
- }
- } else {
- return false;
- }
- }
-
- public static void logDockAttempt(Context ctx, ComponentName activity, int resizeMode) {
- if (resizeMode == ActivityInfo.RESIZE_MODE_UNRESIZEABLE) {
- MetricsLogger.action(ctx, MetricsEvent.ACTION_WINDOW_DOCK_UNRESIZABLE,
- activity.flattenToShortString());
- }
- MetricsLogger.count(ctx, getMetricsCounterForResizeMode(resizeMode), 1);
- }
-
- private static String getMetricsCounterForResizeMode(int resizeMode) {
- switch (resizeMode) {
- case ActivityInfo.RESIZE_MODE_FORCE_RESIZEABLE:
- return COUNTER_WINDOW_UNSUPPORTED;
- case ActivityInfo.RESIZE_MODE_RESIZEABLE:
- case ActivityInfo.RESIZE_MODE_RESIZEABLE_VIA_SDK_VERSION:
- return COUNTER_WINDOW_SUPPORTED;
- default:
- return COUNTER_WINDOW_INCOMPATIBLE;
- }
- }
-
- @Override
- public void onAppTransitionFinished() {
- if (!LegacyRecentsImpl.getConfiguration().isLowRamDevice) {
- // Fallback, reset the flag once an app transition ends
- EventBus.getDefault().send(new SetWaitingForTransitionStartEvent(
- false /* waitingForTransitionStart */));
- }
- }
-
- /**
- * Updates on configuration change.
- */
- public void onConfigurationChanged(Configuration newConfig) {
- int currentUser = sSystemServicesProxy.getCurrentUser();
- if (sSystemServicesProxy.isSystemUser(currentUser)) {
- mImpl.onConfigurationChanged();
- } else {
- if (mSystemToUserCallbacks != null) {
- IRecentsNonSystemUserCallbacks callbacks =
- mSystemToUserCallbacks.getNonSystemUserRecentsForUser(currentUser);
- if (callbacks != null) {
- try {
- callbacks.onConfigurationChanged();
- } catch (RemoteException e) {
- Log.e(TAG, "Callback failed", e);
- }
- } else {
- Log.e(TAG, "No SystemUI callbacks found for user: " + currentUser);
- }
- }
- }
- }
-
- /**
- * Handle Recents activity visibility changed.
- */
- public final void onBusEvent(final RecentsVisibilityChangedEvent event) {
- SystemServicesProxy ssp = LegacyRecentsImpl.getSystemServices();
- int processUser = ssp.getProcessUser();
- if (ssp.isSystemUser(processUser)) {
- mImpl.onVisibilityChanged(event.applicationContext, event.visible);
- } else {
- postToSystemUser(new Runnable() {
- @Override
- public void run() {
- try {
- mUserToSystemCallbacks.updateRecentsVisibility(event.visible);
- } catch (RemoteException e) {
- Log.e(TAG, "Callback failed", e);
- }
- }
- });
- }
-
- // This will catch the cases when a user launches from recents to another app
- // (and vice versa) that is not in the recents stack (such as home or bugreport) and it
- // would not reset the wait for transition flag. This will catch it and make sure that the
- // flag is reset.
- if (!event.visible) {
- mImpl.setWaitingForTransitionStart(false);
- }
- }
-
- public final void onBusEvent(DockedFirstAnimationFrameEvent event) {
- SystemServicesProxy ssp = LegacyRecentsImpl.getSystemServices();
- int processUser = ssp.getProcessUser();
- if (ssp.isSystemUser(processUser)) {
- final Divider divider = getComponent(Divider.class);
- if (divider != null) {
- divider.onDockedFirstAnimationFrame();
- }
- } else {
- postToSystemUser(new Runnable() {
- @Override
- public void run() {
- try {
- mUserToSystemCallbacks.sendDockedFirstAnimationFrameEvent();
- } catch (RemoteException e) {
- Log.e(TAG, "Callback failed", e);
- }
- }
- });
- }
- }
-
- /**
- * Handle screen pinning request.
- */
- public final void onBusEvent(final ScreenPinningRequestEvent event) {
- int processUser = sSystemServicesProxy.getProcessUser();
- if (sSystemServicesProxy.isSystemUser(processUser)) {
- mImpl.onStartScreenPinning(event.applicationContext, event.taskId);
- } else {
- postToSystemUser(new Runnable() {
- @Override
- public void run() {
- try {
- mUserToSystemCallbacks.startScreenPinning(event.taskId);
- } catch (RemoteException e) {
- Log.e(TAG, "Callback failed", e);
- }
- }
- });
- }
- }
-
- public final void onBusEvent(final RecentsDrawnEvent event) {
- int processUser = sSystemServicesProxy.getProcessUser();
- if (sSystemServicesProxy.isSystemUser(processUser)) {
- final Divider divider = getComponent(Divider.class);
- if (divider != null) {
- divider.onRecentsDrawn();
- }
- } else {
- postToSystemUser(new Runnable() {
- @Override
- public void run() {
- try {
- mUserToSystemCallbacks.sendRecentsDrawnEvent();
- } catch (RemoteException e) {
- Log.e(TAG, "Callback failed", e);
- }
- }
- });
- }
- }
-
- public final void onBusEvent(final DockedTopTaskEvent event) {
- int processUser = sSystemServicesProxy.getProcessUser();
- if (sSystemServicesProxy.isSystemUser(processUser)) {
- final Divider divider = getComponent(Divider.class);
- if (divider != null) {
- divider.onDockedTopTask();
- }
- } else {
- postToSystemUser(new Runnable() {
- @Override
- public void run() {
- try {
- mUserToSystemCallbacks.sendDockingTopTaskEvent(event.initialRect);
- } catch (RemoteException e) {
- Log.e(TAG, "Callback failed", e);
- }
- }
- });
- }
- }
-
- public final void onBusEvent(final RecentsActivityStartingEvent event) {
- int processUser = sSystemServicesProxy.getProcessUser();
- if (sSystemServicesProxy.isSystemUser(processUser)) {
- final Divider divider = getComponent(Divider.class);
- if (divider != null) {
- divider.onRecentsActivityStarting();
- }
- } else {
- postToSystemUser(new Runnable() {
- @Override
- public void run() {
- try {
- mUserToSystemCallbacks.sendLaunchRecentsEvent();
- } catch (RemoteException e) {
- Log.e(TAG, "Callback failed", e);
- }
- }
- });
- }
- }
-
- public final void onBusEvent(LaunchTaskFailedEvent event) {
- // Reset the transition when tasks fail to launch
- mImpl.setWaitingForTransitionStart(false);
- }
-
- public final void onBusEvent(ConfigurationChangedEvent event) {
- // Update the configuration for the Recents component when the activity configuration
- // changes as well
- mImpl.onConfigurationChanged();
- }
-
- public final void onBusEvent(ShowUserToastEvent event) {
- int currentUser = sSystemServicesProxy.getCurrentUser();
- if (sSystemServicesProxy.isSystemUser(currentUser)) {
- mImpl.onShowCurrentUserToast(event.msgResId, event.msgLength);
- } else {
- if (mSystemToUserCallbacks != null) {
- IRecentsNonSystemUserCallbacks callbacks =
- mSystemToUserCallbacks.getNonSystemUserRecentsForUser(currentUser);
- if (callbacks != null) {
- try {
- callbacks.showCurrentUserToast(event.msgResId, event.msgLength);
- } catch (RemoteException e) {
- Log.e(TAG, "Callback failed", e);
- }
- } else {
- Log.e(TAG, "No SystemUI callbacks found for user: " + currentUser);
- }
- }
- }
- }
-
- public final void onBusEvent(SetWaitingForTransitionStartEvent event) {
- int processUser = sSystemServicesProxy.getProcessUser();
- if (sSystemServicesProxy.isSystemUser(processUser)) {
- mImpl.setWaitingForTransitionStart(event.waitingForTransitionStart);
- } else {
- postToSystemUser(new Runnable() {
- @Override
- public void run() {
- try {
- mUserToSystemCallbacks.setWaitingForTransitionStartEvent(
- event.waitingForTransitionStart);
- } catch (RemoteException e) {
- Log.e(TAG, "Callback failed", e);
- }
- }
- });
- }
- }
-
- public final void onBusEvent(ExpandPipEvent event) {
- PipUI pipUi = getComponent(PipUI.class);
- if (pipUi == null) {
- return;
- }
- pipUi.expandPip();
- }
-
- public final void onBusEvent(HidePipMenuEvent event) {
- PipUI pipUi = getComponent(PipUI.class);
- if (pipUi == null) {
- return;
- }
- event.getAnimationTrigger().increment();
- pipUi.hidePipMenu(() -> {
- event.getAnimationTrigger().increment();
- }, () -> {
- event.getAnimationTrigger().decrement();
- });
- event.getAnimationTrigger().decrement();
- }
-
- /**
- * Attempts to register with the system user.
- */
- private void registerWithSystemUser() {
- final int processUser = sSystemServicesProxy.getProcessUser();
- postToSystemUser(new Runnable() {
- @Override
- public void run() {
- try {
- mUserToSystemCallbacks.registerNonSystemUserCallbacks(
- new RecentsImplProxy(mImpl), processUser);
- } catch (RemoteException e) {
- Log.e(TAG, "Failed to register", e);
- }
- }
- });
- }
-
- /**
- * Runs the runnable in the system user's Recents context, connecting to the service if
- * necessary.
- */
- private void postToSystemUser(final Runnable onConnectRunnable) {
- mOnConnectRunnables.add(onConnectRunnable);
- if (mUserToSystemCallbacks == null) {
- Intent systemUserServiceIntent = new Intent();
- systemUserServiceIntent.setClass(mContext, RecentsSystemUserService.class);
- boolean bound = mContext.bindServiceAsUser(systemUserServiceIntent,
- mUserToSystemServiceConnection, Context.BIND_AUTO_CREATE, UserHandle.SYSTEM);
- EventLog.writeEvent(EventLogTags.SYSUI_RECENTS_CONNECTION,
- EventLogConstants.SYSUI_RECENTS_CONNECTION_USER_BIND_SERVICE,
- sSystemServicesProxy.getProcessUser());
- if (!bound) {
- // Retry after a fixed duration
- mHandler.postDelayed(new Runnable() {
- @Override
- public void run() {
- registerWithSystemUser();
- }
- }, BIND_TO_SYSTEM_USER_RETRY_DELAY);
- }
- } else {
- runAndFlushOnConnectRunnables();
- }
- }
-
- /**
- * Runs all the queued runnables after a service connection is made.
- */
- private void runAndFlushOnConnectRunnables() {
- for (Runnable r : mOnConnectRunnables) {
- r.run();
- }
- mOnConnectRunnables.clear();
- }
-
- private <T> T getComponent(Class<T> clazz) {
- return mSysUiServiceProvider.getComponent(clazz);
- }
-
- @Override
- public void dump(PrintWriter pw) {
- pw.println("Recents");
- pw.println(" currentUserId=" + SystemServicesProxy.getInstance(mContext).getCurrentUser());
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/RecentsActivity.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/RecentsActivity.java
deleted file mode 100644
index a7ccc3a49073..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/RecentsActivity.java
+++ /dev/null
@@ -1,858 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents;
-
-import static com.android.systemui.statusbar.phone.StatusBar.SYSTEM_DIALOG_REASON_HOME_KEY;
-
-import android.app.Activity;
-import android.app.ActivityOptions;
-import android.app.TaskStackBuilder;
-import android.app.WallpaperManager;
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.content.res.Configuration;
-import android.net.Uri;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.Looper;
-import android.os.SystemClock;
-import android.os.UserHandle;
-import android.provider.Settings;
-import android.util.Log;
-import android.view.KeyEvent;
-import android.view.View;
-import android.view.ViewTreeObserver;
-import android.view.ViewTreeObserver.OnPreDrawListener;
-import android.view.WindowManager;
-import android.view.WindowManager.LayoutParams;
-
-import com.android.internal.colorextraction.ColorExtractor;
-import com.android.internal.content.PackageMonitor;
-import com.android.internal.logging.MetricsLogger;
-import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
-import com.android.internal.util.LatencyTracker;
-import com.android.systemui.DejankUtils;
-import com.android.systemui.Dependency;
-import com.android.systemui.Interpolators;
-import com.android.systemui.R;
-import com.android.systemui.colorextraction.SysuiColorExtractor;
-import com.android.systemui.recents.events.EventBus;
-import com.android.systemui.recents.events.activity.CancelEnterRecentsWindowAnimationEvent;
-import com.android.systemui.recents.events.activity.ConfigurationChangedEvent;
-import com.android.systemui.recents.events.activity.DismissRecentsToHomeAnimationStarted;
-import com.android.systemui.recents.events.activity.DockedFirstAnimationFrameEvent;
-import com.android.systemui.recents.events.activity.DockedTopTaskEvent;
-import com.android.systemui.recents.events.activity.EnterRecentsWindowAnimationCompletedEvent;
-import com.android.systemui.recents.events.activity.EnterRecentsWindowLastAnimationFrameEvent;
-import com.android.systemui.recents.events.activity.ExitRecentsWindowFirstAnimationFrameEvent;
-import com.android.systemui.recents.events.activity.HideRecentsEvent;
-import com.android.systemui.recents.events.activity.LaunchTaskFailedEvent;
-import com.android.systemui.recents.events.activity.LaunchTaskSucceededEvent;
-import com.android.systemui.recents.events.activity.MultiWindowStateChangedEvent;
-import com.android.systemui.recents.events.activity.PackagesChangedEvent;
-import com.android.systemui.recents.events.activity.RecentsActivityStartingEvent;
-import com.android.systemui.recents.events.activity.ToggleRecentsEvent;
-import com.android.systemui.recents.events.component.ActivityUnpinnedEvent;
-import com.android.systemui.recents.events.component.RecentsVisibilityChangedEvent;
-import com.android.systemui.recents.events.component.ScreenPinningRequestEvent;
-import com.android.systemui.recents.events.component.SetWaitingForTransitionStartEvent;
-import com.android.systemui.recents.events.ui.AllTaskViewsDismissedEvent;
-import com.android.systemui.recents.events.ui.DeleteTaskDataEvent;
-import com.android.systemui.recents.events.ui.HideIncompatibleAppOverlayEvent;
-import com.android.systemui.recents.events.ui.RecentsDrawnEvent;
-import com.android.systemui.recents.events.ui.ShowApplicationInfoEvent;
-import com.android.systemui.recents.events.ui.ShowIncompatibleAppOverlayEvent;
-import com.android.systemui.recents.events.ui.StackViewScrolledEvent;
-import com.android.systemui.recents.events.ui.TaskViewDismissedEvent;
-import com.android.systemui.recents.events.ui.UserInteractionEvent;
-import com.android.systemui.recents.events.ui.focus.DismissFocusedTaskViewEvent;
-import com.android.systemui.recents.events.ui.focus.FocusNextTaskViewEvent;
-import com.android.systemui.recents.events.ui.focus.FocusPreviousTaskViewEvent;
-import com.android.systemui.recents.events.ui.focus.NavigateTaskViewEvent;
-import com.android.systemui.recents.events.ui.focus.NavigateTaskViewEvent.Direction;
-import com.android.systemui.recents.misc.SystemServicesProxy;
-import com.android.systemui.recents.model.RecentsTaskLoadPlan;
-import com.android.systemui.recents.model.RecentsTaskLoader;
-import com.android.systemui.recents.model.TaskStack;
-import com.android.systemui.recents.utilities.Utilities;
-import com.android.systemui.recents.views.RecentsView;
-import com.android.systemui.recents.views.SystemBarScrimViews;
-import com.android.systemui.shared.recents.model.Task;
-import com.android.systemui.shared.system.ActivityManagerWrapper;
-
-import java.io.FileDescriptor;
-import java.io.PrintWriter;
-
-/**
- * The main Recents activity that is started from RecentsComponent.
- */
-public class RecentsActivity extends Activity implements ViewTreeObserver.OnPreDrawListener,
- ColorExtractor.OnColorsChangedListener {
-
- private final static String TAG = "RecentsActivity";
- private final static boolean DEBUG = false;
-
- public final static int EVENT_BUS_PRIORITY = LegacyRecentsImpl.EVENT_BUS_PRIORITY + 1;
- public final static int INCOMPATIBLE_APP_ALPHA_DURATION = 150;
-
- private PackageMonitor mPackageMonitor = new PackageMonitor() {
- @Override
- public void onPackageRemoved(String packageName, int uid) {
- RecentsActivity.this.onPackageChanged(packageName, getChangingUserId());
- }
-
- @Override
- public boolean onPackageChanged(String packageName, int uid, String[] components) {
- RecentsActivity.this.onPackageChanged(packageName, getChangingUserId());
- return true;
- }
-
- @Override
- public void onPackageModified(String packageName) {
- RecentsActivity.this.onPackageChanged(packageName, getChangingUserId());
- }
- };
- private Handler mHandler = new Handler();
- private long mLastTabKeyEventTime;
- private boolean mFinishedOnStartup;
- private boolean mIgnoreAltTabRelease;
- private boolean mIsVisible;
- private boolean mRecentsStartRequested;
- private Configuration mLastConfig;
-
- // Top level views
- private RecentsView mRecentsView;
- private SystemBarScrimViews mScrimViews;
- private View mIncompatibleAppOverlay;
-
- // Runnables to finish the Recents activity
- private Intent mHomeIntent;
-
- // The trigger to automatically launch the current task
- private int mFocusTimerDuration;
- private final UserInteractionEvent mUserInteractionEvent = new UserInteractionEvent();
-
- // Theme and colors
- private SysuiColorExtractor mColorExtractor;
- private boolean mUsingDarkText;
-
- /**
- * A common Runnable to finish Recents by launching Home with an animation depending on the
- * last activity launch state. Generally we always launch home when we exit Recents rather than
- * just finishing the activity since we don't know what is behind Recents in the task stack.
- */
- class LaunchHomeRunnable implements Runnable {
-
- Intent mLaunchIntent;
- ActivityOptions mOpts;
-
- /**
- * Creates a finish runnable that starts the specified intent.
- */
- public LaunchHomeRunnable(Intent launchIntent, ActivityOptions opts) {
- mLaunchIntent = launchIntent;
- mOpts = opts;
- }
-
- @Override
- public void run() {
- try {
- mHandler.post(() -> {
- ActivityOptions opts = mOpts;
- if (opts == null) {
- opts = ActivityOptions.makeCustomAnimation(RecentsActivity.this,
- R.anim.recents_to_launcher_enter, R.anim.recents_to_launcher_exit);
- }
- startActivityAsUser(mLaunchIntent, opts.toBundle(), UserHandle.CURRENT);
- });
- } catch (Exception e) {
- Log.e(TAG, getString(R.string.recents_launch_error_message, "Home"), e);
- }
- }
- }
-
- /**
- * Broadcast receiver to handle messages from the system
- */
- final BroadcastReceiver mSystemBroadcastReceiver = new BroadcastReceiver() {
- @Override
- public void onReceive(Context ctx, Intent intent) {
- String action = intent.getAction();
- if (action.equals(Intent.ACTION_SCREEN_OFF)) {
- // When the screen turns off, dismiss Recents to Home
- dismissRecentsToHomeIfVisible(false);
- } else if (action.equals(Intent.ACTION_USER_SWITCHED)) {
- // When switching users, dismiss Recents to Home similar to screen off
- finish();
- }
- }
- };
-
- private final OnPreDrawListener mRecentsDrawnEventListener =
- new ViewTreeObserver.OnPreDrawListener() {
- @Override
- public boolean onPreDraw() {
- mRecentsView.getViewTreeObserver().removeOnPreDrawListener(this);
- EventBus.getDefault().post(new RecentsDrawnEvent());
- if (LatencyTracker.isEnabled(getApplicationContext())) {
- DejankUtils.postAfterTraversal(() -> LatencyTracker.getInstance(
- getApplicationContext()).onActionEnd(
- LatencyTracker.ACTION_TOGGLE_RECENTS));
- }
- DejankUtils.postAfterTraversal(() -> {
- LegacyRecentsImpl.getTaskLoader().startLoader(RecentsActivity.this);
- LegacyRecentsImpl.getTaskLoader().getHighResThumbnailLoader().setVisible(true);
- });
- return true;
- }
- };
-
- /**
- * Dismisses recents if we are already visible and the intent is to toggle the recents view.
- */
- boolean dismissRecentsToFocusedTask(int logCategory) {
- SystemServicesProxy ssp = LegacyRecentsImpl.getSystemServices();
- if (ssp.isRecentsActivityVisible()) {
- // If we have a focused Task, launch that Task now
- if (mRecentsView.launchFocusedTask(logCategory)) return true;
- }
- return false;
- }
-
- /**
- * Dismisses recents back to the launch target task.
- */
- boolean dismissRecentsToLaunchTargetTaskOrHome() {
- SystemServicesProxy ssp = LegacyRecentsImpl.getSystemServices();
- if (ssp.isRecentsActivityVisible()) {
- // If we have a focused Task, launch that Task now
- if (mRecentsView.launchPreviousTask()) return true;
- // If none of the other cases apply, then just go Home
- dismissRecentsToHome(true /* animateTaskViews */);
- }
- return false;
- }
-
- /**
- * Dismisses recents if we are already visible and the intent is to toggle the recents view.
- */
- boolean dismissRecentsToFocusedTaskOrHome() {
- SystemServicesProxy ssp = LegacyRecentsImpl.getSystemServices();
- if (ssp.isRecentsActivityVisible()) {
- // If we have a focused Task, launch that Task now
- if (mRecentsView.launchFocusedTask(0 /* logCategory */)) return true;
- // If none of the other cases apply, then just go Home
- dismissRecentsToHome(true /* animateTaskViews */);
- return true;
- }
- return false;
- }
-
- /**
- * Dismisses Recents directly to Home without checking whether it is currently visible.
- */
- void dismissRecentsToHome(boolean animateTaskViews) {
- dismissRecentsToHome(animateTaskViews, null);
- }
-
- /**
- * Dismisses Recents directly to Home without checking whether it is currently visible.
- *
- * @param overrideAnimation If not null, will override the default animation that is based on
- * how Recents was launched.
- */
- void dismissRecentsToHome(boolean animateTaskViews, ActivityOptions overrideAnimation) {
- DismissRecentsToHomeAnimationStarted dismissEvent =
- new DismissRecentsToHomeAnimationStarted(animateTaskViews);
- dismissEvent.addPostAnimationCallback(new LaunchHomeRunnable(mHomeIntent,
- overrideAnimation));
- ActivityManagerWrapper.getInstance().closeSystemWindows(SYSTEM_DIALOG_REASON_HOME_KEY);
- EventBus.getDefault().send(dismissEvent);
- }
-
- /** Dismisses Recents directly to Home if we currently aren't transitioning. */
- boolean dismissRecentsToHomeIfVisible(boolean animated) {
- SystemServicesProxy ssp = LegacyRecentsImpl.getSystemServices();
- if (ssp.isRecentsActivityVisible()) {
- // Return to Home
- dismissRecentsToHome(animated);
- return true;
- }
- return false;
- }
-
- /** Called with the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- mFinishedOnStartup = false;
-
- // In the case that the activity starts up before the Recents component has initialized
- // (usually when debugging/pushing the SysUI apk), just finish this activity.
- SystemServicesProxy ssp = LegacyRecentsImpl.getSystemServices();
- if (ssp == null) {
- mFinishedOnStartup = true;
- finish();
- return;
- }
-
- // Register this activity with the event bus
- EventBus.getDefault().register(this, EVENT_BUS_PRIORITY);
-
- // Initialize the package monitor
- mPackageMonitor.register(this, Looper.getMainLooper(), UserHandle.ALL,
- true /* externalStorage */);
-
- // Select theme based on wallpaper colors
- mColorExtractor = Dependency.get(SysuiColorExtractor.class);
- mColorExtractor.addOnColorsChangedListener(this);
- mUsingDarkText = mColorExtractor.getColors(ColorExtractor.TYPE_DARK,
- WallpaperManager.FLAG_SYSTEM).supportsDarkText();
- setTheme(mUsingDarkText ? R.style.RecentsTheme_Wallpaper_Light
- : R.style.RecentsTheme_Wallpaper);
-
- // Set the Recents layout
- setContentView(R.layout.recents);
- takeKeyEvents(true);
- mRecentsView = findViewById(R.id.recents_view);
- mScrimViews = new SystemBarScrimViews(this);
- getWindow().getAttributes().privateFlags |=
- WindowManager.LayoutParams.PRIVATE_FLAG_FORCE_DECOR_VIEW_VISIBILITY;
- if (LegacyRecentsImpl.getConfiguration().isLowRamDevice) {
- getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
- }
-
- mLastConfig = new Configuration(Utilities.getAppConfiguration(this));
-
- // Set the window background
- mRecentsView.updateBackgroundScrim(getWindow(), isInMultiWindowMode());
-
- // Create the home intent runnable
- mHomeIntent = new Intent(Intent.ACTION_MAIN, null);
- mHomeIntent.addCategory(Intent.CATEGORY_HOME);
- mHomeIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
- Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
-
- // Register the broadcast receiver to handle messages when the screen is turned off
- IntentFilter filter = new IntentFilter();
- filter.addAction(Intent.ACTION_SCREEN_OFF);
- filter.addAction(Intent.ACTION_USER_SWITCHED);
- registerReceiver(mSystemBroadcastReceiver, filter);
-
- getWindow().addPrivateFlags(LayoutParams.PRIVATE_FLAG_NO_MOVE_ANIMATION);
- }
-
- @Override
- protected void onStart() {
- super.onStart();
-
- // Reload the stack view whenever we are made visible again
- reloadStackView();
-
- // Notify that recents is now visible
- EventBus.getDefault().send(new RecentsVisibilityChangedEvent(this, true));
- MetricsLogger.visible(this, MetricsEvent.OVERVIEW_ACTIVITY);
-
- // Getting system scrim colors ignoring wallpaper visibility since it should never be grey.
- ColorExtractor.GradientColors systemColors = mColorExtractor.getNeutralColors();
- // We don't want to interpolate colors because we're defining the initial state.
- // Gradient should be set/ready when you open "Recents".
- mRecentsView.setScrimColors(systemColors, false);
-
- // Notify of the next draw
- mRecentsView.getViewTreeObserver().addOnPreDrawListener(mRecentsDrawnEventListener);
-
- // If Recents was restarted, then it should complete the enter animation with partially
- // reset launch state with dock, app and home set to false
- Object isRelaunching = getLastNonConfigurationInstance();
- if (isRelaunching != null && isRelaunching instanceof Boolean && (boolean) isRelaunching) {
- RecentsActivityLaunchState launchState = LegacyRecentsImpl.getConfiguration().getLaunchState();
- launchState.launchedViaDockGesture = false;
- launchState.launchedFromApp = false;
- launchState.launchedFromHome = false;
- onEnterAnimationComplete();
- }
- mRecentsStartRequested = false;
- }
-
- @Override
- public void onColorsChanged(ColorExtractor colorExtractor, int which) {
- if ((which & WallpaperManager.FLAG_SYSTEM) != 0) {
- ColorExtractor.GradientColors colors = mColorExtractor.getNeutralColors();
- boolean darkText = colors.supportsDarkText();
- if (darkText != mUsingDarkText) {
- mUsingDarkText = darkText;
- setTheme(mUsingDarkText ? R.style.RecentsTheme_Wallpaper_Light
- : R.style.RecentsTheme_Wallpaper);
- mRecentsView.reevaluateStyles();
- }
- mRecentsView.setScrimColors(colors, true /* animated */);
- }
- }
-
- /**
- * Reloads the stack views upon launching Recents.
- */
- private void reloadStackView() {
- // If the Recents component has preloaded a load plan, then use that to prevent
- // reconstructing the task stack
- RecentsTaskLoader loader = LegacyRecentsImpl.getTaskLoader();
- RecentsTaskLoadPlan loadPlan = RecentsImpl.consumeInstanceLoadPlan();
- if (loadPlan == null) {
- loadPlan = new RecentsTaskLoadPlan(this);
- }
-
- // Start loading tasks according to the load plan
- RecentsConfiguration config = LegacyRecentsImpl.getConfiguration();
- RecentsActivityLaunchState launchState = config.getLaunchState();
- if (!loadPlan.hasTasks()) {
- loader.preloadTasks(loadPlan, launchState.launchedToTaskId);
- }
-
- RecentsTaskLoadPlan.Options loadOpts = new RecentsTaskLoadPlan.Options();
- loadOpts.runningTaskId = launchState.launchedToTaskId;
- loadOpts.numVisibleTasks = launchState.launchedNumVisibleTasks;
- loadOpts.numVisibleTaskThumbnails = launchState.launchedNumVisibleThumbnails;
- loader.loadTasks(loadPlan, loadOpts);
- TaskStack stack = loadPlan.getTaskStack();
- mRecentsView.onReload(stack, mIsVisible);
-
- // Update the nav bar scrim, but defer the animation until the enter-window event
- boolean animateNavBarScrim = !launchState.launchedViaDockGesture;
- mScrimViews.updateNavBarScrim(animateNavBarScrim, stack.getTaskCount() > 0, null);
-
- // If this is a new instance relaunched by AM, without going through the normal mechanisms,
- // then we have to manually trigger the enter animation state
- boolean wasLaunchedByAm = !launchState.launchedFromHome &&
- !launchState.launchedFromApp;
- if (wasLaunchedByAm) {
- EventBus.getDefault().send(new EnterRecentsWindowAnimationCompletedEvent());
- }
-
- // Keep track of whether we launched from the nav bar button or via alt-tab
- if (launchState.launchedWithAltTab) {
- MetricsLogger.count(this, "overview_trigger_alttab", 1);
- } else {
- MetricsLogger.count(this, "overview_trigger_nav_btn", 1);
- }
-
- // Keep track of whether we launched from an app or from home
- if (launchState.launchedFromApp) {
- Task launchTarget = stack.getLaunchTarget();
- int launchTaskIndexInStack = launchTarget != null
- ? stack.indexOfTask(launchTarget)
- : 0;
- MetricsLogger.count(this, "overview_source_app", 1);
- // If from an app, track the stack index of the app in the stack (for affiliated tasks)
- MetricsLogger.histogram(this, "overview_source_app_index", launchTaskIndexInStack);
- } else {
- MetricsLogger.count(this, "overview_source_home", 1);
- }
-
- // Keep track of the total stack task count
- int taskCount = mRecentsView.getStack().getTaskCount();
- MetricsLogger.histogram(this, "overview_task_count", taskCount);
-
- // After we have resumed, set the visible state until the next onStop() call
- mIsVisible = true;
- }
-
- @Override
- public void onEnterAnimationComplete() {
- super.onEnterAnimationComplete();
- EventBus.getDefault().send(new EnterRecentsWindowAnimationCompletedEvent());
-
- // Workaround for b/64694148: The animation started callback is not made (see
- // RecentsImpl.getThumbnailTransitionActivityOptions) so reset the transition-waiting state
- // once the enter animation has completed.
- EventBus.getDefault().send(new SetWaitingForTransitionStartEvent(false));
- }
-
- @Override
- public Object onRetainNonConfigurationInstance() {
- return true;
- }
-
- @Override
- protected void onPause() {
- super.onPause();
-
- mIgnoreAltTabRelease = false;
- }
-
- @Override
- public void onConfigurationChanged(Configuration newConfig) {
- super.onConfigurationChanged(newConfig);
-
- // Notify of the config change
- Configuration newDeviceConfiguration = Utilities.getAppConfiguration(this);
- int numStackTasks = mRecentsView.getStack().getTaskCount();
- EventBus.getDefault().send(new ConfigurationChangedEvent(false /* fromMultiWindow */,
- mLastConfig.orientation != newDeviceConfiguration.orientation,
- mLastConfig.densityDpi != newDeviceConfiguration.densityDpi, numStackTasks > 0));
-
- mLastConfig.updateFrom(newDeviceConfiguration);
- }
-
- @Override
- public void onMultiWindowModeChanged(boolean isInMultiWindowMode) {
- super.onMultiWindowModeChanged(isInMultiWindowMode);
-
- // Set the window background
- mRecentsView.updateBackgroundScrim(getWindow(), isInMultiWindowMode);
-
- // Reload the task stack view if we are still visible to pick up the change in tasks that
- // result from entering/exiting multi-window
- if (mIsVisible) {
- reloadTaskStack(isInMultiWindowMode, true /* sendConfigChangedEvent */);
- }
- }
-
- @Override
- protected void onStop() {
- super.onStop();
-
- // Notify that recents is now hidden
- mIsVisible = false;
- EventBus.getDefault().send(new RecentsVisibilityChangedEvent(this, false));
- MetricsLogger.hidden(this, MetricsEvent.OVERVIEW_ACTIVITY);
- LegacyRecentsImpl.getTaskLoader().getHighResThumbnailLoader().setVisible(false);
-
- // When recents starts again before onStop, do not reset launch flags so entrance animation
- // can run
- if (!isChangingConfigurations() && !mRecentsStartRequested) {
- // Workaround for b/22542869, if the RecentsActivity is started again, but without going
- // through SystemUI, we need to reset the config launch flags to ensure that we do not
- // wait on the system to send a signal that was never queued.
- RecentsConfiguration config = LegacyRecentsImpl.getConfiguration();
- RecentsActivityLaunchState launchState = config.getLaunchState();
- launchState.reset();
- }
-
- // Force a gc to attempt to clean up bitmap references more quickly (b/38258699)
- LegacyRecentsImpl.getSystemServices().gc();
- }
-
- @Override
- protected void onDestroy() {
- super.onDestroy();
-
- // In the case that the activity finished on startup, just skip the unregistration below
- if (mFinishedOnStartup) {
- return;
- }
-
- // Unregister the system broadcast receivers
- unregisterReceiver(mSystemBroadcastReceiver);
-
- // Unregister any broadcast receivers for the task loader
- mPackageMonitor.unregister();
-
- EventBus.getDefault().unregister(this);
- }
-
- @Override
- public void onAttachedToWindow() {
- super.onAttachedToWindow();
- EventBus.getDefault().register(mScrimViews, EVENT_BUS_PRIORITY);
- }
-
- @Override
- public void onDetachedFromWindow() {
- super.onDetachedFromWindow();
- EventBus.getDefault().unregister(mScrimViews);
- }
-
- @Override
- public void onTrimMemory(int level) {
- RecentsTaskLoader loader = LegacyRecentsImpl.getTaskLoader();
- if (loader != null) {
- loader.onTrimMemory(level);
- }
- }
-
- @Override
- public boolean onKeyDown(int keyCode, KeyEvent event) {
- switch (keyCode) {
- case KeyEvent.KEYCODE_TAB: {
- int altTabKeyDelay = getResources().getInteger(R.integer.recents_alt_tab_key_delay);
- boolean hasRepKeyTimeElapsed = (SystemClock.elapsedRealtime() -
- mLastTabKeyEventTime) > altTabKeyDelay;
- if (event.getRepeatCount() <= 0 || hasRepKeyTimeElapsed) {
- // Focus the next task in the stack
- final boolean backward = event.isShiftPressed();
- if (backward) {
- EventBus.getDefault().send(new FocusPreviousTaskViewEvent());
- } else {
- EventBus.getDefault().send(new FocusNextTaskViewEvent());
- }
- mLastTabKeyEventTime = SystemClock.elapsedRealtime();
-
- // In the case of another ALT event, don't ignore the next release
- if (event.isAltPressed()) {
- mIgnoreAltTabRelease = false;
- }
- }
- return true;
- }
- case KeyEvent.KEYCODE_DPAD_UP:
- case KeyEvent.KEYCODE_DPAD_DOWN:
- case KeyEvent.KEYCODE_DPAD_LEFT:
- case KeyEvent.KEYCODE_DPAD_RIGHT: {
- final Direction direction = NavigateTaskViewEvent.getDirectionFromKeyCode(keyCode);
- EventBus.getDefault().send(new NavigateTaskViewEvent(direction));
- return true;
- }
- case KeyEvent.KEYCODE_DEL:
- case KeyEvent.KEYCODE_FORWARD_DEL: {
- if (event.getRepeatCount() <= 0) {
- EventBus.getDefault().send(new DismissFocusedTaskViewEvent());
-
- // Keep track of deletions by keyboard
- MetricsLogger.histogram(this, "overview_task_dismissed_source",
- Constants.Metrics.DismissSourceKeyboard);
- return true;
- }
- }
- default:
- break;
- }
- return super.onKeyDown(keyCode, event);
- }
-
- @Override
- public void onUserInteraction() {
- EventBus.getDefault().send(mUserInteractionEvent);
- }
-
- @Override
- public void onBackPressed() {
- // Back behaves like the recents button so just trigger a toggle event
- EventBus.getDefault().send(new ToggleRecentsEvent());
- }
-
- /**** EventBus events ****/
-
- public final void onBusEvent(ToggleRecentsEvent event) {
- RecentsActivityLaunchState launchState = LegacyRecentsImpl.getConfiguration().getLaunchState();
- if (launchState.launchedFromHome) {
- dismissRecentsToHome(true /* animateTaskViews */);
- } else {
- dismissRecentsToLaunchTargetTaskOrHome();
- }
- }
-
- public final void onBusEvent(RecentsActivityStartingEvent event) {
- mRecentsStartRequested = true;
- }
-
- public final void onBusEvent(HideRecentsEvent event) {
- if (event.triggeredFromAltTab) {
- // If we are hiding from releasing Alt-Tab, dismiss Recents to the focused app
- if (!mIgnoreAltTabRelease) {
- dismissRecentsToFocusedTaskOrHome();
- }
- } else if (event.triggeredFromHomeKey) {
- dismissRecentsToHome(true /* animateTaskViews */);
-
- // Cancel any pending dozes
- EventBus.getDefault().send(mUserInteractionEvent);
- } else {
- // Do nothing
- }
- }
-
- public final void onBusEvent(EnterRecentsWindowLastAnimationFrameEvent event) {
- mRecentsView.getViewTreeObserver().addOnPreDrawListener(this);
- mRecentsView.invalidate();
- }
-
- public final void onBusEvent(ExitRecentsWindowFirstAnimationFrameEvent event) {
- mRecentsView.getViewTreeObserver().addOnPreDrawListener(this);
- mRecentsView.invalidate();
- }
-
- public final void onBusEvent(DockedFirstAnimationFrameEvent event) {
- mRecentsView.getViewTreeObserver().addOnPreDrawListener(this);
- mRecentsView.invalidate();
- }
-
- public final void onBusEvent(CancelEnterRecentsWindowAnimationEvent event) {
- RecentsActivityLaunchState launchState = LegacyRecentsImpl.getConfiguration().getLaunchState();
- int launchToTaskId = launchState.launchedToTaskId;
- if (launchToTaskId != -1 &&
- (event.launchTask == null || launchToTaskId != event.launchTask.key.id)) {
- ActivityManagerWrapper am = ActivityManagerWrapper.getInstance();
- am.cancelWindowTransition(launchState.launchedToTaskId);
- }
- }
-
- public final void onBusEvent(ShowApplicationInfoEvent event) {
- // Create a new task stack with the application info details activity
- Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
- Uri.fromParts("package", event.task.key.getComponent().getPackageName(), null));
- intent.setComponent(intent.resolveActivity(getPackageManager()));
- TaskStackBuilder.create(this)
- .addNextIntentWithParentStack(intent).startActivities(null,
- new UserHandle(event.task.key.userId));
-
- // Keep track of app-info invocations
- MetricsLogger.count(this, "overview_app_info", 1);
- }
-
- public final void onBusEvent(ShowIncompatibleAppOverlayEvent event) {
- if (mIncompatibleAppOverlay == null) {
- mIncompatibleAppOverlay = Utilities.findViewStubById(this,
- R.id.incompatible_app_overlay_stub).inflate();
- mIncompatibleAppOverlay.setWillNotDraw(false);
- mIncompatibleAppOverlay.setVisibility(View.VISIBLE);
- }
- mIncompatibleAppOverlay.animate()
- .alpha(1f)
- .setDuration(INCOMPATIBLE_APP_ALPHA_DURATION)
- .setInterpolator(Interpolators.ALPHA_IN)
- .start();
- }
-
- public final void onBusEvent(HideIncompatibleAppOverlayEvent event) {
- if (mIncompatibleAppOverlay != null) {
- mIncompatibleAppOverlay.animate()
- .alpha(0f)
- .setDuration(INCOMPATIBLE_APP_ALPHA_DURATION)
- .setInterpolator(Interpolators.ALPHA_OUT)
- .start();
- }
- }
-
- public final void onBusEvent(DeleteTaskDataEvent event) {
- // Remove any stored data from the loader
- RecentsTaskLoader loader = LegacyRecentsImpl.getTaskLoader();
- loader.deleteTaskData(event.task, false);
-
- // Remove the task from activity manager
- ActivityManagerWrapper.getInstance().removeTask(event.task.key.id);
- }
-
- public final void onBusEvent(TaskViewDismissedEvent event) {
- mRecentsView.updateScrimOpacity();
- }
-
- public final void onBusEvent(AllTaskViewsDismissedEvent event) {
- SystemServicesProxy ssp = LegacyRecentsImpl.getSystemServices();
- if (ssp.hasDockedTask()) {
- mRecentsView.showEmptyView(event.msgResId);
- } else {
- // Just go straight home (no animation necessary because there are no more task views)
- dismissRecentsToHome(false /* animateTaskViews */);
- }
-
- // Keep track of all-deletions
- MetricsLogger.count(this, "overview_task_all_dismissed", 1);
- }
-
- public final void onBusEvent(LaunchTaskSucceededEvent event) {
- MetricsLogger.histogram(this, "overview_task_launch_index", event.taskIndexFromStackFront);
- }
-
- public final void onBusEvent(LaunchTaskFailedEvent event) {
- // Return to Home
- dismissRecentsToHome(true /* animateTaskViews */);
-
- MetricsLogger.count(this, "overview_task_launch_failed", 1);
- }
-
- public final void onBusEvent(ScreenPinningRequestEvent event) {
- MetricsLogger.count(this, "overview_screen_pinned", 1);
- }
-
- public final void onBusEvent(StackViewScrolledEvent event) {
- // Once the user has scrolled while holding alt-tab, then we should ignore the release of
- // the key
- mIgnoreAltTabRelease = true;
- }
-
- public final void onBusEvent(final DockedTopTaskEvent event) {
- mRecentsView.getViewTreeObserver().addOnPreDrawListener(mRecentsDrawnEventListener);
- mRecentsView.invalidate();
- }
-
- public final void onBusEvent(final ActivityUnpinnedEvent event) {
- if (mIsVisible) {
- // Skip the configuration change event as the PiP activity does not actually affect the
- // config of recents
- reloadTaskStack(isInMultiWindowMode(), false /* sendConfigChangedEvent */);
- }
- }
-
- private void reloadTaskStack(boolean isInMultiWindowMode, boolean sendConfigChangedEvent) {
- // Reload the task stack completely
- RecentsConfiguration config = LegacyRecentsImpl.getConfiguration();
- RecentsActivityLaunchState launchState = config.getLaunchState();
- RecentsTaskLoader loader = LegacyRecentsImpl.getTaskLoader();
- RecentsTaskLoadPlan loadPlan = new RecentsTaskLoadPlan(this);
- loader.preloadTasks(loadPlan, -1 /* runningTaskId */);
-
- RecentsTaskLoadPlan.Options loadOpts = new RecentsTaskLoadPlan.Options();
- loadOpts.numVisibleTasks = launchState.launchedNumVisibleTasks;
- loadOpts.numVisibleTaskThumbnails = launchState.launchedNumVisibleThumbnails;
- loader.loadTasks(loadPlan, loadOpts);
-
- TaskStack stack = loadPlan.getTaskStack();
- int numStackTasks = stack.getTaskCount();
- boolean showDeferredAnimation = numStackTasks > 0;
-
- if (sendConfigChangedEvent) {
- EventBus.getDefault().send(new ConfigurationChangedEvent(true /* fromMultiWindow */,
- false /* fromDeviceOrientationChange */, false /* fromDisplayDensityChange */,
- numStackTasks > 0));
- }
- EventBus.getDefault().send(new MultiWindowStateChangedEvent(isInMultiWindowMode,
- showDeferredAnimation, stack));
- }
-
- @Override
- public boolean onPreDraw() {
- mRecentsView.getViewTreeObserver().removeOnPreDrawListener(this);
- return true;
- }
-
- public void onPackageChanged(String packageName, int userId) {
- LegacyRecentsImpl.getTaskLoader().onPackageChanged(packageName);
- EventBus.getDefault().send(new PackagesChangedEvent(packageName, userId));
- }
-
- @Override
- public void dump(String prefix, FileDescriptor fd, PrintWriter writer, String[] args) {
- super.dump(prefix, fd, writer, args);
- EventBus.getDefault().dump(prefix, writer);
- LegacyRecentsImpl.getTaskLoader().dump(prefix, writer);
-
- String id = Integer.toHexString(System.identityHashCode(this));
-
- writer.print(prefix); writer.print(TAG);
- writer.print(" visible="); writer.print(mIsVisible ? "Y" : "N");
- writer.print(" currentTime="); writer.print(System.currentTimeMillis());
- writer.print(" [0x"); writer.print(id); writer.print("]");
- writer.println();
-
- if (mRecentsView != null) {
- mRecentsView.dump(prefix, writer);
- }
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/RecentsActivityLaunchState.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/RecentsActivityLaunchState.java
deleted file mode 100644
index 14fda952b7ac..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/RecentsActivityLaunchState.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents;
-
-/**
- * The launch state of the RecentsActivity.
- *
- * Current Constraints:
- * - needed in onStart() before onNewIntent()
- * - needs to be reset when Recents is hidden
- * - needs to be computed in Recents component
- * - needs to be accessible by views
- */
-public class RecentsActivityLaunchState {
-
- public boolean launchedWithAltTab;
- public boolean launchedFromApp;
- // Set if the activity that we launched from entered PiP during the transition into Recents
- public boolean launchedFromPipApp;
- // Set if the next activity that quick-switch will launch is the PiP activity
- public boolean launchedWithNextPipApp;
- public boolean launchedFromHome;
- public boolean launchedViaDragGesture;
- public boolean launchedViaDockGesture;
- public int launchedToTaskId;
- public int launchedNumVisibleTasks;
- public int launchedNumVisibleThumbnails;
-
- public void reset() {
- launchedFromHome = false;
- launchedFromApp = false;
- launchedFromPipApp = false;
- launchedWithNextPipApp = false;
- launchedToTaskId = -1;
- launchedWithAltTab = false;
- launchedViaDragGesture = false;
- launchedViaDockGesture = false;
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/RecentsConfiguration.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/RecentsConfiguration.java
deleted file mode 100644
index ee53734d175e..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/RecentsConfiguration.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents;
-
-import android.app.ActivityManager;
-import android.content.Context;
-import android.content.res.Configuration;
-import android.content.res.Resources;
-
-import android.os.SystemProperties;
-
-import com.android.systemui.R;
-import com.android.systemui.recents.misc.SystemServicesProxy;
-import com.android.systemui.recents.views.DockState;
-
-/**
- * Represents the dock regions for each orientation.
- */
-class DockRegion {
- public static DockState[] PHONE_LANDSCAPE = {
- // We only allow docking to the left in landscape for now on small devices
- DockState.LEFT
- };
- public static DockState[] PHONE_PORTRAIT = {
- // We only allow docking to the top for now on small devices
- DockState.TOP
- };
- public static DockState[] TABLET_LANDSCAPE = {
- DockState.LEFT,
- DockState.RIGHT
- };
- public static DockState[] TABLET_PORTRAIT = PHONE_PORTRAIT;
-}
-
-/**
- * Application resources that can be retrieved from the application context and are not specifically
- * tied to the current activity.
- */
-public class RecentsConfiguration {
-
- private static final int LARGE_SCREEN_MIN_DP = 600;
- private static final int XLARGE_SCREEN_MIN_DP = 720;
-
- // Launch states
- public RecentsActivityLaunchState mLaunchState = new RecentsActivityLaunchState();
-
- // Since the positions in Recents has to be calculated globally (before the RecentsActivity
- // starts), we need to calculate some resource values ourselves, instead of relying on framework
- // resources.
- public final boolean isLargeScreen;
- public final boolean isXLargeScreen;
- public final int smallestWidth;
-
- /** Misc **/
- public boolean fakeShadows;
- public int svelteLevel;
-
- // Whether this product supports Grid-based Recents. If this is field is set to true, then
- // Recents will layout task views in a grid mode when there's enough space in the screen.
- public boolean isGridEnabled;
-
- // Support for Android Recents for low ram devices. If this field is set to true, then Recents
- // will use the alternative layout.
- public boolean isLowRamDevice;
-
- // Enable drag and drop split from Recents. Disabled for low ram devices.
- public boolean dragToSplitEnabled;
-
- private final Context mAppContext;
-
- public RecentsConfiguration(Context context) {
- // Load only resources that can not change after the first load either through developer
- // settings or via multi window
- SystemServicesProxy ssp = LegacyRecentsImpl.getSystemServices();
- mAppContext = context.getApplicationContext();
- Resources res = mAppContext.getResources();
- fakeShadows = res.getBoolean(R.bool.config_recents_fake_shadows);
- svelteLevel = res.getInteger(R.integer.recents_svelte_level);
- isGridEnabled = SystemProperties.getBoolean("ro.recents.grid", false);
- isLowRamDevice = ActivityManager.isLowRamDeviceStatic();
- dragToSplitEnabled = !isLowRamDevice;
-
- float screenDensity = context.getResources().getDisplayMetrics().density;
- smallestWidth = ssp.getDeviceSmallestWidth();
- isLargeScreen = smallestWidth >= (int) (screenDensity * LARGE_SCREEN_MIN_DP);
- isXLargeScreen = smallestWidth >= (int) (screenDensity * XLARGE_SCREEN_MIN_DP);
- }
-
- /**
- * Returns the activity launch state.
- * TODO: This will be refactored out of RecentsConfiguration.
- */
- public RecentsActivityLaunchState getLaunchState() {
- return mLaunchState;
- }
-
- /**
- * Returns the preferred dock states for the current orientation.
- * @return a list of dock states for device and its orientation
- */
- public DockState[] getDockStatesForCurrentOrientation() {
- boolean isLandscape = mAppContext.getResources().getConfiguration().orientation ==
- Configuration.ORIENTATION_LANDSCAPE;
- RecentsConfiguration config = LegacyRecentsImpl.getConfiguration();
- if (config.isLargeScreen) {
- return isLandscape ? DockRegion.TABLET_LANDSCAPE : DockRegion.TABLET_PORTRAIT;
- } else {
- return isLandscape ? DockRegion.PHONE_LANDSCAPE : DockRegion.PHONE_PORTRAIT;
- }
- }
-
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/RecentsDebugFlags.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/RecentsDebugFlags.java
deleted file mode 100644
index 19185939c553..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/RecentsDebugFlags.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents;
-
-public class RecentsDebugFlags {
-
- public static class Static {
- // Enables debug drawing for the transition thumbnail
- public static final boolean EnableTransitionThumbnailDebugMode = false;
-
- // Disables enter and exit transitions for other tasks for low ram devices
- public static final boolean DisableRecentsLowRamEnterExitAnimation = false;
-
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/RecentsImpl.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/RecentsImpl.java
deleted file mode 100644
index 3e5acabfed49..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/RecentsImpl.java
+++ /dev/null
@@ -1,1118 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents;
-
-import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME;
-import static android.app.WindowConfiguration.ACTIVITY_TYPE_RECENTS;
-import static android.view.View.MeasureSpec;
-
-import static com.android.systemui.statusbar.phone.StatusBar.SYSTEM_DIALOG_REASON_RECENT_APPS;
-
-import android.app.ActivityManager;
-import android.app.ActivityOptions;
-import android.app.trust.TrustManager;
-import android.content.ActivityNotFoundException;
-import android.content.ComponentCallbacks2;
-import android.content.Context;
-import android.content.Intent;
-import android.content.res.Resources;
-import android.graphics.Bitmap;
-import android.graphics.Rect;
-import android.graphics.RectF;
-import android.graphics.drawable.Drawable;
-import android.os.Handler;
-import android.os.SystemClock;
-import android.util.ArraySet;
-import android.util.Log;
-import android.util.MutableBoolean;
-import android.util.Pair;
-import android.view.LayoutInflater;
-import android.view.ViewConfiguration;
-import android.view.WindowManager;
-
-import android.widget.Toast;
-
-import com.android.systemui.Dependency;
-import com.android.systemui.SysUiServiceProvider;
-import com.android.systemui.pip.phone.ForegroundThread;
-import com.google.android.collect.Lists;
-
-import com.android.internal.logging.MetricsLogger;
-import com.android.internal.policy.DockedDividerUtils;
-import com.android.systemui.R;
-import com.android.systemui.recents.events.EventBus;
-import com.android.systemui.recents.events.activity.DockedTopTaskEvent;
-import com.android.systemui.recents.events.activity.EnterRecentsWindowLastAnimationFrameEvent;
-import com.android.systemui.recents.events.activity.HideRecentsEvent;
-import com.android.systemui.recents.events.activity.LaunchMostRecentTaskRequestEvent;
-import com.android.systemui.recents.events.activity.LaunchNextTaskRequestEvent;
-import com.android.systemui.recents.events.activity.RecentsActivityStartingEvent;
-import com.android.systemui.recents.events.activity.ToggleRecentsEvent;
-import com.android.systemui.recents.events.component.ActivityPinnedEvent;
-import com.android.systemui.recents.events.component.ActivityUnpinnedEvent;
-import com.android.systemui.recents.events.component.HidePipMenuEvent;
-import com.android.systemui.recents.events.component.RecentsVisibilityChangedEvent;
-import com.android.systemui.recents.events.component.ScreenPinningRequestEvent;
-import com.android.systemui.recents.events.ui.DraggingInRecentsEndedEvent;
-import com.android.systemui.recents.events.ui.DraggingInRecentsEvent;
-import com.android.systemui.recents.events.ui.TaskSnapshotChangedEvent;
-import com.android.systemui.recents.misc.DozeTrigger;
-import com.android.systemui.recents.misc.SystemServicesProxy;
-import com.android.systemui.recents.misc.SysUiTaskStackChangeListener;
-import com.android.systemui.recents.model.RecentsTaskLoadPlan;
-import com.android.systemui.recents.model.RecentsTaskLoader;
-import com.android.systemui.shared.recents.model.Task;
-import com.android.systemui.shared.recents.model.Task.TaskKey;
-import com.android.systemui.recents.model.TaskStack;
-import com.android.systemui.shared.recents.model.ThumbnailData;
-import com.android.systemui.recents.views.TaskStackLayoutAlgorithm;
-import com.android.systemui.recents.views.TaskStackLayoutAlgorithm.VisibilityReport;
-import com.android.systemui.recents.views.TaskStackView;
-import com.android.systemui.recents.views.TaskViewHeader;
-import com.android.systemui.recents.views.TaskViewTransform;
-import com.android.systemui.recents.views.grid.TaskGridLayoutAlgorithm;
-import com.android.systemui.shared.recents.view.AppTransitionAnimationSpecCompat;
-import com.android.systemui.shared.recents.view.AppTransitionAnimationSpecsFuture;
-import com.android.systemui.shared.recents.view.RecentsTransition;
-import com.android.systemui.shared.system.ActivityManagerWrapper;
-import com.android.systemui.stackdivider.DividerView;
-import com.android.systemui.statusbar.phone.StatusBar;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * An implementation of the Recents component for the current user. For secondary users, this can
- * be called remotely from the system user.
- */
-public class RecentsImpl implements ActivityOptions.OnAnimationFinishedListener {
-
- private final static String TAG = "RecentsImpl";
-
- // The minimum amount of time between each recents button press that we will handle
- private final static int MIN_TOGGLE_DELAY_MS = 350;
-
- // The duration within which the user releasing the alt tab (from when they pressed alt tab)
- // that the fast alt-tab animation will run. If the user's alt-tab takes longer than this
- // duration, then we will toggle recents after this duration.
- private final static int FAST_ALT_TAB_DELAY_MS = 225;
-
- private final static ArraySet<TaskKey> EMPTY_SET = new ArraySet<>();
-
- public final static String RECENTS_PACKAGE = "com.android.systemui";
- public final static String RECENTS_ACTIVITY = "com.android.systemui.recents.RecentsActivity";
-
- /**
- * An implementation of SysUiTaskStackChangeListener, that allows us to listen for changes to the system
- * task stacks and update recents accordingly.
- */
- class TaskStackListenerImpl extends SysUiTaskStackChangeListener {
-
- private OverviewProxyService mOverviewProxyService;
-
- public TaskStackListenerImpl() {
- mOverviewProxyService = Dependency.get(OverviewProxyService.class);
- }
-
- @Override
- public void onTaskStackChangedBackground() {
- // Skip background preloading recents in SystemUI if the overview services is bound
- if (mOverviewProxyService.isEnabled()) {
- return;
- }
-
- // Check this is for the right user
- if (!checkCurrentUserId(mContext, false /* debug */)) {
- return;
- }
-
- // Preloads the next task
- RecentsConfiguration config = LegacyRecentsImpl.getConfiguration();
- if (config.svelteLevel == RecentsTaskLoader.SVELTE_NONE) {
- Rect windowRect = getWindowRect(null /* windowRectOverride */);
- if (windowRect.isEmpty()) {
- return;
- }
-
- // Load the next task only if we aren't svelte
- ActivityManager.RunningTaskInfo runningTaskInfo =
- ActivityManagerWrapper.getInstance().getRunningTask();
- RecentsTaskLoader loader = LegacyRecentsImpl.getTaskLoader();
- RecentsTaskLoadPlan plan = new RecentsTaskLoadPlan(mContext);
- loader.preloadTasks(plan, -1);
- TaskStack stack = plan.getTaskStack();
- RecentsActivityLaunchState launchState = new RecentsActivityLaunchState();
- RecentsTaskLoadPlan.Options launchOpts = new RecentsTaskLoadPlan.Options();
-
- synchronized (mBackgroundLayoutAlgorithm) {
- // This callback is made when a new activity is launched and the old one is
- // paused so ignore the current activity and try and preload the thumbnail for
- // the previous one.
- updateDummyStackViewLayout(mBackgroundLayoutAlgorithm, stack, windowRect);
-
- // Launched from app is always the worst case (in terms of how many
- // thumbnails/tasks visible)
- launchState.launchedFromApp = true;
- mBackgroundLayoutAlgorithm.update(plan.getTaskStack(), EMPTY_SET, launchState,
- -1 /* lastScrollPPresent */);
- VisibilityReport visibilityReport =
- mBackgroundLayoutAlgorithm.computeStackVisibilityReport(
- stack.getTasks());
-
- launchOpts.runningTaskId = runningTaskInfo != null ? runningTaskInfo.id : -1;
- launchOpts.numVisibleTasks = visibilityReport.numVisibleTasks;
- launchOpts.numVisibleTaskThumbnails = visibilityReport.numVisibleThumbnails;
- launchOpts.onlyLoadForCache = true;
- launchOpts.onlyLoadPausedActivities = true;
- launchOpts.loadThumbnails = true;
- }
- loader.loadTasks(plan, launchOpts);
- }
- }
-
- @Override
- public void onActivityPinned(String packageName, int userId, int taskId, int stackId) {
- // Check this is for the right user
- if (!checkCurrentUserId(mContext, false /* debug */)) {
- return;
- }
-
- // This time needs to be fetched the same way the last active time is fetched in
- // {@link TaskRecord#touchActiveTime}
- LegacyRecentsImpl.getConfiguration().getLaunchState().launchedFromPipApp = true;
- LegacyRecentsImpl.getConfiguration().getLaunchState().launchedWithNextPipApp = false;
- EventBus.getDefault().send(new ActivityPinnedEvent(taskId));
- consumeInstanceLoadPlan();
- sLastPipTime = System.currentTimeMillis();
- }
-
- @Override
- public void onActivityUnpinned() {
- // Check this is for the right user
- if (!checkCurrentUserId(mContext, false /* debug */)) {
- return;
- }
-
- EventBus.getDefault().send(new ActivityUnpinnedEvent());
- sLastPipTime = -1;
- }
-
- @Override
- public void onTaskSnapshotChanged(int taskId, ThumbnailData snapshot) {
- // Check this is for the right user
- if (!checkCurrentUserId(mContext, false /* debug */)) {
- return;
- }
-
- EventBus.getDefault().send(new TaskSnapshotChangedEvent(taskId, snapshot));
- }
- }
-
- protected static RecentsTaskLoadPlan sInstanceLoadPlan;
- // Stores the last pinned task time
- protected static long sLastPipTime = -1;
- // Stores whether we are waiting for a transition to/from recents to start. During this time,
- // we disallow the user from manually toggling recents until the transition has started.
- private static boolean mWaitingForTransitionStart = false;
- // Stores whether or not the user toggled while we were waiting for a transition to/from
- // recents. In this case, we defer the toggle state until then and apply it immediately after.
- private static boolean mToggleFollowingTransitionStart = true;
-
- private Runnable mResetToggleFlagListener = new Runnable() {
- @Override
- public void run() {
- setWaitingForTransitionStart(false);
- }
- };
-
- private TrustManager mTrustManager;
- protected Context mContext;
- protected Handler mHandler;
- TaskStackListenerImpl mTaskStackListener;
- boolean mDraggingInRecents;
- boolean mLaunchedWhileDocking;
-
- // Task launching
- Rect mTmpBounds = new Rect();
- TaskViewTransform mTmpTransform = new TaskViewTransform();
- int mTaskBarHeight;
-
- // Header (for transition)
- TaskViewHeader mHeaderBar;
- final Object mHeaderBarLock = new Object();
- private TaskStackView mDummyStackView;
- private TaskStackLayoutAlgorithm mBackgroundLayoutAlgorithm;
-
- // Variables to keep track of if we need to start recents after binding
- protected boolean mTriggeredFromAltTab;
- protected long mLastToggleTime;
- DozeTrigger mFastAltTabTrigger = new DozeTrigger(FAST_ALT_TAB_DELAY_MS, new Runnable() {
- @Override
- public void run() {
- // When this fires, then the user has not released alt-tab for at least
- // FAST_ALT_TAB_DELAY_MS milliseconds
- showRecents(mTriggeredFromAltTab, false /* draggingInRecents */, true /* animate */,
- DividerView.INVALID_RECENTS_GROW_TARGET);
- }
- });
-
- private OverviewProxyService.OverviewProxyListener mOverviewProxyListener =
- new OverviewProxyService.OverviewProxyListener() {
- @Override
- public void onConnectionChanged(boolean isConnected) {
- if (!isConnected) {
- // Clear everything when the connection to the overview service
- LegacyRecentsImpl.getTaskLoader().onTrimMemory(ComponentCallbacks2.TRIM_MEMORY_COMPLETE);
- }
- }
- };
-
- // Used to reset the dummy stack view
- private final TaskStack mEmptyTaskStack = new TaskStack();
-
- public RecentsImpl(Context context) {
- mContext = context;
- mHandler = new Handler();
- mBackgroundLayoutAlgorithm = new TaskStackLayoutAlgorithm(context, null);
-
- // Initialize the static foreground thread
- ForegroundThread.get();
-
- // Register the task stack listener
- mTaskStackListener = new TaskStackListenerImpl();
- ActivityManagerWrapper.getInstance().registerTaskStackListener(mTaskStackListener);
-
- // Initialize the static configuration resources
- mDummyStackView = new TaskStackView(mContext);
- reloadResources();
-
- mTrustManager = (TrustManager) mContext.getSystemService(Context.TRUST_SERVICE);
- }
-
- public void onBootCompleted() {
- // Skip preloading tasks if we are already bound to the service
- if (Dependency.get(OverviewProxyService.class).isEnabled()) {
- return;
- }
-
- // When we start, preload the data associated with the previous recent tasks.
- // We can use a new plan since the caches will be the same.
- RecentsTaskLoader loader = LegacyRecentsImpl.getTaskLoader();
- RecentsTaskLoadPlan plan = new RecentsTaskLoadPlan(mContext);
- loader.preloadTasks(plan, -1);
- RecentsTaskLoadPlan.Options launchOpts = new RecentsTaskLoadPlan.Options();
- launchOpts.numVisibleTasks = loader.getIconCacheSize();
- launchOpts.numVisibleTaskThumbnails = loader.getThumbnailCacheSize();
- launchOpts.onlyLoadForCache = true;
- loader.loadTasks(plan, launchOpts);
- }
-
- public void onConfigurationChanged() {
- reloadResources();
- mDummyStackView.reloadOnConfigurationChange();
- synchronized (mBackgroundLayoutAlgorithm) {
- mBackgroundLayoutAlgorithm.reloadOnConfigurationChange(mContext);
- }
- }
-
- /**
- * This is only called from the system user's Recents. Secondary users will instead proxy their
- * visibility change events through to the system user via
- * {@link LegacyRecentsImpl#onBusEvent(RecentsVisibilityChangedEvent)}.
- */
- public void onVisibilityChanged(Context context, boolean visible) {
- LegacyRecentsImpl.getSystemServices().setRecentsVisibility(visible);
- }
-
- /**
- * This is only called from the system user's Recents. Secondary users will instead proxy their
- * visibility change events through to the system user via
- * {@link LegacyRecentsImpl#onBusEvent(ScreenPinningRequestEvent)}.
- */
- public void onStartScreenPinning(Context context, int taskId) {
- final StatusBar statusBar = getStatusBar();
- if (statusBar != null) {
- statusBar.showScreenPinningRequest(taskId, false);
- }
- }
-
- public void showRecents(boolean triggeredFromAltTab, boolean draggingInRecents,
- boolean animate, int growTarget) {
- final SystemServicesProxy ssp = LegacyRecentsImpl.getSystemServices();
- final MutableBoolean isHomeStackVisible = new MutableBoolean(true);
- final boolean isRecentsVisible = LegacyRecentsImpl.getSystemServices().isRecentsActivityVisible(
- isHomeStackVisible);
- final boolean fromHome = isHomeStackVisible.value;
- final boolean launchedWhileDockingTask =
- LegacyRecentsImpl.getSystemServices().getSplitScreenPrimaryStack() != null;
-
- mTriggeredFromAltTab = triggeredFromAltTab;
- mDraggingInRecents = draggingInRecents;
- mLaunchedWhileDocking = launchedWhileDockingTask;
- if (mFastAltTabTrigger.isAsleep()) {
- // Fast alt-tab duration has elapsed, fall through to showing Recents and reset
- mFastAltTabTrigger.stopDozing();
- } else if (mFastAltTabTrigger.isDozing()) {
- // Fast alt-tab duration has not elapsed. If this is triggered by a different
- // showRecents() call, then ignore that call for now.
- // TODO: We can not handle quick tabs that happen between the initial showRecents() call
- // that started the activity and the activity starting up. The severity of this
- // is inversely proportional to the FAST_ALT_TAB_DELAY_MS duration though.
- if (!triggeredFromAltTab) {
- return;
- }
- mFastAltTabTrigger.stopDozing();
- } else if (triggeredFromAltTab) {
- // The fast alt-tab detector is not yet running, so start the trigger and wait for the
- // hideRecents() call, or for the fast alt-tab duration to elapse
- mFastAltTabTrigger.startDozing();
- return;
- }
-
- try {
- // Check if the top task is in the home stack, and start the recents activity
- final boolean forceVisible = launchedWhileDockingTask || draggingInRecents;
- if (forceVisible || !isRecentsVisible) {
- ActivityManager.RunningTaskInfo runningTask =
- ActivityManagerWrapper.getInstance().getRunningTask();
- startRecentsActivityAndDismissKeyguardIfNeeded(runningTask,
- isHomeStackVisible.value || fromHome, animate, growTarget);
- }
- } catch (ActivityNotFoundException e) {
- Log.e(TAG, "Failed to launch RecentsActivity", e);
- }
- }
-
- public void hideRecents(boolean triggeredFromAltTab, boolean triggeredFromHomeKey) {
- if (triggeredFromAltTab && mFastAltTabTrigger.isDozing()) {
- // The user has released alt-tab before the trigger has run, so just show the next
- // task immediately
- showNextTask();
-
- // Cancel the fast alt-tab trigger
- mFastAltTabTrigger.stopDozing();
- return;
- }
-
- // Defer to the activity to handle hiding recents, if it handles it, then it must still
- // be visible
- EventBus.getDefault().post(new HideRecentsEvent(triggeredFromAltTab,
- triggeredFromHomeKey));
- }
-
- public void toggleRecents(int growTarget) {
- if (ActivityManagerWrapper.getInstance().isScreenPinningActive()) {
- return;
- }
-
- // Skip this toggle if we are already waiting to trigger recents via alt-tab
- if (mFastAltTabTrigger.isDozing()) {
- return;
- }
-
- if (mWaitingForTransitionStart) {
- mToggleFollowingTransitionStart = true;
- return;
- }
-
- mDraggingInRecents = false;
- mLaunchedWhileDocking = false;
- mTriggeredFromAltTab = false;
-
- try {
- MutableBoolean isHomeStackVisible = new MutableBoolean(true);
- long elapsedTime = SystemClock.elapsedRealtime() - mLastToggleTime;
-
- SystemServicesProxy ssp = LegacyRecentsImpl.getSystemServices();
- if (ssp.isRecentsActivityVisible(isHomeStackVisible)) {
- RecentsConfiguration config = LegacyRecentsImpl.getConfiguration();
- RecentsActivityLaunchState launchState = config.getLaunchState();
- if (!launchState.launchedWithAltTab) {
- if (LegacyRecentsImpl.getConfiguration().isGridEnabled) {
- // Has the user tapped quickly?
- boolean isQuickTap = elapsedTime < ViewConfiguration.getDoubleTapTimeout();
- if (isQuickTap) {
- EventBus.getDefault().post(new LaunchNextTaskRequestEvent());
- } else {
- EventBus.getDefault().post(new LaunchMostRecentTaskRequestEvent());
- }
- } else {
- // Launch the next focused task
- EventBus.getDefault().post(new LaunchNextTaskRequestEvent());
- }
- } else {
- // If the user has toggled it too quickly, then just eat up the event here (it's
- // better than showing a janky screenshot).
- // NOTE: Ideally, the screenshot mechanism would take the window transform into
- // account
- if (elapsedTime < MIN_TOGGLE_DELAY_MS) {
- return;
- }
-
- EventBus.getDefault().post(new ToggleRecentsEvent());
- mLastToggleTime = SystemClock.elapsedRealtime();
- }
- return;
- } else {
- // If the user has toggled it too quickly, then just eat up the event here (it's
- // better than showing a janky screenshot).
- // NOTE: Ideally, the screenshot mechanism would take the window transform into
- // account
- if (elapsedTime < MIN_TOGGLE_DELAY_MS) {
- return;
- }
-
- // Otherwise, start the recents activity
- ActivityManager.RunningTaskInfo runningTask =
- ActivityManagerWrapper.getInstance().getRunningTask();
- startRecentsActivityAndDismissKeyguardIfNeeded(runningTask,
- isHomeStackVisible.value, true /* animate */, growTarget);
-
- // Only close the other system windows if we are actually showing recents
- ActivityManagerWrapper.getInstance().closeSystemWindows(
- SYSTEM_DIALOG_REASON_RECENT_APPS);
- mLastToggleTime = SystemClock.elapsedRealtime();
- }
- } catch (ActivityNotFoundException e) {
- Log.e(TAG, "Failed to launch RecentsActivity", e);
- }
- }
-
- public void preloadRecents() {
- if (ActivityManagerWrapper.getInstance().isScreenPinningActive()) {
- return;
- }
-
- // Skip preloading recents when keyguard is showing
- final StatusBar statusBar = getStatusBar();
- if (statusBar != null && statusBar.isKeyguardShowing()) {
- return;
- }
-
- // Preload only the raw task list into a new load plan (which will be consumed by the
- // RecentsActivity) only if there is a task to animate to. Post this to ensure that we
- // don't block the touch feedback on the nav bar button which triggers this.
- mHandler.post(() -> {
- SystemServicesProxy ssp = LegacyRecentsImpl.getSystemServices();
- if (!ssp.isRecentsActivityVisible(null)) {
- ActivityManager.RunningTaskInfo runningTask =
- ActivityManagerWrapper.getInstance().getRunningTask();
- if (runningTask == null) {
- return;
- }
-
- RecentsTaskLoader loader = LegacyRecentsImpl.getTaskLoader();
- sInstanceLoadPlan = new RecentsTaskLoadPlan(mContext);
- loader.preloadTasks(sInstanceLoadPlan, runningTask.id);
- TaskStack stack = sInstanceLoadPlan.getTaskStack();
- if (stack.getTaskCount() > 0) {
- // Only preload the icon (but not the thumbnail since it may not have been taken
- // for the pausing activity)
- preloadIcon(runningTask.id);
-
- // At this point, we don't know anything about the stack state. So only
- // calculate the dimensions of the thumbnail that we need for the transition
- // into Recents, but do not draw it until we construct the activity options when
- // we start Recents
- updateHeaderBarLayout(stack, null /* window rect override*/);
- }
- }
- });
- }
-
- public void cancelPreloadingRecents() {
- // Do nothing
- }
-
- public void onDraggingInRecents(float distanceFromTop) {
- EventBus.getDefault().sendOntoMainThread(new DraggingInRecentsEvent(distanceFromTop));
- }
-
- public void onDraggingInRecentsEnded(float velocity) {
- EventBus.getDefault().sendOntoMainThread(new DraggingInRecentsEndedEvent(velocity));
- }
-
- public void onShowCurrentUserToast(int msgResId, int msgLength) {
- Toast.makeText(mContext, msgResId, msgLength).show();
- }
-
- /**
- * Transitions to the next recent task in the stack.
- */
- public void showNextTask() {
- SystemServicesProxy ssp = LegacyRecentsImpl.getSystemServices();
- RecentsTaskLoader loader = LegacyRecentsImpl.getTaskLoader();
- RecentsTaskLoadPlan plan = new RecentsTaskLoadPlan(mContext);
- loader.preloadTasks(plan, -1);
- TaskStack focusedStack = plan.getTaskStack();
-
- // Return early if there are no tasks in the focused stack
- if (focusedStack == null || focusedStack.getTaskCount() == 0) return;
-
- // Return early if there is no running task
- ActivityManager.RunningTaskInfo runningTask =
- ActivityManagerWrapper.getInstance().getRunningTask();
- if (runningTask == null) return;
-
- // Find the task in the recents list
- boolean isRunningTaskInHomeStack =
- runningTask.configuration.windowConfiguration.getActivityType()
- == ACTIVITY_TYPE_HOME;
- ArrayList<Task> tasks = focusedStack.getTasks();
- Task toTask = null;
- ActivityOptions launchOpts = null;
- int taskCount = tasks.size();
- for (int i = taskCount - 1; i >= 1; i--) {
- Task task = tasks.get(i);
- if (isRunningTaskInHomeStack) {
- toTask = tasks.get(i - 1);
- launchOpts = ActivityOptions.makeCustomAnimation(mContext,
- R.anim.recents_launch_next_affiliated_task_target,
- R.anim.recents_fast_toggle_app_home_exit);
- break;
- } else if (task.key.id == runningTask.id) {
- toTask = tasks.get(i - 1);
- launchOpts = ActivityOptions.makeCustomAnimation(mContext,
- R.anim.recents_launch_prev_affiliated_task_target,
- R.anim.recents_launch_prev_affiliated_task_source);
- break;
- }
- }
-
- // Return early if there is no next task
- if (toTask == null) {
- ssp.startInPlaceAnimationOnFrontMostApplication(
- ActivityOptions.makeCustomInPlaceAnimation(mContext,
- R.anim.recents_launch_prev_affiliated_task_bounce));
- return;
- }
-
- // Launch the task
- ActivityManagerWrapper.getInstance().startActivityFromRecentsAsync(toTask.key, launchOpts,
- null /* resultCallback */, null /* resultCallbackHandler */);
- }
-
- /**
- * Transitions to the next affiliated task.
- */
- public void showRelativeAffiliatedTask(boolean showNextTask) {
- SystemServicesProxy ssp = LegacyRecentsImpl.getSystemServices();
- RecentsTaskLoader loader = LegacyRecentsImpl.getTaskLoader();
- RecentsTaskLoadPlan plan = new RecentsTaskLoadPlan(mContext);
- loader.preloadTasks(plan, -1);
- TaskStack focusedStack = plan.getTaskStack();
-
- // Return early if there are no tasks in the focused stack
- if (focusedStack == null || focusedStack.getTaskCount() == 0) return;
-
- // Return early if there is no running task (can't determine affiliated tasks in this case)
- ActivityManager.RunningTaskInfo runningTask =
- ActivityManagerWrapper.getInstance().getRunningTask();
- final int activityType = runningTask.configuration.windowConfiguration.getActivityType();
- if (runningTask == null) return;
- // Return early if the running task is in the home/recents stack (optimization)
- if (activityType == ACTIVITY_TYPE_HOME || activityType == ACTIVITY_TYPE_RECENTS) return;
-
- // Find the task in the recents list
- ArrayList<Task> tasks = focusedStack.getTasks();
- Task toTask = null;
- ActivityOptions launchOpts = null;
- int taskCount = tasks.size();
- for (int i = 0; i < taskCount; i++) {
- Task task = tasks.get(i);
- if (task.key.id == runningTask.id) {
- if (showNextTask) {
- if ((i + 1) < taskCount) {
- toTask = tasks.get(i + 1);
- launchOpts = ActivityOptions.makeCustomAnimation(mContext,
- R.anim.recents_launch_next_affiliated_task_target,
- R.anim.recents_launch_next_affiliated_task_source);
- }
- } else {
- if ((i - 1) >= 0) {
- toTask = tasks.get(i - 1);
- launchOpts = ActivityOptions.makeCustomAnimation(mContext,
- R.anim.recents_launch_prev_affiliated_task_target,
- R.anim.recents_launch_prev_affiliated_task_source);
- }
- }
- break;
- }
- }
-
- // Return early if there is no next task
- if (toTask == null) {
- if (showNextTask) {
- ssp.startInPlaceAnimationOnFrontMostApplication(
- ActivityOptions.makeCustomInPlaceAnimation(mContext,
- R.anim.recents_launch_next_affiliated_task_bounce));
- } else {
- ssp.startInPlaceAnimationOnFrontMostApplication(
- ActivityOptions.makeCustomInPlaceAnimation(mContext,
- R.anim.recents_launch_prev_affiliated_task_bounce));
- }
- return;
- }
-
- // Keep track of actually launched affiliated tasks
- MetricsLogger.count(mContext, "overview_affiliated_task_launch", 1);
-
- // Launch the task
- ActivityManagerWrapper.getInstance().startActivityFromRecentsAsync(toTask.key, launchOpts,
- null /* resultListener */, null /* resultCallbackHandler */);
- }
-
- public void splitPrimaryTask(int taskId, int stackCreateMode, Rect initialBounds) {
- SystemServicesProxy ssp = LegacyRecentsImpl.getSystemServices();
-
- // Make sure we inform DividerView before we actually start the activity so we can change
- // the resize mode already.
- if (ssp.setTaskWindowingModeSplitScreenPrimary(taskId, stackCreateMode, initialBounds)) {
- EventBus.getDefault().send(new DockedTopTaskEvent(initialBounds));
- }
- }
-
- public void setWaitingForTransitionStart(boolean waitingForTransitionStart) {
- if (mWaitingForTransitionStart == waitingForTransitionStart) {
- return;
- }
-
- mWaitingForTransitionStart = waitingForTransitionStart;
- if (!waitingForTransitionStart && mToggleFollowingTransitionStart) {
- mHandler.post(() -> toggleRecents(DividerView.INVALID_RECENTS_GROW_TARGET));
- }
- mToggleFollowingTransitionStart = false;
- }
-
- /**
- * Returns the preloaded load plan and invalidates it.
- */
- public static RecentsTaskLoadPlan consumeInstanceLoadPlan() {
- RecentsTaskLoadPlan plan = sInstanceLoadPlan;
- sInstanceLoadPlan = null;
- return plan;
- }
-
- /**
- * @return the time at which a task last entered picture-in-picture.
- */
- public static long getLastPipTime() {
- return sLastPipTime;
- }
-
- /**
- * Clears the time at which a task last entered picture-in-picture.
- */
- public static void clearLastPipTime() {
- sLastPipTime = -1;
- }
-
- /**
- * Reloads all the resources for the current configuration.
- */
- private void reloadResources() {
- Resources res = mContext.getResources();
-
- mTaskBarHeight = TaskStackLayoutAlgorithm.getDimensionForDevice(mContext,
- R.dimen.recents_task_view_header_height,
- R.dimen.recents_task_view_header_height,
- R.dimen.recents_task_view_header_height,
- R.dimen.recents_task_view_header_height_tablet_land,
- R.dimen.recents_task_view_header_height,
- R.dimen.recents_task_view_header_height_tablet_land,
- R.dimen.recents_grid_task_view_header_height);
-
- LayoutInflater inflater = LayoutInflater.from(mContext);
- mHeaderBar = (TaskViewHeader) inflater.inflate(R.layout.recents_task_view_header,
- null, false);
- mHeaderBar.setLayoutDirection(res.getConfiguration().getLayoutDirection());
- }
-
- private void updateDummyStackViewLayout(TaskStackLayoutAlgorithm stackLayout,
- TaskStack stack, Rect windowRect) {
- SystemServicesProxy ssp = LegacyRecentsImpl.getSystemServices();
- Rect displayRect = ssp.getDisplayRect();
- Rect systemInsets = new Rect();
- ssp.getStableInsets(systemInsets);
-
- // When docked, the nav bar insets are consumed and the activity is measured without insets.
- // However, the window bounds include the insets, so we need to subtract them here to make
- // them identical.
- if (ssp.hasDockedTask()) {
- if (systemInsets.bottom < windowRect.height()) {
- // Only apply inset if it isn't going to cause the rect height to go negative.
- windowRect.bottom -= systemInsets.bottom;
- }
- systemInsets.bottom = 0;
- }
- calculateWindowStableInsets(systemInsets, windowRect, displayRect);
- windowRect.offsetTo(0, 0);
-
- // Rebind the header bar and draw it for the transition
- stackLayout.setSystemInsets(systemInsets);
- if (stack != null) {
- stackLayout.getTaskStackBounds(displayRect, windowRect, systemInsets.top,
- systemInsets.left, systemInsets.right, mTmpBounds);
- stackLayout.reset();
- stackLayout.initialize(displayRect, windowRect, mTmpBounds);
- }
- }
-
- private Rect getWindowRect(Rect windowRectOverride) {
- return windowRectOverride != null
- ? new Rect(windowRectOverride)
- : LegacyRecentsImpl.getSystemServices().getWindowRect();
- }
-
- /**
- * Prepares the header bar layout for the next transition, if the task view bounds has changed
- * since the last call, it will attempt to re-measure and layout the header bar to the new size.
- *
- * @param stack the stack to initialize the stack layout with
- * @param windowRectOverride the rectangle to use when calculating the stack state which can
- * be different from the current window rect if recents is resizing
- * while being launched
- */
- private void updateHeaderBarLayout(TaskStack stack, Rect windowRectOverride) {
- Rect windowRect = getWindowRect(windowRectOverride);
- int taskViewWidth = 0;
- boolean useGridLayout = mDummyStackView.useGridLayout();
- updateDummyStackViewLayout(mDummyStackView.getStackAlgorithm(), stack, windowRect);
- if (stack != null) {
- TaskStackLayoutAlgorithm stackLayout = mDummyStackView.getStackAlgorithm();
- mDummyStackView.getStack().removeAllTasks(false /* notifyStackChanges */);
- mDummyStackView.setTasks(stack, false /* allowNotifyStackChanges */);
- // Get the width of a task view so that we know how wide to draw the header bar.
- if (useGridLayout) {
- TaskGridLayoutAlgorithm gridLayout = mDummyStackView.getGridAlgorithm();
- gridLayout.initialize(windowRect);
- taskViewWidth = (int) gridLayout.getTransform(0 /* taskIndex */,
- stack.getTaskCount(), new TaskViewTransform(),
- stackLayout).rect.width();
- } else {
- Rect taskViewBounds = stackLayout.getUntransformedTaskViewBounds();
- if (!taskViewBounds.isEmpty()) {
- taskViewWidth = taskViewBounds.width();
- }
- }
- }
-
- if (stack != null && taskViewWidth > 0) {
- synchronized (mHeaderBarLock) {
- if (mHeaderBar.getMeasuredWidth() != taskViewWidth ||
- mHeaderBar.getMeasuredHeight() != mTaskBarHeight) {
- if (useGridLayout) {
- mHeaderBar.setShouldDarkenBackgroundColor(true);
- mHeaderBar.setNoUserInteractionState();
- }
- mHeaderBar.forceLayout();
- mHeaderBar.measure(
- MeasureSpec.makeMeasureSpec(taskViewWidth, MeasureSpec.EXACTLY),
- MeasureSpec.makeMeasureSpec(mTaskBarHeight, MeasureSpec.EXACTLY));
- }
- mHeaderBar.layout(0, 0, taskViewWidth, mTaskBarHeight);
- }
- }
- }
-
- /**
- * Given the stable insets and the rect for our window, calculates the insets that affect our
- * window.
- */
- private void calculateWindowStableInsets(Rect inOutInsets, Rect windowRect, Rect displayRect) {
-
- // Display rect without insets - available app space
- Rect appRect = new Rect(displayRect);
- appRect.inset(inOutInsets);
-
- // Our window intersected with available app space
- Rect windowRectWithInsets = new Rect(windowRect);
- windowRectWithInsets.intersect(appRect);
- inOutInsets.left = windowRectWithInsets.left - windowRect.left;
- inOutInsets.top = windowRectWithInsets.top - windowRect.top;
- inOutInsets.right = windowRect.right - windowRectWithInsets.right;
- inOutInsets.bottom = windowRect.bottom - windowRectWithInsets.bottom;
- }
-
- /**
- * Preloads the icon of a task.
- */
- private void preloadIcon(int runningTaskId) {
- // Ensure that we load the running task's icon
- RecentsTaskLoadPlan.Options launchOpts = new RecentsTaskLoadPlan.Options();
- launchOpts.runningTaskId = runningTaskId;
- launchOpts.loadThumbnails = false;
- launchOpts.onlyLoadForCache = true;
- LegacyRecentsImpl.getTaskLoader().loadTasks(sInstanceLoadPlan, launchOpts);
- }
-
- /**
- * Creates the activity options for a unknown state->recents transition.
- */
- protected ActivityOptions getUnknownTransitionActivityOptions() {
- return ActivityOptions.makeCustomAnimation(mContext,
- R.anim.recents_from_unknown_enter,
- R.anim.recents_from_unknown_exit,
- mHandler, null);
- }
-
- /**
- * Creates the activity options for a home->recents transition.
- */
- protected ActivityOptions getHomeTransitionActivityOptions() {
- return ActivityOptions.makeCustomAnimation(mContext,
- R.anim.recents_from_launcher_enter,
- R.anim.recents_from_launcher_exit,
- mHandler, null);
- }
-
- /**
- * Creates the activity options for an app->recents transition.
- */
- private Pair<ActivityOptions, AppTransitionAnimationSpecsFuture>
- getThumbnailTransitionActivityOptions(ActivityManager.RunningTaskInfo runningTask,
- Rect windowOverrideRect) {
- final boolean isLowRamDevice = LegacyRecentsImpl.getConfiguration().isLowRamDevice;
-
- // Update the destination rect
- Task toTask = new Task();
- TaskViewTransform toTransform = getThumbnailTransitionTransform(mDummyStackView, toTask,
- windowOverrideRect);
-
- RectF toTaskRect = toTransform.rect;
- AppTransitionAnimationSpecsFuture future = new AppTransitionAnimationSpecsFuture(mHandler) {
- @Override
- public List<AppTransitionAnimationSpecCompat> composeSpecs() {
- Rect rect = new Rect();
- toTaskRect.round(rect);
- Bitmap thumbnail = drawThumbnailTransitionBitmap(toTask, toTransform);
- return Lists.newArrayList(new AppTransitionAnimationSpecCompat(toTask.key.id,
- thumbnail, rect));
- }
- };
-
- // For low end ram devices, wait for transition flag is reset when Recents entrance
- // animation is complete instead of when the transition animation starts
- return new Pair<>(RecentsTransition.createAspectScaleAnimation(mContext, mHandler,
- false /* scaleUp */, future, isLowRamDevice ? null : mResetToggleFlagListener),
- future);
- }
-
- /**
- * Returns the transition rect for the given task id.
- */
- private TaskViewTransform getThumbnailTransitionTransform(TaskStackView stackView,
- Task runningTaskOut, Rect windowOverrideRect) {
- // Find the running task in the TaskStack
- TaskStack stack = stackView.getStack();
- Task launchTask = stack.getLaunchTarget();
- if (launchTask != null) {
- runningTaskOut.copyFrom(launchTask);
- } else {
- // If no task is specified or we can not find the task just use the front most one
- launchTask = stack.getFrontMostTask();
- runningTaskOut.copyFrom(launchTask);
- }
-
- // Get the transform for the running task
- stackView.updateLayoutAlgorithm(true /* boundScroll */);
- stackView.updateToInitialState();
- stackView.getStackAlgorithm().getStackTransformScreenCoordinates(launchTask,
- stackView.getScroller().getStackScroll(), mTmpTransform, null, windowOverrideRect);
- return mTmpTransform;
- }
-
- /**
- * Draws the header of a task used for the window animation into a bitmap.
- */
- private Bitmap drawThumbnailTransitionBitmap(Task toTask,
- TaskViewTransform toTransform) {
- SystemServicesProxy ssp = LegacyRecentsImpl.getSystemServices();
- int width = (int) toTransform.rect.width();
- int height = (int) toTransform.rect.height();
- if (toTransform != null && toTask.key != null && width > 0 && height > 0) {
- synchronized (mHeaderBarLock) {
- boolean disabledInSafeMode = !toTask.isSystemApp && ssp.isInSafeMode();
- mHeaderBar.onTaskViewSizeChanged(width, height);
- if (RecentsDebugFlags.Static.EnableTransitionThumbnailDebugMode) {
- return RecentsTransition.drawViewIntoHardwareBitmap(width, mTaskBarHeight,
- null, 1f, 0xFFff0000);
- } else {
- // Workaround for b/27815919, reset the callback so that we do not trigger an
- // invalidate on the header bar as a result of updating the icon
- Drawable icon = mHeaderBar.getIconView().getDrawable();
- if (icon != null) {
- icon.setCallback(null);
- }
- mHeaderBar.bindToTask(toTask, false /* touchExplorationEnabled */,
- disabledInSafeMode);
- mHeaderBar.onTaskDataLoaded();
- mHeaderBar.setDimAlpha(toTransform.dimAlpha);
- return RecentsTransition.drawViewIntoHardwareBitmap(width, mTaskBarHeight,
- mHeaderBar, 1f, 0);
- }
- }
- }
- return null;
- }
-
- /**
- * Shows the recents activity after dismissing the keyguard if visible
- */
- protected void startRecentsActivityAndDismissKeyguardIfNeeded(
- final ActivityManager.RunningTaskInfo runningTask, final boolean isHomeStackVisible,
- final boolean animate, final int growTarget) {
- // Preload only if device for current user is unlocked
- final StatusBar statusBar = getStatusBar();
- if (statusBar != null && statusBar.isKeyguardShowing()) {
- statusBar.executeRunnableDismissingKeyguard(() -> {
- // Flush trustmanager before checking device locked per user when preloading
- mTrustManager.reportKeyguardShowingChanged();
- mHandler.post(() -> startRecentsActivity(runningTask, isHomeStackVisible,
- animate, growTarget));
- }, null, true /* dismissShade */, false /* afterKeyguardGone */,
- true /* deferred */);
- } else {
- startRecentsActivity(runningTask, isHomeStackVisible, animate, growTarget);
- }
- }
-
- private void startRecentsActivity(ActivityManager.RunningTaskInfo runningTask,
- boolean isHomeStackVisible, boolean animate, int growTarget) {
- RecentsTaskLoader loader = LegacyRecentsImpl.getTaskLoader();
- RecentsActivityLaunchState launchState = LegacyRecentsImpl.getConfiguration().getLaunchState();
-
- int runningTaskId = !mLaunchedWhileDocking && (runningTask != null)
- ? runningTask.id
- : -1;
-
- // In the case where alt-tab is triggered, we never get a preloadRecents() call, so we
- // should always preload the tasks now. If we are dragging in recents, reload them as
- // the stacks might have changed.
- if (mLaunchedWhileDocking || mTriggeredFromAltTab || sInstanceLoadPlan == null) {
- // Create a new load plan if preloadRecents() was never triggered
- sInstanceLoadPlan = new RecentsTaskLoadPlan(mContext);
- }
- if (mLaunchedWhileDocking || mTriggeredFromAltTab || !sInstanceLoadPlan.hasTasks()) {
- loader.preloadTasks(sInstanceLoadPlan, runningTaskId);
- }
-
- TaskStack stack = sInstanceLoadPlan.getTaskStack();
- boolean hasRecentTasks = stack.getTaskCount() > 0;
- boolean useThumbnailTransition = (runningTask != null) && !isHomeStackVisible &&
- hasRecentTasks;
-
- // Update the launch state that we need in updateHeaderBarLayout()
- launchState.launchedFromHome = !useThumbnailTransition && !mLaunchedWhileDocking;
- launchState.launchedFromApp = useThumbnailTransition || mLaunchedWhileDocking;
- launchState.launchedFromPipApp = false;
- launchState.launchedWithNextPipApp =
- stack.isNextLaunchTargetPip(RecentsImpl.getLastPipTime());
- launchState.launchedViaDockGesture = mLaunchedWhileDocking;
- launchState.launchedViaDragGesture = mDraggingInRecents;
- launchState.launchedToTaskId = runningTaskId;
- launchState.launchedWithAltTab = mTriggeredFromAltTab;
-
- // Disable toggling of recents between starting the activity and it is visible and the app
- // has started its transition into recents.
- setWaitingForTransitionStart(useThumbnailTransition);
-
- // Preload the icon (this will be a null-op if we have preloaded the icon already in
- // preloadRecents())
- preloadIcon(runningTaskId);
-
- // Update the header bar if necessary
- Rect windowOverrideRect = getWindowRectOverride(growTarget);
- updateHeaderBarLayout(stack, windowOverrideRect);
-
- // Prepare the dummy stack for the transition
- TaskStackLayoutAlgorithm.VisibilityReport stackVr =
- mDummyStackView.computeStackVisibilityReport();
-
- // Update the remaining launch state
- launchState.launchedNumVisibleTasks = stackVr.numVisibleTasks;
- launchState.launchedNumVisibleThumbnails = stackVr.numVisibleThumbnails;
-
- if (!animate) {
- startRecentsActivity(ActivityOptions.makeCustomAnimation(mContext, -1, -1),
- null /* future */);
- return;
- }
-
- Pair<ActivityOptions, AppTransitionAnimationSpecsFuture> pair;
- if (useThumbnailTransition) {
- // Try starting with a thumbnail transition
- pair = getThumbnailTransitionActivityOptions(runningTask, windowOverrideRect);
- } else {
- // If there is no thumbnail transition, but is launching from home into recents, then
- // use a quick home transition
- pair = new Pair<>(hasRecentTasks
- ? getHomeTransitionActivityOptions()
- : getUnknownTransitionActivityOptions(), null);
- }
- startRecentsActivity(pair.first, pair.second);
- mLastToggleTime = SystemClock.elapsedRealtime();
- }
-
- private Rect getWindowRectOverride(int growTarget) {
- if (growTarget == DividerView.INVALID_RECENTS_GROW_TARGET) {
- return SystemServicesProxy.getInstance(mContext).getWindowRect();
- }
- Rect result = new Rect();
- Rect displayRect = LegacyRecentsImpl.getSystemServices().getDisplayRect();
- DockedDividerUtils.calculateBoundsForPosition(growTarget, WindowManager.DOCKED_BOTTOM,
- result, displayRect.width(), displayRect.height(),
- LegacyRecentsImpl.getSystemServices().getDockedDividerSize(mContext));
- return result;
- }
-
- private StatusBar getStatusBar() {
- return SysUiServiceProvider.getComponent(mContext, StatusBar.class);
- }
-
- /**
- * Starts the recents activity.
- */
- private void startRecentsActivity(ActivityOptions opts,
- final AppTransitionAnimationSpecsFuture future) {
- Intent intent = new Intent();
- intent.setClassName(RECENTS_PACKAGE, RECENTS_ACTIVITY);
- intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
- | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
- | Intent.FLAG_ACTIVITY_TASK_ON_HOME);
- HidePipMenuEvent hideMenuEvent = new HidePipMenuEvent();
- hideMenuEvent.addPostAnimationCallback(() -> {
- LegacyRecentsImpl.getSystemServices().startActivityAsUserAsync(intent, opts);
- EventBus.getDefault().send(new RecentsActivityStartingEvent());
- if (future != null) {
- future.composeSpecsSynchronous();
- }
- });
- EventBus.getDefault().send(hideMenuEvent);
-
- // Once we have launched the activity, reset the dummy stack view tasks so we don't hold
- // onto references to the same tasks consumed by the activity
- mDummyStackView.setTasks(mEmptyTaskStack, false /* notifyStackChanges */);
- }
-
- /**** OnAnimationFinishedListener Implementation ****/
-
- @Override
- public void onAnimationFinished() {
- EventBus.getDefault().post(new EnterRecentsWindowLastAnimationFrameEvent());
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/RecentsImplProxy.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/RecentsImplProxy.java
deleted file mode 100644
index a1da785f2a80..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/RecentsImplProxy.java
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-
-package com.android.systemui.recents;
-
-import android.graphics.Rect;
-import android.os.Handler;
-import android.os.Message;
-import android.os.RemoteException;
-
-import com.android.internal.os.SomeArgs;
-
-/**
- * A proxy class which directs all methods from {@link IRecentsNonSystemUserCallbacks} to
- * {@link RecentsImpl} and makes sure they are called from the main thread.
- */
-public class RecentsImplProxy extends IRecentsNonSystemUserCallbacks.Stub {
-
- private static final int MSG_PRELOAD_RECENTS = 1;
- private static final int MSG_CANCEL_PRELOADING_RECENTS = 2;
- private static final int MSG_SHOW_RECENTS = 3;
- private static final int MSG_HIDE_RECENTS = 4;
- private static final int MSG_TOGGLE_RECENTS = 5;
- private static final int MSG_ON_CONFIGURATION_CHANGED = 6;
- private static final int MSG_DOCK_TOP_TASK = 7;
- private static final int MSG_ON_DRAGGING_IN_RECENTS = 8;
- private static final int MSG_ON_DRAGGING_IN_RECENTS_ENDED = 9;
- private static final int MSG_SHOW_USER_TOAST = 10;
-
- private RecentsImpl mImpl;
-
- public RecentsImplProxy(RecentsImpl recentsImpl) {
- mImpl = recentsImpl;
- }
-
- @Override
- public void preloadRecents() throws RemoteException {
- mHandler.sendEmptyMessage(MSG_PRELOAD_RECENTS);
- }
-
- @Override
- public void cancelPreloadingRecents() throws RemoteException {
- mHandler.sendEmptyMessage(MSG_CANCEL_PRELOADING_RECENTS);
- }
-
- @Override
- public void showRecents(boolean triggeredFromAltTab, boolean draggingInRecents, boolean animate,
- int growTarget) throws RemoteException {
- SomeArgs args = SomeArgs.obtain();
- args.argi1 = triggeredFromAltTab ? 1 : 0;
- args.argi2 = draggingInRecents ? 1 : 0;
- args.argi3 = animate ? 1 : 0;
- args.argi4 = growTarget;
- mHandler.sendMessage(mHandler.obtainMessage(MSG_SHOW_RECENTS, args));
- }
-
- @Override
- public void hideRecents(boolean triggeredFromAltTab, boolean triggeredFromHomeKey)
- throws RemoteException {
- mHandler.sendMessage(mHandler.obtainMessage(MSG_HIDE_RECENTS, triggeredFromAltTab ? 1 :0,
- triggeredFromHomeKey ? 1 : 0));
- }
-
- @Override
- public void toggleRecents(int growTarget) throws RemoteException {
- SomeArgs args = SomeArgs.obtain();
- args.argi1 = growTarget;
- mHandler.sendMessage(mHandler.obtainMessage(MSG_TOGGLE_RECENTS, args));
- }
-
- @Override
- public void onConfigurationChanged() throws RemoteException {
- mHandler.sendEmptyMessage(MSG_ON_CONFIGURATION_CHANGED);
- }
-
- @Override
- public void splitPrimaryTask(int topTaskId, int stackCreateMode, Rect initialBounds)
- throws RemoteException {
- SomeArgs args = SomeArgs.obtain();
- args.argi1 = topTaskId;
- args.argi2 = stackCreateMode;
- args.arg1 = initialBounds;
- mHandler.sendMessage(mHandler.obtainMessage(MSG_DOCK_TOP_TASK, args));
- }
-
- @Override
- public void onDraggingInRecents(float distanceFromTop) throws RemoteException {
- mHandler.sendMessage(mHandler.obtainMessage(MSG_ON_DRAGGING_IN_RECENTS, distanceFromTop));
- }
-
- @Override
- public void onDraggingInRecentsEnded(float velocity) throws RemoteException {
- mHandler.sendMessage(mHandler.obtainMessage(MSG_ON_DRAGGING_IN_RECENTS_ENDED, velocity));
- }
-
- @Override
- public void showCurrentUserToast(int msgResId, int msgLength) {
- mHandler.sendMessage(mHandler.obtainMessage(MSG_SHOW_USER_TOAST, msgResId, msgLength));
- }
-
- private final Handler mHandler = new Handler() {
-
- @Override
- public void handleMessage(Message msg) {
- SomeArgs args;
- switch (msg.what) {
- case MSG_PRELOAD_RECENTS:
- mImpl.preloadRecents();
- break;
- case MSG_CANCEL_PRELOADING_RECENTS:
- mImpl.cancelPreloadingRecents();
- break;
- case MSG_SHOW_RECENTS:
- args = (SomeArgs) msg.obj;
- mImpl.showRecents(args.argi1 != 0, args.argi2 != 0, args.argi3 != 0,
- args.argi4);
- break;
- case MSG_HIDE_RECENTS:
- mImpl.hideRecents(msg.arg1 != 0, msg.arg2 != 0);
- break;
- case MSG_TOGGLE_RECENTS:
- args = (SomeArgs) msg.obj;
- mImpl.toggleRecents(args.argi1);
- break;
- case MSG_ON_CONFIGURATION_CHANGED:
- mImpl.onConfigurationChanged();
- break;
- case MSG_DOCK_TOP_TASK:
- args = (SomeArgs) msg.obj;
- mImpl.splitPrimaryTask(args.argi1, args.argi2 = 0,
- (Rect) args.arg1);
- break;
- case MSG_ON_DRAGGING_IN_RECENTS:
- mImpl.onDraggingInRecents((Float) msg.obj);
- break;
- case MSG_ON_DRAGGING_IN_RECENTS_ENDED:
- mImpl.onDraggingInRecentsEnded((Float) msg.obj);
- break;
- case MSG_SHOW_USER_TOAST:
- mImpl.onShowCurrentUserToast(msg.arg1, msg.arg2);
- break;
- default:
- super.handleMessage(msg);
- }
- super.handleMessage(msg);
- }
- };
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/RecentsSystemUser.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/RecentsSystemUser.java
deleted file mode 100644
index c5e9f046aa16..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/RecentsSystemUser.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents;
-
-import android.content.Context;
-import android.graphics.Rect;
-import android.os.IBinder;
-import android.os.RemoteException;
-import android.util.EventLog;
-import android.util.Log;
-import android.util.SparseArray;
-
-import com.android.systemui.EventLogConstants;
-import com.android.systemui.EventLogTags;
-import com.android.systemui.pip.phone.ForegroundThread;
-import com.android.systemui.recents.events.EventBus;
-import com.android.systemui.recents.events.activity.DockedFirstAnimationFrameEvent;
-import com.android.systemui.recents.events.activity.DockedTopTaskEvent;
-import com.android.systemui.recents.events.activity.RecentsActivityStartingEvent;
-import com.android.systemui.recents.events.component.SetWaitingForTransitionStartEvent;
-import com.android.systemui.recents.events.ui.RecentsDrawnEvent;
-
-/**
- * An implementation of the system user's Recents interface to be called remotely by secondary
- * users.
- */
-public class RecentsSystemUser extends IRecentsSystemUserCallbacks.Stub {
-
- private static final String TAG = "RecentsSystemUser";
-
- private Context mContext;
- private RecentsImpl mImpl;
- private final SparseArray<IRecentsNonSystemUserCallbacks> mNonSystemUserRecents =
- new SparseArray<>();
-
- public RecentsSystemUser(Context context, RecentsImpl impl) {
- mContext = context;
- mImpl = impl;
- }
-
- @Override
- public void registerNonSystemUserCallbacks(final IBinder nonSystemUserCallbacks,
- final int userId) {
- try {
- final IRecentsNonSystemUserCallbacks callback =
- IRecentsNonSystemUserCallbacks.Stub.asInterface(nonSystemUserCallbacks);
- nonSystemUserCallbacks.linkToDeath(new IBinder.DeathRecipient() {
- @Override
- public void binderDied() {
- mNonSystemUserRecents.removeAt(mNonSystemUserRecents.indexOfValue(callback));
- EventLog.writeEvent(EventLogTags.SYSUI_RECENTS_CONNECTION,
- EventLogConstants.SYSUI_RECENTS_CONNECTION_SYSTEM_UNREGISTER_USER,
- userId);
- }
- }, 0);
- mNonSystemUserRecents.put(userId, callback);
- EventLog.writeEvent(EventLogTags.SYSUI_RECENTS_CONNECTION,
- EventLogConstants.SYSUI_RECENTS_CONNECTION_SYSTEM_REGISTER_USER, userId);
- } catch (RemoteException e) {
- Log.e(TAG, "Failed to register NonSystemUserCallbacks", e);
- }
- }
-
- public IRecentsNonSystemUserCallbacks getNonSystemUserRecentsForUser(int userId) {
- return mNonSystemUserRecents.get(userId);
- }
-
- @Override
- public void updateRecentsVisibility(boolean visible) {
- ForegroundThread.getHandler().post(() -> {
- mImpl.onVisibilityChanged(mContext, visible);
- });
- }
-
- @Override
- public void startScreenPinning(int taskId) {
- ForegroundThread.getHandler().post(() -> {
- mImpl.onStartScreenPinning(mContext, taskId);
- });
- }
-
- @Override
- public void sendRecentsDrawnEvent() {
- EventBus.getDefault().post(new RecentsDrawnEvent());
- }
-
- @Override
- public void sendDockingTopTaskEvent(Rect initialRect) throws RemoteException {
- EventBus.getDefault().post(new DockedTopTaskEvent(initialRect));
- }
-
- @Override
- public void sendLaunchRecentsEvent() throws RemoteException {
- EventBus.getDefault().post(new RecentsActivityStartingEvent());
- }
-
- @Override
- public void sendDockedFirstAnimationFrameEvent() throws RemoteException {
- EventBus.getDefault().post(new DockedFirstAnimationFrameEvent());
- }
-
- @Override
- public void setWaitingForTransitionStartEvent(boolean waitingForTransitionStart) {
- EventBus.getDefault().post(new SetWaitingForTransitionStartEvent(
- waitingForTransitionStart));
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/RecentsSystemUserService.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/RecentsSystemUserService.java
deleted file mode 100644
index b5a0181c7d56..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/RecentsSystemUserService.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents;
-
-import android.app.Service;
-import android.content.Intent;
-import android.os.IBinder;
-import android.util.Log;
-
-import com.android.systemui.SysUiServiceProvider;
-
-/**
- * A strictly system-user service that is started by the secondary user's Recents (with a limited
- * lifespan), to get the interface that the secondary user's Recents can call through to the system
- * user's Recents.
- */
-public class RecentsSystemUserService extends Service {
-
- private static final String TAG = "RecentsSystemUserService";
- private static final boolean DEBUG = false;
-
- @Override
- public void onCreate() {
- super.onCreate();
- }
-
- @Override
- public IBinder onBind(Intent intent) {
- LegacyRecentsImpl recents = SysUiServiceProvider.getComponent(this, LegacyRecentsImpl.class);
- if (DEBUG) {
- Log.d(TAG, "onBind: " + recents);
- }
- if (recents != null) {
- return recents.getSystemUserCallbacks();
- }
- return null;
- }
-}
-
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/EventBus.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/EventBus.java
deleted file mode 100644
index 177362cf60aa..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/EventBus.java
+++ /dev/null
@@ -1,763 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.events;
-
-import android.os.Handler;
-import android.os.Looper;
-import android.os.SystemClock;
-import android.os.UserHandle;
-import android.util.Log;
-
-import com.android.systemui.recents.misc.ReferenceCountedTrigger;
-
-import java.io.PrintWriter;
-import java.lang.ref.WeakReference;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.List;
-
-/**
- * Represents a subscriber, which implements various event bus handler methods.
- */
-class Subscriber {
- private WeakReference<Object> mSubscriber;
-
- long registrationTime;
-
- Subscriber(Object subscriber, long registrationTime) {
- mSubscriber = new WeakReference<>(subscriber);
- this.registrationTime = registrationTime;
- }
-
- public String toString(int priority) {
- Object sub = mSubscriber.get();
- String id = Integer.toHexString(System.identityHashCode(sub));
- return sub.getClass().getSimpleName() + " [0x" + id + ", P" + priority + "]";
- }
-
- public Object getReference() {
- return mSubscriber.get();
- }
-}
-
-/**
- * Represents an event handler with a priority.
- */
-class EventHandler {
- int priority;
- Subscriber subscriber;
- EventHandlerMethod method;
-
- EventHandler(Subscriber subscriber, EventHandlerMethod method, int priority) {
- this.subscriber = subscriber;
- this.method = method;
- this.priority = priority;
- }
-
- @Override
- public String toString() {
- return subscriber.toString(priority) + " " + method.toString();
- }
-}
-
-/**
- * Represents the low level method handling a particular event.
- */
-class EventHandlerMethod {
- private Method mMethod;
- Class<? extends EventBus.Event> eventType;
-
- EventHandlerMethod(Method method, Class<? extends EventBus.Event> eventType) {
- mMethod = method;
- mMethod.setAccessible(true);
- this.eventType = eventType;
- }
-
- public void invoke(Object target, EventBus.Event event)
- throws InvocationTargetException, IllegalAccessException {
- mMethod.invoke(target, event);
- }
-
- @Override
- public String toString() {
- return mMethod.getName() + "(" + eventType.getSimpleName() + ")";
- }
-}
-
-/**
- * A simple in-process event bus. It is simple because we can make assumptions about the state of
- * SystemUI and Recent's lifecycle.
- *
- * <p>
- * Currently, there is a single EventBus that handles {@link EventBus.Event}s for each subscriber
- * on the main application thread. Publishers can send() events to synchronously call subscribers
- * of that event, or post() events to be processed in the next run of the {@link Looper}.
- *
- * <p>
- * Subscribers must be registered with a particular EventBus before they will receive events, and
- * handler methods must match a specific signature.
- *
- * <p>
- * Event method signature:<ul>
- * <li>Methods must be public final
- * <li>Methods must return void
- * <li>Methods must be called "onBusEvent"
- * <li>Methods must take one parameter, of class type deriving from {@link EventBus.Event}
- * </ul>
- *
- * </p>
- * Each subscriber can be registered with a given priority (default 1), and events will be dispatch
- * in decreasing order of priority. For subscribers with the same priority, events will be
- * dispatched by latest registration time to earliest.
- *
- * <p>
- * Caveats:<ul>
- * <li>The EventBus keeps a {@link WeakReference} to the publisher to prevent memory leaks, so
- * there must be another strong reference to the publisher for it to not get garbage-collected and
- * continue receiving events.
- * <li>Because the event handlers are called back using reflection, the EventBus is not intended
- * for use in tight, performance criticial loops. For most user input/system callback events, this
- * is generally of low enough frequency to use the EventBus.
- * <li>Because the event handlers are called back using reflection, there will often be no
- * references to them from actual code. The proguard configuration will be need to be updated to
- * keep these extra methods:
- *
- * -keepclassmembers class ** {
- * public void onBusEvent(**);
- * public void onInterprocessBusEvent(**);
- * }
- * -keepclassmembers class ** extends **.EventBus$InterprocessEvent {
- * public <init>(android.os.Bundle);
- * }
- *
- * <li>Subscriber registration can be expensive depending on the subscriber's {@link Class}. This
- * is only done once per class type, but if possible, it is best to pre-register an instance of
- * that class beforehand or when idle.
- * <li>Each event should be sent once. Events may hold internal information about the current
- * dispatch, or may be queued to be dispatched on another thread (if posted from a non-main thread),
- * so it may be unsafe to edit, change, or re-send the event again.
- * <li>Events should follow a pattern of public-final POD (plain old data) objects, where they are
- * initialized by the constructor and read by each subscriber of that event. Subscribers should
- * never alter events as they are processed, and this enforces that pattern.
- * </ul>
- *
- * <p>
- * Future optimizations:
- * <li>throw exception/log when a subscriber loses the reference
- * <li>trace cost per registration & invocation
- * <li>trace cross-process invocation
- * <li>register(subscriber, Class&lt;?&gt;...) -- pass in exact class types you want registered
- * <li>setSubscriberEventHandlerPriority(subscriber, Class<Event>, priority)
- * <li>allow subscribers to implement interface, ie. EventBus.Subscriber, which lets then test a
- * message before invocation (ie. check if task id == this task id)
- * <li>add postOnce() which automatically debounces
- * <li>add postDelayed() which delays / postDelayedOnce() which delays and bounces
- * <li>consolidate register() and registerInterprocess()
- * <li>sendForResult&lt;ReturnType&gt;(Event) to send and get a result, but who will send the
- * result?
- * </p>
- */
-public class EventBus {
-
- private static final String TAG = "EventBus";
- private static final boolean DEBUG_TRACE_ALL = false;
-
- /**
- * An event super class that allows us to track internal event state across subscriber
- * invocations.
- *
- * Events should not be edited by subscribers.
- */
- public static class Event implements Cloneable {
- // Indicates that this event's dispatch should be traced and logged to logcat
- boolean trace;
- // Indicates that this event must be posted on the EventBus's looper thread before invocation
- boolean requiresPost;
- // Not currently exposed, allows a subscriber to cancel further dispatch of this event
- boolean cancelled;
-
- // Only accessible from derived events
- protected Event() {}
-
- /**
- * Called by the EventBus prior to dispatching this event to any subscriber of this event.
- */
- void onPreDispatch() {
- // Do nothing
- }
-
- /**
- * Called by the EventBus after dispatching this event to every subscriber of this event.
- */
- void onPostDispatch() {
- // Do nothing
- }
-
- @Override
- protected Object clone() throws CloneNotSupportedException {
- Event evt = (Event) super.clone();
- // When cloning an event, reset the cancelled-dispatch state
- evt.cancelled = false;
- return evt;
- }
- }
-
- /**
- * An event that represents an animated state change, which allows subscribers to coordinate
- * callbacks which happen after the animation has taken place.
- *
- * Internally, it is guaranteed that increment() and decrement() will be called before and the
- * after the event is dispatched.
- */
- public static class AnimatedEvent extends Event {
-
- private final ReferenceCountedTrigger mTrigger = new ReferenceCountedTrigger();
-
- // Only accessible from derived events
- protected AnimatedEvent() {}
-
- /**
- * Returns the reference counted trigger that coordinates the animations for this event.
- */
- public ReferenceCountedTrigger getAnimationTrigger() {
- return mTrigger;
- }
-
- /**
- * Adds a callback that is guaranteed to be called after the state has changed regardless of
- * whether an actual animation took place.
- */
- public void addPostAnimationCallback(Runnable r) {
- mTrigger.addLastDecrementRunnable(r);
- }
-
- @Override
- void onPreDispatch() {
- mTrigger.increment();
- }
-
- @Override
- void onPostDispatch() {
- mTrigger.decrement();
- }
-
- @Override
- protected Object clone() throws CloneNotSupportedException {
- throw new CloneNotSupportedException();
- }
- }
-
- /**
- * An event that can be reusable, only used for situations where we want to reduce memory
- * allocations when events are sent frequently (ie. on scroll).
- */
- public static class ReusableEvent extends Event {
-
- private int mDispatchCount;
-
- protected ReusableEvent() {}
-
- @Override
- void onPostDispatch() {
- super.onPostDispatch();
- mDispatchCount++;
- }
-
- @Override
- protected Object clone() throws CloneNotSupportedException {
- throw new CloneNotSupportedException();
- }
- }
-
- /**
- * Proguard must also know, and keep, all methods matching this signature.
- *
- * -keepclassmembers class ** {
- * public void onBusEvent(**);
- * public void onInterprocessBusEvent(**);
- * }
- */
- private static final String METHOD_PREFIX = "onBusEvent";
-
- // The default priority of all subscribers
- private static final int DEFAULT_SUBSCRIBER_PRIORITY = 1;
-
- // Orders the handlers by priority and registration time
- private static final Comparator<EventHandler> EVENT_HANDLER_COMPARATOR = new Comparator<EventHandler>() {
- @Override
- public int compare(EventHandler h1, EventHandler h2) {
- // Rank the handlers by priority descending, followed by registration time descending.
- // aka. the later registered
- if (h1.priority != h2.priority) {
- return h2.priority - h1.priority;
- } else {
- return Long.compare(h2.subscriber.registrationTime, h1.subscriber.registrationTime);
- }
- }
- };
-
- // Used for initializing the default bus
- private static final Object sLock = new Object();
- private static volatile EventBus sDefaultBus;
-
- // The handler to post all events
- private Handler mHandler;
-
- /**
- * Map from event class -> event handler list. Keeps track of the actual mapping from event
- * to subscriber method.
- */
- private HashMap<Class<? extends Event>, ArrayList<EventHandler>> mEventTypeMap = new HashMap<>();
-
- /**
- * Map from subscriber class -> event handler method lists. Used to determine upon registration
- * of a new subscriber whether we need to read all the subscriber's methods again using
- * reflection or whether we can just add the subscriber to the event type map.
- */
- private HashMap<Class<? extends Object>, ArrayList<EventHandlerMethod>> mSubscriberTypeMap = new HashMap<>();
-
- /**
- * Set of all currently registered subscribers
- */
- private ArrayList<Subscriber> mSubscribers = new ArrayList<>();
-
- // For tracing
- private int mCallCount;
- private long mCallDurationMicros;
-
- /**
- * Private constructor to create an event bus for a given looper.
- */
- private EventBus(Looper looper) {
- mHandler = new Handler(looper);
- }
-
- /**
- * @return the default event bus for the application's main thread.
- */
- public static EventBus getDefault() {
- if (sDefaultBus == null)
- synchronized (sLock) {
- if (sDefaultBus == null) {
- if (DEBUG_TRACE_ALL) {
- logWithPid("New EventBus");
- }
- sDefaultBus = new EventBus(Looper.getMainLooper());
- }
- }
- return sDefaultBus;
- }
-
- /**
- * Registers a subscriber to receive events with the default priority.
- *
- * @param subscriber the subscriber to handle events. If this is the first instance of the
- * subscriber's class type that has been registered, the class's methods will
- * be scanned for appropriate event handler methods.
- */
- public void register(Object subscriber) {
- registerSubscriber(subscriber, DEFAULT_SUBSCRIBER_PRIORITY);
- }
-
- /**
- * Registers a subscriber to receive events with the given priority.
- *
- * @param subscriber the subscriber to handle events. If this is the first instance of the
- * subscriber's class type that has been registered, the class's methods will
- * be scanned for appropriate event handler methods.
- * @param priority the priority that this subscriber will receive events relative to other
- * subscribers
- */
- public void register(Object subscriber, int priority) {
- registerSubscriber(subscriber, priority);
- }
-
- /**
- * Remove all EventHandlers pointing to the specified subscriber. This does not remove the
- * mapping of subscriber type to event handler method, in case new instances of this subscriber
- * are registered.
- */
- public void unregister(Object subscriber) {
- if (DEBUG_TRACE_ALL) {
- logWithPid("unregister()");
- }
-
- // Fail immediately if we are being called from the non-main thread
- long callingThreadId = Thread.currentThread().getId();
- if (callingThreadId != mHandler.getLooper().getThread().getId()) {
- throw new RuntimeException("Can not unregister() a subscriber from a non-main thread.");
- }
-
- // Return early if this is not a registered subscriber
- if (!findRegisteredSubscriber(subscriber, true /* removeFoundSubscriber */)) {
- return;
- }
-
- Class<?> subscriberType = subscriber.getClass();
- ArrayList<EventHandlerMethod> subscriberMethods = mSubscriberTypeMap.get(subscriberType);
- if (subscriberMethods != null) {
- // For each of the event handlers the subscriber handles, remove all references of that
- // handler
- for (EventHandlerMethod method : subscriberMethods) {
- ArrayList<EventHandler> eventHandlers = mEventTypeMap.get(method.eventType);
- for (int i = eventHandlers.size() - 1; i >= 0; i--) {
- if (eventHandlers.get(i).subscriber.getReference() == subscriber) {
- eventHandlers.remove(i);
- }
- }
- }
- }
- }
-
- /**
- * Sends an event to the subscribers of the given event type immediately. This can only be
- * called from the same thread as the EventBus's looper thread (for the default EventBus, this
- * is the main application thread).
- */
- public void send(Event event) {
- // Fail immediately if we are being called from the non-main thread
- long callingThreadId = Thread.currentThread().getId();
- if (callingThreadId != mHandler.getLooper().getThread().getId()) {
- throw new RuntimeException("Can not send() a message from a non-main thread.");
- }
-
- if (DEBUG_TRACE_ALL) {
- logWithPid("send(" + event.getClass().getSimpleName() + ")");
- }
-
- // Reset the event's cancelled state
- event.requiresPost = false;
- event.cancelled = false;
- queueEvent(event);
- }
-
- /**
- * Post a message to the subscribers of the given event type. The messages will be posted on
- * the EventBus's looper thread (for the default EventBus, this is the main application thread).
- */
- public void post(Event event) {
- if (DEBUG_TRACE_ALL) {
- logWithPid("post(" + event.getClass().getSimpleName() + ")");
- }
-
- // Reset the event's cancelled state
- event.requiresPost = true;
- event.cancelled = false;
- queueEvent(event);
- }
-
- /**
- * If this method is called from the main thread, it will be handled directly. If this method
- * is not called from the main thread, it will be posted onto the main thread.
- */
- public void sendOntoMainThread(Event event) {
- long callingThreadId = Thread.currentThread().getId();
- if (callingThreadId != mHandler.getLooper().getThread().getId()) {
- post(event);
- } else {
- send(event);
- }
- }
-
- /**
- * @return a dump of the current state of the EventBus
- */
- public void dump(String prefix, PrintWriter writer) {
- writer.println(dumpInternal(prefix));
- }
-
- public String dumpInternal(String prefix) {
- String innerPrefix = prefix + " ";
- String innerInnerPrefix = innerPrefix + " ";
- StringBuilder output = new StringBuilder();
- output.append(prefix);
- output.append("Registered class types:");
- output.append("\n");
- ArrayList<Class<?>> subsciberTypes = new ArrayList<>(mSubscriberTypeMap.keySet());
- Collections.sort(subsciberTypes, new Comparator<Class<?>>() {
- @Override
- public int compare(Class<?> o1, Class<?> o2) {
- return o1.getSimpleName().compareTo(o2.getSimpleName());
- }
- });
- for (int i = 0; i < subsciberTypes.size(); i++) {
- Class<?> clz = subsciberTypes.get(i);
- output.append(innerPrefix);
- output.append(clz.getSimpleName());
- output.append("\n");
- }
- output.append(prefix);
- output.append("Event map:");
- output.append("\n");
- ArrayList<Class<?>> classes = new ArrayList<>(mEventTypeMap.keySet());
- Collections.sort(classes, new Comparator<Class<?>>() {
- @Override
- public int compare(Class<?> o1, Class<?> o2) {
- return o1.getSimpleName().compareTo(o2.getSimpleName());
- }
- });
- for (int i = 0; i < classes.size(); i++) {
- Class<?> clz = classes.get(i);
- output.append(innerPrefix);
- output.append(clz.getSimpleName());
- output.append(" -> ");
- output.append("\n");
- ArrayList<EventHandler> handlers = mEventTypeMap.get(clz);
- for (EventHandler handler : handlers) {
- Object subscriber = handler.subscriber.getReference();
- if (subscriber != null) {
- String id = Integer.toHexString(System.identityHashCode(subscriber));
- output.append(innerInnerPrefix);
- output.append(subscriber.getClass().getSimpleName());
- output.append(" [0x" + id + ", #" + handler.priority + "]");
- output.append("\n");
- }
- }
- }
- return output.toString();
- }
-
- /**
- * Registers a new subscriber.
- */
- private void registerSubscriber(Object subscriber, int priority) {
- // Fail immediately if we are being called from the non-main thread
- long callingThreadId = Thread.currentThread().getId();
- if (callingThreadId != mHandler.getLooper().getThread().getId()) {
- throw new RuntimeException("Can not register() a subscriber from a non-main thread.");
- }
-
- // Return immediately if this exact subscriber is already registered
- if (findRegisteredSubscriber(subscriber, false /* removeFoundSubscriber */)) {
- return;
- }
-
- long t1 = 0;
- if (DEBUG_TRACE_ALL) {
- t1 = SystemClock.currentTimeMicro();
- logWithPid("registerSubscriber(" + subscriber.getClass().getSimpleName() + ")");
- }
- Subscriber sub = new Subscriber(subscriber, SystemClock.uptimeMillis());
- Class<?> subscriberType = subscriber.getClass();
- ArrayList<EventHandlerMethod> subscriberMethods = mSubscriberTypeMap.get(subscriberType);
- if (subscriberMethods != null) {
- if (DEBUG_TRACE_ALL) {
- logWithPid("Subscriber class type already registered");
- }
-
- // If we've parsed this subscriber type before, just add to the set for all the known
- // events
- for (EventHandlerMethod method : subscriberMethods) {
- ArrayList<EventHandler> eventTypeHandlers = mEventTypeMap.get(method.eventType);
- eventTypeHandlers.add(new EventHandler(sub, method, priority));
- sortEventHandlersByPriority(eventTypeHandlers);
- }
- mSubscribers.add(sub);
- return;
- } else {
- if (DEBUG_TRACE_ALL) {
- logWithPid("Subscriber class type requires registration");
- }
-
- // If we are parsing this type from scratch, ensure we add it to the subscriber type
- // map, and pull out he handler methods below
- subscriberMethods = new ArrayList<>();
- mSubscriberTypeMap.put(subscriberType, subscriberMethods);
- mSubscribers.add(sub);
- }
-
- // Find all the valid event bus handler methods of the subscriber
- Method[] methods = subscriberType.getDeclaredMethods();
- for (Method m : methods) {
- Class<?>[] parameterTypes = m.getParameterTypes();
- if (isValidEventBusHandlerMethod(m, parameterTypes)) {
- Class<? extends Event> eventType = (Class<? extends Event>) parameterTypes[0];
- ArrayList<EventHandler> eventTypeHandlers = mEventTypeMap.get(eventType);
- if (eventTypeHandlers == null) {
- eventTypeHandlers = new ArrayList<>();
- mEventTypeMap.put(eventType, eventTypeHandlers);
- }
- EventHandlerMethod method = new EventHandlerMethod(m, eventType);
- EventHandler handler = new EventHandler(sub, method, priority);
- eventTypeHandlers.add(handler);
- subscriberMethods.add(method);
- sortEventHandlersByPriority(eventTypeHandlers);
-
- if (DEBUG_TRACE_ALL) {
- logWithPid(" * Method: " + m.getName() +
- " event: " + parameterTypes[0].getSimpleName());
- }
- }
- }
- if (DEBUG_TRACE_ALL) {
- logWithPid("Registered " + subscriber.getClass().getSimpleName() + " in " +
- (SystemClock.currentTimeMicro() - t1) + " microseconds");
- }
- }
-
- /**
- * Adds a new message.
- */
- private void queueEvent(final Event event) {
- ArrayList<EventHandler> eventHandlers = mEventTypeMap.get(event.getClass());
- if (eventHandlers == null) {
- // This is just an optimization to return early if there are no handlers. However, we
- // should still ensure that we call pre/post dispatch callbacks so that AnimatedEvents
- // are still cleaned up correctly if a listener has not been registered to handle them
- event.onPreDispatch();
- event.onPostDispatch();
- return;
- }
-
- // Prepare this event
- boolean hasPostedEvent = false;
- event.onPreDispatch();
-
- // We need to clone the list in case a subscriber unregisters itself during traversal
- // TODO: Investigate whether we can skip the object creation here
- eventHandlers = (ArrayList<EventHandler>) eventHandlers.clone();
- int eventHandlerCount = eventHandlers.size();
- for (int i = 0; i < eventHandlerCount; i++) {
- final EventHandler eventHandler = eventHandlers.get(i);
- if (eventHandler.subscriber.getReference() != null) {
- if (event.requiresPost) {
- mHandler.post(() -> processEvent(eventHandler, event));
- hasPostedEvent = true;
- } else {
- processEvent(eventHandler, event);
- }
- }
- }
-
- // Clean up after this event, deferring until all subscribers have been called
- if (hasPostedEvent) {
- mHandler.post(event::onPostDispatch);
- } else {
- event.onPostDispatch();
- }
- }
-
- /**
- * Processes and dispatches the given event to the given event handler, on the thread of whoever
- * calls this method.
- */
- private void processEvent(final EventHandler eventHandler, final Event event) {
- // Skip if the event was already cancelled
- if (event.cancelled) {
- if (event.trace || DEBUG_TRACE_ALL) {
- logWithPid("Event dispatch cancelled");
- }
- return;
- }
-
- try {
- if (event.trace || DEBUG_TRACE_ALL) {
- logWithPid(" -> " + eventHandler.toString());
- }
- Object sub = eventHandler.subscriber.getReference();
- if (sub != null) {
- long t1 = 0;
- if (DEBUG_TRACE_ALL) {
- t1 = SystemClock.currentTimeMicro();
- }
- eventHandler.method.invoke(sub, event);
- if (DEBUG_TRACE_ALL) {
- long duration = (SystemClock.currentTimeMicro() - t1);
- mCallDurationMicros += duration;
- mCallCount++;
- logWithPid(eventHandler.method.toString() + " duration: " + duration +
- " microseconds, avg: " + (mCallDurationMicros / mCallCount));
- }
- } else {
- Log.e(TAG, "Failed to deliver event to null subscriber");
- }
- } catch (IllegalAccessException e) {
- Log.e(TAG, "Failed to invoke method", e.getCause());
- } catch (InvocationTargetException e) {
- throw new RuntimeException(e.getCause());
- }
- }
-
- /**
- * Returns whether this subscriber is currently registered. If {@param removeFoundSubscriber}
- * is true, then remove the subscriber before returning.
- */
- private boolean findRegisteredSubscriber(Object subscriber, boolean removeFoundSubscriber) {
- for (int i = mSubscribers.size() - 1; i >= 0; i--) {
- Subscriber sub = mSubscribers.get(i);
- if (sub.getReference() == subscriber) {
- if (removeFoundSubscriber) {
- mSubscribers.remove(i);
- }
- return true;
- }
- }
- return false;
- }
-
- /**
- * @return whether {@param method} is a valid (normal or interprocess) event bus handler method
- */
- private boolean isValidEventBusHandlerMethod(Method method, Class<?>[] parameterTypes) {
- int modifiers = method.getModifiers();
- if (Modifier.isPublic(modifiers) &&
- Modifier.isFinal(modifiers) &&
- method.getReturnType().equals(Void.TYPE) &&
- parameterTypes.length == 1) {
- if (EventBus.Event.class.isAssignableFrom(parameterTypes[0]) &&
- method.getName().startsWith(METHOD_PREFIX)) {
- return true;
- } else {
- if (DEBUG_TRACE_ALL) {
- if (!EventBus.Event.class.isAssignableFrom(parameterTypes[0])) {
- logWithPid(" Expected method take an Event-based parameter: " + method.getName());
- }
- }
- }
- } else {
- if (DEBUG_TRACE_ALL) {
- if (!Modifier.isPublic(modifiers)) {
- logWithPid(" Expected method to be public: " + method.getName());
- } else if (!Modifier.isFinal(modifiers)) {
- logWithPid(" Expected method to be final: " + method.getName());
- } else if (!method.getReturnType().equals(Void.TYPE)) {
- logWithPid(" Expected method to return null: " + method.getName());
- }
- }
- }
- return false;
- }
-
- /**
- * Sorts the event handlers by priority and registration time.
- */
- private void sortEventHandlersByPriority(List<EventHandler> eventHandlers) {
- Collections.sort(eventHandlers, EVENT_HANDLER_COMPARATOR);
- }
-
- /**
- * Helper method to log the given {@param text} with the current process and user id.
- */
- private static void logWithPid(String text) {
- Log.d(TAG, "[" + android.os.Process.myPid() + ", u" + UserHandle.myUserId() + "] " + text);
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/AppTransitionFinishedEvent.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/AppTransitionFinishedEvent.java
deleted file mode 100644
index 4738eed3d1a1..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/AppTransitionFinishedEvent.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-
-package com.android.systemui.recents.events.activity;
-
-import com.android.systemui.recents.events.EventBus;
-
-/**
- * Sent when an app transition has finished playing.
- */
-public class AppTransitionFinishedEvent extends EventBus.Event {
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/CancelEnterRecentsWindowAnimationEvent.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/CancelEnterRecentsWindowAnimationEvent.java
deleted file mode 100644
index fec34e3cd23d..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/CancelEnterRecentsWindowAnimationEvent.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.events.activity;
-
-import com.android.systemui.recents.events.EventBus;
-import com.android.systemui.shared.recents.model.Task;
-
-/**
- * This is sent when we want to cancel the enter-recents window animation for the launch task.
- */
-public class CancelEnterRecentsWindowAnimationEvent extends EventBus.Event {
-
- // This is set for the task that is launching, which allows us to ensure that we are not
- // cancelling the same task animation (it will just be overwritten instead)
- public final Task launchTask;
-
- public CancelEnterRecentsWindowAnimationEvent(Task launchTask) {
- this.launchTask = launchTask;
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/ConfigurationChangedEvent.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/ConfigurationChangedEvent.java
deleted file mode 100644
index 294c1e7a190f..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/ConfigurationChangedEvent.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.events.activity;
-
-import com.android.systemui.recents.events.EventBus;
-
-/**
- * This is sent when the Recents activity configuration has changed.
- */
-public class ConfigurationChangedEvent extends EventBus.AnimatedEvent {
-
- public final boolean fromMultiWindow;
- public final boolean fromDeviceOrientationChange;
- public final boolean fromDisplayDensityChange;
- public final boolean hasStackTasks;
-
- public ConfigurationChangedEvent(boolean fromMultiWindow, boolean fromDeviceOrientationChange,
- boolean fromDisplayDensityChange, boolean hasStackTasks) {
- this.fromMultiWindow = fromMultiWindow;
- this.fromDeviceOrientationChange = fromDeviceOrientationChange;
- this.fromDisplayDensityChange = fromDisplayDensityChange;
- this.hasStackTasks = hasStackTasks;
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/DismissRecentsToHomeAnimationStarted.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/DismissRecentsToHomeAnimationStarted.java
deleted file mode 100644
index e7be85868da2..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/DismissRecentsToHomeAnimationStarted.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.events.activity;
-
-import com.android.systemui.recents.events.EventBus;
-
-/**
- * This is sent when the task animation when dismissing Recents starts.
- */
-public class DismissRecentsToHomeAnimationStarted extends EventBus.AnimatedEvent {
-
- public final boolean animated;
-
- public DismissRecentsToHomeAnimationStarted(boolean animated) {
- this.animated = animated;
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/DockedFirstAnimationFrameEvent.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/DockedFirstAnimationFrameEvent.java
deleted file mode 100644
index 32d9a70340de..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/DockedFirstAnimationFrameEvent.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-
-package com.android.systemui.recents.events.activity;
-
-import com.android.systemui.recents.events.EventBus.Event;
-
-/**
- * Sent when the window animation has started when docking a task
- */
-public class DockedFirstAnimationFrameEvent extends Event {
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/DockedTopTaskEvent.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/DockedTopTaskEvent.java
deleted file mode 100644
index 9e3ced3f3757..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/DockedTopTaskEvent.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-
-package com.android.systemui.recents.events.activity;
-
-import android.graphics.Rect;
-
-import com.android.systemui.recents.events.EventBus;
-
-/**
- * Fires when the user invoked the gesture to dock the top/left task after we called into window
- * manager and before we start recents.
- */
-public class DockedTopTaskEvent extends EventBus.Event {
-
- public Rect initialRect;
-
- public DockedTopTaskEvent(Rect initialRect) {
- this.initialRect = initialRect;
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/EnterRecentsWindowAnimationCompletedEvent.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/EnterRecentsWindowAnimationCompletedEvent.java
deleted file mode 100644
index b31f32090ac7..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/EnterRecentsWindowAnimationCompletedEvent.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.events.activity;
-
-import com.android.systemui.recents.events.EventBus;
-
-/**
- * This is sent when the window animation into Recents completes. We use this signal to know when
- * we can start in-app animations so that they don't conflict with the window transition into
- * Recents.
- */
-public class EnterRecentsWindowAnimationCompletedEvent extends EventBus.Event {
- // Simple event
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/EnterRecentsWindowLastAnimationFrameEvent.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/EnterRecentsWindowLastAnimationFrameEvent.java
deleted file mode 100644
index fd023d8054e5..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/EnterRecentsWindowLastAnimationFrameEvent.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.events.activity;
-
-import com.android.systemui.recents.events.EventBus;
-
-public class EnterRecentsWindowLastAnimationFrameEvent extends EventBus.Event {
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/ExitRecentsWindowFirstAnimationFrameEvent.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/ExitRecentsWindowFirstAnimationFrameEvent.java
deleted file mode 100644
index fa806eb24ad1..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/ExitRecentsWindowFirstAnimationFrameEvent.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.events.activity;
-
-import com.android.systemui.recents.events.EventBus;
-
-/**
- * Event sent when the exit animation is started.
- *
- * This is sent so parts of UI can synchronize on this event and adjust their appearance. An example
- * of that is hiding the tasks when the launched application window becomes visible.
- */
-public class ExitRecentsWindowFirstAnimationFrameEvent extends EventBus.Event {
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/HideRecentsEvent.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/HideRecentsEvent.java
deleted file mode 100644
index bf9b421ef1fb..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/HideRecentsEvent.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.events.activity;
-
-import com.android.systemui.recents.events.EventBus;
-
-/**
- * This is sent when the user taps on the Home button or finishes alt-tabbing to hide the Recents
- * activity.
- */
-public class HideRecentsEvent extends EventBus.Event {
-
- public final boolean triggeredFromAltTab;
- public final boolean triggeredFromHomeKey;
-
- public HideRecentsEvent(boolean triggeredFromAltTab, boolean triggeredFromHomeKey) {
- this.triggeredFromAltTab = triggeredFromAltTab;
- this.triggeredFromHomeKey = triggeredFromHomeKey;
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/HideStackActionButtonEvent.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/HideStackActionButtonEvent.java
deleted file mode 100644
index e4a4f592657c..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/HideStackActionButtonEvent.java
+++ /dev/null
@@ -1,36 +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.recents.events.activity;
-
-import com.android.systemui.recents.events.EventBus;
-
-/**
- * This is sent when the stack action button should be hidden.
- */
-public class HideStackActionButtonEvent extends EventBus.Event {
-
- // Whether or not to translate the stack action button when hiding it
- public final boolean translate;
-
- public HideStackActionButtonEvent() {
- this(true);
- }
-
- public HideStackActionButtonEvent(boolean translate) {
- this.translate = translate;
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/LaunchMostRecentTaskRequestEvent.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/LaunchMostRecentTaskRequestEvent.java
deleted file mode 100644
index 24913a4c2ca6..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/LaunchMostRecentTaskRequestEvent.java
+++ /dev/null
@@ -1,26 +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.recents.events.activity;
-
-import com.android.systemui.recents.events.EventBus;
-
-/**
- * This event is sent to request that the most recent task is launched.
- */
-public class LaunchMostRecentTaskRequestEvent extends EventBus.Event {
- // Simple event
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/LaunchNextTaskRequestEvent.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/LaunchNextTaskRequestEvent.java
deleted file mode 100644
index 11604b51b4a5..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/LaunchNextTaskRequestEvent.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.events.activity;
-
-import com.android.systemui.recents.events.EventBus;
-
-/**
- * This event is sent to request that the next task is launched after a double-tap on the Recents
- * button.
- */
-public class LaunchNextTaskRequestEvent extends EventBus.Event {
- // Simple event
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/LaunchTaskEvent.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/LaunchTaskEvent.java
deleted file mode 100644
index 2409f39d3760..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/LaunchTaskEvent.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.events.activity;
-
-import static android.app.WindowConfiguration.ACTIVITY_TYPE_UNDEFINED;
-import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED;
-
-import android.graphics.Rect;
-
-import com.android.systemui.recents.events.EventBus;
-import com.android.systemui.shared.recents.model.Task;
-import com.android.systemui.recents.views.TaskView;
-
-/**
- * This event is sent to request that a particular task is launched.
- */
-public class LaunchTaskEvent extends EventBus.Event {
-
- public final TaskView taskView;
- public final Task task;
- public final Rect targetTaskBounds;
- public final int targetWindowingMode;
- public final int targetActivityType;
- public final boolean screenPinningRequested;
-
- public LaunchTaskEvent(TaskView taskView, Task task, Rect targetTaskBounds,
- boolean screenPinningRequested) {
- this(taskView, task, targetTaskBounds, screenPinningRequested,
- WINDOWING_MODE_UNDEFINED, ACTIVITY_TYPE_UNDEFINED);
- }
-
- public LaunchTaskEvent(TaskView taskView, Task task, Rect targetTaskBounds,
- boolean screenPinningRequested, int windowingMode, int activityType) {
- this.taskView = taskView;
- this.task = task;
- this.targetTaskBounds = targetTaskBounds;
- this.targetWindowingMode = windowingMode;
- this.targetActivityType = activityType;
- this.screenPinningRequested = screenPinningRequested;
- }
-
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/LaunchTaskFailedEvent.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/LaunchTaskFailedEvent.java
deleted file mode 100644
index 3a2d58c80d88..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/LaunchTaskFailedEvent.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.events.activity;
-
-import com.android.systemui.recents.events.EventBus;
-
-/**
- * This is sent when we fail to launch a task.
- */
-public class LaunchTaskFailedEvent extends EventBus.Event {
- // Simple event
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/LaunchTaskStartedEvent.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/LaunchTaskStartedEvent.java
deleted file mode 100644
index 3925ab1186dc..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/LaunchTaskStartedEvent.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.events.activity;
-
-import com.android.systemui.recents.events.EventBus;
-import com.android.systemui.recents.views.TaskView;
-
-/**
- * This event is sent following {@link LaunchTaskEvent} after the call to the system is made to
- * start the task.
- */
-public class LaunchTaskStartedEvent extends EventBus.AnimatedEvent {
-
- public final TaskView taskView;
- public final boolean screenPinningRequested;
-
- public LaunchTaskStartedEvent(TaskView taskView, boolean screenPinningRequested) {
- this.taskView = taskView;
- this.screenPinningRequested = screenPinningRequested;
- }
-
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/LaunchTaskSucceededEvent.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/LaunchTaskSucceededEvent.java
deleted file mode 100644
index ec5089feabad..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/LaunchTaskSucceededEvent.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.events.activity;
-
-import com.android.systemui.recents.events.EventBus;
-
-/**
- * This is sent when we successfully launch a task.
- */
-public class LaunchTaskSucceededEvent extends EventBus.Event {
-
- public final int taskIndexFromStackFront;
-
- public LaunchTaskSucceededEvent(int taskIndexFromStackFront) {
- this.taskIndexFromStackFront = taskIndexFromStackFront;
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/MultiWindowStateChangedEvent.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/MultiWindowStateChangedEvent.java
deleted file mode 100644
index 64eeafa1ae17..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/MultiWindowStateChangedEvent.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.events.activity;
-
-import com.android.systemui.recents.events.EventBus;
-import com.android.systemui.recents.model.TaskStack;
-
-/**
- * This is sent by the activity whenever the multi-window state has changed.
- */
-public class MultiWindowStateChangedEvent extends EventBus.AnimatedEvent {
-
- public final boolean inMultiWindow;
- // This flag is only used when undocking a task
- public final boolean showDeferredAnimation;
- public final TaskStack stack;
-
- public MultiWindowStateChangedEvent(boolean inMultiWindow, boolean showDeferredAnimation,
- TaskStack stack) {
- this.inMultiWindow = inMultiWindow;
- this.showDeferredAnimation = showDeferredAnimation;
- this.stack = stack;
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/PackagesChangedEvent.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/PackagesChangedEvent.java
deleted file mode 100644
index 47670e03c6a1..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/PackagesChangedEvent.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.events.activity;
-
-import com.android.systemui.recents.events.EventBus;
-import com.android.systemui.recents.views.TaskStackView;
-import com.android.systemui.recents.RecentsActivity;
-
-/**
- * This event is sent by {@link RecentsActivity} when a package on the the system changes.
- * {@link TaskStackView}s listen for this event, and remove the tasks associated with the removed
- * packages.
- */
-public class PackagesChangedEvent extends EventBus.Event {
-
- public final String packageName;
- public final int userId;
-
- public PackagesChangedEvent(String packageName, int userId) {
- this.packageName = packageName;
- this.userId = userId;
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/RecentsActivityStartingEvent.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/RecentsActivityStartingEvent.java
deleted file mode 100644
index a2ecfe207cf9..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/RecentsActivityStartingEvent.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-
-package com.android.systemui.recents.events.activity;
-
-import com.android.systemui.recents.events.EventBus;
-
-/**
- * Called after recents activity is being started, i.e. startActivity has just been called.
- */
-public class RecentsActivityStartingEvent extends EventBus.Event{
-
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/ShowEmptyViewEvent.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/ShowEmptyViewEvent.java
deleted file mode 100644
index 75bfd7bde66c..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/ShowEmptyViewEvent.java
+++ /dev/null
@@ -1,25 +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.recents.events.activity;
-
-import com.android.systemui.recents.events.EventBus;
-
-/**
- * Sent when the stack should be hidden and the empty view shown.
- */
-public class ShowEmptyViewEvent extends EventBus.Event {
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/ShowStackActionButtonEvent.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/ShowStackActionButtonEvent.java
deleted file mode 100644
index d81f89c172b9..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/ShowStackActionButtonEvent.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.events.activity;
-
-import com.android.systemui.recents.events.EventBus;
-
-/**
- * This is sent when the stack action view button should be shown.
- */
-public class ShowStackActionButtonEvent extends EventBus.Event {
-
- // Whether or not to translate the stack action button when showing it
- public final boolean translate;
-
- public ShowStackActionButtonEvent(boolean translate) {
- this.translate = translate;
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/TaskStackUpdatedEvent.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/TaskStackUpdatedEvent.java
deleted file mode 100644
index 0d614e8c675c..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/TaskStackUpdatedEvent.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.events.activity;
-
-import com.android.systemui.recents.events.EventBus;
-import com.android.systemui.recents.model.TaskStack;
-
-/**
- * This is sent by the activity whenever the task stach has changed.
- */
-public class TaskStackUpdatedEvent extends EventBus.AnimatedEvent {
-
- /**
- * A new TaskStack instance representing the latest stack state.
- */
- public final TaskStack stack;
- public final boolean inMultiWindow;
-
- public TaskStackUpdatedEvent(TaskStack stack, boolean inMultiWindow) {
- this.stack = stack;
- this.inMultiWindow = inMultiWindow;
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/ToggleRecentsEvent.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/ToggleRecentsEvent.java
deleted file mode 100644
index 49655b491aca..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/ToggleRecentsEvent.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.events.activity;
-
-import com.android.systemui.recents.events.EventBus;
-
-/**
- * This is sent when the user taps on the Overview button to toggle the Recents activity.
- */
-public class ToggleRecentsEvent extends EventBus.Event {
- // Simple event
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/UndockingTaskEvent.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/UndockingTaskEvent.java
deleted file mode 100644
index d5083a8b017f..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/activity/UndockingTaskEvent.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-
-package com.android.systemui.recents.events.activity;
-
-import com.android.systemui.recents.events.EventBus;
-
-/**
- * Fires when the user invoked the gesture to undock the task in the docked stack.
- */
-public class UndockingTaskEvent extends EventBus.Event {
-
- public UndockingTaskEvent() {
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/component/ActivityPinnedEvent.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/component/ActivityPinnedEvent.java
deleted file mode 100644
index f4d2fcff9672..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/component/ActivityPinnedEvent.java
+++ /dev/null
@@ -1,31 +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.recents.events.component;
-
-import com.android.systemui.recents.events.EventBus;
-
-/**
- * This is sent when an activity is pinned.
- */
-public class ActivityPinnedEvent extends EventBus.Event {
-
- public final int taskId;
-
- public ActivityPinnedEvent(int taskId) {
- this.taskId = taskId;
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/component/ActivityUnpinnedEvent.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/component/ActivityUnpinnedEvent.java
deleted file mode 100644
index 48c5f0b60f51..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/component/ActivityUnpinnedEvent.java
+++ /dev/null
@@ -1,25 +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.recents.events.component;
-
-import com.android.systemui.recents.events.EventBus;
-
-/**
- * This is sent when an activity is unpinned.
- */
-public class ActivityUnpinnedEvent extends EventBus.Event {
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/component/ExpandPipEvent.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/component/ExpandPipEvent.java
deleted file mode 100644
index 37266f6ff39f..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/component/ExpandPipEvent.java
+++ /dev/null
@@ -1,25 +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.recents.events.component;
-
-import com.android.systemui.recents.events.EventBus;
-
-/**
- * This is sent when the PiP should be expanded due to being relaunched.
- */
-public class ExpandPipEvent extends EventBus.Event {
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/component/HidePipMenuEvent.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/component/HidePipMenuEvent.java
deleted file mode 100644
index ce4f207aa1d7..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/component/HidePipMenuEvent.java
+++ /dev/null
@@ -1,26 +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.recents.events.component;
-
-import com.android.systemui.recents.events.EventBus;
-
-/**
- * This is sent when the PiP menu should be hidden.
- */
-public class HidePipMenuEvent extends EventBus.AnimatedEvent {
- // Simple event
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/component/RecentsVisibilityChangedEvent.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/component/RecentsVisibilityChangedEvent.java
deleted file mode 100644
index 8843eb41210f..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/component/RecentsVisibilityChangedEvent.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.events.component;
-
-import android.content.Context;
-
-import com.android.systemui.recents.events.EventBus;
-
-/**
- * This is sent when the visibility of the RecentsActivity for the current user changes. Handlers
- * of this event should not alter the UI, as the activity may still be visible.
- */
-public class RecentsVisibilityChangedEvent extends EventBus.Event {
-
- public final Context applicationContext;
- public final boolean visible;
-
- public RecentsVisibilityChangedEvent(Context context, boolean visible) {
- this.applicationContext = context.getApplicationContext();
- this.visible = visible;
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/component/ScreenPinningRequestEvent.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/component/ScreenPinningRequestEvent.java
deleted file mode 100644
index d460917b6ab4..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/component/ScreenPinningRequestEvent.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.events.component;
-
-import android.content.Context;
-
-import com.android.systemui.recents.events.EventBus;
-
-/**
- * This is sent when we want to start screen pinning.
- */
-public class ScreenPinningRequestEvent extends EventBus.Event {
-
- public final Context applicationContext;
- public final int taskId;
-
- public ScreenPinningRequestEvent(Context context, int taskId) {
- this.applicationContext = context.getApplicationContext();
- this.taskId = taskId;
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/component/SetWaitingForTransitionStartEvent.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/component/SetWaitingForTransitionStartEvent.java
deleted file mode 100644
index d9cf5fbf645d..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/component/SetWaitingForTransitionStartEvent.java
+++ /dev/null
@@ -1,31 +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.recents.events.component;
-
-import com.android.systemui.recents.events.EventBus;
-
-/**
- * This is sent when we are setting/resetting the flag to wait for the transition to start.
- */
-public class SetWaitingForTransitionStartEvent extends EventBus.Event {
-
- public final boolean waitingForTransitionStart;
-
- public SetWaitingForTransitionStartEvent(boolean waitingForTransitionStart) {
- this.waitingForTransitionStart = waitingForTransitionStart;
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/component/ShowUserToastEvent.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/component/ShowUserToastEvent.java
deleted file mode 100644
index e2b39c39b586..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/component/ShowUserToastEvent.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.events.component;
-
-import com.android.systemui.recents.events.EventBus;
-
-/**
- * This is sent when we want to show a toast for the current user.
- */
-public class ShowUserToastEvent extends EventBus.Event {
-
- public final int msgResId;
- public final int msgLength;
-
- public ShowUserToastEvent(int msgResId, int msgLength) {
- this.msgResId = msgResId;
- this.msgLength = msgLength;
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/AllTaskViewsDismissedEvent.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/AllTaskViewsDismissedEvent.java
deleted file mode 100644
index 0352161be570..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/AllTaskViewsDismissedEvent.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.events.ui;
-
-import com.android.systemui.recents.events.EventBus;
-
-/**
- * This is sent whenever all the task views in a stack have been dismissed.
- */
-public class AllTaskViewsDismissedEvent extends EventBus.Event {
-
- public final int msgResId;
-
- public AllTaskViewsDismissedEvent(int msgResId) {
- this.msgResId = msgResId;
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/DeleteTaskDataEvent.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/DeleteTaskDataEvent.java
deleted file mode 100644
index b52e83b81649..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/DeleteTaskDataEvent.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.events.ui;
-
-import com.android.systemui.recents.events.EventBus;
-import com.android.systemui.shared.recents.model.Task;
-
-/**
- * This is sent when the data associated with a given {@link Task} should be deleted from the
- * system.
- */
-public class DeleteTaskDataEvent extends EventBus.Event {
-
- public final Task task;
-
- public DeleteTaskDataEvent(Task task) {
- this.task = task;
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/DismissAllTaskViewsEvent.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/DismissAllTaskViewsEvent.java
deleted file mode 100644
index f8b59c7c62f7..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/DismissAllTaskViewsEvent.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.events.ui;
-
-import com.android.systemui.recents.events.EventBus;
-import com.android.systemui.recents.views.TaskView;
-
-/**
- * This event is sent to request that all the {@link TaskView}s are dismissed.
- */
-public class DismissAllTaskViewsEvent extends EventBus.AnimatedEvent {
- // Simple event
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/DismissTaskViewEvent.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/DismissTaskViewEvent.java
deleted file mode 100644
index 1f8c6443502f..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/DismissTaskViewEvent.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.events.ui;
-
-import com.android.systemui.recents.events.EventBus;
-import com.android.systemui.recents.views.TaskView;
-
-/**
- * This event is sent to request that the given {@link TaskView} is dismissed.
- */
-public class DismissTaskViewEvent extends EventBus.AnimatedEvent {
-
- public final TaskView taskView;
-
- public DismissTaskViewEvent(TaskView taskView) {
- this.taskView = taskView;
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/DraggingInRecentsEndedEvent.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/DraggingInRecentsEndedEvent.java
deleted file mode 100644
index 9be8eb1cde4e..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/DraggingInRecentsEndedEvent.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.android.systemui.recents.events.ui;
-
-import com.android.systemui.recents.events.EventBus.Event;
-
-/**
- * This event is sent when the user finished dragging in recents.
- */
-public class DraggingInRecentsEndedEvent extends Event {
-
- public final float velocity;
-
- public DraggingInRecentsEndedEvent(float velocity) {
- this.velocity = velocity;
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/DraggingInRecentsEvent.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/DraggingInRecentsEvent.java
deleted file mode 100644
index 5e8bfd410e31..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/DraggingInRecentsEvent.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.android.systemui.recents.events.ui;
-
-import com.android.systemui.recents.events.EventBus.Event;
-
-/**
- * This event is sent when the user changed how far they are dragging in recents.
- */
-public class DraggingInRecentsEvent extends Event {
-
- public final float distanceFromTop;
-
- public DraggingInRecentsEvent(float distanceFromTop) {
- this.distanceFromTop = distanceFromTop;
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/HideIncompatibleAppOverlayEvent.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/HideIncompatibleAppOverlayEvent.java
deleted file mode 100644
index d6ef636b23a6..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/HideIncompatibleAppOverlayEvent.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.events.ui;
-
-import com.android.systemui.recents.events.EventBus;
-
-/**
- * This is sent when a user stops draggin an incompatible app task.
- */
-public class HideIncompatibleAppOverlayEvent extends EventBus.Event {
- // Simple event
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/RecentsDrawnEvent.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/RecentsDrawnEvent.java
deleted file mode 100644
index 548316607133..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/RecentsDrawnEvent.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-
-package com.android.systemui.recents.events.ui;
-
-import com.android.systemui.recents.events.EventBus;
-
-/**
- * Fired when recents was launched and has drawn its first frame.
- */
-public class RecentsDrawnEvent extends EventBus.Event {
-
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/RecentsGrowingEvent.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/RecentsGrowingEvent.java
deleted file mode 100644
index d9b00271b31e..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/RecentsGrowingEvent.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-
-package com.android.systemui.recents.events.ui;
-
-import com.android.systemui.recents.events.EventBus;
-
-/**
- * Sent when recents is about to grow in multi-window mode when entering recents.
- */
-public class RecentsGrowingEvent extends EventBus.Event {
-
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/ShowApplicationInfoEvent.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/ShowApplicationInfoEvent.java
deleted file mode 100644
index da19384ae93a..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/ShowApplicationInfoEvent.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.events.ui;
-
-import com.android.systemui.recents.events.EventBus;
-import com.android.systemui.shared.recents.model.Task;
-
-/**
- * This is sent when a user wants to show the application info for a {@link Task}.
- */
-public class ShowApplicationInfoEvent extends EventBus.Event {
-
- public final Task task;
-
- public ShowApplicationInfoEvent(Task task) {
- this.task = task;
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/ShowIncompatibleAppOverlayEvent.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/ShowIncompatibleAppOverlayEvent.java
deleted file mode 100644
index 3a4350e3a0ca..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/ShowIncompatibleAppOverlayEvent.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.events.ui;
-
-import com.android.systemui.recents.events.EventBus;
-
-/**
- * This is sent when a user starts dragging an incompatible app task.
- */
-public class ShowIncompatibleAppOverlayEvent extends EventBus.Event {
- // Simple event
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/StackViewScrolledEvent.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/StackViewScrolledEvent.java
deleted file mode 100644
index c4b47c08fd8c..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/StackViewScrolledEvent.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.events.ui;
-
-import android.util.MutableInt;
-
-import com.android.systemui.recents.events.EventBus;
-
-/**
- * This is sent whenever a new scroll gesture happens on a stack view.
- */
-public class StackViewScrolledEvent extends EventBus.ReusableEvent {
-
- public final MutableInt yMovement;
-
- public StackViewScrolledEvent() {
- yMovement = new MutableInt(0);
- }
-
- public void updateY(int y) {
- yMovement.value = y;
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/TaskSnapshotChangedEvent.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/TaskSnapshotChangedEvent.java
deleted file mode 100644
index f08292801b62..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/TaskSnapshotChangedEvent.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-
-package com.android.systemui.recents.events.ui;
-
-import com.android.systemui.recents.events.EventBus;
-import com.android.systemui.shared.recents.model.ThumbnailData;
-
-/**
- * Sent when a task snapshot has changed.
- */
-public class TaskSnapshotChangedEvent extends EventBus.Event {
-
- public final int taskId;
- public final ThumbnailData thumbnailData;
-
- public TaskSnapshotChangedEvent(int taskId, ThumbnailData thumbnailData) {
- this.taskId = taskId;
- this.thumbnailData = thumbnailData;
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/TaskViewDismissedEvent.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/TaskViewDismissedEvent.java
deleted file mode 100644
index 973812454afd..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/TaskViewDismissedEvent.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.events.ui;
-
-import com.android.systemui.recents.events.EventBus;
-import com.android.systemui.shared.recents.model.Task;
-import com.android.systemui.recents.utilities.AnimationProps;
-import com.android.systemui.recents.views.TaskView;
-
-/**
- * This event is sent when a {@link TaskView} has been dismissed and is no longer visible.
- */
-public class TaskViewDismissedEvent extends EventBus.Event {
-
- public final Task task;
- public final TaskView taskView;
- public final AnimationProps animation;
-
- public TaskViewDismissedEvent(Task task, TaskView taskView, AnimationProps animation) {
- this.task = task;
- this.taskView = taskView;
- this.animation = animation;
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/UserInteractionEvent.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/UserInteractionEvent.java
deleted file mode 100644
index 39e4c1d7095c..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/UserInteractionEvent.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.events.ui;
-
-import com.android.systemui.recents.events.EventBus;
-
-/**
- * This is sent whenever the user interacts with the activity.
- */
-public class UserInteractionEvent extends EventBus.ReusableEvent {
- // Simple Event
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/dragndrop/DragDropTargetChangedEvent.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/dragndrop/DragDropTargetChangedEvent.java
deleted file mode 100644
index cf61b1ef7637..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/dragndrop/DragDropTargetChangedEvent.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.events.ui.dragndrop;
-
-import com.android.systemui.recents.events.EventBus;
-import com.android.systemui.shared.recents.model.Task;
-import com.android.systemui.recents.views.DropTarget;
-
-/**
- * This event is sent when a user drags in/out of a drop target.
- */
-public class DragDropTargetChangedEvent extends EventBus.AnimatedEvent {
-
- // The task that is currently being dragged
- public final Task task;
- public final DropTarget dropTarget;
-
- public DragDropTargetChangedEvent(Task task, DropTarget dropTarget) {
- this.task = task;
- this.dropTarget = dropTarget;
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/dragndrop/DragEndCancelledEvent.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/dragndrop/DragEndCancelledEvent.java
deleted file mode 100644
index c11936eee284..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/dragndrop/DragEndCancelledEvent.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.events.ui.dragndrop;
-
-import com.android.systemui.recents.events.EventBus;
-import com.android.systemui.shared.recents.model.Task;
-import com.android.systemui.recents.model.TaskStack;
-import com.android.systemui.recents.views.TaskView;
-
-/**
- * This event is sent whenever a drag end is cancelled because of an error.
- */
-public class DragEndCancelledEvent extends EventBus.AnimatedEvent {
-
- public final TaskStack stack;
- public final Task task;
- public final TaskView taskView;
-
- public DragEndCancelledEvent(TaskStack stack, Task task, TaskView taskView) {
- this.stack = stack;
- this.task = task;
- this.taskView = taskView;
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/dragndrop/DragEndEvent.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/dragndrop/DragEndEvent.java
deleted file mode 100644
index 73cbde998319..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/dragndrop/DragEndEvent.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.events.ui.dragndrop;
-
-import com.android.systemui.recents.events.EventBus;
-import com.android.systemui.shared.recents.model.Task;
-import com.android.systemui.recents.views.DropTarget;
-import com.android.systemui.recents.views.TaskView;
-
-/**
- * This event is sent whenever a drag ends.
- */
-public class DragEndEvent extends EventBus.AnimatedEvent {
-
- public final Task task;
- public final TaskView taskView;
- public final DropTarget dropTarget;
-
- public DragEndEvent(Task task, TaskView taskView, DropTarget dropTarget) {
- this.task = task;
- this.taskView = taskView;
- this.dropTarget = dropTarget;
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/dragndrop/DragStartEvent.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/dragndrop/DragStartEvent.java
deleted file mode 100644
index 021be77bcc8b..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/dragndrop/DragStartEvent.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.events.ui.dragndrop;
-
-import android.graphics.Point;
-
-import com.android.systemui.recents.events.EventBus;
-import com.android.systemui.shared.recents.model.Task;
-import com.android.systemui.recents.views.TaskView;
-
-/**
- * This event is sent whenever a drag starts.
- */
-public class DragStartEvent extends EventBus.Event {
-
- public final Task task;
- public final TaskView taskView;
- public final Point tlOffset;
- public final boolean isUserTouchInitiated;
-
- public DragStartEvent(Task task, TaskView taskView, Point tlOffset) {
- this(task, taskView, tlOffset, true);
- }
-
- public DragStartEvent(Task task, TaskView taskView, Point tlOffset,
- boolean isUserTouchInitiated) {
- this.task = task;
- this.taskView = taskView;
- this.tlOffset = tlOffset;
- this.isUserTouchInitiated = isUserTouchInitiated;
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/dragndrop/DragStartInitializeDropTargetsEvent.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/dragndrop/DragStartInitializeDropTargetsEvent.java
deleted file mode 100644
index 64ba5748bb89..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/dragndrop/DragStartInitializeDropTargetsEvent.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.events.ui.dragndrop;
-
-import com.android.systemui.recents.events.EventBus;
-import com.android.systemui.shared.recents.model.Task;
-import com.android.systemui.recents.views.RecentsViewTouchHandler;
-import com.android.systemui.recents.views.TaskView;
-
-/**
- * This event is sent by the drag manager when it requires drop targets to register themselves for
- * the current drag gesture.
- */
-public class DragStartInitializeDropTargetsEvent extends EventBus.Event {
-
- public final Task task;
- public final TaskView taskView;
- public final RecentsViewTouchHandler handler;
-
- public DragStartInitializeDropTargetsEvent(Task task, TaskView taskView,
- RecentsViewTouchHandler handler) {
- this.task = task;
- this.taskView = taskView;
- this.handler = handler;
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/focus/DismissFocusedTaskViewEvent.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/focus/DismissFocusedTaskViewEvent.java
deleted file mode 100644
index df740185f1e8..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/focus/DismissFocusedTaskViewEvent.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.events.ui.focus;
-
-import com.android.systemui.recents.events.EventBus;
-import com.android.systemui.recents.views.TaskView;
-
-/**
- * This event is sent to request that the currently focused {@link TaskView} is dismissed.
- */
-public class DismissFocusedTaskViewEvent extends EventBus.Event {
- // Simple event
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/focus/FocusNextTaskViewEvent.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/focus/FocusNextTaskViewEvent.java
deleted file mode 100644
index 171ab5e8bcca..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/focus/FocusNextTaskViewEvent.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.events.ui.focus;
-
-import com.android.systemui.recents.events.EventBus;
-
-/**
- * Focuses the next task view in the stack.
- */
-public class FocusNextTaskViewEvent extends EventBus.Event {
- // Simple event
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/focus/FocusPreviousTaskViewEvent.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/focus/FocusPreviousTaskViewEvent.java
deleted file mode 100644
index 22469e758e70..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/focus/FocusPreviousTaskViewEvent.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.events.ui.focus;
-
-import com.android.systemui.recents.events.EventBus;
-
-/**
- * Focuses the previous task view in the stack.
- */
-public class FocusPreviousTaskViewEvent extends EventBus.Event {
- // Simple event
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/focus/NavigateTaskViewEvent.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/focus/NavigateTaskViewEvent.java
deleted file mode 100644
index 5508d269f03f..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/events/ui/focus/NavigateTaskViewEvent.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.events.ui.focus;
-
-import android.view.KeyEvent;
-import com.android.systemui.recents.events.EventBus;
-
-/**
- * Navigates the task view by arrow keys.
- */
-public class NavigateTaskViewEvent extends EventBus.Event {
- public enum Direction {
- UNDEFINED, UP, DOWN, LEFT, RIGHT;
- }
-
- public Direction direction;
- public NavigateTaskViewEvent(Direction direction) {
- this.direction = direction;
- }
-
- public static Direction getDirectionFromKeyCode(int keyCode) {
- switch (keyCode) {
- case KeyEvent.KEYCODE_DPAD_UP:
- return Direction.UP;
- case KeyEvent.KEYCODE_DPAD_DOWN:
- return Direction.DOWN;
- case KeyEvent.KEYCODE_DPAD_LEFT:
- return Direction.LEFT;
- case KeyEvent.KEYCODE_DPAD_RIGHT:
- return Direction.RIGHT;
- default:
- return Direction.UNDEFINED;
- }
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/misc/DozeTrigger.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/misc/DozeTrigger.java
deleted file mode 100644
index 574ea03ac9bb..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/misc/DozeTrigger.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.misc;
-
-import android.os.Handler;
-import android.view.ViewDebug;
-
-/**
- * A dozer is a class that fires a trigger after it falls asleep.
- * You can occasionally poke the trigger to wake it up, but it will fall asleep if left untouched.
- */
-public class DozeTrigger {
-
- Handler mHandler;
-
- @ViewDebug.ExportedProperty(category="recents")
- boolean mIsDozing;
- @ViewDebug.ExportedProperty(category="recents")
- boolean mIsAsleep;
- @ViewDebug.ExportedProperty(category="recents")
- int mDozeDurationMilliseconds;
- Runnable mOnSleepRunnable;
-
- // Sleep-runnable
- Runnable mDozeRunnable = new Runnable() {
- @Override
- public void run() {
- mIsDozing = false;
- mIsAsleep = true;
- mOnSleepRunnable.run();
- }
- };
-
- public DozeTrigger(int dozeDurationMilliseconds, Runnable onSleepRunnable) {
- mHandler = new Handler();
- mDozeDurationMilliseconds = dozeDurationMilliseconds;
- mOnSleepRunnable = onSleepRunnable;
- }
-
- /**
- * Starts dozing and queues the onSleepRunnable to be called. This also resets the trigger flag.
- */
- public void startDozing() {
- forcePoke();
- mIsAsleep = false;
- }
-
- /**
- * Stops dozing and prevents the onSleepRunnable from being called.
- */
- public void stopDozing() {
- mHandler.removeCallbacks(mDozeRunnable);
- mIsDozing = false;
- mIsAsleep = false;
- }
-
- /**
- * Updates the duration that we have to wait until dozing triggers.
- */
- public void setDozeDuration(int duration) {
- mDozeDurationMilliseconds = duration;
- }
-
- /**
- * Poke this dozer to wake it up if it is dozing, delaying the onSleepRunnable from being
- * called for a for the doze duration.
- */
- public void poke() {
- if (mIsDozing) {
- forcePoke();
- }
- }
-
- /**
- * Poke this dozer to wake it up even if it is not currently dozing.
- */
- void forcePoke() {
- mHandler.removeCallbacks(mDozeRunnable);
- mHandler.postDelayed(mDozeRunnable, mDozeDurationMilliseconds);
- mIsDozing = true;
- }
-
- /** Returns whether we are dozing or not. */
- public boolean isDozing() {
- return mIsDozing;
- }
-
- /** Returns whether the trigger has fired at least once. */
- public boolean isAsleep() {
- return mIsAsleep;
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/misc/FreePathInterpolator.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/misc/FreePathInterpolator.java
deleted file mode 100644
index 720c9520c074..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/misc/FreePathInterpolator.java
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.misc;
-
-import android.graphics.Path;
-import android.view.animation.BaseInterpolator;
-import android.view.animation.Interpolator;
-
-/**
- * An interpolator that can traverse a Path. The x coordinate along the <code>Path</code>
- * is the input value and the output is the y coordinate of the line at that point.
- * This means that the Path must conform to a function <code>y = f(x)</code>.
- *
- * <p>The <code>Path</code> must not have gaps in the x direction and must not
- * loop back on itself such that there can be two points sharing the same x coordinate.
- * It is alright to have a disjoint line in the vertical direction:</p>
- * <p><blockquote><pre>
- * Path path = new Path();
- * path.lineTo(0.25f, 0.25f);
- * path.moveTo(0.25f, 0.5f);
- * path.lineTo(1f, 1f);
- * </pre></blockquote></p>
- */
-public class FreePathInterpolator extends BaseInterpolator {
-
- // This governs how accurate the approximation of the Path is.
- private static final float PRECISION = 0.002f;
-
- private float[] mX;
- private float[] mY;
- private float mArcLength;
-
- /**
- * Create an interpolator for an arbitrary <code>Path</code>.
- *
- * @param path The <code>Path</code> to use to make the line representing the interpolator.
- */
- public FreePathInterpolator(Path path) {
- initPath(path);
- }
-
- private void initPath(Path path) {
- float[] pointComponents = path.approximate(PRECISION);
-
- int numPoints = pointComponents.length / 3;
-
- mX = new float[numPoints];
- mY = new float[numPoints];
- mArcLength = 0;
- float prevX = 0;
- float prevY = 0;
- float prevFraction = 0;
- int componentIndex = 0;
- for (int i = 0; i < numPoints; i++) {
- float fraction = pointComponents[componentIndex++];
- float x = pointComponents[componentIndex++];
- float y = pointComponents[componentIndex++];
- if (fraction == prevFraction && x != prevX) {
- throw new IllegalArgumentException(
- "The Path cannot have discontinuity in the X axis.");
- }
- if (x < prevX) {
- throw new IllegalArgumentException("The Path cannot loop back on itself.");
- }
- mX[i] = x;
- mY[i] = y;
- mArcLength += Math.hypot(x - prevX, y - prevY);
- prevX = x;
- prevY = y;
- prevFraction = fraction;
- }
- }
-
- /**
- * Using the line in the Path in this interpolator that can be described as
- * <code>y = f(x)</code>, finds the y coordinate of the line given <code>t</code>
- * as the x coordinate.
- *
- * @param t Treated as the x coordinate along the line.
- * @return The y coordinate of the Path along the line where x = <code>t</code>.
- * @see Interpolator#getInterpolation(float)
- */
- @Override
- public float getInterpolation(float t) {
- int startIndex = 0;
- int endIndex = mX.length - 1;
-
- // Return early if out of bounds
- if (t <= 0) {
- return mY[startIndex];
- } else if (t >= 1) {
- return mY[endIndex];
- }
-
- // Do a binary search for the correct x to interpolate between.
- while (endIndex - startIndex > 1) {
- int midIndex = (startIndex + endIndex) / 2;
- if (t < mX[midIndex]) {
- endIndex = midIndex;
- } else {
- startIndex = midIndex;
- }
- }
-
- float xRange = mX[endIndex] - mX[startIndex];
- if (xRange == 0) {
- return mY[startIndex];
- }
-
- float tInRange = t - mX[startIndex];
- float fraction = tInRange / xRange;
-
- float startY = mY[startIndex];
- float endY = mY[endIndex];
- return startY + (fraction * (endY - startY));
- }
-
- /**
- * Finds the x that provides the given <code>y = f(x)</code>.
- *
- * @param y a value from (0,1) that is in this path.
- */
- public float getX(float y) {
- int startIndex = 0;
- int endIndex = mY.length - 1;
-
- // Return early if out of bounds
- if (y <= 0) {
- return mX[endIndex];
- } else if (y >= 1) {
- return mX[startIndex];
- }
-
- // Do a binary search for index that bounds the y
- while (endIndex - startIndex > 1) {
- int midIndex = (startIndex + endIndex) / 2;
- if (y < mY[midIndex]) {
- startIndex = midIndex;
- } else {
- endIndex = midIndex;
- }
- }
-
- float yRange = mY[endIndex] - mY[startIndex];
- if (yRange == 0) {
- return mX[startIndex];
- }
-
- float tInRange = y - mY[startIndex];
- float fraction = tInRange / yRange;
-
- float startX = mX[startIndex];
- float endX = mX[endIndex];
- return startX + (fraction * (endX - startX));
- }
-
- /**
- * Returns the arclength of the path we are interpolating.
- */
- public float getArcLength() {
- return mArcLength;
- }
-} \ No newline at end of file
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/misc/ReferenceCountedTrigger.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/misc/ReferenceCountedTrigger.java
deleted file mode 100644
index 2637d8812357..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/misc/ReferenceCountedTrigger.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.misc;
-
-import android.animation.Animator;
-import android.animation.AnimatorListenerAdapter;
-
-import java.util.ArrayList;
-
-/**
- * A ref counted trigger that does some logic when the count is first incremented, or last
- * decremented. Not thread safe as it's not currently needed.
- */
-public class ReferenceCountedTrigger {
-
- int mCount;
- ArrayList<Runnable> mFirstIncRunnables = new ArrayList<>();
- ArrayList<Runnable> mLastDecRunnables = new ArrayList<>();
- Runnable mErrorRunnable;
-
- // Convenience runnables
- Runnable mIncrementRunnable = new Runnable() {
- @Override
- public void run() {
- increment();
- }
- };
- Runnable mDecrementRunnable = new Runnable() {
- @Override
- public void run() {
- decrement();
- }
- };
-
- public ReferenceCountedTrigger() {
- this(null, null, null);
- }
-
- public ReferenceCountedTrigger(Runnable firstIncRunnable, Runnable lastDecRunnable,
- Runnable errorRunanable) {
- if (firstIncRunnable != null) mFirstIncRunnables.add(firstIncRunnable);
- if (lastDecRunnable != null) mLastDecRunnables.add(lastDecRunnable);
- mErrorRunnable = errorRunanable;
- }
-
- /** Increments the ref count */
- public void increment() {
- if (mCount == 0 && !mFirstIncRunnables.isEmpty()) {
- int numRunnables = mFirstIncRunnables.size();
- for (int i = 0; i < numRunnables; i++) {
- mFirstIncRunnables.get(i).run();
- }
- }
- mCount++;
- }
-
- /** Convenience method to increment this trigger as a runnable */
- public Runnable incrementAsRunnable() {
- return mIncrementRunnable;
- }
-
- /** Adds a runnable to the last-decrement runnables list. */
- public void addLastDecrementRunnable(Runnable r) {
- mLastDecRunnables.add(r);
- }
-
- /** Decrements the ref count */
- public void decrement() {
- mCount--;
- if (mCount == 0) {
- flushLastDecrementRunnables();
- } else if (mCount < 0) {
- if (mErrorRunnable != null) {
- mErrorRunnable.run();
- } else {
- throw new RuntimeException("Invalid ref count");
- }
- }
- }
-
- /**
- * Runs and clears all the last-decrement runnables now.
- */
- public void flushLastDecrementRunnables() {
- if (!mLastDecRunnables.isEmpty()) {
- int numRunnables = mLastDecRunnables.size();
- for (int i = 0; i < numRunnables; i++) {
- mLastDecRunnables.get(i).run();
- }
- }
- mLastDecRunnables.clear();
- }
-
- /**
- * Convenience method to decrement this trigger as a animator listener. This listener is
- * guarded to prevent being called back multiple times, and will trigger a decrement once and
- * only once.
- */
- public Animator.AnimatorListener decrementOnAnimationEnd() {
- return new AnimatorListenerAdapter() {
- private boolean hasEnded;
-
- @Override
- public void onAnimationEnd(Animator animation) {
- if (hasEnded) return;
- decrement();
- hasEnded = true;
- }
- };
- }
-
- /** Returns the current ref count */
- public int getCount() {
- return mCount;
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/misc/SysUiTaskStackChangeListener.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/misc/SysUiTaskStackChangeListener.java
deleted file mode 100644
index 5d7f1ba5eaf4..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/misc/SysUiTaskStackChangeListener.java
+++ /dev/null
@@ -1,35 +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.recents.misc;
-
-import android.content.Context;
-
-import com.android.systemui.shared.system.TaskStackChangeListener;
-
-/**
- * An implementation of {@link TaskStackChangeListener}.
- */
-public abstract class SysUiTaskStackChangeListener extends TaskStackChangeListener {
-
- /**
- * Checks that the current user matches the user's SystemUI process.
- */
- protected final boolean checkCurrentUserId(Context context, boolean debug) {
- int currentUserId = SystemServicesProxy.getInstance(context).getCurrentUser();
- return checkCurrentUserId(currentUserId, debug);
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/misc/SystemServicesProxy.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/misc/SystemServicesProxy.java
deleted file mode 100644
index 44354bc1d358..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/misc/SystemServicesProxy.java
+++ /dev/null
@@ -1,535 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.misc;
-
-import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME;
-import static android.app.WindowConfiguration.ACTIVITY_TYPE_RECENTS;
-import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;
-import static android.app.WindowConfiguration.ACTIVITY_TYPE_UNDEFINED;
-import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
-import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY;
-import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_SECONDARY;
-import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED;
-
-import android.app.ActivityManager;
-import android.app.ActivityManager.StackInfo;
-import android.app.ActivityOptions;
-import android.app.ActivityTaskManager;
-import android.app.AppGlobals;
-import android.app.IActivityManager;
-import android.app.IActivityTaskManager;
-import android.app.WindowConfiguration;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-import android.content.pm.IPackageManager;
-import android.content.pm.PackageManager;
-import android.content.res.Resources;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.graphics.Canvas;
-import android.graphics.Paint;
-import android.graphics.Point;
-import android.graphics.PorterDuff;
-import android.graphics.PorterDuffXfermode;
-import android.graphics.Rect;
-import android.graphics.drawable.Drawable;
-import android.os.RemoteException;
-import android.os.ServiceManager;
-import android.os.UserHandle;
-import android.os.UserManager;
-import android.service.dreams.DreamService;
-import android.service.dreams.IDreamManager;
-import android.util.Log;
-import android.util.MutableBoolean;
-import android.view.Display;
-import android.view.IDockedStackListener;
-import android.view.IWindowManager;
-import android.view.WindowManager;
-import android.view.WindowManager.KeyboardShortcutsReceiver;
-import android.view.WindowManagerGlobal;
-import android.view.accessibility.AccessibilityManager;
-
-import com.android.internal.app.AssistUtils;
-import com.android.internal.os.BackgroundThread;
-import com.android.systemui.Dependency;
-import com.android.systemui.UiOffloadThread;
-import com.android.systemui.recents.LegacyRecentsImpl;
-import com.android.systemui.recents.RecentsImpl;
-import com.android.systemui.statusbar.policy.UserInfoController;
-
-import java.util.List;
-
-/**
- * Acts as a shim around the real system services that we need to access data from, and provides
- * a point of injection when testing UI.
- */
-public class SystemServicesProxy {
- final static String TAG = "SystemServicesProxy";
-
- final static BitmapFactory.Options sBitmapOptions;
- static {
- sBitmapOptions = new BitmapFactory.Options();
- sBitmapOptions.inMutable = true;
- sBitmapOptions.inPreferredConfig = Bitmap.Config.RGB_565;
- }
-
- private static SystemServicesProxy sSystemServicesProxy;
-
- AccessibilityManager mAccm;
- ActivityManager mAm;
- IActivityManager mIam;
- IActivityTaskManager mIatm;
- PackageManager mPm;
- IPackageManager mIpm;
- private final IDreamManager mDreamManager;
- private final Context mContext;
- AssistUtils mAssistUtils;
- WindowManager mWm;
- IWindowManager mIwm;
- UserManager mUm;
- Display mDisplay;
- String mRecentsPackage;
- private int mCurrentUserId;
-
- boolean mIsSafeMode;
-
- int mDummyThumbnailWidth;
- int mDummyThumbnailHeight;
- Paint mBgProtectionPaint;
- Canvas mBgProtectionCanvas;
-
- private final Runnable mGcRunnable = new Runnable() {
- @Override
- public void run() {
- System.gc();
- System.runFinalization();
- }
- };
-
- private final UiOffloadThread mUiOffloadThread = Dependency.get(UiOffloadThread.class);
-
- private final UserInfoController.OnUserInfoChangedListener mOnUserInfoChangedListener =
- (String name, Drawable picture, String userAccount) ->
- mCurrentUserId = mAm.getCurrentUser();
-
- /** Private constructor */
- private SystemServicesProxy(Context context) {
- mContext = context.getApplicationContext();
- mAccm = AccessibilityManager.getInstance(context);
- mAm = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
- mIam = ActivityManager.getService();
- mIatm = ActivityTaskManager.getService();
- mPm = context.getPackageManager();
- mIpm = AppGlobals.getPackageManager();
- mAssistUtils = new AssistUtils(context);
- mWm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
- mIwm = WindowManagerGlobal.getWindowManagerService();
- mUm = UserManager.get(context);
- mDreamManager = IDreamManager.Stub.asInterface(
- ServiceManager.checkService(DreamService.DREAM_SERVICE));
- mDisplay = mWm.getDefaultDisplay();
- mRecentsPackage = context.getPackageName();
- mIsSafeMode = mPm.isSafeMode();
- mCurrentUserId = mAm.getCurrentUser();
-
- // Get the dummy thumbnail width/heights
- Resources res = context.getResources();
- int wId = com.android.internal.R.dimen.thumbnail_width;
- int hId = com.android.internal.R.dimen.thumbnail_height;
- mDummyThumbnailWidth = res.getDimensionPixelSize(wId);
- mDummyThumbnailHeight = res.getDimensionPixelSize(hId);
-
- // Create the protection paints
- mBgProtectionPaint = new Paint();
- mBgProtectionPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_ATOP));
- mBgProtectionPaint.setColor(0xFFffffff);
- mBgProtectionCanvas = new Canvas();
-
- // Since SystemServicesProxy can be accessed from a per-SysUI process component, create a
- // per-process listener to keep track of the current user id to reduce the number of binder
- // calls to fetch it.
- UserInfoController userInfoController = Dependency.get(UserInfoController.class);
- userInfoController.addCallback(mOnUserInfoChangedListener);
- }
-
- /**
- * Returns the single instance of the {@link SystemServicesProxy}.
- * This should only be called on the main thread.
- */
- public static synchronized SystemServicesProxy getInstance(Context context) {
- if (sSystemServicesProxy == null) {
- sSystemServicesProxy = new SystemServicesProxy(context);
- }
- return sSystemServicesProxy;
- }
-
- /**
- * Requests a gc() from the background thread.
- */
- public void gc() {
- BackgroundThread.getHandler().post(mGcRunnable);
- }
-
- /**
- * Returns whether the recents activity is currently visible.
- */
- public boolean isRecentsActivityVisible() {
- return isRecentsActivityVisible(null);
- }
-
- /**
- * Returns whether the recents activity is currently visible.
- *
- * @param isHomeStackVisible if provided, will return whether the home stack is visible
- * regardless of the recents visibility
- *
- * TODO(winsonc): Refactor this check to just use the recents activity lifecycle
- */
- public boolean isRecentsActivityVisible(MutableBoolean isHomeStackVisible) {
- if (mIam == null) return false;
-
- try {
- List<StackInfo> stackInfos = mIatm.getAllStackInfos();
- ActivityManager.StackInfo homeStackInfo = null;
- ActivityManager.StackInfo fullscreenStackInfo = null;
- ActivityManager.StackInfo recentsStackInfo = null;
- for (int i = 0; i < stackInfos.size(); i++) {
- final StackInfo stackInfo = stackInfos.get(i);
- final WindowConfiguration winConfig = stackInfo.configuration.windowConfiguration;
- final int activityType = winConfig.getActivityType();
- final int windowingMode = winConfig.getWindowingMode();
- if (homeStackInfo == null && activityType == ACTIVITY_TYPE_HOME) {
- homeStackInfo = stackInfo;
- } else if (fullscreenStackInfo == null && activityType == ACTIVITY_TYPE_STANDARD
- && (windowingMode == WINDOWING_MODE_FULLSCREEN
- || windowingMode == WINDOWING_MODE_SPLIT_SCREEN_SECONDARY)) {
- fullscreenStackInfo = stackInfo;
- } else if (recentsStackInfo == null && activityType == ACTIVITY_TYPE_RECENTS) {
- recentsStackInfo = stackInfo;
- }
- }
- boolean homeStackVisibleNotOccluded = isStackNotOccluded(homeStackInfo,
- fullscreenStackInfo);
- boolean recentsStackVisibleNotOccluded = isStackNotOccluded(recentsStackInfo,
- fullscreenStackInfo);
- if (isHomeStackVisible != null) {
- isHomeStackVisible.value = homeStackVisibleNotOccluded;
- }
- ComponentName topActivity = recentsStackInfo != null ?
- recentsStackInfo.topActivity : null;
- return (recentsStackVisibleNotOccluded && topActivity != null
- && topActivity.getPackageName().equals(RecentsImpl.RECENTS_PACKAGE)
- && LegacyRecentsImpl.RECENTS_ACTIVITIES.contains(topActivity.getClassName()));
- } catch (RemoteException e) {
- e.printStackTrace();
- }
- return false;
- }
-
- private boolean isStackNotOccluded(ActivityManager.StackInfo stackInfo,
- ActivityManager.StackInfo fullscreenStackInfo) {
- boolean stackVisibleNotOccluded = stackInfo == null || stackInfo.visible;
- if (fullscreenStackInfo != null && stackInfo != null) {
- boolean isFullscreenStackOccludingg = fullscreenStackInfo.visible &&
- fullscreenStackInfo.position > stackInfo.position;
- stackVisibleNotOccluded &= !isFullscreenStackOccludingg;
- }
- return stackVisibleNotOccluded;
- }
-
- /**
- * Returns whether this device is in the safe mode.
- */
- public boolean isInSafeMode() {
- return mIsSafeMode;
- }
-
- /** Moves an already resumed task to the side of the screen to initiate split screen. */
- public boolean setTaskWindowingModeSplitScreenPrimary(int taskId, int createMode,
- Rect initialBounds) {
- if (mIatm == null) {
- return false;
- }
-
- try {
- return mIatm.setTaskWindowingModeSplitScreenPrimary(taskId, createMode,
- true /* onTop */, false /* animate */, initialBounds, true /* showRecents */);
- } catch (RemoteException e) {
- e.printStackTrace();
- }
- return false;
- }
-
- public ActivityManager.StackInfo getSplitScreenPrimaryStack() {
- try {
- return mIatm.getStackInfo(WINDOWING_MODE_SPLIT_SCREEN_PRIMARY, ACTIVITY_TYPE_UNDEFINED);
- } catch (RemoteException e) {
- return null;
- }
- }
-
- /**
- * @return whether there are any docked tasks for the current user.
- */
- public boolean hasDockedTask() {
- if (mIam == null) return false;
-
- ActivityManager.StackInfo stackInfo = getSplitScreenPrimaryStack();
- if (stackInfo != null) {
- int userId = getCurrentUser();
- boolean hasUserTask = false;
- for (int i = stackInfo.taskUserIds.length - 1; i >= 0 && !hasUserTask; i--) {
- hasUserTask = (stackInfo.taskUserIds[i] == userId);
- }
- return hasUserTask;
- }
- return false;
- }
-
- /**
- * Returns whether there is a soft nav bar on specified display.
- *
- * @param displayId the id of display to check if there is a software navigation bar.
- */
- public boolean hasSoftNavigationBar(int displayId) {
- try {
- return mIwm.hasNavigationBar(displayId);
- } catch (RemoteException e) {
- e.printStackTrace();
- }
- return false;
- }
-
- /**
- * Returns whether the device has a transposed nav bar (on the right of the screen) in the
- * current display orientation.
- */
- public boolean hasTransposedNavigationBar() {
- Rect insets = new Rect();
- getStableInsets(insets);
- return insets.right > 0;
- }
-
- /** Set the task's windowing mode. */
- public void setTaskWindowingMode(int taskId, int windowingMode) {
- if (mIatm == null) return;
-
- try {
- mIatm.setTaskWindowingMode(taskId, windowingMode, false /* onTop */);
- } catch (RemoteException | IllegalArgumentException e) {
- e.printStackTrace();
- }
- }
-
- /**
- * Returns whether the provided {@param userId} represents the system user.
- */
- public boolean isSystemUser(int userId) {
- return userId == UserHandle.USER_SYSTEM;
- }
-
- /**
- * Returns the current user id. Used instead of KeyguardUpdateMonitor in SystemUI components
- * that run in the non-primary SystemUI process.
- */
- public int getCurrentUser() {
- return mCurrentUserId;
- }
-
- /**
- * Returns the processes user id.
- */
- public int getProcessUser() {
- if (mUm == null) return 0;
- return mUm.getUserHandle();
- }
-
- /**
- * Returns whether touch exploration is currently enabled.
- */
- public boolean isTouchExplorationEnabled() {
- if (mAccm == null) return false;
-
- return mAccm.isEnabled() && mAccm.isTouchExplorationEnabled();
- }
-
- /**
- * Returns whether the current task is in screen-pinning mode.
- */
- public boolean isScreenPinningActive() {
- if (mIam == null) return false;
-
- try {
- return mIatm.getLockTaskModeState() == ActivityManager.LOCK_TASK_MODE_PINNED;
- } catch (RemoteException e) {
- return false;
- }
- }
-
- /**
- * Returns the smallest width/height.
- */
- public int getDeviceSmallestWidth() {
- if (mDisplay == null) return 0;
-
- Point smallestSizeRange = new Point();
- Point largestSizeRange = new Point();
- mDisplay.getCurrentSizeRange(smallestSizeRange, largestSizeRange);
- return smallestSizeRange.x;
- }
-
- /**
- * Returns the current display rect in the current display orientation.
- */
- public Rect getDisplayRect() {
- Rect displayRect = new Rect();
- if (mDisplay == null) return displayRect;
-
- Point p = new Point();
- mDisplay.getRealSize(p);
- displayRect.set(0, 0, p.x, p.y);
- return displayRect;
- }
-
- /**
- * Returns the window rect for the RecentsActivity, based on the dimensions of the recents stack
- */
- public Rect getWindowRect() {
- Rect windowRect = new Rect();
- if (mIam == null) return windowRect;
-
- try {
- // Use the recents stack bounds, fallback to fullscreen stack if it is null
- ActivityManager.StackInfo stackInfo =
- mIatm.getStackInfo(WINDOWING_MODE_UNDEFINED, ACTIVITY_TYPE_RECENTS);
- if (stackInfo == null) {
- stackInfo = mIatm.getStackInfo(WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD);
- }
- if (stackInfo != null) {
- windowRect.set(stackInfo.bounds);
- }
- } catch (RemoteException e) {
- e.printStackTrace();
- } finally {
- return windowRect;
- }
- }
-
- public void startActivityAsUserAsync(Intent intent, ActivityOptions opts) {
- mUiOffloadThread.submit(() -> mContext.startActivityAsUser(intent,
- opts != null ? opts.toBundle() : null, UserHandle.CURRENT));
- }
-
- /** Starts an in-place animation on the front most application windows. */
- public void startInPlaceAnimationOnFrontMostApplication(ActivityOptions opts) {
- if (mIam == null) return;
-
- try {
- mIatm.startInPlaceAnimationOnFrontMostApplication(
- opts == null ? null : opts.toBundle());
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
- public void registerDockedStackListener(IDockedStackListener listener) {
- if (mWm == null) return;
-
- try {
- mIwm.registerDockedStackListener(listener);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
- /**
- * Calculates the size of the dock divider in the current orientation.
- */
- public int getDockedDividerSize(Context context) {
- Resources res = context.getResources();
- int dividerWindowWidth = res.getDimensionPixelSize(
- com.android.internal.R.dimen.docked_stack_divider_thickness);
- int dividerInsets = res.getDimensionPixelSize(
- com.android.internal.R.dimen.docked_stack_divider_insets);
- return dividerWindowWidth - 2 * dividerInsets;
- }
-
- public void requestKeyboardShortcuts(
- Context context, KeyboardShortcutsReceiver receiver, int deviceId) {
- mWm.requestAppKeyboardShortcuts(receiver, deviceId);
- }
-
- public void getStableInsets(Rect outStableInsets) {
- if (mWm == null) return;
-
- try {
- mIwm.getStableInsets(Display.DEFAULT_DISPLAY, outStableInsets);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
- /**
- * Updates the visibility of recents.
- */
- public void setRecentsVisibility(final boolean visible) {
- mUiOffloadThread.submit(() -> {
- try {
- mIwm.setRecentsVisibility(visible);
- } catch (RemoteException e) {
- Log.e(TAG, "Unable to reach window manager", e);
- }
- });
- }
-
- /**
- * Updates the visibility of the picture-in-picture.
- */
- public void setPipVisibility(final boolean visible) {
- mUiOffloadThread.submit(() -> {
- try {
- mIwm.setPipVisibility(visible);
- } catch (RemoteException e) {
- Log.e(TAG, "Unable to reach window manager", e);
- }
- });
- }
-
- public boolean isDreaming() {
- try {
- return mDreamManager.isDreaming();
- } catch (RemoteException e) {
- Log.e(TAG, "Failed to query dream manager.", e);
- }
- return false;
- }
-
- public void awakenDreamsAsync() {
- mUiOffloadThread.submit(() -> {
- try {
- mDreamManager.awaken();
- } catch (RemoteException e) {
- e.printStackTrace();
- }
- });
- }
-
- public interface StartActivityFromRecentsResultListener {
- void onStartActivityResult(boolean succeeded);
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/model/BackgroundTaskLoader.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/model/BackgroundTaskLoader.java
deleted file mode 100644
index e85a7fb27505..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/model/BackgroundTaskLoader.java
+++ /dev/null
@@ -1,169 +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.recents.model;
-
-import android.content.Context;
-import android.graphics.drawable.Drawable;
-import android.os.Handler;
-import android.os.HandlerThread;
-import android.util.Log;
-
-import com.android.systemui.shared.recents.model.IconLoader;
-import com.android.systemui.shared.recents.model.Task;
-import com.android.systemui.shared.recents.model.ThumbnailData;
-import com.android.systemui.shared.system.ActivityManagerWrapper;
-
-/**
- * Background task resource loader
- */
-class BackgroundTaskLoader implements Runnable {
- static String TAG = "BackgroundTaskLoader";
- static boolean DEBUG = false;
-
- private Context mContext;
- private final HandlerThread mLoadThread;
- private final Handler mLoadThreadHandler;
- private final Handler mMainThreadHandler;
-
- private final TaskResourceLoadQueue mLoadQueue;
- private final IconLoader mIconLoader;
-
- private boolean mStarted;
- private boolean mCancelled;
- private boolean mWaitingOnLoadQueue;
-
- private final OnIdleChangedListener mOnIdleChangedListener;
-
- /** Constructor, creates a new loading thread that loads task resources in the background */
- public BackgroundTaskLoader(TaskResourceLoadQueue loadQueue,
- IconLoader iconLoader, OnIdleChangedListener onIdleChangedListener) {
- mLoadQueue = loadQueue;
- mIconLoader = iconLoader;
- mMainThreadHandler = new Handler();
- mOnIdleChangedListener = onIdleChangedListener;
- mLoadThread = new HandlerThread("Recents-TaskResourceLoader",
- android.os.Process.THREAD_PRIORITY_BACKGROUND);
- mLoadThread.start();
- mLoadThreadHandler = new Handler(mLoadThread.getLooper());
- }
-
- /** Restarts the loader thread */
- void start(Context context) {
- mContext = context;
- mCancelled = false;
- if (!mStarted) {
- // Start loading on the load thread
- mStarted = true;
- mLoadThreadHandler.post(this);
- } else {
- // Notify the load thread to start loading again
- synchronized (mLoadThread) {
- mLoadThread.notifyAll();
- }
- }
- }
-
- /** Requests the loader thread to stop after the current iteration */
- void stop() {
- // Mark as cancelled for the thread to pick up
- mCancelled = true;
- // If we are waiting for the load queue for more tasks, then we can just reset the
- // Context now, since nothing is using it
- if (mWaitingOnLoadQueue) {
- mContext = null;
- }
- }
-
- @Override
- public void run() {
- while (true) {
- if (mCancelled) {
- // We have to unset the context here, since the background thread may be using it
- // when we call stop()
- mContext = null;
- // If we are cancelled, then wait until we are started again
- synchronized(mLoadThread) {
- try {
- mLoadThread.wait();
- } catch (InterruptedException ie) {
- ie.printStackTrace();
- }
- }
- } else {
- // If we've stopped the loader, then fall through to the above logic to wait on
- // the load thread
- processLoadQueueItem();
-
- // If there are no other items in the list, then just wait until something is added
- if (!mCancelled && mLoadQueue.isEmpty()) {
- synchronized(mLoadQueue) {
- try {
- mWaitingOnLoadQueue = true;
- mMainThreadHandler.post(new Runnable() {
- @Override
- public void run() {
- mOnIdleChangedListener.onIdleChanged(true);
- }
- });
- mLoadQueue.wait();
- mMainThreadHandler.post(new Runnable() {
- @Override
- public void run() {
- mOnIdleChangedListener.onIdleChanged(false);
- }
- });
- mWaitingOnLoadQueue = false;
- } catch (InterruptedException ie) {
- ie.printStackTrace();
- }
- }
- }
- }
- }
- }
-
- /**
- * This needs to be in a separate method to work around an surprising interpreter behavior:
- * The register will keep the local reference to cachedThumbnailData even if it falls out of
- * scope. Putting it into a method fixes this issue.
- */
- private void processLoadQueueItem() {
- // Load the next item from the queue
- final Task t = mLoadQueue.nextTask();
- if (t != null) {
- final Drawable icon = mIconLoader.getIcon(t);
- if (DEBUG) Log.d(TAG, "Loading thumbnail: " + t.key);
- final ThumbnailData thumbnailData =
- ActivityManagerWrapper.getInstance().getTaskThumbnail(t.key.id,
- true /* reducedResolution */);
-
- if (!mCancelled) {
- // Notify that the task data has changed
- mMainThreadHandler.post(new Runnable() {
- @Override
- public void run() {
- t.notifyTaskDataLoaded(thumbnailData, icon);
- }
- });
- }
- }
- }
-
- interface OnIdleChangedListener {
- void onIdleChanged(boolean idle);
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/model/FilteredTaskList.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/model/FilteredTaskList.java
deleted file mode 100644
index 005be75b1b97..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/model/FilteredTaskList.java
+++ /dev/null
@@ -1,125 +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.recents.model;
-
-import android.util.ArrayMap;
-import android.util.SparseArray;
-
-import com.android.systemui.shared.recents.model.Task;
-import com.android.systemui.shared.recents.model.Task.TaskKey;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * A list of filtered tasks.
- */
-class FilteredTaskList {
-
- private final ArrayList<Task> mTasks = new ArrayList<>();
- private final ArrayList<Task> mFilteredTasks = new ArrayList<>();
- private final ArrayMap<TaskKey, Integer> mFilteredTaskIndices = new ArrayMap<>();
- private TaskFilter mFilter;
-
- /** Sets the task filter, and returns whether the set of filtered tasks have changed. */
- boolean setFilter(TaskFilter filter) {
- ArrayList<Task> prevFilteredTasks = new ArrayList<>(mFilteredTasks);
- mFilter = filter;
- updateFilteredTasks();
- return !prevFilteredTasks.equals(mFilteredTasks);
- }
-
- /** Adds a new task to the task list */
- void add(Task t) {
- mTasks.add(t);
- updateFilteredTasks();
- }
-
- /** Sets the list of tasks */
- void set(List<Task> tasks) {
- mTasks.clear();
- mTasks.addAll(tasks);
- updateFilteredTasks();
- }
-
- /** Removes a task from the base list only if it is in the filtered list */
- boolean remove(Task t) {
- if (mFilteredTasks.contains(t)) {
- boolean removed = mTasks.remove(t);
- updateFilteredTasks();
- return removed;
- }
- return false;
- }
-
- /** Returns the index of this task in the list of filtered tasks */
- int indexOf(Task t) {
- if (t != null && mFilteredTaskIndices.containsKey(t.key)) {
- return mFilteredTaskIndices.get(t.key);
- }
- return -1;
- }
-
- /** Returns the size of the list of filtered tasks */
- int size() {
- return mFilteredTasks.size();
- }
-
- /** Returns whether the filtered list contains this task */
- boolean contains(Task t) {
- return mFilteredTaskIndices.containsKey(t.key);
- }
-
- /** Updates the list of filtered tasks whenever the base task list changes */
- private void updateFilteredTasks() {
- mFilteredTasks.clear();
- if (mFilter != null) {
- // Create a sparse array from task id to Task
- SparseArray<Task> taskIdMap = new SparseArray<>();
- int taskCount = mTasks.size();
- for (int i = 0; i < taskCount; i++) {
- Task t = mTasks.get(i);
- taskIdMap.put(t.key.id, t);
- }
-
- for (int i = 0; i < taskCount; i++) {
- Task t = mTasks.get(i);
- if (mFilter.acceptTask(taskIdMap, t, i)) {
- mFilteredTasks.add(t);
- }
- }
- } else {
- mFilteredTasks.addAll(mTasks);
- }
- updateFilteredTaskIndices();
- }
-
- /** Updates the mapping of tasks to indices. */
- private void updateFilteredTaskIndices() {
- int taskCount = mFilteredTasks.size();
- mFilteredTaskIndices.clear();
- for (int i = 0; i < taskCount; i++) {
- Task t = mFilteredTasks.get(i);
- mFilteredTaskIndices.put(t.key, i);
- }
- }
-
- /** Returns the list of filtered tasks */
- ArrayList<Task> getTasks() {
- return mFilteredTasks;
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/model/HighResThumbnailLoader.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/model/HighResThumbnailLoader.java
deleted file mode 100644
index 34bc334204ee..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/model/HighResThumbnailLoader.java
+++ /dev/null
@@ -1,247 +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.recents.model;
-
-import static android.os.Process.setThreadPriority;
-
-import android.os.Handler;
-import android.os.Looper;
-import android.os.SystemClock;
-import android.util.ArraySet;
-
-import com.android.internal.annotations.GuardedBy;
-import com.android.internal.annotations.VisibleForTesting;
-import com.android.systemui.shared.recents.model.Task;
-import com.android.systemui.shared.recents.model.Task.TaskCallbacks;
-import com.android.systemui.shared.recents.model.ThumbnailData;
-import com.android.systemui.shared.system.ActivityManagerWrapper;
-
-import java.util.ArrayDeque;
-import java.util.ArrayList;
-
-/**
- * Loader class that loads full-resolution thumbnails when appropriate.
- */
-public class HighResThumbnailLoader implements
- TaskCallbacks, BackgroundTaskLoader.OnIdleChangedListener {
-
- private final ActivityManagerWrapper mActivityManager;
-
- @GuardedBy("mLoadQueue")
- private final ArrayDeque<Task> mLoadQueue = new ArrayDeque<>();
- @GuardedBy("mLoadQueue")
- private final ArraySet<Task> mLoadingTasks = new ArraySet<>();
- @GuardedBy("mLoadQueue")
- private boolean mLoaderIdling;
-
- private final ArrayList<Task> mVisibleTasks = new ArrayList<>();
-
- private final Thread mLoadThread;
- private final Handler mMainThreadHandler;
- private final boolean mIsLowRamDevice;
- private boolean mLoading;
- private boolean mVisible;
- private boolean mFlingingFast;
- private boolean mTaskLoadQueueIdle;
-
- public HighResThumbnailLoader(ActivityManagerWrapper activityManager, Looper looper,
- boolean isLowRamDevice) {
- mActivityManager = activityManager;
- mMainThreadHandler = new Handler(looper);
- mLoadThread = new Thread(mLoader, "Recents-HighResThumbnailLoader");
- mLoadThread.start();
- mIsLowRamDevice = isLowRamDevice;
- }
-
- public void setVisible(boolean visible) {
- if (mIsLowRamDevice) {
- return;
- }
- mVisible = visible;
- updateLoading();
- }
-
- public void setFlingingFast(boolean flingingFast) {
- if (mFlingingFast == flingingFast || mIsLowRamDevice) {
- return;
- }
- mFlingingFast = flingingFast;
- updateLoading();
- }
-
- @Override
- public void onIdleChanged(boolean idle) {
- setTaskLoadQueueIdle(idle);
- }
-
- /**
- * Sets whether the other task load queue is idling. Avoid double-loading bitmaps by not
- * starting this queue until the other queue is idling.
- */
- public void setTaskLoadQueueIdle(boolean idle) {
- if (mIsLowRamDevice) {
- return;
- }
- mTaskLoadQueueIdle = idle;
- updateLoading();
- }
-
- @VisibleForTesting
- boolean isLoading() {
- return mLoading;
- }
-
- private void updateLoading() {
- setLoading(mVisible && !mFlingingFast && mTaskLoadQueueIdle);
- }
-
- private void setLoading(boolean loading) {
- if (loading == mLoading) {
- return;
- }
- synchronized (mLoadQueue) {
- mLoading = loading;
- if (!loading) {
- stopLoading();
- } else {
- startLoading();
- }
- }
- }
-
- @GuardedBy("mLoadQueue")
- private void startLoading() {
- for (int i = mVisibleTasks.size() - 1; i >= 0; i--) {
- Task t = mVisibleTasks.get(i);
- if ((t.thumbnail == null || t.thumbnail.reducedResolution)
- && !mLoadQueue.contains(t) && !mLoadingTasks.contains(t)) {
- mLoadQueue.add(t);
- }
- }
- mLoadQueue.notifyAll();
- }
-
- @GuardedBy("mLoadQueue")
- private void stopLoading() {
- mLoadQueue.clear();
- mLoadQueue.notifyAll();
- }
-
- /**
- * Needs to be called when a task becomes visible. Note that this is different from
- * {@link TaskCallbacks#onTaskDataLoaded} as this method should only be called once when it
- * becomes visible, whereas onTaskDataLoaded can be called multiple times whenever some data
- * has been updated.
- */
- public void onTaskVisible(Task t) {
- t.addCallback(this);
- mVisibleTasks.add(t);
- if ((t.thumbnail == null || t.thumbnail.reducedResolution) && mLoading) {
- synchronized (mLoadQueue) {
- mLoadQueue.add(t);
- mLoadQueue.notifyAll();
- }
- }
- }
-
- /**
- * Needs to be called when a task becomes visible. See {@link #onTaskVisible} why this is
- * different from {@link TaskCallbacks#onTaskDataUnloaded()}
- */
- public void onTaskInvisible(Task t) {
- t.removeCallback(this);
- mVisibleTasks.remove(t);
- synchronized (mLoadQueue) {
- mLoadQueue.remove(t);
- }
- }
-
- @VisibleForTesting
- void waitForLoaderIdle() {
- while (true) {
- synchronized (mLoadQueue) {
- if (mLoadQueue.isEmpty() && mLoaderIdling) {
- return;
- }
- }
- SystemClock.sleep(100);
- }
- }
-
- @Override
- public void onTaskDataLoaded(Task task, ThumbnailData thumbnailData) {
- if (thumbnailData != null && !thumbnailData.reducedResolution) {
- synchronized (mLoadQueue) {
- mLoadQueue.remove(task);
- }
- }
- }
-
- @Override
- public void onTaskDataUnloaded() {
- }
-
- @Override
- public void onTaskWindowingModeChanged() {
- }
-
- private final Runnable mLoader = new Runnable() {
-
- @Override
- public void run() {
- setThreadPriority(android.os.Process.THREAD_PRIORITY_BACKGROUND + 1);
- while (true) {
- Task next = null;
- synchronized (mLoadQueue) {
- if (!mLoading || mLoadQueue.isEmpty()) {
- try {
- mLoaderIdling = true;
- mLoadQueue.wait();
- mLoaderIdling = false;
- } catch (InterruptedException e) {
- // Don't care.
- }
- } else {
- next = mLoadQueue.poll();
- if (next != null) {
- mLoadingTasks.add(next);
- }
- }
- }
- if (next != null) {
- loadTask(next);
- }
- }
- }
-
- private void loadTask(final Task t) {
- final ThumbnailData thumbnail = mActivityManager.getTaskThumbnail(t.key.id,
- false /* reducedResolution */);
- mMainThreadHandler.post(new Runnable() {
- @Override
- public void run() {
- synchronized (mLoadQueue) {
- mLoadingTasks.remove(t);
- }
- if (mVisibleTasks.contains(t)) {
- t.notifyTaskDataLoaded(thumbnail, t.icon);
- }
- }
- });
- }
- };
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/model/RecentsTaskLoadPlan.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/model/RecentsTaskLoadPlan.java
deleted file mode 100644
index 2df79d87b1fe..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/model/RecentsTaskLoadPlan.java
+++ /dev/null
@@ -1,216 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.model;
-
-import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM;
-
-import android.app.ActivityManager;
-import android.app.ActivityTaskManager;
-import android.app.KeyguardManager;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.pm.ActivityInfo;
-import android.content.pm.ApplicationInfo;
-import android.content.res.Resources;
-import android.graphics.drawable.Drawable;
-import android.util.SparseBooleanArray;
-
-import com.android.systemui.shared.recents.model.Task;
-import com.android.systemui.shared.recents.model.Task.TaskKey;
-import com.android.systemui.shared.recents.model.ThumbnailData;
-import com.android.systemui.shared.system.ActivityManagerWrapper;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-
-/**
- * This class stores the loading state as it goes through multiple stages of loading:
- * 1) preloadRawTasks() will load the raw set of recents tasks from the system
- * 2) preloadPlan() will construct a new task stack with all metadata and only icons and
- * thumbnails that are currently in the cache
- * 3) executePlan() will actually load and fill in the icons and thumbnails according to the load
- * options specified, such that we can transition into the Recents activity seamlessly
- */
-public class RecentsTaskLoadPlan {
-
- /** The set of conditions to preload tasks. */
- public static class PreloadOptions {
- public boolean loadTitles = true;
- }
-
- /** The set of conditions to load tasks. */
- public static class Options {
- public int runningTaskId = -1;
- public boolean loadIcons = true;
- public boolean loadThumbnails = false;
- public boolean onlyLoadForCache = false;
- public boolean onlyLoadPausedActivities = false;
- public int numVisibleTasks = 0;
- public int numVisibleTaskThumbnails = 0;
- }
-
- private final Context mContext;
- private final KeyguardManager mKeyguardManager;
-
- private List<ActivityManager.RecentTaskInfo> mRawTasks;
- private TaskStack mStack;
-
- private final SparseBooleanArray mTmpLockedUsers = new SparseBooleanArray();
-
- public RecentsTaskLoadPlan(Context context) {
- mContext = context;
- mKeyguardManager = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);
- }
-
- /**
- * Preloads the list of recent tasks from the system. After this call, the TaskStack will
- * have a list of all the recent tasks with their metadata, not including icons or
- * thumbnails which were not cached and have to be loaded.
- *
- * The tasks will be ordered by:
- * - least-recent to most-recent stack tasks
- *
- * Note: Do not lock, since this can be calling back to the loader, which separately also drives
- * this call (callers should synchronize on the loader before making this call).
- */
- public void preloadPlan(PreloadOptions opts, RecentsTaskLoader loader, int runningTaskId,
- int currentUserId) {
- Resources res = mContext.getResources();
- ArrayList<Task> allTasks = new ArrayList<>();
- if (mRawTasks == null) {
- mRawTasks = ActivityManagerWrapper.getInstance().getRecentTasks(
- ActivityTaskManager.getMaxRecentTasksStatic(), currentUserId);
-
- // Since the raw tasks are given in most-recent to least-recent order, we need to reverse it
- Collections.reverse(mRawTasks);
- }
-
- int taskCount = mRawTasks.size();
- for (int i = 0; i < taskCount; i++) {
- ActivityManager.RecentTaskInfo t = mRawTasks.get(i);
-
- // Compose the task key
- final ComponentName sourceComponent = t.origActivity != null
- // Activity alias if there is one
- ? t.origActivity
- // The real activity if there is no alias (or the target if there is one)
- : t.realActivity;
- final int windowingMode = t.configuration.windowConfiguration.getWindowingMode();
- TaskKey taskKey = new TaskKey(t.persistentId, windowingMode, t.baseIntent,
- sourceComponent, t.userId, t.lastActiveTime, t.displayId);
-
- boolean isFreeformTask = windowingMode == WINDOWING_MODE_FREEFORM;
- boolean isStackTask = !isFreeformTask;
- boolean isLaunchTarget = taskKey.id == runningTaskId;
-
- ActivityInfo info = loader.getAndUpdateActivityInfo(taskKey);
- if (info == null) {
- continue;
- }
-
- // Load the title, icon, and color
- String title = opts.loadTitles
- ? loader.getAndUpdateActivityTitle(taskKey, t.taskDescription)
- : "";
- String titleDescription = opts.loadTitles
- ? loader.getAndUpdateContentDescription(taskKey, t.taskDescription)
- : "";
- Drawable icon = isStackTask
- ? loader.getAndUpdateActivityIcon(taskKey, t.taskDescription, false)
- : null;
- ThumbnailData thumbnail = loader.getAndUpdateThumbnail(taskKey,
- false /* loadIfNotCached */, false /* storeInCache */);
- int activityColor = loader.getActivityPrimaryColor(t.taskDescription);
- int backgroundColor = loader.getActivityBackgroundColor(t.taskDescription);
- boolean isSystemApp = (info != null) &&
- ((info.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0);
-
- // TODO: Refactor to not do this every preload
- if (mTmpLockedUsers.indexOfKey(t.userId) < 0) {
- mTmpLockedUsers.put(t.userId, mKeyguardManager.isDeviceLocked(t.userId));
- }
- boolean isLocked = mTmpLockedUsers.get(t.userId);
-
- // Add the task to the stack
- Task task = new Task(taskKey, icon,
- thumbnail, title, titleDescription, activityColor, backgroundColor,
- isLaunchTarget, isStackTask, isSystemApp, t.supportsSplitScreenMultiWindow,
- t.taskDescription, t.resizeMode, t.topActivity, isLocked);
-
- allTasks.add(task);
- }
-
- // Initialize the stacks
- mStack = new TaskStack();
- mStack.setTasks(allTasks, false /* notifyStackChanges */);
- }
-
- /**
- * Called to apply the actual loading based on the specified conditions.
- *
- * Note: Do not lock, since this can be calling back to the loader, which separately also drives
- * this call (callers should synchronize on the loader before making this call).
- */
- public void executePlan(Options opts, RecentsTaskLoader loader) {
- Resources res = mContext.getResources();
-
- // Iterate through each of the tasks and load them according to the load conditions.
- ArrayList<Task> tasks = mStack.getTasks();
- int taskCount = tasks.size();
- for (int i = 0; i < taskCount; i++) {
- Task task = tasks.get(i);
- TaskKey taskKey = task.key;
-
- boolean isRunningTask = (task.key.id == opts.runningTaskId);
- boolean isVisibleTask = i >= (taskCount - opts.numVisibleTasks);
- boolean isVisibleThumbnail = i >= (taskCount - opts.numVisibleTaskThumbnails);
-
- // If requested, skip the running task
- if (opts.onlyLoadPausedActivities && isRunningTask) {
- continue;
- }
-
- if (opts.loadIcons && (isRunningTask || isVisibleTask)) {
- if (task.icon == null) {
- task.icon = loader.getAndUpdateActivityIcon(taskKey, task.taskDescription,
- true);
- }
- }
- if (opts.loadThumbnails && isVisibleThumbnail) {
- task.thumbnail = loader.getAndUpdateThumbnail(taskKey,
- true /* loadIfNotCached */, true /* storeInCache */);
- }
- }
- }
-
- /**
- * Returns the TaskStack from the preloaded list of recent tasks.
- */
- public TaskStack getTaskStack() {
- return mStack;
- }
-
- /** Returns whether there are any tasks in any stacks. */
- public boolean hasTasks() {
- if (mStack != null) {
- return mStack.getTaskCount() > 0;
- }
- return false;
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/model/RecentsTaskLoader.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/model/RecentsTaskLoader.java
deleted file mode 100644
index 012913a60b66..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/model/RecentsTaskLoader.java
+++ /dev/null
@@ -1,421 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.model;
-
-import android.app.ActivityManager;
-import android.app.ActivityTaskManager;
-import android.content.ComponentCallbacks2;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.pm.ActivityInfo;
-import android.graphics.drawable.Drawable;
-import android.os.Looper;
-import android.os.Trace;
-import android.util.Log;
-import android.util.LruCache;
-
-import com.android.internal.annotations.GuardedBy;
-import com.android.systemui.recents.model.RecentsTaskLoadPlan.Options;
-import com.android.systemui.recents.model.RecentsTaskLoadPlan.PreloadOptions;
-import com.android.systemui.shared.recents.model.IconLoader;
-import com.android.systemui.shared.recents.model.Task;
-import com.android.systemui.shared.recents.model.Task.TaskKey;
-import com.android.systemui.shared.recents.model.TaskKeyLruCache;
-import com.android.systemui.shared.recents.model.TaskKeyLruCache.EvictionCallback;
-import com.android.systemui.shared.recents.model.ThumbnailData;
-import com.android.systemui.shared.system.ActivityManagerWrapper;
-
-import java.io.PrintWriter;
-import java.util.Map;
-
-
-/**
- * Recents task loader
- */
-public class RecentsTaskLoader {
- private static final String TAG = "RecentsTaskLoader";
- private static final boolean DEBUG = false;
-
- /** Levels of svelte in increasing severity/austerity. */
- // No svelting.
- public static final int SVELTE_NONE = 0;
- // Limit thumbnail cache to number of visible thumbnails when Recents was loaded, disable
- // caching thumbnails as you scroll.
- public static final int SVELTE_LIMIT_CACHE = 1;
- // Disable the thumbnail cache, load thumbnails asynchronously when the activity loads and
- // evict all thumbnails when hidden.
- public static final int SVELTE_DISABLE_CACHE = 2;
- // Disable all thumbnail loading.
- public static final int SVELTE_DISABLE_LOADING = 3;
-
- // This activity info LruCache is useful because it can be expensive to retrieve ActivityInfos
- // for many tasks, which we use to get the activity labels and icons. Unlike the other caches
- // below, this is per-package so we can't invalidate the items in the cache based on the last
- // active time. Instead, we rely on the PackageMonitor to keep us informed whenever a
- // package in the cache has been updated, so that we may remove it.
- private final LruCache<ComponentName, ActivityInfo> mActivityInfoCache;
- private final TaskKeyLruCache<Drawable> mIconCache;
- private final TaskKeyLruCache<String> mActivityLabelCache;
- private final TaskKeyLruCache<String> mContentDescriptionCache;
- private final TaskResourceLoadQueue mLoadQueue;
- private final IconLoader mIconLoader;
- private final BackgroundTaskLoader mLoader;
- private final HighResThumbnailLoader mHighResThumbnailLoader;
- @GuardedBy("this")
- private final TaskKeyStrongCache<ThumbnailData> mThumbnailCache = new TaskKeyStrongCache<>();
- @GuardedBy("this")
- private final TaskKeyStrongCache<ThumbnailData> mTempCache = new TaskKeyStrongCache<>();
- private final int mMaxThumbnailCacheSize;
- private final int mMaxIconCacheSize;
- private int mNumVisibleTasksLoaded;
- private int mSvelteLevel;
-
- private int mDefaultTaskBarBackgroundColor;
- private int mDefaultTaskViewBackgroundColor;
-
- private EvictionCallback mClearActivityInfoOnEviction = new EvictionCallback() {
- @Override
- public void onEntryEvicted(TaskKey key) {
- if (key != null) {
- mActivityInfoCache.remove(key.getComponent());
- }
- }
- };
-
- public RecentsTaskLoader(Context context, int maxThumbnailCacheSize, int maxIconCacheSize,
- int svelteLevel) {
- mMaxThumbnailCacheSize = maxThumbnailCacheSize;
- mMaxIconCacheSize = maxIconCacheSize;
- mSvelteLevel = svelteLevel;
-
- // Initialize the proxy, cache and loaders
- int numRecentTasks = ActivityTaskManager.getMaxRecentTasksStatic();
- mHighResThumbnailLoader = new HighResThumbnailLoader(ActivityManagerWrapper.getInstance(),
- Looper.getMainLooper(), ActivityManager.isLowRamDeviceStatic());
- mLoadQueue = new TaskResourceLoadQueue();
- mIconCache = new TaskKeyLruCache<>(mMaxIconCacheSize, mClearActivityInfoOnEviction);
- mActivityLabelCache = new TaskKeyLruCache<>(numRecentTasks, mClearActivityInfoOnEviction);
- mContentDescriptionCache = new TaskKeyLruCache<>(numRecentTasks,
- mClearActivityInfoOnEviction);
- mActivityInfoCache = new LruCache<>(numRecentTasks);
-
- mIconLoader = createNewIconLoader(context, mIconCache, mActivityInfoCache);
- mLoader = new BackgroundTaskLoader(mLoadQueue, mIconLoader, mHighResThumbnailLoader);
- }
-
- protected IconLoader createNewIconLoader(Context context,TaskKeyLruCache<Drawable> iconCache,
- LruCache<ComponentName, ActivityInfo> activityInfoCache) {
- return new IconLoader.DefaultIconLoader(context, iconCache, activityInfoCache);
- }
-
- /**
- * Sets the default task bar/view colors if none are provided by the app.
- */
- public void setDefaultColors(int defaultTaskBarBackgroundColor,
- int defaultTaskViewBackgroundColor) {
- mDefaultTaskBarBackgroundColor = defaultTaskBarBackgroundColor;
- mDefaultTaskViewBackgroundColor = defaultTaskViewBackgroundColor;
- }
-
- /** Returns the size of the app icon cache. */
- public int getIconCacheSize() {
- return mMaxIconCacheSize;
- }
-
- /** Returns the size of the thumbnail cache. */
- public int getThumbnailCacheSize() {
- return mMaxThumbnailCacheSize;
- }
-
- public HighResThumbnailLoader getHighResThumbnailLoader() {
- return mHighResThumbnailLoader;
- }
-
- /** Preloads recents tasks using the specified plan to store the output. */
- public synchronized void preloadTasks(RecentsTaskLoadPlan plan, int runningTaskId) {
- preloadTasks(plan, runningTaskId, ActivityManagerWrapper.getInstance().getCurrentUserId());
- }
-
- /** Preloads recents tasks using the specified plan to store the output. */
- public synchronized void preloadTasks(RecentsTaskLoadPlan plan, int runningTaskId,
- int currentUserId) {
- try {
- Trace.beginSection("preloadPlan");
- plan.preloadPlan(new PreloadOptions(), this, runningTaskId, currentUserId);
- } finally {
- Trace.endSection();
- }
- }
-
- /** Begins loading the heavy task data according to the specified options. */
- public synchronized void loadTasks(RecentsTaskLoadPlan plan, Options opts) {
- if (opts == null) {
- throw new RuntimeException("Requires load options");
- }
- if (opts.onlyLoadForCache && opts.loadThumbnails) {
- // If we are loading for the cache, we'd like to have the real cache only include the
- // visible thumbnails. However, we also don't want to reload already cached thumbnails.
- // Thus, we copy over the current entries into a second cache, and clear the real cache,
- // such that the real cache only contains visible thumbnails.
- mTempCache.copyEntries(mThumbnailCache);
- mThumbnailCache.evictAll();
- }
- plan.executePlan(opts, this);
- mTempCache.evictAll();
- if (!opts.onlyLoadForCache) {
- mNumVisibleTasksLoaded = opts.numVisibleTasks;
- }
- }
-
- /**
- * Acquires the task resource data directly from the cache, loading if necessary.
- */
- public void loadTaskData(Task t) {
- Drawable icon = mIconCache.getAndInvalidateIfModified(t.key);
- icon = icon != null ? icon : mIconLoader.getDefaultIcon(t.key.userId);
- mLoadQueue.addTask(t);
- t.notifyTaskDataLoaded(t.thumbnail, icon);
- }
-
- /** Releases the task resource data back into the pool. */
- public void unloadTaskData(Task t) {
- mLoadQueue.removeTask(t);
- t.notifyTaskDataUnloaded(mIconLoader.getDefaultIcon(t.key.userId));
- }
-
- /** Completely removes the resource data from the pool. */
- public void deleteTaskData(Task t, boolean notifyTaskDataUnloaded) {
- mLoadQueue.removeTask(t);
- mIconCache.remove(t.key);
- mActivityLabelCache.remove(t.key);
- mContentDescriptionCache.remove(t.key);
- if (notifyTaskDataUnloaded) {
- t.notifyTaskDataUnloaded(mIconLoader.getDefaultIcon(t.key.userId));
- }
- }
-
- /**
- * Handles signals from the system, trimming memory when requested to prevent us from running
- * out of memory.
- */
- public synchronized void onTrimMemory(int level) {
- switch (level) {
- case ComponentCallbacks2.TRIM_MEMORY_UI_HIDDEN:
- // Stop the loader immediately when the UI is no longer visible
- stopLoader();
- mIconCache.trimToSize(Math.max(mNumVisibleTasksLoaded,
- mMaxIconCacheSize / 2));
- break;
- case ComponentCallbacks2.TRIM_MEMORY_RUNNING_MODERATE:
- case ComponentCallbacks2.TRIM_MEMORY_BACKGROUND:
- // We are leaving recents, so trim the data a bit
- mIconCache.trimToSize(Math.max(1, mMaxIconCacheSize / 2));
- mActivityInfoCache.trimToSize(Math.max(1,
- ActivityTaskManager.getMaxRecentTasksStatic() / 2));
- break;
- case ComponentCallbacks2.TRIM_MEMORY_RUNNING_LOW:
- case ComponentCallbacks2.TRIM_MEMORY_MODERATE:
- // We are going to be low on memory
- mIconCache.trimToSize(Math.max(1, mMaxIconCacheSize / 4));
- mActivityInfoCache.trimToSize(Math.max(1,
- ActivityTaskManager.getMaxRecentTasksStatic() / 4));
- break;
- case ComponentCallbacks2.TRIM_MEMORY_RUNNING_CRITICAL:
- case ComponentCallbacks2.TRIM_MEMORY_COMPLETE:
- // We are low on memory, so release everything
- mIconCache.evictAll();
- mActivityInfoCache.evictAll();
- // The cache is small, only clear the label cache when we are critical
- mActivityLabelCache.evictAll();
- mContentDescriptionCache.evictAll();
- mThumbnailCache.evictAll();
- break;
- default:
- break;
- }
- }
-
- public void onPackageChanged(String packageName) {
- // Remove all the cached activity infos for this package. The other caches do not need to
- // be pruned at this time, as the TaskKey expiration checks will flush them next time their
- // cached contents are requested
- Map<ComponentName, ActivityInfo> activityInfoCache = mActivityInfoCache.snapshot();
- for (ComponentName cn : activityInfoCache.keySet()) {
- if (cn.getPackageName().equals(packageName)) {
- if (DEBUG) {
- Log.d(TAG, "Removing activity info from cache: " + cn);
- }
- mActivityInfoCache.remove(cn);
- }
- }
- }
-
- /**
- * Returns the cached task label if the task key is not expired, updating the cache if it is.
- */
- String getAndUpdateActivityTitle(TaskKey taskKey, ActivityManager.TaskDescription td) {
- // Return the task description label if it exists
- if (td != null && td.getLabel() != null) {
- return td.getLabel();
- }
- // Return the cached activity label if it exists
- String label = mActivityLabelCache.getAndInvalidateIfModified(taskKey);
- if (label != null) {
- return label;
- }
- // All short paths failed, load the label from the activity info and cache it
- ActivityInfo activityInfo = getAndUpdateActivityInfo(taskKey);
- if (activityInfo != null) {
- label = ActivityManagerWrapper.getInstance().getBadgedActivityLabel(activityInfo,
- taskKey.userId);
- mActivityLabelCache.put(taskKey, label);
- return label;
- }
- // If the activity info does not exist or fails to load, return an empty label for now,
- // but do not cache it
- return "";
- }
-
- /**
- * Returns the cached task content description if the task key is not expired, updating the
- * cache if it is.
- */
- String getAndUpdateContentDescription(TaskKey taskKey, ActivityManager.TaskDescription td) {
- // Return the cached content description if it exists
- String label = mContentDescriptionCache.getAndInvalidateIfModified(taskKey);
- if (label != null) {
- return label;
- }
-
- // All short paths failed, load the label from the activity info and cache it
- ActivityInfo activityInfo = getAndUpdateActivityInfo(taskKey);
- if (activityInfo != null) {
- label = ActivityManagerWrapper.getInstance().getBadgedContentDescription(
- activityInfo, taskKey.userId, td);
- if (td == null) {
- // Only add to the cache if the task description is null, otherwise, it is possible
- // for the task description to change between calls without the last active time
- // changing (ie. between preloading and Overview starting) which would lead to stale
- // content descriptions
- // TODO: Investigate improving this
- mContentDescriptionCache.put(taskKey, label);
- }
- return label;
- }
- // If the content description does not exist, return an empty label for now, but do not
- // cache it
- return "";
- }
-
- /**
- * Returns the cached task icon if the task key is not expired, updating the cache if it is.
- */
- Drawable getAndUpdateActivityIcon(TaskKey taskKey, ActivityManager.TaskDescription td,
- boolean loadIfNotCached) {
- return mIconLoader.getAndInvalidateIfModified(taskKey, td, loadIfNotCached);
- }
-
- /**
- * Returns the cached thumbnail if the task key is not expired, updating the cache if it is.
- */
- synchronized ThumbnailData getAndUpdateThumbnail(TaskKey taskKey, boolean loadIfNotCached,
- boolean storeInCache) {
- ThumbnailData cached = mThumbnailCache.getAndInvalidateIfModified(taskKey);
- if (cached != null) {
- return cached;
- }
-
- cached = mTempCache.getAndInvalidateIfModified(taskKey);
- if (cached != null) {
- mThumbnailCache.put(taskKey, cached);
- return cached;
- }
-
- if (loadIfNotCached) {
- if (mSvelteLevel < SVELTE_DISABLE_LOADING) {
- // Load the thumbnail from the system
- ThumbnailData thumbnailData = ActivityManagerWrapper.getInstance().getTaskThumbnail(
- taskKey.id, true /* reducedResolution */);
- if (thumbnailData.thumbnail != null) {
- if (storeInCache) {
- mThumbnailCache.put(taskKey, thumbnailData);
- }
- return thumbnailData;
- }
- }
- }
-
- // We couldn't load any thumbnail
- return null;
- }
-
- /**
- * Returns the task's primary color if possible, defaulting to the default color if there is
- * no specified primary color.
- */
- int getActivityPrimaryColor(ActivityManager.TaskDescription td) {
- if (td != null && td.getPrimaryColor() != 0) {
- return td.getPrimaryColor();
- }
- return mDefaultTaskBarBackgroundColor;
- }
-
- /**
- * Returns the task's background color if possible.
- */
- int getActivityBackgroundColor(ActivityManager.TaskDescription td) {
- if (td != null && td.getBackgroundColor() != 0) {
- return td.getBackgroundColor();
- }
- return mDefaultTaskViewBackgroundColor;
- }
-
- /**
- * Returns the activity info for the given task key, retrieving one from the system if the
- * task key is expired.
- */
- ActivityInfo getAndUpdateActivityInfo(TaskKey taskKey) {
- return mIconLoader.getAndUpdateActivityInfo(taskKey);
- }
-
- /**
- * Starts loading tasks.
- */
- public void startLoader(Context ctx) {
- mLoader.start(ctx);
- }
-
- /**
- * Stops the task loader and clears all queued, pending task loads.
- */
- private void stopLoader() {
- mLoader.stop();
- mLoadQueue.clearTasks();
- }
-
- public synchronized void dump(String prefix, PrintWriter writer) {
- String innerPrefix = prefix + " ";
-
- writer.print(prefix); writer.println(TAG);
- writer.print(prefix); writer.println("Icon Cache");
- mIconCache.dump(innerPrefix, writer);
- writer.print(prefix); writer.println("Thumbnail Cache");
- mThumbnailCache.dump(innerPrefix, writer);
- writer.print(prefix); writer.println("Temp Thumbnail Cache");
- mTempCache.dump(innerPrefix, writer);
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/model/TaskFilter.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/model/TaskFilter.java
deleted file mode 100644
index 9b734ec719ea..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/model/TaskFilter.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-
-package com.android.systemui.recents.model;
-
-import android.util.SparseArray;
-import com.android.systemui.shared.recents.model.Task;
-
-/**
- * An interface for a task filter to query whether a particular task should show in a stack.
- */
-public interface TaskFilter {
- /** Returns whether the filter accepts the specified task */
- boolean acceptTask(SparseArray<Task> taskIdMap, Task t, int index);
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/model/TaskKeyStrongCache.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/model/TaskKeyStrongCache.java
deleted file mode 100644
index 27f2098868a1..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/model/TaskKeyStrongCache.java
+++ /dev/null
@@ -1,73 +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.recents.model;
-
-import android.util.ArrayMap;
-
-import com.android.systemui.shared.recents.model.Task.TaskKey;
-
-import com.android.systemui.shared.recents.model.TaskKeyCache;
-import com.android.systemui.shared.recents.model.TaskKeyLruCache;
-import java.io.PrintWriter;
-
-/**
- * Like {@link TaskKeyLruCache}, but without LRU functionality.
- */
-public class TaskKeyStrongCache<V> extends TaskKeyCache<V> {
-
- private static final String TAG = "TaskKeyCache";
-
- private final ArrayMap<Integer, V> mCache = new ArrayMap<>();
-
- public final void copyEntries(TaskKeyStrongCache<V> other) {
- for (int i = other.mKeys.size() - 1; i >= 0; i--) {
- TaskKey key = other.mKeys.valueAt(i);
- put(key, other.mCache.get(key.id));
- }
- }
-
- public void dump(String prefix, PrintWriter writer) {
- String innerPrefix = prefix + " ";
- writer.print(prefix); writer.print(TAG);
- writer.print(" numEntries="); writer.print(mKeys.size());
- writer.println();
- int keyCount = mKeys.size();
- for (int i = 0; i < keyCount; i++) {
- writer.print(innerPrefix); writer.println(mKeys.get(mKeys.keyAt(i)));
- }
- }
-
- @Override
- protected V getCacheEntry(int id) {
- return mCache.get(id);
- }
-
- @Override
- protected void putCacheEntry(int id, V value) {
- mCache.put(id, value);
- }
-
- @Override
- protected void removeCacheEntry(int id) {
- mCache.remove(id);
- }
-
- @Override
- protected void evictAllCache() {
- mCache.clear();
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/model/TaskResourceLoadQueue.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/model/TaskResourceLoadQueue.java
deleted file mode 100644
index fe89ad5a324d..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/model/TaskResourceLoadQueue.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-
-package com.android.systemui.recents.model;
-
-import com.android.systemui.shared.recents.model.Task;
-import java.util.concurrent.ConcurrentLinkedQueue;
-
-/**
- * A Task load queue
- */
-class TaskResourceLoadQueue {
-
- private final ConcurrentLinkedQueue<Task> mQueue = new ConcurrentLinkedQueue<>();
-
- /** Adds a new task to the load queue */
- void addTask(Task t) {
- if (!mQueue.contains(t)) {
- mQueue.add(t);
- }
- synchronized(this) {
- notifyAll();
- }
- }
-
- /**
- * Retrieves the next task from the load queue, as well as whether we want that task to be
- * force reloaded.
- */
- Task nextTask() {
- return mQueue.poll();
- }
-
- /** Removes a task from the load queue */
- void removeTask(Task t) {
- mQueue.remove(t);
- }
-
- /** Clears all the tasks from the load queue */
- void clearTasks() {
- mQueue.clear();
- }
-
- /** Returns whether the load queue is empty */
- boolean isEmpty() {
- return mQueue.isEmpty();
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/model/TaskStack.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/model/TaskStack.java
deleted file mode 100644
index 01e6ba3f35ec..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/model/TaskStack.java
+++ /dev/null
@@ -1,402 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.model;
-
-import android.content.ComponentName;
-import android.util.ArrayMap;
-import android.util.ArraySet;
-import android.util.SparseArray;
-
-import com.android.systemui.shared.recents.model.Task;
-import com.android.systemui.shared.recents.model.Task.TaskKey;
-import com.android.systemui.recents.utilities.AnimationProps;
-import com.android.systemui.shared.system.PackageManagerWrapper;
-
-import java.io.PrintWriter;
-import java.util.ArrayList;
-import java.util.List;
-
-
-/**
- * The task stack contains a list of multiple tasks.
- */
-public class TaskStack {
-
- private static final String TAG = "TaskStack";
-
- /** Task stack callbacks */
- public interface TaskStackCallbacks {
- /**
- * Notifies when a new task has been added to the stack.
- */
- void onStackTaskAdded(TaskStack stack, Task newTask);
-
- /**
- * Notifies when a task has been removed from the stack.
- */
- void onStackTaskRemoved(TaskStack stack, Task removedTask, Task newFrontMostTask,
- AnimationProps animation, boolean fromDockGesture,
- boolean dismissRecentsIfAllRemoved);
-
- /**
- * Notifies when all tasks have been removed from the stack.
- */
- void onStackTasksRemoved(TaskStack stack);
-
- /**
- * Notifies when tasks in the stack have been updated.
- */
- void onStackTasksUpdated(TaskStack stack);
- }
-
- private final ArrayList<Task> mRawTaskList = new ArrayList<>();
- private final FilteredTaskList mStackTaskList = new FilteredTaskList();
- private TaskStackCallbacks mCb;
-
- public TaskStack() {
- // Ensure that we only show stack tasks
- mStackTaskList.setFilter(new TaskFilter() {
- @Override
- public boolean acceptTask(SparseArray<Task> taskIdMap, Task t, int index) {
- return t.isStackTask;
- }
- });
- }
-
- /** Sets the callbacks for this task stack. */
- public void setCallbacks(TaskStackCallbacks cb) {
- mCb = cb;
- }
-
- /**
- * Removes a task from the stack, with an additional {@param animation} hint to the callbacks on
- * how they should update themselves.
- */
- public void removeTask(Task t, AnimationProps animation, boolean fromDockGesture) {
- removeTask(t, animation, fromDockGesture, true /* dismissRecentsIfAllRemoved */);
- }
-
- /**
- * Removes a task from the stack, with an additional {@param animation} hint to the callbacks on
- * how they should update themselves.
- */
- public void removeTask(Task t, AnimationProps animation, boolean fromDockGesture,
- boolean dismissRecentsIfAllRemoved) {
- if (mStackTaskList.contains(t)) {
- mStackTaskList.remove(t);
- Task newFrontMostTask = getFrontMostTask();
- if (mCb != null) {
- // Notify that a task has been removed
- mCb.onStackTaskRemoved(this, t, newFrontMostTask, animation,
- fromDockGesture, dismissRecentsIfAllRemoved);
- }
- }
- mRawTaskList.remove(t);
- }
-
- /**
- * Removes all tasks from the stack.
- */
- public void removeAllTasks(boolean notifyStackChanges) {
- ArrayList<Task> tasks = mStackTaskList.getTasks();
- for (int i = tasks.size() - 1; i >= 0; i--) {
- Task t = tasks.get(i);
- mStackTaskList.remove(t);
- mRawTaskList.remove(t);
- }
- if (mCb != null && notifyStackChanges) {
- // Notify that all tasks have been removed
- mCb.onStackTasksRemoved(this);
- }
- }
-
-
- /**
- * @see #setTasks(List, boolean)
- */
- public void setTasks(TaskStack stack, boolean notifyStackChanges) {
- setTasks(stack.mRawTaskList, notifyStackChanges);
- }
-
- /**
- * Sets a few tasks in one go, without calling any callbacks.
- *
- * @param tasks the new set of tasks to replace the current set.
- * @param notifyStackChanges whether or not to callback on specific changes to the list of tasks.
- */
- public void setTasks(List<Task> tasks, boolean notifyStackChanges) {
- // Compute a has set for each of the tasks
- ArrayMap<TaskKey, Task> currentTasksMap = createTaskKeyMapFromList(mRawTaskList);
- ArrayMap<TaskKey, Task> newTasksMap = createTaskKeyMapFromList(tasks);
- ArrayList<Task> addedTasks = new ArrayList<>();
- ArrayList<Task> removedTasks = new ArrayList<>();
- ArrayList<Task> allTasks = new ArrayList<>();
-
- // Disable notifications if there are no callbacks
- if (mCb == null) {
- notifyStackChanges = false;
- }
-
- // Remove any tasks that no longer exist
- int taskCount = mRawTaskList.size();
- for (int i = taskCount - 1; i >= 0; i--) {
- Task task = mRawTaskList.get(i);
- if (!newTasksMap.containsKey(task.key)) {
- if (notifyStackChanges) {
- removedTasks.add(task);
- }
- }
- }
-
- // Add any new tasks
- taskCount = tasks.size();
- for (int i = 0; i < taskCount; i++) {
- Task newTask = tasks.get(i);
- Task currentTask = currentTasksMap.get(newTask.key);
- if (currentTask == null && notifyStackChanges) {
- addedTasks.add(newTask);
- } else if (currentTask != null) {
- // The current task has bound callbacks, so just copy the data from the new task
- // state and add it back into the list
- currentTask.copyFrom(newTask);
- newTask = currentTask;
- }
- allTasks.add(newTask);
- }
-
- // Sort all the tasks to ensure they are ordered correctly
- for (int i = allTasks.size() - 1; i >= 0; i--) {
- allTasks.get(i).temporarySortIndexInStack = i;
- }
-
- mStackTaskList.set(allTasks);
- mRawTaskList.clear();
- mRawTaskList.addAll(allTasks);
-
- // Only callback for the removed tasks after the stack has updated
- int removedTaskCount = removedTasks.size();
- Task newFrontMostTask = getFrontMostTask();
- for (int i = 0; i < removedTaskCount; i++) {
- mCb.onStackTaskRemoved(this, removedTasks.get(i), newFrontMostTask,
- AnimationProps.IMMEDIATE, false /* fromDockGesture */,
- true /* dismissRecentsIfAllRemoved */);
- }
-
- // Only callback for the newly added tasks after this stack has been updated
- int addedTaskCount = addedTasks.size();
- for (int i = 0; i < addedTaskCount; i++) {
- mCb.onStackTaskAdded(this, addedTasks.get(i));
- }
-
- // Notify that the task stack has been updated
- if (notifyStackChanges) {
- mCb.onStackTasksUpdated(this);
- }
- }
-
- /**
- * Gets the front-most task in the stack.
- */
- public Task getFrontMostTask() {
- ArrayList<Task> stackTasks = mStackTaskList.getTasks();
- if (stackTasks.isEmpty()) {
- return null;
- }
- return stackTasks.get(stackTasks.size() - 1);
- }
-
- /** Gets the task keys */
- public ArrayList<TaskKey> getTaskKeys() {
- ArrayList<TaskKey> taskKeys = new ArrayList<>();
- ArrayList<Task> tasks = computeAllTasksList();
- int taskCount = tasks.size();
- for (int i = 0; i < taskCount; i++) {
- Task task = tasks.get(i);
- taskKeys.add(task.key);
- }
- return taskKeys;
- }
-
- /**
- * Returns the set of "active" (non-historical) tasks in the stack that have been used recently.
- */
- public ArrayList<Task> getTasks() {
- return mStackTaskList.getTasks();
- }
-
- /**
- * Computes a set of all the active and historical tasks.
- */
- public ArrayList<Task> computeAllTasksList() {
- ArrayList<Task> tasks = new ArrayList<>();
- tasks.addAll(mStackTaskList.getTasks());
- return tasks;
- }
-
- /**
- * Returns the number of stack tasks.
- */
- public int getTaskCount() {
- return mStackTaskList.size();
- }
-
- /**
- * Returns the task in stack tasks which is the launch target.
- */
- public Task getLaunchTarget() {
- ArrayList<Task> tasks = mStackTaskList.getTasks();
- int taskCount = tasks.size();
- for (int i = 0; i < taskCount; i++) {
- Task task = tasks.get(i);
- if (task.isLaunchTarget) {
- return task;
- }
- }
- return null;
- }
-
- /**
- * Returns whether the next launch target should actually be the PiP task.
- */
- public boolean isNextLaunchTargetPip(long lastPipTime) {
- Task launchTarget = getLaunchTarget();
- Task nextLaunchTarget = getNextLaunchTargetRaw();
- if (nextLaunchTarget != null && lastPipTime > 0) {
- // If the PiP time is more recent than the next launch target, then launch the PiP task
- return lastPipTime > nextLaunchTarget.key.lastActiveTime;
- } else if (launchTarget != null && lastPipTime > 0 && getTaskCount() == 1) {
- // Otherwise, if there is no next launch target, but there is a PiP, then launch
- // the PiP task
- return true;
- }
- return false;
- }
-
- /**
- * Returns the task in stack tasks which should be launched next if Recents are toggled
- * again, or null if there is no task to be launched. Callers should check
- * {@link #isNextLaunchTargetPip(long)} before fetching the next raw launch target from the
- * stack.
- */
- public Task getNextLaunchTarget() {
- Task nextLaunchTarget = getNextLaunchTargetRaw();
- if (nextLaunchTarget != null) {
- return nextLaunchTarget;
- }
- return getTasks().get(getTaskCount() - 1);
- }
-
- private Task getNextLaunchTargetRaw() {
- int taskCount = getTaskCount();
- if (taskCount == 0) {
- return null;
- }
- int launchTaskIndex = indexOfTask(getLaunchTarget());
- if (launchTaskIndex != -1 && launchTaskIndex > 0) {
- return getTasks().get(launchTaskIndex - 1);
- }
- return null;
- }
-
- /** Returns the index of this task in this current task stack */
- public int indexOfTask(Task t) {
- return mStackTaskList.indexOf(t);
- }
-
- /** Finds the task with the specified task id. */
- public Task findTaskWithId(int taskId) {
- ArrayList<Task> tasks = computeAllTasksList();
- int taskCount = tasks.size();
- for (int i = 0; i < taskCount; i++) {
- Task task = tasks.get(i);
- if (task.key.id == taskId) {
- return task;
- }
- }
- return null;
- }
-
- /**
- * Computes the components of tasks in this stack that have been removed as a result of a change
- * in the specified package.
- */
- public ArraySet<ComponentName> computeComponentsRemoved(String packageName, int userId) {
- // Identify all the tasks that should be removed as a result of the package being removed.
- // Using a set to ensure that we callback once per unique component.
- ArraySet<ComponentName> existingComponents = new ArraySet<>();
- ArraySet<ComponentName> removedComponents = new ArraySet<>();
- ArrayList<TaskKey> taskKeys = getTaskKeys();
- int taskKeyCount = taskKeys.size();
- for (int i = 0; i < taskKeyCount; i++) {
- TaskKey t = taskKeys.get(i);
-
- // Skip if this doesn't apply to the current user
- if (t.userId != userId) continue;
-
- ComponentName cn = t.getComponent();
- if (cn.getPackageName().equals(packageName)) {
- if (existingComponents.contains(cn)) {
- // If we know that the component still exists in the package, then skip
- continue;
- }
- if (PackageManagerWrapper.getInstance().getActivityInfo(cn, userId) != null) {
- existingComponents.add(cn);
- } else {
- removedComponents.add(cn);
- }
- }
- }
- return removedComponents;
- }
-
- @Override
- public String toString() {
- String str = "Stack Tasks (" + mStackTaskList.size() + "):\n";
- ArrayList<Task> tasks = mStackTaskList.getTasks();
- int taskCount = tasks.size();
- for (int i = 0; i < taskCount; i++) {
- str += " " + tasks.get(i).toString() + "\n";
- }
- return str;
- }
-
- /**
- * Given a list of tasks, returns a map of each task's key to the task.
- */
- private ArrayMap<TaskKey, Task> createTaskKeyMapFromList(List<Task> tasks) {
- ArrayMap<TaskKey, Task> map = new ArrayMap<>(tasks.size());
- int taskCount = tasks.size();
- for (int i = 0; i < taskCount; i++) {
- Task task = tasks.get(i);
- map.put(task.key, task);
- }
- return map;
- }
-
- public void dump(String prefix, PrintWriter writer) {
- String innerPrefix = prefix + " ";
-
- writer.print(prefix); writer.print(TAG);
- writer.print(" numStackTasks="); writer.print(mStackTaskList.size());
- writer.println();
- ArrayList<Task> tasks = mStackTaskList.getTasks();
- int taskCount = tasks.size();
- for (int i = 0; i < taskCount; i++) {
- tasks.get(i).dump(innerPrefix, writer);
- }
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/utilities/AnimationProps.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/utilities/AnimationProps.java
deleted file mode 100644
index 54639985bebd..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/utilities/AnimationProps.java
+++ /dev/null
@@ -1,229 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.utilities;
-
-import android.animation.Animator;
-import android.animation.AnimatorSet;
-import android.animation.ValueAnimator;
-import android.annotation.IntDef;
-import android.util.SparseArray;
-import android.util.SparseLongArray;
-import android.view.View;
-import android.view.animation.Interpolator;
-import android.view.animation.LinearInterpolator;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.util.List;
-
-/**
- * The generic set of animation properties to animate a {@link View}. The animation can have
- * different interpolators, start delays and durations for each of the different properties.
- */
-public class AnimationProps {
-
- private static final Interpolator LINEAR_INTERPOLATOR = new LinearInterpolator();
- public static final AnimationProps IMMEDIATE = new AnimationProps(0, LINEAR_INTERPOLATOR);
-
- @Retention(RetentionPolicy.SOURCE)
- @IntDef({ALL, TRANSLATION_X, TRANSLATION_Y, TRANSLATION_Z, ALPHA, SCALE, BOUNDS})
- public @interface PropType {}
-
- public static final int ALL = 0;
- public static final int TRANSLATION_X = 1;
- public static final int TRANSLATION_Y = 2;
- public static final int TRANSLATION_Z = 3;
- public static final int ALPHA = 4;
- public static final int SCALE = 5;
- public static final int BOUNDS = 6;
- public static final int DIM_ALPHA = 7;
-
- private SparseLongArray mPropStartDelay;
- private SparseLongArray mPropDuration;
- private SparseArray<Interpolator> mPropInterpolators;
- private Animator.AnimatorListener mListener;
-
- /**
- * The builder constructor.
- */
- public AnimationProps() {}
-
- /**
- * Creates an animation with a default {@param duration} and {@param interpolator} for all
- * properties in this animation.
- */
- public AnimationProps(int duration, Interpolator interpolator) {
- this(0, duration, interpolator, null);
- }
-
- /**
- * Creates an animation with a default {@param duration} and {@param interpolator} for all
- * properties in this animation.
- */
- public AnimationProps(int duration, Interpolator interpolator,
- Animator.AnimatorListener listener) {
- this(0, duration, interpolator, listener);
- }
-
- /**
- * Creates an animation with a default {@param startDelay}, {@param duration} and
- * {@param interpolator} for all properties in this animation.
- */
- public AnimationProps(int startDelay, int duration, Interpolator interpolator) {
- this(startDelay, duration, interpolator, null);
- }
-
- /**
- * Creates an animation with a default {@param startDelay}, {@param duration} and
- * {@param interpolator} for all properties in this animation.
- */
- public AnimationProps(int startDelay, int duration, Interpolator interpolator,
- Animator.AnimatorListener listener) {
- setStartDelay(ALL, startDelay);
- setDuration(ALL, duration);
- setInterpolator(ALL, interpolator);
- setListener(listener);
- }
-
- /**
- * Creates a new {@link AnimatorSet} that will animate the given animators. Callers need to
- * manually apply the individual animation properties for each of the animators respectively.
- */
- public AnimatorSet createAnimator(List<Animator> animators) {
- AnimatorSet anim = new AnimatorSet();
- if (mListener != null) {
- anim.addListener(mListener);
- }
- anim.playTogether(animators);
- return anim;
- }
-
- /**
- * Applies the specific start delay, duration and interpolator to the given {@param animator}
- * for the specified {@param propertyType}.
- */
- public <T extends ValueAnimator> T apply(@PropType int propertyType, T animator) {
- animator.setStartDelay(getStartDelay(propertyType));
- animator.setDuration(getDuration(propertyType));
- animator.setInterpolator(getInterpolator(propertyType));
- return animator;
- }
-
- /**
- * Sets a start delay for a specific property.
- */
- public AnimationProps setStartDelay(@PropType int propertyType, int startDelay) {
- if (mPropStartDelay == null) {
- mPropStartDelay = new SparseLongArray();
- }
- mPropStartDelay.append(propertyType, startDelay);
- return this;
- }
-
- /**
- * Returns the start delay for a specific property.
- */
- public long getStartDelay(@PropType int propertyType) {
- if (mPropStartDelay != null) {
- long startDelay = mPropStartDelay.get(propertyType, -1);
- if (startDelay != -1) {
- return startDelay;
- }
- return mPropStartDelay.get(ALL, 0);
- }
- return 0;
- }
-
- /**
- * Sets a duration for a specific property.
- */
- public AnimationProps setDuration(@PropType int propertyType, int duration) {
- if (mPropDuration == null) {
- mPropDuration = new SparseLongArray();
- }
- mPropDuration.append(propertyType, duration);
- return this;
- }
-
- /**
- * Returns the duration for a specific property.
- */
- public long getDuration(@PropType int propertyType) {
- if (mPropDuration != null) {
- long duration = mPropDuration.get(propertyType, -1);
- if (duration != -1) {
- return duration;
- }
- return mPropDuration.get(ALL, 0);
- }
- return 0;
- }
-
- /**
- * Sets an interpolator for a specific property.
- */
- public AnimationProps setInterpolator(@PropType int propertyType, Interpolator interpolator) {
- if (mPropInterpolators == null) {
- mPropInterpolators = new SparseArray<>();
- }
- mPropInterpolators.append(propertyType, interpolator);
- return this;
- }
-
- /**
- * Returns the interpolator for a specific property, falling back to the general interpolator
- * if there is no specific property interpolator.
- */
- public Interpolator getInterpolator(@PropType int propertyType) {
- if (mPropInterpolators != null) {
- Interpolator interp = mPropInterpolators.get(propertyType);
- if (interp != null) {
- return interp;
- }
- return mPropInterpolators.get(ALL, LINEAR_INTERPOLATOR);
- }
- return LINEAR_INTERPOLATOR;
- }
-
- /**
- * Sets an animator listener for this animation.
- */
- public AnimationProps setListener(Animator.AnimatorListener listener) {
- mListener = listener;
- return this;
- }
-
- /**
- * Returns the animator listener for this animation.
- */
- public Animator.AnimatorListener getListener() {
- return mListener;
- }
-
- /**
- * Returns whether this animation has any duration.
- */
- public boolean isImmediate() {
- int count = mPropDuration.size();
- for (int i = 0; i < count; i++) {
- if (mPropDuration.valueAt(i) > 0) {
- return false;
- }
- }
- return true;
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/utilities/Utilities.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/utilities/Utilities.java
deleted file mode 100644
index ff58eba71e8d..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/utilities/Utilities.java
+++ /dev/null
@@ -1,339 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.utilities;
-
-import android.animation.Animator;
-import android.animation.AnimatorSet;
-import android.animation.RectEvaluator;
-import android.annotation.FloatRange;
-import android.annotation.Nullable;
-import android.app.Activity;
-import android.content.Context;
-import android.content.res.Configuration;
-import android.content.res.Resources;
-import android.graphics.Color;
-import android.graphics.Rect;
-import android.graphics.RectF;
-import android.graphics.drawable.Drawable;
-import android.os.Handler;
-import android.os.Message;
-import android.os.Trace;
-import android.util.ArraySet;
-import android.util.IntProperty;
-import android.util.Property;
-import android.util.TypedValue;
-import android.view.Surface;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.ViewParent;
-import android.view.ViewRootImpl;
-import android.view.ViewStub;
-
-import com.android.systemui.shared.recents.utilities.RectFEvaluator;
-import java.util.ArrayList;
-import java.util.Collections;
-
-/* Common code */
-public class Utilities {
-
- public static final Property<Drawable, Integer> DRAWABLE_ALPHA =
- new IntProperty<Drawable>("drawableAlpha") {
- @Override
- public void setValue(Drawable object, int alpha) {
- object.setAlpha(alpha);
- }
-
- @Override
- public Integer get(Drawable object) {
- return object.getAlpha();
- }
- };
-
- public static final Property<Drawable, Rect> DRAWABLE_RECT =
- new Property<Drawable, Rect>(Rect.class, "drawableBounds") {
- @Override
- public void set(Drawable object, Rect bounds) {
- object.setBounds(bounds);
- }
-
- @Override
- public Rect get(Drawable object) {
- return object.getBounds();
- }
- };
-
- public static final RectFEvaluator RECTF_EVALUATOR = new RectFEvaluator();
- public static final RectEvaluator RECT_EVALUATOR = new RectEvaluator(new Rect());
-
- /**
- * @return the first parent walking up the view hierarchy that has the given class type.
- *
- * @param parentClass must be a class derived from {@link View}
- */
- public static <T extends View> T findParent(View v, Class<T> parentClass) {
- ViewParent parent = v.getParent();
- while (parent != null) {
- if (parentClass.isAssignableFrom(parent.getClass())) {
- return (T) parent;
- }
- parent = parent.getParent();
- }
- return null;
- }
-
- /**
- * Initializes the {@param setOut} with the given object.
- */
- public static <T> ArraySet<T> objectToSet(T obj, ArraySet<T> setOut) {
- setOut.clear();
- if (obj != null) {
- setOut.add(obj);
- }
- return setOut;
- }
-
- /**
- * Replaces the contents of {@param setOut} with the contents of the {@param array}.
- */
- public static <T> ArraySet<T> arrayToSet(T[] array, ArraySet<T> setOut) {
- setOut.clear();
- if (array != null) {
- Collections.addAll(setOut, array);
- }
- return setOut;
- }
-
- /**
- * @return the clamped {@param value} between the provided {@param min} and {@param max}.
- */
- public static int clamp(int value, int min, int max) {
- return Math.max(min, Math.min(max, value));
- }
-
- /**
- * @return the clamped {@param value} between 0 and 1.
- */
- public static float clamp01(float value) {
- return Math.max(0f, Math.min(1f, value));
- }
-
- /**
- * Scales the {@param value} to be proportionally between the {@param min} and
- * {@param max} values.
- *
- * @param value must be between 0 and 1
- */
- public static float mapRange(@FloatRange(from=0.0,to=1.0) float value, float min, float max) {
- return min + (value * (max - min));
- }
-
- /**
- * Scales the {@param value} proportionally from {@param min} and {@param max} to 0 and 1.
- *
- * @param value must be between {@param min} and {@param max}
- */
- public static float unmapRange(float value, float min, float max) {
- return (value - min) / (max - min);
- }
-
- /** Scales a rect about its centroid */
- public static void scaleRectAboutCenter(RectF r, float scale) {
- if (scale != 1.0f) {
- float cx = r.centerX();
- float cy = r.centerY();
- r.offset(-cx, -cy);
- r.left *= scale;
- r.top *= scale;
- r.right *= scale;
- r.bottom *= scale;
- r.offset(cx, cy);
- }
- }
-
- /** Returns the base color overlaid with another overlay color with a specified alpha. */
- public static int getColorWithOverlay(int baseColor, int overlayColor, float overlayAlpha) {
- return Color.rgb(
- (int) (overlayAlpha * Color.red(baseColor) +
- (1f - overlayAlpha) * Color.red(overlayColor)),
- (int) (overlayAlpha * Color.green(baseColor) +
- (1f - overlayAlpha) * Color.green(overlayColor)),
- (int) (overlayAlpha * Color.blue(baseColor) +
- (1f - overlayAlpha) * Color.blue(overlayColor)));
- }
-
- /**
- * Cancels an animation ensuring that if it has listeners, onCancel and onEnd
- * are not called.
- */
- public static void cancelAnimationWithoutCallbacks(Animator animator) {
- if (animator != null && animator.isStarted()) {
- removeAnimationListenersRecursive(animator);
- animator.cancel();
- }
- }
-
- /**
- * Recursively removes all the listeners of all children of this animator
- */
- public static void removeAnimationListenersRecursive(Animator animator) {
- if (animator instanceof AnimatorSet) {
- ArrayList<Animator> animators = ((AnimatorSet) animator).getChildAnimations();
- for (int i = animators.size() - 1; i >= 0; i--) {
- removeAnimationListenersRecursive(animators.get(i));
- }
- }
- animator.removeAllListeners();
- }
-
- /**
- * Sets the given {@link View}'s frame from its current translation.
- */
- public static void setViewFrameFromTranslation(View v) {
- RectF taskViewRect = new RectF(v.getLeft(), v.getTop(), v.getRight(), v.getBottom());
- taskViewRect.offset(v.getTranslationX(), v.getTranslationY());
- v.setTranslationX(0);
- v.setTranslationY(0);
- v.setLeftTopRightBottom((int) taskViewRect.left, (int) taskViewRect.top,
- (int) taskViewRect.right, (int) taskViewRect.bottom);
- }
-
- /**
- * Returns a view stub for the given view id.
- */
- public static ViewStub findViewStubById(View v, int stubId) {
- return (ViewStub) v.findViewById(stubId);
- }
-
- /**
- * Returns a view stub for the given view id.
- */
- public static ViewStub findViewStubById(Activity a, int stubId) {
- return (ViewStub) a.findViewById(stubId);
- }
-
- /**
- * Used for debugging, converts DP to PX.
- */
- public static float dpToPx(Resources res, float dp) {
- return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, res.getDisplayMetrics());
- }
-
- /**
- * Adds a trace event for debugging.
- */
- public static void addTraceEvent(String event) {
- Trace.traceBegin(Trace.TRACE_TAG_VIEW, event);
- Trace.traceEnd(Trace.TRACE_TAG_VIEW);
- }
-
- /**
- * Returns whether this view, or one of its descendants have accessibility focus.
- */
- public static boolean isDescendentAccessibilityFocused(View v) {
- if (v.isAccessibilityFocused()) {
- return true;
- }
-
- if (v instanceof ViewGroup) {
- ViewGroup vg = (ViewGroup) v;
- int childCount = vg.getChildCount();
- for (int i = 0; i < childCount; i++) {
- if (isDescendentAccessibilityFocused(vg.getChildAt(i))) {
- return true;
- }
- }
- }
- return false;
- }
-
- /**
- * Returns the application configuration, which is independent of the activity's current
- * configuration in multiwindow.
- */
- public static Configuration getAppConfiguration(Context context) {
- return context.getApplicationContext().getResources().getConfiguration();
- }
-
- /**
- * @return The next frame name for the specified surface or -1 if the surface is no longer
- * valid.
- */
- public static long getNextFrameNumber(Surface s) {
- return s != null && s.isValid()
- ? s.getNextFrameNumber()
- : -1;
-
- }
-
- /**
- * @return The surface for the specified view.
- */
- public static @Nullable Surface getSurface(View v) {
- ViewRootImpl viewRoot = v.getViewRootImpl();
- if (viewRoot == null) {
- return null;
- }
- return viewRoot.mSurface;
- }
-
- /**
- * Returns a lightweight dump of a rect.
- */
- public static String dumpRect(Rect r) {
- if (r == null) {
- return "N:0,0-0,0";
- }
- return r.left + "," + r.top + "-" + r.right + "," + r.bottom;
- }
-
- /**
- * Posts a runnable on a handler at the front of the queue ignoring any sync barriers.
- */
- public static void postAtFrontOfQueueAsynchronously(Handler h, Runnable r) {
- Message msg = h.obtainMessage().setCallback(r);
- h.sendMessageAtFrontOfQueue(msg);
- }
-
- /** Calculates the constrast between two colors, using the algorithm provided by the WCAG v2. */
- public static float computeContrastBetweenColors(int bg, int fg) {
- float bgR = Color.red(bg) / 255f;
- float bgG = Color.green(bg) / 255f;
- float bgB = Color.blue(bg) / 255f;
- bgR = (bgR < 0.03928f) ? bgR / 12.92f : (float) Math.pow((bgR + 0.055f) / 1.055f, 2.4f);
- bgG = (bgG < 0.03928f) ? bgG / 12.92f : (float) Math.pow((bgG + 0.055f) / 1.055f, 2.4f);
- bgB = (bgB < 0.03928f) ? bgB / 12.92f : (float) Math.pow((bgB + 0.055f) / 1.055f, 2.4f);
- float bgL = 0.2126f * bgR + 0.7152f * bgG + 0.0722f * bgB;
-
- float fgR = Color.red(fg) / 255f;
- float fgG = Color.green(fg) / 255f;
- float fgB = Color.blue(fg) / 255f;
- fgR = (fgR < 0.03928f) ? fgR / 12.92f : (float) Math.pow((fgR + 0.055f) / 1.055f, 2.4f);
- fgG = (fgG < 0.03928f) ? fgG / 12.92f : (float) Math.pow((fgG + 0.055f) / 1.055f, 2.4f);
- fgB = (fgB < 0.03928f) ? fgB / 12.92f : (float) Math.pow((fgB + 0.055f) / 1.055f, 2.4f);
- float fgL = 0.2126f * fgR + 0.7152f * fgG + 0.0722f * fgB;
-
- return Math.abs((fgL + 0.05f) / (bgL + 0.05f));
- }
-
- /**
- * @return the clamped {@param value} between the provided {@param min} and {@param max}.
- */
- public static float clamp(float value, float min, float max) {
- return Math.max(min, Math.min(max, value));
- }
-
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/AnimateableViewBounds.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/AnimateableViewBounds.java
deleted file mode 100644
index e18850639336..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/AnimateableViewBounds.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.views;
-
-import android.graphics.Outline;
-import android.graphics.Rect;
-import android.view.View;
-import android.view.ViewOutlineProvider;
-
-import com.android.systemui.recents.utilities.Utilities;
-
-/**
- * An outline provider that has a clip and outline that can be animated.
- */
-public class AnimateableViewBounds extends ViewOutlineProvider {
-
- private static final float MIN_ALPHA = 0.1f;
- private static final float MAX_ALPHA = 0.8f;
-
- protected View mSourceView;
- protected Rect mClipRect = new Rect();
- protected Rect mClipBounds = new Rect();
- protected Rect mLastClipBounds = new Rect();
- protected int mCornerRadius;
- protected float mAlpha = 1f;
-
- public AnimateableViewBounds(View source, int cornerRadius) {
- mSourceView = source;
- mCornerRadius = cornerRadius;
- }
-
- /**
- * Resets the right and bottom clip for this view.
- */
- public void reset() {
- mClipRect.set(0, 0, 0, 0);
- updateClipBounds();
- }
-
- @Override
- public void getOutline(View view, Outline outline) {
- outline.setAlpha(Utilities.mapRange(mAlpha, MIN_ALPHA, MAX_ALPHA));
- if (mCornerRadius > 0) {
- outline.setRoundRect(mClipRect.left, mClipRect.top,
- mSourceView.getWidth() - mClipRect.right,
- mSourceView.getHeight() - mClipRect.bottom,
- mCornerRadius);
- } else {
- outline.setRect(mClipRect.left, mClipRect.top,
- mSourceView.getWidth() - mClipRect.right,
- mSourceView.getHeight() - mClipRect.bottom);
- }
- }
-
- /**
- * Sets the view outline alpha.
- */
- public void setAlpha(float alpha) {
- if (Float.compare(alpha, mAlpha) != 0) {
- mAlpha = alpha;
- // TODO, If both clip and alpha change in the same frame, only invalidate once
- mSourceView.invalidateOutline();
- }
- }
-
- /**
- * @return the outline alpha.
- */
- public float getAlpha() {
- return mAlpha;
- }
-
- /**
- * Sets the top clip.
- */
- public void setClipTop(int top) {
- mClipRect.top = top;
- updateClipBounds();
- }
-
- /**
- * @return the top clip.
- */
- public int getClipTop() {
- return mClipRect.top;
- }
-
- /**
- * Sets the bottom clip.
- */
- public void setClipBottom(int bottom) {
- mClipRect.bottom = bottom;
- updateClipBounds();
- }
-
- /**
- * @return the bottom clip.
- */
- public int getClipBottom() {
- return mClipRect.bottom;
- }
-
- /**
- * @return the clip bounds.
- */
- public Rect getClipBounds() {
- return mClipBounds;
- }
-
- protected void updateClipBounds() {
- mClipBounds.set(Math.max(0, mClipRect.left), Math.max(0, mClipRect.top),
- mSourceView.getWidth() - Math.max(0, mClipRect.right),
- mSourceView.getHeight() - Math.max(0, mClipRect.bottom));
- if (!mLastClipBounds.equals(mClipBounds)) {
- mSourceView.setClipBounds(mClipBounds);
- // TODO, If both clip and alpha change in the same frame, only invalidate once
- mSourceView.invalidateOutline();
- mLastClipBounds.set(mClipBounds);
- }
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/DockState.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/DockState.java
deleted file mode 100644
index d9c921cf3f7d..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/DockState.java
+++ /dev/null
@@ -1,351 +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.recents.views;
-
-import static android.app.ActivityTaskManager.SPLIT_SCREEN_CREATE_MODE_BOTTOM_OR_RIGHT;
-import static android.app.ActivityTaskManager.SPLIT_SCREEN_CREATE_MODE_TOP_OR_LEFT;
-import static android.view.WindowManager.DOCKED_BOTTOM;
-import static android.view.WindowManager.DOCKED_INVALID;
-import static android.view.WindowManager.DOCKED_LEFT;
-import static android.view.WindowManager.DOCKED_RIGHT;
-import static android.view.WindowManager.DOCKED_TOP;
-
-import android.animation.Animator;
-import android.animation.AnimatorSet;
-import android.animation.ObjectAnimator;
-import android.animation.PropertyValuesHolder;
-import android.annotation.IntDef;
-import android.content.Context;
-import android.content.res.Configuration;
-import android.content.res.Resources;
-import android.graphics.Canvas;
-import android.graphics.Color;
-import android.graphics.Paint;
-import android.graphics.Point;
-import android.graphics.Rect;
-import android.graphics.RectF;
-import android.graphics.drawable.ColorDrawable;
-import android.util.IntProperty;
-import android.view.animation.Interpolator;
-
-import com.android.internal.policy.DockedDividerUtils;
-import com.android.systemui.Interpolators;
-import com.android.systemui.R;
-import com.android.systemui.recents.LegacyRecentsImpl;
-import com.android.systemui.recents.utilities.Utilities;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.util.ArrayList;
-
-/**
- * The various possible dock states when dragging and dropping a task.
- */
-public class DockState implements DropTarget {
-
- public static final int DOCK_AREA_BG_COLOR = 0xFFffffff;
- public static final int DOCK_AREA_GRID_BG_COLOR = 0xFF000000;
-
- // The rotation to apply to the hint text
- @Retention(RetentionPolicy.SOURCE)
- @IntDef({HORIZONTAL, VERTICAL})
- public @interface TextOrientation {}
- private static final int HORIZONTAL = 0;
- private static final int VERTICAL = 1;
-
- private static final int DOCK_AREA_ALPHA = 80;
- public static final DockState NONE = new DockState(DOCKED_INVALID, -1, 80, 255, HORIZONTAL,
- null, null, null);
- public static final DockState LEFT = new DockState(DOCKED_LEFT,
- SPLIT_SCREEN_CREATE_MODE_TOP_OR_LEFT, DOCK_AREA_ALPHA, 0, VERTICAL,
- new RectF(0, 0, 0.125f, 1), new RectF(0, 0, 0.125f, 1),
- new RectF(0, 0, 0.5f, 1));
- public static final DockState TOP = new DockState(DOCKED_TOP,
- SPLIT_SCREEN_CREATE_MODE_TOP_OR_LEFT, DOCK_AREA_ALPHA, 0, HORIZONTAL,
- new RectF(0, 0, 1, 0.125f), new RectF(0, 0, 1, 0.125f),
- new RectF(0, 0, 1, 0.5f));
- public static final DockState RIGHT = new DockState(DOCKED_RIGHT,
- SPLIT_SCREEN_CREATE_MODE_BOTTOM_OR_RIGHT, DOCK_AREA_ALPHA, 0, VERTICAL,
- new RectF(0.875f, 0, 1, 1), new RectF(0.875f, 0, 1, 1),
- new RectF(0.5f, 0, 1, 1));
- public static final DockState BOTTOM = new DockState(DOCKED_BOTTOM,
- SPLIT_SCREEN_CREATE_MODE_BOTTOM_OR_RIGHT, DOCK_AREA_ALPHA, 0, HORIZONTAL,
- new RectF(0, 0.875f, 1, 1), new RectF(0, 0.875f, 1, 1),
- new RectF(0, 0.5f, 1, 1));
-
- @Override
- public boolean acceptsDrop(int x, int y, int width, int height, Rect insets,
- boolean isCurrentTarget) {
- if (isCurrentTarget) {
- getMappedRect(expandedTouchDockArea, width, height, mTmpRect);
- return mTmpRect.contains(x, y);
- } else {
- getMappedRect(touchArea, width, height, mTmpRect);
- updateBoundsWithSystemInsets(mTmpRect, insets);
- return mTmpRect.contains(x, y);
- }
- }
-
- // Represents the view state of this dock state
- public static class ViewState {
- private static final IntProperty<ViewState> HINT_ALPHA =
- new IntProperty<ViewState>("drawableAlpha") {
- @Override
- public void setValue(ViewState object, int alpha) {
- object.mHintTextAlpha = alpha;
- object.dockAreaOverlay.invalidateSelf();
- }
-
- @Override
- public Integer get(ViewState object) {
- return object.mHintTextAlpha;
- }
- };
-
- public final int dockAreaAlpha;
- public final ColorDrawable dockAreaOverlay;
- public final int hintTextAlpha;
- public final int hintTextOrientation;
-
- private final int mHintTextResId;
- private String mHintText;
- private Paint mHintTextPaint;
- private Point mHintTextBounds = new Point();
- private int mHintTextAlpha = 255;
- private AnimatorSet mDockAreaOverlayAnimator;
- private Rect mTmpRect = new Rect();
-
- private ViewState(int areaAlpha, int hintAlpha, @TextOrientation int hintOrientation,
- int hintTextResId) {
- dockAreaAlpha = areaAlpha;
- dockAreaOverlay = new ColorDrawable(LegacyRecentsImpl.getConfiguration().isGridEnabled
- ? DOCK_AREA_GRID_BG_COLOR : DOCK_AREA_BG_COLOR);
- dockAreaOverlay.setAlpha(0);
- hintTextAlpha = hintAlpha;
- hintTextOrientation = hintOrientation;
- mHintTextResId = hintTextResId;
- mHintTextPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
- mHintTextPaint.setColor(Color.WHITE);
- }
-
- /**
- * Updates the view state with the given context.
- */
- public void update(Context context) {
- Resources res = context.getResources();
- mHintText = context.getString(mHintTextResId);
- mHintTextPaint.setTextSize(res.getDimensionPixelSize(
- R.dimen.recents_drag_hint_text_size));
- mHintTextPaint.getTextBounds(mHintText, 0, mHintText.length(), mTmpRect);
- mHintTextBounds.set((int) mHintTextPaint.measureText(mHintText), mTmpRect.height());
- }
-
- /**
- * Draws the current view state.
- */
- public void draw(Canvas canvas) {
- // Draw the overlay background
- if (dockAreaOverlay.getAlpha() > 0) {
- dockAreaOverlay.draw(canvas);
- }
-
- // Draw the hint text
- if (mHintTextAlpha > 0) {
- Rect bounds = dockAreaOverlay.getBounds();
- int x = bounds.left + (bounds.width() - mHintTextBounds.x) / 2;
- int y = bounds.top + (bounds.height() + mHintTextBounds.y) / 2;
- mHintTextPaint.setAlpha(mHintTextAlpha);
- if (hintTextOrientation == VERTICAL) {
- canvas.save();
- canvas.rotate(-90f, bounds.centerX(), bounds.centerY());
- }
- canvas.drawText(mHintText, x, y, mHintTextPaint);
- if (hintTextOrientation == VERTICAL) {
- canvas.restore();
- }
- }
- }
-
- /**
- * Creates a new bounds and alpha animation.
- */
- public void startAnimation(Rect bounds, int areaAlpha, int hintAlpha, int duration,
- Interpolator interpolator, boolean animateAlpha, boolean animateBounds) {
- if (mDockAreaOverlayAnimator != null) {
- mDockAreaOverlayAnimator.cancel();
- }
-
- ObjectAnimator anim;
- ArrayList<Animator> animators = new ArrayList<>();
- if (dockAreaOverlay.getAlpha() != areaAlpha) {
- if (animateAlpha) {
- anim = ObjectAnimator.ofInt(dockAreaOverlay,
- Utilities.DRAWABLE_ALPHA, dockAreaOverlay.getAlpha(), areaAlpha);
- anim.setDuration(duration);
- anim.setInterpolator(interpolator);
- animators.add(anim);
- } else {
- dockAreaOverlay.setAlpha(areaAlpha);
- }
- }
- if (mHintTextAlpha != hintAlpha) {
- if (animateAlpha) {
- anim = ObjectAnimator.ofInt(this, HINT_ALPHA, mHintTextAlpha,
- hintAlpha);
- anim.setDuration(150);
- anim.setInterpolator(hintAlpha > mHintTextAlpha
- ? Interpolators.ALPHA_IN
- : Interpolators.ALPHA_OUT);
- animators.add(anim);
- } else {
- mHintTextAlpha = hintAlpha;
- dockAreaOverlay.invalidateSelf();
- }
- }
- if (bounds != null && !dockAreaOverlay.getBounds().equals(bounds)) {
- if (animateBounds) {
- PropertyValuesHolder prop = PropertyValuesHolder.ofObject(
- Utilities.DRAWABLE_RECT, Utilities.RECT_EVALUATOR,
- new Rect(dockAreaOverlay.getBounds()), bounds);
- anim = ObjectAnimator.ofPropertyValuesHolder(dockAreaOverlay, prop);
- anim.setDuration(duration);
- anim.setInterpolator(interpolator);
- animators.add(anim);
- } else {
- dockAreaOverlay.setBounds(bounds);
- }
- }
- if (!animators.isEmpty()) {
- mDockAreaOverlayAnimator = new AnimatorSet();
- mDockAreaOverlayAnimator.playTogether(animators);
- mDockAreaOverlayAnimator.start();
- }
- }
- }
-
- public final int dockSide;
- public final int createMode;
- public final ViewState viewState;
- private final RectF touchArea;
- private final RectF dockArea;
- private final RectF expandedTouchDockArea;
- private static final Rect mTmpRect = new Rect();
-
- /**
- * @param createMode used to pass to ActivityManager to dock the task
- * @param touchArea the area in which touch will initiate this dock state
- * @param dockArea the visible dock area
- * @param expandedTouchDockArea the area in which touch will continue to dock after entering
- * the initial touch area. This is also the new dock area to
- * draw.
- */
- DockState(int dockSide, int createMode, int dockAreaAlpha, int hintTextAlpha,
- @TextOrientation int hintTextOrientation, RectF touchArea, RectF dockArea,
- RectF expandedTouchDockArea) {
- this.dockSide = dockSide;
- this.createMode = createMode;
- this.viewState = new ViewState(dockAreaAlpha, hintTextAlpha, hintTextOrientation,
- R.string.recents_drag_hint_message);
- this.dockArea = dockArea;
- this.touchArea = touchArea;
- this.expandedTouchDockArea = expandedTouchDockArea;
- }
-
- /**
- * Updates the dock state with the given context.
- */
- public void update(Context context) {
- viewState.update(context);
- }
-
- /**
- * Returns the docked task bounds with the given {@param width} and {@param height}.
- */
- public Rect getPreDockedBounds(int width, int height, Rect insets) {
- getMappedRect(dockArea, width, height, mTmpRect);
- return updateBoundsWithSystemInsets(mTmpRect, insets);
- }
-
- /**
- * Returns the expanded docked task bounds with the given {@param width} and
- * {@param height}.
- */
- public Rect getDockedBounds(int width, int height, int dividerSize, Rect insets,
- Resources res) {
- // Calculate the docked task bounds
- boolean isHorizontalDivision =
- res.getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT;
- int position = DockedDividerUtils.calculateMiddlePosition(isHorizontalDivision,
- insets, width, height, dividerSize);
- Rect newWindowBounds = new Rect();
- DockedDividerUtils.calculateBoundsForPosition(position, dockSide, newWindowBounds,
- width, height, dividerSize);
- return newWindowBounds;
- }
-
- /**
- * Returns the task stack bounds with the given {@param width} and
- * {@param height}.
- */
- public Rect getDockedTaskStackBounds(Rect displayRect, int width, int height,
- int dividerSize, Rect insets, TaskStackLayoutAlgorithm layoutAlgorithm,
- Resources res, Rect windowRectOut) {
- // Calculate the inverse docked task bounds
- boolean isHorizontalDivision =
- res.getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT;
- int position = DockedDividerUtils.calculateMiddlePosition(isHorizontalDivision,
- insets, width, height, dividerSize);
- DockedDividerUtils.calculateBoundsForPosition(position,
- DockedDividerUtils.invertDockSide(dockSide), windowRectOut, width, height,
- dividerSize);
-
- // Calculate the task stack bounds from the new window bounds
- Rect taskStackBounds = new Rect();
- // If the task stack bounds is specifically under the dock area, then ignore the top
- // inset
- int top = dockArea.bottom < 1f
- ? 0
- : insets.top;
- // For now, ignore the left insets since we always dock on the left and show Recents
- // on the right
- layoutAlgorithm.getTaskStackBounds(displayRect, windowRectOut, top, 0, insets.right,
- taskStackBounds);
- return taskStackBounds;
- }
-
- /**
- * Returns the expanded bounds in certain dock sides such that the bounds account for the
- * system insets (namely the vertical nav bar). This call modifies and returns the given
- * {@param bounds}.
- */
- private Rect updateBoundsWithSystemInsets(Rect bounds, Rect insets) {
- if (dockSide == DOCKED_LEFT) {
- bounds.right += insets.left;
- } else if (dockSide == DOCKED_RIGHT) {
- bounds.left -= insets.right;
- }
- return bounds;
- }
-
- /**
- * Returns the mapped rect to the given dimensions.
- */
- private void getMappedRect(RectF bounds, int width, int height, Rect out) {
- out.set((int) (bounds.left * width), (int) (bounds.top * height),
- (int) (bounds.right * width), (int) (bounds.bottom * height));
- }
-} \ No newline at end of file
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/DropTarget.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/DropTarget.java
deleted file mode 100644
index f2a631078d3c..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/DropTarget.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.views;
-
-import android.graphics.Rect;
-
-/**
- * Represents a drop target for a drag gesture.
- */
-public interface DropTarget {
-
- /**
- * Returns whether this target can accept this drop. The x,y are relative to the top level
- * RecentsView, and the width/height are of the RecentsView.
- */
- boolean acceptsDrop(int x, int y, int width, int height, Rect insets, boolean isCurrentTarget);
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/FakeShadowDrawable.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/FakeShadowDrawable.java
deleted file mode 100644
index 86b4297663cb..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/FakeShadowDrawable.java
+++ /dev/null
@@ -1,290 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-package com.android.systemui.recents.views;
-
-import android.content.res.Resources;
-import android.graphics.Canvas;
-import android.graphics.ColorFilter;
-import android.graphics.LinearGradient;
-import android.graphics.Paint;
-import android.graphics.Path;
-import android.graphics.PixelFormat;
-import android.graphics.RadialGradient;
-import android.graphics.Rect;
-import android.graphics.RectF;
-import android.graphics.Shader;
-import android.graphics.drawable.Drawable;
-import android.util.Log;
-
-import com.android.systemui.R;
-import com.android.systemui.recents.LegacyRecentsImpl;
-import com.android.systemui.recents.RecentsConfiguration;
-
-/**
- * A rounded rectangle drawable which also includes a shadow around. This is mostly copied from
- * frameworks/support/v7/cardview/eclair-mr1/android/support/v7/widget/
- * RoundRectDrawableWithShadow.java revision c42ba8c000d1e6ce85e152dfc17089a0a69e739f with a few
- * modifications to suit our needs in SystemUI.
- */
-class FakeShadowDrawable extends Drawable {
- // used to calculate content padding
- final static double COS_45 = Math.cos(Math.toRadians(45));
-
- final static float SHADOW_MULTIPLIER = 1.5f;
-
- final float mInsetShadow; // extra shadow to avoid gaps between card and shadow
-
- Paint mCornerShadowPaint;
-
- Paint mEdgeShadowPaint;
-
- final RectF mCardBounds;
-
- float mCornerRadius;
-
- Path mCornerShadowPath;
-
- // updated value with inset
- float mMaxShadowSize;
-
- // actual value set by developer
- float mRawMaxShadowSize;
-
- // multiplied value to account for shadow offset
- float mShadowSize;
-
- // actual value set by developer
- float mRawShadowSize;
-
- private boolean mDirty = true;
-
- private final int mShadowStartColor;
-
- private final int mShadowEndColor;
-
- private boolean mAddPaddingForCorners = true;
-
- /**
- * If shadow size is set to a value above max shadow, we print a warning
- */
- private boolean mPrintedShadowClipWarning = false;
-
- public FakeShadowDrawable(Resources resources, RecentsConfiguration config) {
- mShadowStartColor = resources.getColor(R.color.fake_shadow_start_color);
- mShadowEndColor = resources.getColor(R.color.fake_shadow_end_color);
- mInsetShadow = resources.getDimension(R.dimen.fake_shadow_inset);
- setShadowSize(resources.getDimensionPixelSize(R.dimen.fake_shadow_size),
- resources.getDimensionPixelSize(R.dimen.fake_shadow_size));
- mCornerShadowPaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.DITHER_FLAG);
- mCornerShadowPaint.setStyle(Paint.Style.FILL);
- mCornerShadowPaint.setDither(true);
- mCornerRadius = LegacyRecentsImpl.getConfiguration().isGridEnabled ?
- resources.getDimensionPixelSize(
- R.dimen.recents_grid_task_view_rounded_corners_radius) :
- resources.getDimensionPixelSize(R.dimen.recents_task_view_rounded_corners_radius);
- mCardBounds = new RectF();
- mEdgeShadowPaint = new Paint(mCornerShadowPaint);
- }
-
- @Override
- public void setAlpha(int alpha) {
- mCornerShadowPaint.setAlpha(alpha);
- mEdgeShadowPaint.setAlpha(alpha);
- }
-
- @Override
- protected void onBoundsChange(Rect bounds) {
- super.onBoundsChange(bounds);
- mDirty = true;
- }
-
- void setShadowSize(float shadowSize, float maxShadowSize) {
- if (shadowSize < 0 || maxShadowSize < 0) {
- throw new IllegalArgumentException("invalid shadow size");
- }
- if (shadowSize > maxShadowSize) {
- shadowSize = maxShadowSize;
- if (!mPrintedShadowClipWarning) {
- Log.w("CardView", "Shadow size is being clipped by the max shadow size. See "
- + "{CardView#setMaxCardElevation}.");
- mPrintedShadowClipWarning = true;
- }
- }
- if (mRawShadowSize == shadowSize && mRawMaxShadowSize == maxShadowSize) {
- return;
- }
- mRawShadowSize = shadowSize;
- mRawMaxShadowSize = maxShadowSize;
- mShadowSize = shadowSize * SHADOW_MULTIPLIER + mInsetShadow;
- mMaxShadowSize = maxShadowSize + mInsetShadow;
- mDirty = true;
- invalidateSelf();
- }
-
- @Override
- public boolean getPadding(Rect padding) {
- int vOffset = (int) Math.ceil(calculateVerticalPadding(mRawMaxShadowSize, mCornerRadius,
- mAddPaddingForCorners));
- int hOffset = (int) Math.ceil(calculateHorizontalPadding(mRawMaxShadowSize, mCornerRadius,
- mAddPaddingForCorners));
- padding.set(hOffset, vOffset, hOffset, vOffset);
- return true;
- }
-
- static float calculateVerticalPadding(float maxShadowSize, float cornerRadius,
- boolean addPaddingForCorners) {
- if (addPaddingForCorners) {
- return (float) (maxShadowSize * SHADOW_MULTIPLIER + (1 - COS_45) * cornerRadius);
- } else {
- return maxShadowSize * SHADOW_MULTIPLIER;
- }
- }
-
- static float calculateHorizontalPadding(float maxShadowSize, float cornerRadius,
- boolean addPaddingForCorners) {
- if (addPaddingForCorners) {
- return (float) (maxShadowSize + (1 - COS_45) * cornerRadius);
- } else {
- return maxShadowSize;
- }
- }
-
- @Override
- public void setColorFilter(ColorFilter colorFilter) {
- mCornerShadowPaint.setColorFilter(colorFilter);
- mEdgeShadowPaint.setColorFilter(colorFilter);
- }
-
- @Override
- public int getOpacity() {
- return PixelFormat.OPAQUE;
- }
-
- @Override
- public void draw(Canvas canvas) {
- if (mDirty) {
- buildComponents(getBounds());
- mDirty = false;
- }
- canvas.translate(0, mRawShadowSize / 4);
- drawShadow(canvas);
- canvas.translate(0, -mRawShadowSize / 4);
- }
-
- private void drawShadow(Canvas canvas) {
- final float edgeShadowTop = -mCornerRadius - mShadowSize;
- final float inset = mCornerRadius + mInsetShadow + mRawShadowSize / 2;
- final boolean drawHorizontalEdges = mCardBounds.width() - 2 * inset > 0;
- final boolean drawVerticalEdges = mCardBounds.height() - 2 * inset > 0;
- // LT
- int saved = canvas.save();
- canvas.translate(mCardBounds.left + inset, mCardBounds.top + inset);
- canvas.drawPath(mCornerShadowPath, mCornerShadowPaint);
- if (drawHorizontalEdges) {
- canvas.drawRect(0, edgeShadowTop,
- mCardBounds.width() - 2 * inset, -mCornerRadius,
- mEdgeShadowPaint);
- }
- canvas.restoreToCount(saved);
- // RB
- saved = canvas.save();
- canvas.translate(mCardBounds.right - inset, mCardBounds.bottom - inset);
- canvas.rotate(180f);
- canvas.drawPath(mCornerShadowPath, mCornerShadowPaint);
- if (drawHorizontalEdges) {
- canvas.drawRect(0, edgeShadowTop,
- mCardBounds.width() - 2 * inset, -mCornerRadius + mShadowSize,
- mEdgeShadowPaint);
- }
- canvas.restoreToCount(saved);
- // LB
- saved = canvas.save();
- canvas.translate(mCardBounds.left + inset, mCardBounds.bottom - inset);
- canvas.rotate(270f);
- canvas.drawPath(mCornerShadowPath, mCornerShadowPaint);
- if (drawVerticalEdges) {
- canvas.drawRect(0, edgeShadowTop,
- mCardBounds.height() - 2 * inset, -mCornerRadius, mEdgeShadowPaint);
- }
- canvas.restoreToCount(saved);
- // RT
- saved = canvas.save();
- canvas.translate(mCardBounds.right - inset, mCardBounds.top + inset);
- canvas.rotate(90f);
- canvas.drawPath(mCornerShadowPath, mCornerShadowPaint);
- if (drawVerticalEdges) {
- canvas.drawRect(0, edgeShadowTop,
- mCardBounds.height() - 2 * inset, -mCornerRadius, mEdgeShadowPaint);
- }
- canvas.restoreToCount(saved);
- }
-
- private void buildShadowCorners() {
- RectF innerBounds = new RectF(-mCornerRadius, -mCornerRadius, mCornerRadius, mCornerRadius);
- RectF outerBounds = new RectF(innerBounds);
- outerBounds.inset(-mShadowSize, -mShadowSize);
-
- if (mCornerShadowPath == null) {
- mCornerShadowPath = new Path();
- } else {
- mCornerShadowPath.reset();
- }
- mCornerShadowPath.setFillType(Path.FillType.EVEN_ODD);
- mCornerShadowPath.moveTo(-mCornerRadius, 0);
- mCornerShadowPath.rLineTo(-mShadowSize, 0);
- // outer arc
- mCornerShadowPath.arcTo(outerBounds, 180f, 90f, false);
- // inner arc
- mCornerShadowPath.arcTo(innerBounds, 270f, -90f, false);
- mCornerShadowPath.close();
-
- float startRatio = mCornerRadius / (mCornerRadius + mShadowSize);
- mCornerShadowPaint.setShader(new RadialGradient(0, 0, mCornerRadius + mShadowSize,
- new int[]{mShadowStartColor, mShadowStartColor, mShadowEndColor},
- new float[]{0f, startRatio, 1f}
- , Shader.TileMode.CLAMP));
-
- // we offset the content shadowSize/2 pixels up to make it more realistic.
- // this is why edge shadow shader has some extra space
- // When drawing bottom edge shadow, we use that extra space.
- mEdgeShadowPaint.setShader(new LinearGradient(0, -mCornerRadius + mShadowSize, 0,
- -mCornerRadius - mShadowSize,
- new int[]{mShadowStartColor, mShadowStartColor, mShadowEndColor},
- new float[]{0f, .5f, 1f}, Shader.TileMode.CLAMP));
- }
-
- private void buildComponents(Rect bounds) {
- // Card is offset SHADOW_MULTIPLIER * maxShadowSize to account for the shadow shift.
- // We could have different top-bottom offsets to avoid extra gap above but in that case
- // center aligning Views inside the CardView would be problematic.
- final float verticalOffset = mMaxShadowSize * SHADOW_MULTIPLIER;
- mCardBounds.set(bounds.left + mMaxShadowSize, bounds.top + verticalOffset,
- bounds.right - mMaxShadowSize, bounds.bottom - verticalOffset);
- buildShadowCorners();
- }
-
- float getMinWidth() {
- final float content = 2 *
- Math.max(mRawMaxShadowSize, mCornerRadius + mInsetShadow + mRawMaxShadowSize / 2);
- return content + (mRawMaxShadowSize + mInsetShadow) * 2;
- }
-
- float getMinHeight() {
- final float content = 2 * Math.max(mRawMaxShadowSize, mCornerRadius + mInsetShadow
- + mRawMaxShadowSize * SHADOW_MULTIPLIER / 2);
- return content + (mRawMaxShadowSize * SHADOW_MULTIPLIER + mInsetShadow) * 2;
- }
-} \ No newline at end of file
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/FixedSizeFrameLayout.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/FixedSizeFrameLayout.java
deleted file mode 100644
index 471df6ae41fa..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/FixedSizeFrameLayout.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.views;
-
-import android.content.Context;
-import android.graphics.Rect;
-import android.util.AttributeSet;
-import android.widget.FrameLayout;
-
-/**
- * This is an optimized FrameLayout whose layout is completely directed by its parent, and as a
- * result, does not propagate <code>requestLayout()</code> up the view hierarchy. Instead, it will
- * relayout its children with the last known layout bounds when a layout is requested from a child
- * view.
- */
-public class FixedSizeFrameLayout extends FrameLayout {
-
- private final Rect mLayoutBounds = new Rect();
-
- public FixedSizeFrameLayout(Context context) {
- super(context);
- }
-
- public FixedSizeFrameLayout(Context context, AttributeSet attrs) {
- super(context, attrs);
- }
-
- public FixedSizeFrameLayout(Context context, AttributeSet attrs, int defStyleAttr) {
- super(context, attrs, defStyleAttr);
- }
-
- public FixedSizeFrameLayout(Context context, AttributeSet attrs, int defStyleAttr,
- int defStyleRes) {
- super(context, attrs, defStyleAttr, defStyleRes);
- }
-
- @Override
- protected final void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
- measureContents(MeasureSpec.getSize(widthMeasureSpec),
- MeasureSpec.getSize(heightMeasureSpec));
- }
-
- @Override
- protected final void onLayout(boolean changed, int left, int top, int right, int bottom) {
- mLayoutBounds.set(left, top, right, bottom);
- layoutContents(mLayoutBounds, changed);
- }
-
- @Override
- public final void requestLayout() {
- // The base ViewGroup constructor attempts to call requestLayout() before this class's
- // members are initialized so we should just propagate in that case
- if (mLayoutBounds == null || mLayoutBounds.isEmpty()) {
- super.requestLayout();
- } else {
- // If we are already laid out, then just reuse the same bounds to layout the children
- // (but not itself)
- // TODO: Investigate whether we should coalesce these to the next frame if needed
- measureContents(getMeasuredWidth(), getMeasuredHeight());
- layoutContents(mLayoutBounds, false);
- }
- }
-
- /**
- * Measures the contents of this fixed layout.
- */
- protected void measureContents(int width, int height) {
- super.onMeasure(MeasureSpec.makeMeasureSpec(width, MeasureSpec.AT_MOST),
- MeasureSpec.makeMeasureSpec(height, MeasureSpec.AT_MOST));
- }
-
- /**
- * Lays out the contents of this fixed layout.
- */
- protected void layoutContents(Rect bounds, boolean changed) {
- super.onLayout(changed, bounds.left, bounds.top, bounds.right, bounds.bottom);
-
- int width = getMeasuredWidth();
- int height = getMeasuredHeight();
- onSizeChanged(width, height, width, height);
- }
-
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/FixedSizeImageView.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/FixedSizeImageView.java
deleted file mode 100644
index d3b5e473eb7d..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/FixedSizeImageView.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.views;
-
-import android.content.Context;
-import android.graphics.drawable.BitmapDrawable;
-import android.graphics.drawable.Drawable;
-import android.util.AttributeSet;
-
-import com.android.systemui.statusbar.AlphaOptimizedImageView;
-
-/**
- * This is an optimized ImageView that does not trigger a <code>requestLayout()</code> or
- * <code>invalidate()</code> when setting the image to <code>null</code>.
- */
-public class FixedSizeImageView extends AlphaOptimizedImageView {
-
- private boolean mAllowRelayout = true;
- private boolean mAllowInvalidate = true;
-
- public FixedSizeImageView(Context context) {
- this(context, null);
- }
-
- public FixedSizeImageView(Context context, AttributeSet attrs) {
- this(context, attrs, 0);
- }
-
- public FixedSizeImageView(Context context, AttributeSet attrs, int defStyleAttr) {
- this(context, attrs, defStyleAttr, 0);
- }
-
- public FixedSizeImageView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
- super(context, attrs, defStyleAttr, defStyleRes);
- }
-
- @Override
- public void requestLayout() {
- if (mAllowRelayout) {
- super.requestLayout();
- }
- }
-
- @Override
- public void invalidate() {
- if (mAllowInvalidate) {
- super.invalidate();
- }
- }
-
- @Override
- public void setImageDrawable(Drawable drawable) {
- boolean isNullBitmapDrawable = (drawable instanceof BitmapDrawable) &&
- (((BitmapDrawable) drawable).getBitmap() == null);
- if (drawable == null || isNullBitmapDrawable) {
- mAllowRelayout = false;
- mAllowInvalidate = false;
- }
- super.setImageDrawable(drawable);
- mAllowRelayout = true;
- mAllowInvalidate = true;
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/RecentsEntrancePathInterpolator.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/RecentsEntrancePathInterpolator.java
deleted file mode 100644
index e32da2d3f6be..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/RecentsEntrancePathInterpolator.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.views;
-
-import android.view.animation.PathInterpolator;
-
-/**
- * A helper interpolator to stagger the entrance animation in recents by offsetting the start time
- */
-public class RecentsEntrancePathInterpolator extends PathInterpolator {
- final float mStartOffsetFraction;
-
- /**
- * Create an interpolator for a cubic Bezier curve with an offset play time. The end points
- * <code>(0, 0)</code> and <code>(1, 1)</code> are assumed.
- *
- * @param controlX1 The x coordinate of the first control point of the cubic Bezier.
- * @param controlY1 The y coordinate of the first control point of the cubic Bezier.
- * @param controlX2 The x coordinate of the second control point of the cubic Bezier.
- * @param controlY2 The y coordinate of the second control point of the cubic Bezier.
- * @param startOffsetFraction The fraction from 0 to 1 to start the animation from
- */
- public RecentsEntrancePathInterpolator(float controlX1, float controlY1, float controlX2,
- float controlY2, float startOffsetFraction) {
- super(controlX1, controlY1, controlX2, controlY2);
- mStartOffsetFraction = startOffsetFraction;
- }
-
- @Override
- public float getInterpolation(float t) {
- return super.getInterpolation(t + mStartOffsetFraction);
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/RecentsTransitionComposer.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/RecentsTransitionComposer.java
deleted file mode 100644
index ce6631820fd8..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/RecentsTransitionComposer.java
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.views;
-
-import static android.app.WindowConfiguration.ACTIVITY_TYPE_ASSISTANT;
-import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
-import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY;
-import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_SECONDARY;
-import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED;
-
-import android.content.Context;
-import android.graphics.Bitmap;
-import android.graphics.Rect;
-import android.util.Log;
-
-import com.android.systemui.recents.LegacyRecentsImpl;
-import com.android.systemui.recents.RecentsDebugFlags;
-import com.android.systemui.shared.recents.model.Task;
-import com.android.systemui.shared.recents.view.AppTransitionAnimationSpecCompat;
-import com.android.systemui.shared.recents.view.RecentsTransition;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-/**
- * A helper class to create the transition app animation specs to/from Recents
- */
-public class RecentsTransitionComposer {
-
- private static final String TAG = "RecentsTransitionComposer";
-
- private Context mContext;
- private TaskViewTransform mTmpTransform = new TaskViewTransform();
-
- public RecentsTransitionComposer(Context context) {
- mContext = context;
- }
-
- /**
- * Composes a single animation spec for the given {@link TaskView}
- */
- private static AppTransitionAnimationSpecCompat composeAnimationSpec(TaskStackView stackView,
- TaskView taskView, TaskViewTransform transform, boolean addHeaderBitmap) {
- Bitmap b = null;
- if (addHeaderBitmap) {
- b = composeHeaderBitmap(taskView, transform);
- if (b == null) {
- return null;
- }
- }
-
- Rect taskRect = new Rect();
- transform.rect.round(taskRect);
- // Disable in for low ram devices because each task does in Recents does not have fullscreen
- // height (stackView height) and when transitioning to fullscreen app, the code below would
- // force the task thumbnail to full stackView height immediately causing the transition
- // jarring.
- if (!LegacyRecentsImpl.getConfiguration().isLowRamDevice && taskView.getTask() !=
- stackView.getStack().getFrontMostTask()) {
- taskRect.bottom = taskRect.top + stackView.getMeasuredHeight();
- }
- return new AppTransitionAnimationSpecCompat(taskView.getTask().key.id, b, taskRect);
- }
-
- /**
- * Composes the transition spec when docking a task, which includes a full task bitmap.
- */
- public List<AppTransitionAnimationSpecCompat> composeDockAnimationSpec(TaskView taskView,
- Rect bounds) {
- mTmpTransform.fillIn(taskView);
- Task task = taskView.getTask();
- Bitmap buffer = RecentsTransitionComposer.composeTaskBitmap(taskView, mTmpTransform);
- return Collections.singletonList(new AppTransitionAnimationSpecCompat(task.key.id, buffer,
- bounds));
- }
-
- /**
- * Composes the animation specs for all the tasks in the target stack.
- */
- public List<AppTransitionAnimationSpecCompat> composeAnimationSpecs(final Task task,
- final TaskStackView stackView, int windowingMode, int activityType, Rect windowRect) {
- // Calculate the offscreen task rect (for tasks that are not backed by views)
- TaskView taskView = stackView.getChildViewForTask(task);
- TaskStackLayoutAlgorithm stackLayout = stackView.getStackAlgorithm();
- Rect offscreenTaskRect = new Rect();
- stackLayout.getFrontOfStackTransform().rect.round(offscreenTaskRect);
-
- // If this is a full screen stack, the transition will be towards the single, full screen
- // task. We only need the transition spec for this task.
-
- // TODO: Sometimes targetStackId is not initialized after reboot, so we also have to
- // check for INVALID_STACK_ID (now WINDOWING_MODE_UNDEFINED)
- if (windowingMode == WINDOWING_MODE_FULLSCREEN
- || windowingMode == WINDOWING_MODE_SPLIT_SCREEN_PRIMARY
- || windowingMode == WINDOWING_MODE_SPLIT_SCREEN_SECONDARY
- || activityType == ACTIVITY_TYPE_ASSISTANT
- || windowingMode == WINDOWING_MODE_UNDEFINED) {
- List<AppTransitionAnimationSpecCompat> specs = new ArrayList<>();
- if (taskView == null) {
- specs.add(composeOffscreenAnimationSpec(task, offscreenTaskRect));
- } else {
- mTmpTransform.fillIn(taskView);
- stackLayout.transformToScreenCoordinates(mTmpTransform, windowRect);
- AppTransitionAnimationSpecCompat spec = composeAnimationSpec(stackView, taskView,
- mTmpTransform, true /* addHeaderBitmap */);
- if (spec != null) {
- specs.add(spec);
- }
- }
- return specs;
- }
- return Collections.emptyList();
- }
-
- /**
- * Composes a single animation spec for the given {@link Task}
- */
- private static AppTransitionAnimationSpecCompat composeOffscreenAnimationSpec(Task task,
- Rect taskRect) {
- return new AppTransitionAnimationSpecCompat(task.key.id, null, taskRect);
- }
-
- public static Bitmap composeTaskBitmap(TaskView taskView, TaskViewTransform transform) {
- float scale = transform.scale;
- int fromWidth = (int) (transform.rect.width() * scale);
- int fromHeight = (int) (transform.rect.height() * scale);
- if (fromWidth == 0 || fromHeight == 0) {
- Log.e(TAG, "Could not compose thumbnail for task: " + taskView.getTask() +
- " at transform: " + transform);
-
- return RecentsTransition.drawViewIntoHardwareBitmap(1, 1, null, 1f, 0x00ffffff);
- } else {
- if (RecentsDebugFlags.Static.EnableTransitionThumbnailDebugMode) {
- return RecentsTransition.drawViewIntoHardwareBitmap(fromWidth, fromHeight, null, 1f,
- 0xFFff0000);
- } else {
- return RecentsTransition.drawViewIntoHardwareBitmap(fromWidth, fromHeight, taskView,
- scale, 0);
- }
- }
- }
-
- private static Bitmap composeHeaderBitmap(TaskView taskView,
- TaskViewTransform transform) {
- float scale = transform.scale;
- int headerWidth = (int) (transform.rect.width());
- int headerHeight = (int) (taskView.mHeaderView.getMeasuredHeight() * scale);
- if (headerWidth == 0 || headerHeight == 0) {
- return null;
- }
-
- if (RecentsDebugFlags.Static.EnableTransitionThumbnailDebugMode) {
- return RecentsTransition.drawViewIntoHardwareBitmap(headerWidth, headerHeight, null, 1f,
- 0xFFff0000);
- } else {
- return RecentsTransition.drawViewIntoHardwareBitmap(headerWidth, headerHeight,
- taskView.mHeaderView, scale, 0);
- }
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/RecentsView.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/RecentsView.java
deleted file mode 100644
index e60ffba435ff..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/RecentsView.java
+++ /dev/null
@@ -1,1077 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.views;
-
-import static android.app.ActivityTaskManager.SPLIT_SCREEN_CREATE_MODE_TOP_OR_LEFT;
-
-import static com.android.systemui.statusbar.phone.StatusBar.SYSTEM_DIALOG_REASON_RECENT_APPS;
-
-import android.animation.ValueAnimator;
-import android.animation.ValueAnimator.AnimatorUpdateListener;
-import android.annotation.Nullable;
-import android.app.ActivityOptions;
-import android.content.Context;
-import android.content.res.ColorStateList;
-import android.graphics.Canvas;
-import android.graphics.Color;
-import android.graphics.Point;
-import android.graphics.PointF;
-import android.graphics.Rect;
-import android.graphics.drawable.ColorDrawable;
-import android.graphics.drawable.Drawable;
-import android.os.Handler;
-import android.util.ArraySet;
-import android.util.AttributeSet;
-import android.util.Log;
-import android.util.MathUtils;
-import android.view.LayoutInflater;
-import android.view.MotionEvent;
-import android.view.View;
-import android.view.ViewDebug;
-import android.view.ViewPropertyAnimator;
-import android.view.Window;
-import android.view.WindowInsets;
-import android.widget.FrameLayout;
-import android.widget.TextView;
-
-import com.android.internal.colorextraction.ColorExtractor;
-import com.android.internal.colorextraction.drawable.ScrimDrawable;
-import com.android.internal.logging.MetricsLogger;
-import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
-import com.android.settingslib.Utils;
-import com.android.systemui.Interpolators;
-import com.android.systemui.R;
-import com.android.systemui.recents.LegacyRecentsImpl;
-import com.android.systemui.recents.RecentsActivity;
-import com.android.systemui.recents.RecentsActivityLaunchState;
-import com.android.systemui.recents.RecentsConfiguration;
-import com.android.systemui.recents.events.EventBus;
-import com.android.systemui.recents.events.activity.CancelEnterRecentsWindowAnimationEvent;
-import com.android.systemui.recents.events.activity.DismissRecentsToHomeAnimationStarted;
-import com.android.systemui.recents.events.activity.DockedFirstAnimationFrameEvent;
-import com.android.systemui.recents.events.activity.EnterRecentsWindowAnimationCompletedEvent;
-import com.android.systemui.recents.events.activity.ExitRecentsWindowFirstAnimationFrameEvent;
-import com.android.systemui.recents.events.activity.HideStackActionButtonEvent;
-import com.android.systemui.recents.events.activity.LaunchTaskEvent;
-import com.android.systemui.recents.events.activity.LaunchTaskFailedEvent;
-import com.android.systemui.recents.events.activity.LaunchTaskStartedEvent;
-import com.android.systemui.recents.events.activity.LaunchTaskSucceededEvent;
-import com.android.systemui.recents.events.activity.MultiWindowStateChangedEvent;
-import com.android.systemui.recents.events.activity.ShowEmptyViewEvent;
-import com.android.systemui.recents.events.activity.ShowStackActionButtonEvent;
-import com.android.systemui.recents.events.component.ExpandPipEvent;
-import com.android.systemui.recents.events.component.ScreenPinningRequestEvent;
-import com.android.systemui.recents.events.component.SetWaitingForTransitionStartEvent;
-import com.android.systemui.recents.events.ui.AllTaskViewsDismissedEvent;
-import com.android.systemui.recents.events.ui.DismissAllTaskViewsEvent;
-import com.android.systemui.recents.events.ui.DraggingInRecentsEndedEvent;
-import com.android.systemui.recents.events.ui.DraggingInRecentsEvent;
-import com.android.systemui.recents.events.ui.dragndrop.DragDropTargetChangedEvent;
-import com.android.systemui.recents.events.ui.dragndrop.DragEndCancelledEvent;
-import com.android.systemui.recents.events.ui.dragndrop.DragEndEvent;
-import com.android.systemui.recents.events.ui.dragndrop.DragStartEvent;
-import com.android.systemui.recents.misc.ReferenceCountedTrigger;
-import com.android.systemui.recents.misc.SystemServicesProxy;
-import com.android.systemui.recents.model.TaskStack;
-import com.android.systemui.recents.utilities.Utilities;
-import com.android.systemui.shared.recents.model.Task;
-import com.android.systemui.shared.recents.view.AppTransitionAnimationSpecCompat;
-import com.android.systemui.shared.recents.view.AppTransitionAnimationSpecsFuture;
-import com.android.systemui.shared.recents.view.RecentsTransition;
-import com.android.systemui.shared.system.ActivityManagerWrapper;
-import com.android.systemui.shared.system.ActivityOptionsCompat;
-import com.android.systemui.shared.system.WindowManagerWrapper;
-import com.android.systemui.stackdivider.WindowManagerProxy;
-import com.android.systemui.statusbar.FlingAnimationUtils;
-import com.android.systemui.statusbar.phone.ScrimController;
-
-import java.io.PrintWriter;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * This view is the the top level layout that contains TaskStacks (which are laid out according
- * to their SpaceNode bounds.
- */
-public class RecentsView extends FrameLayout {
-
- private static final String TAG = "RecentsView";
-
- private static final int DEFAULT_UPDATE_SCRIM_DURATION = 200;
-
- private static final int SHOW_STACK_ACTION_BUTTON_DURATION = 134;
- private static final int HIDE_STACK_ACTION_BUTTON_DURATION = 100;
-
- private static final int BUSY_RECENTS_TASK_COUNT = 3;
-
- private Handler mHandler;
- private TaskStackView mTaskStackView;
- private TextView mStackActionButton;
- private TextView mEmptyView;
- private final float mStackButtonShadowRadius;
- private final PointF mStackButtonShadowDistance;
- private final int mStackButtonShadowColor;
-
- private boolean mAwaitingFirstLayout = true;
-
- @ViewDebug.ExportedProperty(category="recents")
- Rect mSystemInsets = new Rect();
- private int mDividerSize;
-
- private float mBusynessFactor;
- private ScrimDrawable mBackgroundScrim;
- private ColorDrawable mMultiWindowBackgroundScrim;
- private ValueAnimator mBackgroundScrimAnimator;
- private Point mTmpDisplaySize = new Point();
-
- private final AnimatorUpdateListener mUpdateBackgroundScrimAlpha = (animation) -> {
- int alpha = (Integer) animation.getAnimatedValue();
- mBackgroundScrim.setAlpha(alpha);
- mMultiWindowBackgroundScrim.setAlpha(alpha);
- };
-
- private RecentsTransitionComposer mTransitionHelper;
- @ViewDebug.ExportedProperty(deepExport=true, prefix="touch_")
- private RecentsViewTouchHandler mTouchHandler;
- private final FlingAnimationUtils mFlingAnimationUtils;
-
- public RecentsView(Context context) {
- this(context, null);
- }
-
- public RecentsView(Context context, AttributeSet attrs) {
- this(context, attrs, 0);
- }
-
- public RecentsView(Context context, AttributeSet attrs, int defStyleAttr) {
- this(context, attrs, defStyleAttr, 0);
- }
-
- public RecentsView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
- super(context, attrs, defStyleAttr, defStyleRes);
- setWillNotDraw(false);
-
- SystemServicesProxy ssp = LegacyRecentsImpl.getSystemServices();
- mHandler = new Handler();
- mTransitionHelper = new RecentsTransitionComposer(getContext());
- mDividerSize = ssp.getDockedDividerSize(context);
- mTouchHandler = new RecentsViewTouchHandler(this);
- mFlingAnimationUtils = new FlingAnimationUtils(context, 0.3f);
- mBackgroundScrim = new ScrimDrawable();
- mMultiWindowBackgroundScrim = new ColorDrawable();
-
- LayoutInflater inflater = LayoutInflater.from(context);
- mEmptyView = (TextView) inflater.inflate(R.layout.recents_empty, this, false);
- addView(mEmptyView);
-
- if (mStackActionButton != null) {
- removeView(mStackActionButton);
- }
- mStackActionButton = (TextView) inflater.inflate(LegacyRecentsImpl.getConfiguration()
- .isLowRamDevice
- ? R.layout.recents_low_ram_stack_action_button
- : R.layout.recents_stack_action_button,
- this, false);
-
- mStackButtonShadowRadius = mStackActionButton.getShadowRadius();
- mStackButtonShadowDistance = new PointF(mStackActionButton.getShadowDx(),
- mStackActionButton.getShadowDy());
- mStackButtonShadowColor = mStackActionButton.getShadowColor();
- addView(mStackActionButton);
-
- reevaluateStyles();
- }
-
- public void reevaluateStyles() {
- int textColor = Utils.getColorAttrDefaultColor(mContext, R.attr.wallpaperTextColor);
- boolean usingDarkText = Color.luminance(textColor) < 0.5f;
-
- mEmptyView.setTextColor(textColor);
- mEmptyView.setCompoundDrawableTintList(new ColorStateList(new int[][]{
- {android.R.attr.state_enabled}}, new int[]{textColor}));
-
- if (mStackActionButton != null) {
- mStackActionButton.setTextColor(textColor);
- // Enable/disable shadow if text color is already dark.
- if (usingDarkText) {
- mStackActionButton.setShadowLayer(0, 0, 0, 0);
- } else {
- mStackActionButton.setShadowLayer(mStackButtonShadowRadius,
- mStackButtonShadowDistance.x, mStackButtonShadowDistance.y,
- mStackButtonShadowColor);
- }
- }
-
- // Let's also require dark status and nav bars if the text is dark
- int systemBarsStyle = usingDarkText ? View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR |
- View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR : 0;
-
- setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE |
- View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN |
- View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION |
- systemBarsStyle);
- }
-
- /**
- * Called from RecentsActivity when it is relaunched.
- */
- public void onReload(TaskStack stack, boolean isResumingFromVisible) {
- final RecentsConfiguration config = LegacyRecentsImpl.getConfiguration();
- final RecentsActivityLaunchState launchState = config.getLaunchState();
- final boolean isTaskStackEmpty = stack.getTaskCount() == 0;
-
- if (mTaskStackView == null) {
- isResumingFromVisible = false;
- mTaskStackView = new TaskStackView(getContext());
- mTaskStackView.setSystemInsets(mSystemInsets);
- addView(mTaskStackView);
- }
-
- // Reset the state
- mAwaitingFirstLayout = !isResumingFromVisible;
-
- // Update the stack
- mTaskStackView.onReload(isResumingFromVisible);
- updateStack(stack, true /* setStackViewTasks */);
- updateBusyness();
-
- if (isResumingFromVisible) {
- // If we are already visible, then restore the background scrim
- animateBackgroundScrim(getOpaqueScrimAlpha(), DEFAULT_UPDATE_SCRIM_DURATION);
- } else {
- // If we are already occluded by the app, then set the final background scrim alpha now.
- // Otherwise, defer until the enter animation completes to animate the scrim alpha with
- // the tasks for the home animation.
- if (launchState.launchedViaDockGesture || launchState.launchedFromApp
- || isTaskStackEmpty) {
- mBackgroundScrim.setAlpha((int) (getOpaqueScrimAlpha() * 255));
- } else {
- mBackgroundScrim.setAlpha(0);
- }
- mMultiWindowBackgroundScrim.setAlpha(mBackgroundScrim.getAlpha());
- }
- }
-
- /**
- * Called from RecentsActivity when the task stack is updated.
- */
- public void updateStack(TaskStack stack, boolean setStackViewTasks) {
- if (setStackViewTasks) {
- mTaskStackView.setTasks(stack, true /* allowNotifyStackChanges */);
- }
-
- // Update the top level view's visibilities
- if (stack.getTaskCount() > 0) {
- hideEmptyView();
- } else {
- showEmptyView(R.string.recents_empty_message);
- }
- }
-
- /**
- * Animates the scrim opacity based on how many tasks are visible.
- * Called from {@link RecentsActivity} when tasks are dismissed.
- */
- public void updateScrimOpacity() {
- if (updateBusyness()) {
- animateBackgroundScrim(getOpaqueScrimAlpha(), DEFAULT_UPDATE_SCRIM_DURATION);
- }
- }
-
- /**
- * Updates the busyness factor.
- *
- * @return True if it changed.
- */
- private boolean updateBusyness() {
- final int taskCount = mTaskStackView.getStack().getTaskCount();
- final float busyness = Math.min(taskCount, BUSY_RECENTS_TASK_COUNT)
- / (float) BUSY_RECENTS_TASK_COUNT;
- if (mBusynessFactor == busyness) {
- return false;
- } else {
- mBusynessFactor = busyness;
- return true;
- }
- }
-
- /**
- * Returns the current TaskStack.
- */
- public TaskStack getStack() {
- return mTaskStackView.getStack();
- }
-
- /**
- * Returns the window background scrim.
- */
- public void updateBackgroundScrim(Window window, boolean isInMultiWindow) {
- if (isInMultiWindow) {
- mBackgroundScrim.setCallback(null);
- window.setBackgroundDrawable(mMultiWindowBackgroundScrim);
- } else {
- mMultiWindowBackgroundScrim.setCallback(null);
- window.setBackgroundDrawable(mBackgroundScrim);
- }
- }
-
- /** Launches the focused task from the first stack if possible */
- public boolean launchFocusedTask(int logEvent) {
- if (mTaskStackView != null) {
- Task task = mTaskStackView.getFocusedTask();
- if (task != null) {
- TaskView taskView = mTaskStackView.getChildViewForTask(task);
- EventBus.getDefault().send(new LaunchTaskEvent(taskView, task, null, false));
-
- if (logEvent != 0) {
- MetricsLogger.action(getContext(), logEvent,
- task.key.getComponent().toString());
- }
- return true;
- }
- }
- return false;
- }
-
- /** Launches the task that recents was launched from if possible */
- public boolean launchPreviousTask() {
- if (LegacyRecentsImpl.getConfiguration().getLaunchState().launchedFromPipApp) {
- // If the app auto-entered PiP on the way to Recents, then just re-expand it
- EventBus.getDefault().send(new ExpandPipEvent());
- return true;
- }
-
- if (mTaskStackView != null) {
- Task task = getStack().getLaunchTarget();
- if (task != null) {
- TaskView taskView = mTaskStackView.getChildViewForTask(task);
- EventBus.getDefault().send(new LaunchTaskEvent(taskView, task, null, false));
- return true;
- }
- }
- return false;
- }
-
- /**
- * Hides the task stack and shows the empty view.
- */
- public void showEmptyView(int msgResId) {
- mTaskStackView.setVisibility(View.INVISIBLE);
- mEmptyView.setText(msgResId);
- mEmptyView.setVisibility(View.VISIBLE);
- mEmptyView.bringToFront();
- mStackActionButton.bringToFront();
- }
-
- /**
- * Shows the task stack and hides the empty view.
- */
- public void hideEmptyView() {
- mEmptyView.setVisibility(View.INVISIBLE);
- mTaskStackView.setVisibility(View.VISIBLE);
- mTaskStackView.bringToFront();
- mStackActionButton.bringToFront();
- }
-
- /**
- * Set the color of the scrim.
- *
- * @param scrimColors Colors to use.
- * @param animated Interpolate colors if true.
- */
- public void setScrimColors(ColorExtractor.GradientColors scrimColors, boolean animated) {
- mBackgroundScrim.setColor(scrimColors.getMainColor(), animated);
- int alpha = mMultiWindowBackgroundScrim.getAlpha();
- mMultiWindowBackgroundScrim.setColor(scrimColors.getMainColor());
- mMultiWindowBackgroundScrim.setAlpha(alpha);
- }
-
- @Override
- protected void onAttachedToWindow() {
- EventBus.getDefault().register(this, RecentsActivity.EVENT_BUS_PRIORITY + 1);
- EventBus.getDefault().register(mTouchHandler, RecentsActivity.EVENT_BUS_PRIORITY + 2);
- super.onAttachedToWindow();
- }
-
- @Override
- protected void onDetachedFromWindow() {
- super.onDetachedFromWindow();
- EventBus.getDefault().unregister(this);
- EventBus.getDefault().unregister(mTouchHandler);
- }
-
- /**
- * This is called with the full size of the window since we are handling our own insets.
- */
- @Override
- protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
- int width = MeasureSpec.getSize(widthMeasureSpec);
- int height = MeasureSpec.getSize(heightMeasureSpec);
-
- if (mTaskStackView.getVisibility() != GONE) {
- mTaskStackView.measure(widthMeasureSpec, heightMeasureSpec);
- }
-
- // Measure the empty view to the full size of the screen
- if (mEmptyView.getVisibility() != GONE) {
- measureChild(mEmptyView, MeasureSpec.makeMeasureSpec(width, MeasureSpec.AT_MOST),
- MeasureSpec.makeMeasureSpec(height, MeasureSpec.AT_MOST));
- }
-
- // Measure the stack action button within the constraints of the space above the stack
- Rect buttonBounds = mTaskStackView.mLayoutAlgorithm.getStackActionButtonRect();
- measureChild(mStackActionButton,
- MeasureSpec.makeMeasureSpec(buttonBounds.width(), MeasureSpec.AT_MOST),
- MeasureSpec.makeMeasureSpec(buttonBounds.height(), MeasureSpec.AT_MOST));
-
- setMeasuredDimension(width, height);
- }
-
- /**
- * This is called with the full size of the window since we are handling our own insets.
- */
- @Override
- protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
- if (mTaskStackView.getVisibility() != GONE) {
- mTaskStackView.layout(left, top, left + getMeasuredWidth(), top + getMeasuredHeight());
- }
-
- // Layout the empty view
- if (mEmptyView.getVisibility() != GONE) {
- int leftRightInsets = mSystemInsets.left + mSystemInsets.right;
- int topBottomInsets = mSystemInsets.top + mSystemInsets.bottom;
- int childWidth = mEmptyView.getMeasuredWidth();
- int childHeight = mEmptyView.getMeasuredHeight();
- int childLeft = left + mSystemInsets.left +
- Math.max(0, (right - left - leftRightInsets - childWidth)) / 2;
- int childTop = top + mSystemInsets.top +
- Math.max(0, (bottom - top - topBottomInsets - childHeight)) / 2;
- mEmptyView.layout(childLeft, childTop, childLeft + childWidth, childTop + childHeight);
- }
-
- // Needs to know the screen size since the gradient never scales up or down
- // even when bounds change.
- mContext.getDisplay().getRealSize(mTmpDisplaySize);
- mBackgroundScrim.setBounds(left, top, right, bottom);
- mMultiWindowBackgroundScrim.setBounds(0, 0, mTmpDisplaySize.x, mTmpDisplaySize.y);
-
- // Layout the stack action button such that its drawable is start-aligned with the
- // stack, vertically centered in the available space above the stack
- Rect buttonBounds = getStackActionButtonBoundsFromStackLayout();
- mStackActionButton.layout(buttonBounds.left, buttonBounds.top, buttonBounds.right,
- buttonBounds.bottom);
-
- if (mAwaitingFirstLayout) {
- mAwaitingFirstLayout = false;
- // If launched via dragging from the nav bar, then we should translate the whole view
- // down offscreen
- RecentsActivityLaunchState launchState = LegacyRecentsImpl.getConfiguration().getLaunchState();
- if (launchState.launchedViaDragGesture) {
- setTranslationY(getMeasuredHeight());
- } else {
- setTranslationY(0f);
- }
-
- if (LegacyRecentsImpl.getConfiguration().isLowRamDevice
- && mEmptyView.getVisibility() == View.VISIBLE) {
- animateEmptyView(true /* show */, null /* postAnimationTrigger */);
- }
- }
- }
-
- @Override
- public WindowInsets onApplyWindowInsets(WindowInsets insets) {
- mSystemInsets.set(insets.getSystemWindowInsetsAsRect());
- mTaskStackView.setSystemInsets(mSystemInsets);
- requestLayout();
- return insets;
- }
-
- @Override
- public boolean onInterceptTouchEvent(MotionEvent ev) {
- return mTouchHandler.onInterceptTouchEvent(ev);
- }
-
- @Override
- public boolean onTouchEvent(MotionEvent ev) {
- return mTouchHandler.onTouchEvent(ev);
- }
-
- @Override
- public void onDrawForeground(Canvas canvas) {
- super.onDrawForeground(canvas);
-
- ArrayList<DockState> visDockStates = mTouchHandler.getVisibleDockStates();
- for (int i = visDockStates.size() - 1; i >= 0; i--) {
- visDockStates.get(i).viewState.draw(canvas);
- }
- }
-
- @Override
- protected boolean verifyDrawable(Drawable who) {
- ArrayList<DockState> visDockStates = mTouchHandler.getVisibleDockStates();
- for (int i = visDockStates.size() - 1; i >= 0; i--) {
- Drawable d = visDockStates.get(i).viewState.dockAreaOverlay;
- if (d == who) {
- return true;
- }
- }
- return super.verifyDrawable(who);
- }
-
- /**** EventBus Events ****/
-
- public final void onBusEvent(LaunchTaskEvent event) {
- launchTaskFromRecents(getStack(), event.task, mTaskStackView, event.taskView,
- event.screenPinningRequested, event.targetWindowingMode, event.targetActivityType);
- if (LegacyRecentsImpl.getConfiguration().isLowRamDevice) {
- EventBus.getDefault().send(new HideStackActionButtonEvent(false /* translate */));
- }
- }
-
- public final void onBusEvent(DismissRecentsToHomeAnimationStarted event) {
- int taskViewExitToHomeDuration = TaskStackAnimationHelper.EXIT_TO_HOME_TRANSLATION_DURATION;
- // Hide the stack action button
- EventBus.getDefault().send(new HideStackActionButtonEvent());
- animateBackgroundScrim(0f, taskViewExitToHomeDuration);
-
- if (LegacyRecentsImpl.getConfiguration().isLowRamDevice) {
- animateEmptyView(false /* show */, event.getAnimationTrigger());
- }
- }
-
- public final void onBusEvent(DragStartEvent event) {
- updateVisibleDockRegions(LegacyRecentsImpl.getConfiguration().getDockStatesForCurrentOrientation(),
- true /* isDefaultDockState */, DockState.NONE.viewState.dockAreaAlpha,
- DockState.NONE.viewState.hintTextAlpha,
- true /* animateAlpha */, false /* animateBounds */);
-
- // Temporarily hide the stack action button without changing visibility
- if (mStackActionButton != null) {
- mStackActionButton.animate()
- .alpha(0f)
- .setDuration(HIDE_STACK_ACTION_BUTTON_DURATION)
- .setInterpolator(Interpolators.ALPHA_OUT)
- .start();
- }
- }
-
- public final void onBusEvent(DragDropTargetChangedEvent event) {
- if (event.dropTarget == null || !(event.dropTarget instanceof DockState)) {
- updateVisibleDockRegions(
- LegacyRecentsImpl.getConfiguration().getDockStatesForCurrentOrientation(),
- true /* isDefaultDockState */, DockState.NONE.viewState.dockAreaAlpha,
- DockState.NONE.viewState.hintTextAlpha,
- true /* animateAlpha */, true /* animateBounds */);
- } else {
- final DockState dockState = (DockState) event.dropTarget;
- updateVisibleDockRegions(new DockState[] {dockState},
- false /* isDefaultDockState */, -1, -1, true /* animateAlpha */,
- true /* animateBounds */);
- }
- if (mStackActionButton != null) {
- event.addPostAnimationCallback(new Runnable() {
- @Override
- public void run() {
- // Move the clear all button to its new position
- Rect buttonBounds = getStackActionButtonBoundsFromStackLayout();
- mStackActionButton.setLeftTopRightBottom(buttonBounds.left, buttonBounds.top,
- buttonBounds.right, buttonBounds.bottom);
- }
- });
- }
- }
-
- public final void onBusEvent(final DragEndEvent event) {
- // Handle the case where we drop onto a dock region
- if (event.dropTarget instanceof DockState) {
- final DockState dockState = (DockState) event.dropTarget;
-
- // Hide the dock region
- updateVisibleDockRegions(null, false /* isDefaultDockState */, -1, -1,
- false /* animateAlpha */, false /* animateBounds */);
-
- // We translated the view but we need to animate it back from the current layout-space
- // rect to its final layout-space rect
- Utilities.setViewFrameFromTranslation(event.taskView);
-
- final ActivityOptions options = ActivityOptionsCompat.makeSplitScreenOptions(
- dockState.createMode == SPLIT_SCREEN_CREATE_MODE_TOP_OR_LEFT);
- if (ActivityManagerWrapper.getInstance().startActivityFromRecents(event.task.key.id,
- options)) {
- final Runnable animStartedListener = () -> {
- EventBus.getDefault().send(new DockedFirstAnimationFrameEvent());
- // Remove the task and don't bother relaying out, as all the tasks
- // will be relaid out when the stack changes on the multiwindow
- // change event
- getStack().removeTask(event.task, null, true /* fromDockGesture */);
- };
- final Rect taskRect = getTaskRect(event.taskView);
- AppTransitionAnimationSpecsFuture future = new AppTransitionAnimationSpecsFuture(
- getHandler()) {
- @Override
- public List<AppTransitionAnimationSpecCompat> composeSpecs() {
- return mTransitionHelper.composeDockAnimationSpec(event.taskView, taskRect);
- }
- };
- WindowManagerWrapper.getInstance().overridePendingAppTransitionMultiThumbFuture(
- future, animStartedListener, getHandler(), true /* scaleUp */,
- getContext().getDisplayId());
- MetricsLogger.action(mContext, MetricsEvent.ACTION_WINDOW_DOCK_DRAG_DROP,
- event.task.getTopComponent().flattenToShortString());
- } else {
- EventBus.getDefault().send(new DragEndCancelledEvent(getStack(), event.task,
- event.taskView));
- }
- } else {
- // Animate the overlay alpha back to 0
- updateVisibleDockRegions(null, true /* isDefaultDockState */, -1, -1,
- true /* animateAlpha */, false /* animateBounds */);
- }
-
- // Show the stack action button again without changing visibility
- if (mStackActionButton != null) {
- mStackActionButton.animate()
- .alpha(1f)
- .setDuration(SHOW_STACK_ACTION_BUTTON_DURATION)
- .setInterpolator(Interpolators.ALPHA_IN)
- .start();
- }
- }
-
- public final void onBusEvent(final DragEndCancelledEvent event) {
- // Animate the overlay alpha back to 0
- updateVisibleDockRegions(null, true /* isDefaultDockState */, -1, -1,
- true /* animateAlpha */, false /* animateBounds */);
- }
-
- private Rect getTaskRect(TaskView taskView) {
- int[] location = taskView.getLocationOnScreen();
- int viewX = location[0];
- int viewY = location[1];
- return new Rect(viewX, viewY,
- (int) (viewX + taskView.getWidth() * taskView.getScaleX()),
- (int) (viewY + taskView.getHeight() * taskView.getScaleY()));
- }
-
- public final void onBusEvent(DraggingInRecentsEvent event) {
- if (mTaskStackView.getTaskViews().size() > 0) {
- setTranslationY(event.distanceFromTop - mTaskStackView.getTaskViews().get(0).getY());
- }
- }
-
- public final void onBusEvent(DraggingInRecentsEndedEvent event) {
- ViewPropertyAnimator animator = animate();
- if (event.velocity > mFlingAnimationUtils.getMinVelocityPxPerSecond()) {
- animator.translationY(getHeight());
- animator.withEndAction(new Runnable() {
- @Override
- public void run() {
- WindowManagerProxy.getInstance().maximizeDockedStack();
- }
- });
- mFlingAnimationUtils.apply(animator, getTranslationY(), getHeight(), event.velocity);
- } else {
- animator.translationY(0f);
- animator.setListener(null);
- mFlingAnimationUtils.apply(animator, getTranslationY(), 0, event.velocity);
- }
- animator.start();
- }
-
- public final void onBusEvent(EnterRecentsWindowAnimationCompletedEvent event) {
- RecentsActivityLaunchState launchState = LegacyRecentsImpl.getConfiguration().getLaunchState();
- if (!launchState.launchedViaDockGesture && !launchState.launchedFromApp
- && getStack().getTaskCount() > 0) {
- animateBackgroundScrim(getOpaqueScrimAlpha(),
- TaskStackAnimationHelper.ENTER_FROM_HOME_TRANSLATION_DURATION);
- }
- }
-
- public final void onBusEvent(AllTaskViewsDismissedEvent event) {
- EventBus.getDefault().send(new HideStackActionButtonEvent());
- }
-
- public final void onBusEvent(DismissAllTaskViewsEvent event) {
- SystemServicesProxy ssp = LegacyRecentsImpl.getSystemServices();
- if (!ssp.hasDockedTask()) {
- // Animate the background away only if we are dismissing Recents to home
- animateBackgroundScrim(0f, DEFAULT_UPDATE_SCRIM_DURATION);
- }
- }
-
- public final void onBusEvent(ShowStackActionButtonEvent event) {
- showStackActionButton(SHOW_STACK_ACTION_BUTTON_DURATION, event.translate);
- }
-
- public final void onBusEvent(HideStackActionButtonEvent event) {
- hideStackActionButton(HIDE_STACK_ACTION_BUTTON_DURATION, true /* translate */);
- }
-
- public final void onBusEvent(MultiWindowStateChangedEvent event) {
- updateStack(event.stack, false /* setStackViewTasks */);
- }
-
- public final void onBusEvent(ShowEmptyViewEvent event) {
- showEmptyView(R.string.recents_empty_message);
- }
-
- /**
- * Shows the stack action button.
- */
- private void showStackActionButton(final int duration, final boolean translate) {
- final ReferenceCountedTrigger postAnimationTrigger = new ReferenceCountedTrigger();
- if (mStackActionButton.getVisibility() == View.INVISIBLE) {
- mStackActionButton.setVisibility(View.VISIBLE);
- mStackActionButton.setAlpha(0f);
- if (translate) {
- mStackActionButton.setTranslationY(mStackActionButton.getMeasuredHeight() *
- (LegacyRecentsImpl.getConfiguration().isLowRamDevice ? 1 : -0.25f));
- } else {
- mStackActionButton.setTranslationY(0f);
- }
- postAnimationTrigger.addLastDecrementRunnable(new Runnable() {
- @Override
- public void run() {
- if (translate) {
- mStackActionButton.animate()
- .translationY(0f);
- }
- mStackActionButton.animate()
- .alpha(1f)
- .setDuration(duration)
- .setInterpolator(Interpolators.FAST_OUT_SLOW_IN)
- .start();
- }
- });
- }
- postAnimationTrigger.flushLastDecrementRunnables();
- }
-
- /**
- * Hides the stack action button.
- */
- private void hideStackActionButton(int duration, boolean translate) {
- final ReferenceCountedTrigger postAnimationTrigger = new ReferenceCountedTrigger();
- hideStackActionButton(duration, translate, postAnimationTrigger);
- postAnimationTrigger.flushLastDecrementRunnables();
- }
-
- /**
- * Hides the stack action button.
- */
- private void hideStackActionButton(int duration, boolean translate,
- final ReferenceCountedTrigger postAnimationTrigger) {
- if (mStackActionButton.getVisibility() == View.VISIBLE) {
- if (translate) {
- mStackActionButton.animate().translationY(mStackActionButton.getMeasuredHeight()
- * (LegacyRecentsImpl.getConfiguration().isLowRamDevice ? 1 : -0.25f));
- }
- mStackActionButton.animate()
- .alpha(0f)
- .setDuration(duration)
- .setInterpolator(Interpolators.FAST_OUT_SLOW_IN)
- .withEndAction(new Runnable() {
- @Override
- public void run() {
- mStackActionButton.setVisibility(View.INVISIBLE);
- postAnimationTrigger.decrement();
- }
- })
- .start();
- postAnimationTrigger.increment();
- }
- }
-
- /**
- * Animates a translation in the Y direction and fades in/out for empty view to show or hide it.
- * @param show whether to translate up and fade in the empty view to the center of the screen
- * @param postAnimationTrigger to keep track of the animation
- */
- private void animateEmptyView(boolean show, ReferenceCountedTrigger postAnimationTrigger) {
- float start = mTaskStackView.getStackAlgorithm().getTaskRect().height() / 4;
- mEmptyView.setTranslationY(show ? start : 0);
- mEmptyView.setAlpha(show ? 0f : 1f);
- ViewPropertyAnimator animator = mEmptyView.animate()
- .setDuration(150)
- .setInterpolator(Interpolators.FAST_OUT_SLOW_IN)
- .translationY(show ? 0 : start)
- .alpha(show ? 1f : 0f);
-
- if (postAnimationTrigger != null) {
- animator.setListener(postAnimationTrigger.decrementOnAnimationEnd());
- postAnimationTrigger.increment();
- }
- animator.start();
- }
-
- /**
- * Updates the dock region to match the specified dock state.
- */
- private void updateVisibleDockRegions(DockState[] newDockStates,
- boolean isDefaultDockState, int overrideAreaAlpha, int overrideHintAlpha,
- boolean animateAlpha, boolean animateBounds) {
- ArraySet<DockState> newDockStatesSet = Utilities.arrayToSet(newDockStates,
- new ArraySet<DockState>());
- ArrayList<DockState> visDockStates = mTouchHandler.getVisibleDockStates();
- for (int i = visDockStates.size() - 1; i >= 0; i--) {
- DockState dockState = visDockStates.get(i);
- DockState.ViewState viewState = dockState.viewState;
- if (newDockStates == null || !newDockStatesSet.contains(dockState)) {
- // This is no longer visible, so hide it
- viewState.startAnimation(null, 0, 0, TaskStackView.SLOW_SYNC_STACK_DURATION,
- Interpolators.FAST_OUT_SLOW_IN, animateAlpha, animateBounds);
- } else {
- // This state is now visible, update the bounds and show it
- int areaAlpha = overrideAreaAlpha != -1
- ? overrideAreaAlpha
- : viewState.dockAreaAlpha;
- int hintAlpha = overrideHintAlpha != -1
- ? overrideHintAlpha
- : viewState.hintTextAlpha;
- Rect bounds = isDefaultDockState
- ? dockState.getPreDockedBounds(getMeasuredWidth(), getMeasuredHeight(),
- mSystemInsets)
- : dockState.getDockedBounds(getMeasuredWidth(), getMeasuredHeight(),
- mDividerSize, mSystemInsets, getResources());
- if (viewState.dockAreaOverlay.getCallback() != this) {
- viewState.dockAreaOverlay.setCallback(this);
- viewState.dockAreaOverlay.setBounds(bounds);
- }
- viewState.startAnimation(bounds, areaAlpha, hintAlpha,
- TaskStackView.SLOW_SYNC_STACK_DURATION, Interpolators.FAST_OUT_SLOW_IN,
- animateAlpha, animateBounds);
- }
- }
- }
-
- /**
- * Scrim alpha based on how busy recents is:
- * Scrim will be {@link ScrimController#GRADIENT_SCRIM_ALPHA} when the stack is empty,
- * and {@link ScrimController#GRADIENT_SCRIM_ALPHA_BUSY} when it's full.
- *
- * @return Alpha from 0 to 1.
- */
- private float getOpaqueScrimAlpha() {
- return MathUtils.map(0, 1, ScrimController.GRADIENT_SCRIM_ALPHA,
- ScrimController.GRADIENT_SCRIM_ALPHA_BUSY, mBusynessFactor);
- }
-
- /**
- * Animates the background scrim to the given {@param alpha}.
- */
- private void animateBackgroundScrim(float alpha, int duration) {
- Utilities.cancelAnimationWithoutCallbacks(mBackgroundScrimAnimator);
- // Calculate the absolute alpha to animate from
- final int fromAlpha = mBackgroundScrim.getAlpha();
- final int toAlpha = (int) (alpha * 255);
- mBackgroundScrimAnimator = ValueAnimator.ofInt(fromAlpha, toAlpha);
- mBackgroundScrimAnimator.setDuration(duration);
- mBackgroundScrimAnimator.setInterpolator(toAlpha > fromAlpha
- ? Interpolators.ALPHA_IN
- : Interpolators.ALPHA_OUT);
- mBackgroundScrimAnimator.addUpdateListener(mUpdateBackgroundScrimAlpha);
- mBackgroundScrimAnimator.start();
- }
-
- /**
- * @return the bounds of the stack action button.
- */
- Rect getStackActionButtonBoundsFromStackLayout() {
- Rect actionButtonRect = new Rect(
- mTaskStackView.mLayoutAlgorithm.getStackActionButtonRect());
- int left, top;
- if (LegacyRecentsImpl.getConfiguration().isLowRamDevice) {
- Rect windowRect = LegacyRecentsImpl.getSystemServices().getWindowRect();
- int spaceLeft = windowRect.width() - mSystemInsets.left - mSystemInsets.right;
- left = (spaceLeft - mStackActionButton.getMeasuredWidth()) / 2 + mSystemInsets.left;
- top = windowRect.height() - (mStackActionButton.getMeasuredHeight()
- + mSystemInsets.bottom + mStackActionButton.getPaddingBottom() / 2);
- } else {
- left = isLayoutRtl()
- ? actionButtonRect.left - mStackActionButton.getPaddingLeft()
- : actionButtonRect.right + mStackActionButton.getPaddingRight()
- - mStackActionButton.getMeasuredWidth();
- top = actionButtonRect.top +
- (actionButtonRect.height() - mStackActionButton.getMeasuredHeight()) / 2;
- }
- actionButtonRect.set(left, top, left + mStackActionButton.getMeasuredWidth(),
- top + mStackActionButton.getMeasuredHeight());
- return actionButtonRect;
- }
-
- View getStackActionButton() {
- return mStackActionButton;
- }
-
- /**
- * Launches the specified {@link Task}.
- */
- public void launchTaskFromRecents(final TaskStack stack, @Nullable final Task task,
- final TaskStackView stackView, final TaskView taskView,
- final boolean screenPinningRequested, final int windowingMode, final int activityType) {
-
- final Runnable animStartedListener;
- final AppTransitionAnimationSpecsFuture transitionFuture;
- if (taskView != null) {
-
- // Fetch window rect here already in order not to be blocked on lock contention in WM
- // when the future calls it.
- final Rect windowRect = LegacyRecentsImpl.getSystemServices().getWindowRect();
- transitionFuture = new AppTransitionAnimationSpecsFuture(stackView.getHandler()) {
- @Override
- public List<AppTransitionAnimationSpecCompat> composeSpecs() {
- return mTransitionHelper.composeAnimationSpecs(task, stackView, windowingMode,
- activityType, windowRect);
- }
- };
- animStartedListener = new Runnable() {
- private boolean mHandled;
-
- @Override
- public void run() {
- if (mHandled) {
- return;
- }
- mHandled = true;
-
- // If we are launching into another task, cancel the previous task's
- // window transition
- EventBus.getDefault().send(new CancelEnterRecentsWindowAnimationEvent(task));
- EventBus.getDefault().send(new ExitRecentsWindowFirstAnimationFrameEvent());
- stackView.cancelAllTaskViewAnimations();
-
- if (screenPinningRequested) {
- // Request screen pinning after the animation runs
- mHandler.postDelayed(() -> {
- EventBus.getDefault().send(new ScreenPinningRequestEvent(mContext,
- task.key.id));
- }, 350);
- }
-
- if (!LegacyRecentsImpl.getConfiguration().isLowRamDevice) {
- // Reset the state where we are waiting for the transition to start
- EventBus.getDefault().send(new SetWaitingForTransitionStartEvent(false));
- }
- }
- };
- } else {
- // This is only the case if the task is not on screen (scrolled offscreen for example)
- transitionFuture = null;
- animStartedListener = new Runnable() {
- private boolean mHandled;
-
- @Override
- public void run() {
- if (mHandled) {
- return;
- }
- mHandled = true;
-
- // If we are launching into another task, cancel the previous task's
- // window transition
- EventBus.getDefault().send(new CancelEnterRecentsWindowAnimationEvent(task));
- EventBus.getDefault().send(new ExitRecentsWindowFirstAnimationFrameEvent());
- stackView.cancelAllTaskViewAnimations();
-
- if (!LegacyRecentsImpl.getConfiguration().isLowRamDevice) {
- // Reset the state where we are waiting for the transition to start
- EventBus.getDefault().send(new SetWaitingForTransitionStartEvent(false));
- }
- }
- };
- }
-
- EventBus.getDefault().send(new SetWaitingForTransitionStartEvent(true));
- final ActivityOptions opts = RecentsTransition.createAspectScaleAnimation(mContext,
- mHandler, true /* scaleUp */, transitionFuture != null ? transitionFuture : null,
- animStartedListener);
- if (taskView == null) {
- // If there is no task view, then we do not need to worry about animating out occluding
- // task views, and we can launch immediately
- startTaskActivity(stack, task, taskView, opts, transitionFuture,
- windowingMode, activityType);
- } else {
- LaunchTaskStartedEvent launchStartedEvent = new LaunchTaskStartedEvent(taskView,
- screenPinningRequested);
- EventBus.getDefault().send(launchStartedEvent);
- startTaskActivity(stack, task, taskView, opts, transitionFuture, windowingMode,
- activityType);
- }
- ActivityManagerWrapper.getInstance().closeSystemWindows(SYSTEM_DIALOG_REASON_RECENT_APPS);
- }
-
- /**
- * Starts the activity for the launch task.
- *
- * @param taskView this is the {@link TaskView} that we are launching from. This can be null if
- * we are toggling recents and the launch-to task is now offscreen.
- */
- private void startTaskActivity(TaskStack stack, Task task, @Nullable TaskView taskView,
- ActivityOptions opts, AppTransitionAnimationSpecsFuture transitionFuture,
- int windowingMode, int activityType) {
- ActivityManagerWrapper.getInstance().startActivityFromRecentsAsync(task.key, opts,
- windowingMode, activityType, succeeded -> {
- if (succeeded) {
- // Keep track of the index of the task launch
- int taskIndexFromFront = 0;
- int taskIndex = stack.indexOfTask(task);
- if (taskIndex > -1) {
- taskIndexFromFront = stack.getTaskCount() - taskIndex - 1;
- }
- EventBus.getDefault().send(new LaunchTaskSucceededEvent(taskIndexFromFront));
- } else {
- Log.e(TAG, mContext.getString(R.string.recents_launch_error_message, task.title));
-
- // Dismiss the task if we fail to launch it
- if (taskView != null) {
- taskView.dismissTask();
- }
-
- // Keep track of failed launches
- EventBus.getDefault().send(new LaunchTaskFailedEvent());
- }
- }, getHandler());
- if (transitionFuture != null) {
- mHandler.post(transitionFuture::composeSpecsSynchronous);
- }
- }
-
- @Override
- public void requestDisallowInterceptTouchEvent(boolean disallowIntercept) {
- super.requestDisallowInterceptTouchEvent(disallowIntercept);
- mTouchHandler.cancelStackActionButtonClick();
- }
-
- public void dump(String prefix, PrintWriter writer) {
- String innerPrefix = prefix + " ";
- String id = Integer.toHexString(System.identityHashCode(this));
-
- writer.print(prefix); writer.print(TAG);
- writer.print(" awaitingFirstLayout="); writer.print(mAwaitingFirstLayout ? "Y" : "N");
- writer.print(" insets="); writer.print(Utilities.dumpRect(mSystemInsets));
- writer.print(" [0x"); writer.print(id); writer.print("]");
- writer.println();
-
- if (getStack() != null) {
- getStack().dump(innerPrefix, writer);
- }
- if (mTaskStackView != null) {
- mTaskStackView.dump(innerPrefix, writer);
- }
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/RecentsViewTouchHandler.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/RecentsViewTouchHandler.java
deleted file mode 100644
index 1a827d5941c0..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/RecentsViewTouchHandler.java
+++ /dev/null
@@ -1,286 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.views;
-
-import android.app.ActivityTaskManager;
-import android.graphics.Point;
-import android.graphics.Rect;
-import android.view.InputDevice;
-import android.view.MotionEvent;
-import android.view.PointerIcon;
-import android.view.View;
-import android.view.ViewConfiguration;
-import android.view.ViewDebug;
-
-import com.android.internal.policy.DividerSnapAlgorithm;
-import com.android.systemui.recents.LegacyRecentsImpl;
-import com.android.systemui.recents.events.EventBus;
-import com.android.systemui.recents.events.activity.ConfigurationChangedEvent;
-import com.android.systemui.recents.events.activity.HideRecentsEvent;
-import com.android.systemui.recents.events.ui.DismissAllTaskViewsEvent;
-import com.android.systemui.recents.events.ui.HideIncompatibleAppOverlayEvent;
-import com.android.systemui.recents.events.ui.ShowIncompatibleAppOverlayEvent;
-import com.android.systemui.recents.events.ui.dragndrop.DragDropTargetChangedEvent;
-import com.android.systemui.recents.events.ui.dragndrop.DragEndEvent;
-import com.android.systemui.recents.events.ui.dragndrop.DragStartEvent;
-import com.android.systemui.recents.events.ui.dragndrop.DragStartInitializeDropTargetsEvent;
-import com.android.systemui.recents.misc.SystemServicesProxy;
-import com.android.systemui.shared.recents.model.Task;
-
-import java.util.ArrayList;
-
-/**
- * Handles touch events for a RecentsView.
- */
-public class RecentsViewTouchHandler {
-
- private RecentsView mRv;
-
- @ViewDebug.ExportedProperty(deepExport=true, prefix="drag_task")
- private Task mDragTask;
- @ViewDebug.ExportedProperty(deepExport=true, prefix="drag_task_view_")
- private TaskView mTaskView;
-
- @ViewDebug.ExportedProperty(category="recents")
- private Point mTaskViewOffset = new Point();
- @ViewDebug.ExportedProperty(category="recents")
- private Point mDownPos = new Point();
- @ViewDebug.ExportedProperty(category="recents")
- private boolean mDragRequested;
- @ViewDebug.ExportedProperty(category="recents")
- private boolean mIsDragging;
- private float mDragSlop;
- private int mDeviceId = -1;
-
- private DropTarget mLastDropTarget;
- private DividerSnapAlgorithm mDividerSnapAlgorithm;
- private ArrayList<DropTarget> mDropTargets = new ArrayList<>();
- private ArrayList<DockState> mVisibleDockStates = new ArrayList<>();
-
- public RecentsViewTouchHandler(RecentsView rv) {
- mRv = rv;
- mDragSlop = ViewConfiguration.get(rv.getContext()).getScaledTouchSlop();
- updateSnapAlgorithm();
- }
-
- private void updateSnapAlgorithm() {
- Rect insets = new Rect();
- SystemServicesProxy.getInstance(mRv.getContext()).getStableInsets(insets);
- mDividerSnapAlgorithm = DividerSnapAlgorithm.create(mRv.getContext(), insets);
- }
-
- /**
- * Registers a new drop target for the current drag only.
- */
- public void registerDropTargetForCurrentDrag(DropTarget target) {
- mDropTargets.add(target);
- }
-
- /**
- * Returns the set of visible dock states for this current drag.
- */
- public ArrayList<DockState> getVisibleDockStates() {
- return mVisibleDockStates;
- }
-
- /** Touch preprocessing for handling below */
- public boolean onInterceptTouchEvent(MotionEvent ev) {
- return handleTouchEvent(ev) || mDragRequested;
- }
-
- /** Handles touch events once we have intercepted them */
- public boolean onTouchEvent(MotionEvent ev) {
- handleTouchEvent(ev);
- if (ev.getAction() == MotionEvent.ACTION_UP && mRv.getStack().getTaskCount() == 0) {
- EventBus.getDefault().send(new HideRecentsEvent(false, true));
- }
- return true;
- }
-
- /**** Events ****/
-
- public final void onBusEvent(DragStartEvent event) {
- SystemServicesProxy ssp = LegacyRecentsImpl.getSystemServices();
- mRv.getParent().requestDisallowInterceptTouchEvent(true);
- mDragRequested = true;
- // We defer starting the actual drag handling until the user moves past the drag slop
- mIsDragging = false;
- mDragTask = event.task;
- mTaskView = event.taskView;
- mDropTargets.clear();
-
- int[] recentsViewLocation = new int[2];
- mRv.getLocationInWindow(recentsViewLocation);
- mTaskViewOffset.set(mTaskView.getLeft() - recentsViewLocation[0] + event.tlOffset.x,
- mTaskView.getTop() - recentsViewLocation[1] + event.tlOffset.y);
-
- // Change space coordinates relative to the view to RecentsView when user initiates a touch
- if (event.isUserTouchInitiated) {
- float x = mDownPos.x - mTaskViewOffset.x;
- float y = mDownPos.y - mTaskViewOffset.y;
- mTaskView.setTranslationX(x);
- mTaskView.setTranslationY(y);
- }
-
- mVisibleDockStates.clear();
- if (ActivityTaskManager.supportsMultiWindow(mRv.getContext()) && !ssp.hasDockedTask()
- && mDividerSnapAlgorithm.isSplitScreenFeasible()) {
- LegacyRecentsImpl.logDockAttempt(mRv.getContext(), event.task.getTopComponent(),
- event.task.resizeMode);
- if (!event.task.isDockable) {
- EventBus.getDefault().send(new ShowIncompatibleAppOverlayEvent());
- } else {
- // Add the dock state drop targets (these take priority)
- DockState[] dockStates = LegacyRecentsImpl.getConfiguration()
- .getDockStatesForCurrentOrientation();
- for (DockState dockState : dockStates) {
- registerDropTargetForCurrentDrag(dockState);
- dockState.update(mRv.getContext());
- mVisibleDockStates.add(dockState);
- }
- }
- }
-
- // Request other drop targets to register themselves
- EventBus.getDefault().send(new DragStartInitializeDropTargetsEvent(event.task,
- event.taskView, this));
- if (mDeviceId != -1) {
- InputDevice device = InputDevice.getDevice(mDeviceId);
- if (device != null) {
- device.setPointerType(PointerIcon.TYPE_GRABBING);
- }
- }
- }
-
- public final void onBusEvent(DragEndEvent event) {
- if (!mDragTask.isDockable) {
- EventBus.getDefault().send(new HideIncompatibleAppOverlayEvent());
- }
- mDragRequested = false;
- mDragTask = null;
- mTaskView = null;
- mLastDropTarget = null;
- }
-
- public final void onBusEvent(ConfigurationChangedEvent event) {
- if (event.fromDisplayDensityChange || event.fromDeviceOrientationChange) {
- updateSnapAlgorithm();
- }
- }
-
- void cancelStackActionButtonClick() {
- mRv.getStackActionButton().setPressed(false);
- }
-
- private boolean isWithinStackActionButton(float x, float y) {
- Rect rect = mRv.getStackActionButtonBoundsFromStackLayout();
- return mRv.getStackActionButton().getVisibility() == View.VISIBLE &&
- mRv.getStackActionButton().pointInView(x - rect.left, y - rect.top, 0 /* slop */);
- }
-
- private void changeStackActionButtonDrawableHotspot(float x, float y) {
- Rect rect = mRv.getStackActionButtonBoundsFromStackLayout();
- mRv.getStackActionButton().drawableHotspotChanged(x - rect.left, y - rect.top);
- }
-
- /**
- * Handles dragging touch events
- */
- private boolean handleTouchEvent(MotionEvent ev) {
- int action = ev.getActionMasked();
- boolean consumed = false;
- float evX = ev.getX();
- float evY = ev.getY();
- switch (action) {
- case MotionEvent.ACTION_DOWN:
- mDownPos.set((int) evX, (int) evY);
- mDeviceId = ev.getDeviceId();
-
- if (isWithinStackActionButton(evX, evY)) {
- changeStackActionButtonDrawableHotspot(evX, evY);
- mRv.getStackActionButton().setPressed(true);
- }
- break;
- case MotionEvent.ACTION_MOVE: {
- float x = evX - mTaskViewOffset.x;
- float y = evY - mTaskViewOffset.y;
-
- if (mRv.getStackActionButton().isPressed() && isWithinStackActionButton(evX, evY)) {
- changeStackActionButtonDrawableHotspot(evX, evY);
- }
-
- if (mDragRequested) {
- if (!mIsDragging) {
- mIsDragging = Math.hypot(evX - mDownPos.x, evY - mDownPos.y) > mDragSlop;
- }
- if (mIsDragging) {
- int width = mRv.getMeasuredWidth();
- int height = mRv.getMeasuredHeight();
-
- DropTarget currentDropTarget = null;
-
- // Give priority to the current drop target to retain the touch handling
- if (mLastDropTarget != null) {
- if (mLastDropTarget.acceptsDrop((int) evX, (int) evY, width, height,
- mRv.mSystemInsets, true /* isCurrentTarget */)) {
- currentDropTarget = mLastDropTarget;
- }
- }
-
- // Otherwise, find the next target to handle this event
- if (currentDropTarget == null) {
- for (DropTarget target : mDropTargets) {
- if (target.acceptsDrop((int) evX, (int) evY, width, height,
- mRv.mSystemInsets, false /* isCurrentTarget */)) {
- currentDropTarget = target;
- break;
- }
- }
- }
- if (mLastDropTarget != currentDropTarget) {
- mLastDropTarget = currentDropTarget;
- EventBus.getDefault().send(new DragDropTargetChangedEvent(mDragTask,
- currentDropTarget));
- }
- }
- mTaskView.setTranslationX(x);
- mTaskView.setTranslationY(y);
- }
- break;
- }
- case MotionEvent.ACTION_UP:
- case MotionEvent.ACTION_CANCEL: {
- if (mRv.getStackActionButton().isPressed() && isWithinStackActionButton(evX, evY)) {
- EventBus.getDefault().send(new DismissAllTaskViewsEvent());
- consumed = true;
- }
- cancelStackActionButtonClick();
- if (mDragRequested) {
- boolean cancelled = action == MotionEvent.ACTION_CANCEL;
- if (cancelled) {
- EventBus.getDefault().send(new DragDropTargetChangedEvent(mDragTask, null));
- }
- EventBus.getDefault().send(new DragEndEvent(mDragTask, mTaskView,
- !cancelled ? mLastDropTarget : null));
- break;
- }
- mDeviceId = -1;
- }
- }
- return consumed;
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/SystemBarScrimViews.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/SystemBarScrimViews.java
deleted file mode 100644
index 22c12b408a13..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/SystemBarScrimViews.java
+++ /dev/null
@@ -1,194 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.views;
-
-import android.content.Context;
-import android.view.View;
-
-import com.android.systemui.Interpolators;
-import com.android.systemui.R;
-import com.android.systemui.recents.LegacyRecentsImpl;
-import com.android.systemui.recents.RecentsActivity;
-import com.android.systemui.recents.events.activity.ConfigurationChangedEvent;
-import com.android.systemui.recents.events.activity.DismissRecentsToHomeAnimationStarted;
-import com.android.systemui.recents.events.activity.EnterRecentsWindowAnimationCompletedEvent;
-import com.android.systemui.recents.events.ui.DismissAllTaskViewsEvent;
-import com.android.systemui.recents.events.activity.MultiWindowStateChangedEvent;
-import com.android.systemui.recents.events.ui.dragndrop.DragEndCancelledEvent;
-import com.android.systemui.recents.events.ui.dragndrop.DragEndEvent;
-import com.android.systemui.recents.utilities.AnimationProps;
-
-/** Manages the scrims for the various system bars. */
-public class SystemBarScrimViews {
-
- private static final int DEFAULT_ANIMATION_DURATION = 150;
-
- private Context mContext;
-
- private View mNavBarScrimView;
-
- private boolean mHasNavBarScrim;
- private boolean mShouldAnimateNavBarScrim;
- private boolean mHasTransposedNavBar;
- private boolean mHasDockedTasks;
- private int mNavBarScrimEnterDuration;
-
- public SystemBarScrimViews(RecentsActivity activity) {
- mContext = activity;
- mNavBarScrimView = activity.findViewById(R.id.nav_bar_scrim);
- mNavBarScrimView.forceHasOverlappingRendering(false);
- mNavBarScrimEnterDuration = activity.getResources().getInteger(
- R.integer.recents_nav_bar_scrim_enter_duration);
- mHasNavBarScrim = LegacyRecentsImpl.getSystemServices().hasTransposedNavigationBar();
- mHasDockedTasks = LegacyRecentsImpl.getSystemServices().hasDockedTask();
- }
-
- /**
- * Updates the nav bar scrim.
- */
- public void updateNavBarScrim(boolean animateNavBarScrim, boolean hasStackTasks,
- AnimationProps animation) {
- prepareEnterRecentsAnimation(isNavBarScrimRequired(hasStackTasks), animateNavBarScrim);
- if (animateNavBarScrim && animation != null) {
- animateNavBarScrimVisibility(true, animation);
- }
- }
-
- /**
- * Prepares the scrim views for animating when entering Recents. This will be called before
- * the first draw, unless we are updating the scrim on configuration change.
- */
- private void prepareEnterRecentsAnimation(boolean hasNavBarScrim, boolean animateNavBarScrim) {
- mHasNavBarScrim = hasNavBarScrim;
- mShouldAnimateNavBarScrim = animateNavBarScrim;
-
- mNavBarScrimView.setVisibility(mHasNavBarScrim && !mShouldAnimateNavBarScrim ?
- View.VISIBLE : View.INVISIBLE);
- }
-
- /**
- * Animates the nav bar scrim visibility.
- */
- private void animateNavBarScrimVisibility(boolean visible, AnimationProps animation) {
- int toY = 0;
- if (visible) {
- mNavBarScrimView.setVisibility(View.VISIBLE);
- mNavBarScrimView.setTranslationY(mNavBarScrimView.getMeasuredHeight());
- } else {
- toY = mNavBarScrimView.getMeasuredHeight();
- }
- if (animation != AnimationProps.IMMEDIATE) {
- mNavBarScrimView.animate()
- .translationY(toY)
- .setDuration(animation.getDuration(AnimationProps.BOUNDS))
- .setInterpolator(animation.getInterpolator(AnimationProps.BOUNDS))
- .start();
- } else {
- mNavBarScrimView.setTranslationY(toY);
- }
- }
-
- /**
- * @return Whether to show the nav bar scrim.
- */
- private boolean isNavBarScrimRequired(boolean hasStackTasks) {
- return hasStackTasks && !mHasTransposedNavBar && !mHasDockedTasks;
- }
-
- /**** EventBus events ****/
-
- /**
- * Starts animating the scrim views when entering Recents.
- */
- public final void onBusEvent(EnterRecentsWindowAnimationCompletedEvent event) {
- if (mHasNavBarScrim) {
- AnimationProps animation = mShouldAnimateNavBarScrim
- ? new AnimationProps()
- .setDuration(AnimationProps.BOUNDS, mNavBarScrimEnterDuration)
- .setInterpolator(AnimationProps.BOUNDS, Interpolators.DECELERATE_QUINT)
- : AnimationProps.IMMEDIATE;
- animateNavBarScrimVisibility(true, animation);
- }
- }
-
- /**
- * Starts animating the scrim views when leaving Recents (either via launching a task, or
- * going home).
- */
- public final void onBusEvent(DismissRecentsToHomeAnimationStarted event) {
- if (mHasNavBarScrim) {
- AnimationProps animation = createBoundsAnimation(
- TaskStackAnimationHelper.EXIT_TO_HOME_TRANSLATION_DURATION);
- animateNavBarScrimVisibility(false, animation);
- }
- }
-
- public final void onBusEvent(DismissAllTaskViewsEvent event) {
- if (mHasNavBarScrim) {
- AnimationProps animation = createBoundsAnimation(
- TaskStackAnimationHelper.EXIT_TO_HOME_TRANSLATION_DURATION);
- animateNavBarScrimVisibility(false, animation);
- }
- }
-
- public final void onBusEvent(ConfigurationChangedEvent event) {
- if (event.fromDeviceOrientationChange) {
- mHasNavBarScrim = LegacyRecentsImpl.getSystemServices().hasTransposedNavigationBar();
- }
- animateScrimToCurrentNavBarState(event.hasStackTasks);
- }
-
- public final void onBusEvent(MultiWindowStateChangedEvent event) {
- mHasDockedTasks = event.inMultiWindow;
- animateScrimToCurrentNavBarState(event.stack.getTaskCount() > 0);
- }
-
- public final void onBusEvent(final DragEndEvent event) {
- // Hide the nav bar scrims once we drop to a dock region
- if (event.dropTarget instanceof DockState) {
- animateScrimToCurrentNavBarState(false /* hasStackTasks */);
- }
- }
-
- public final void onBusEvent(final DragEndCancelledEvent event) {
- // Restore the scrims to the normal state
- animateScrimToCurrentNavBarState(event.stack.getTaskCount() > 0);
- }
-
- /**
- * Animates the scrim to match the state of the current nav bar.
- */
- private void animateScrimToCurrentNavBarState(boolean hasStackTasks) {
- boolean hasNavBarScrim = isNavBarScrimRequired(hasStackTasks);
- if (mHasNavBarScrim != hasNavBarScrim) {
- AnimationProps animation = hasNavBarScrim
- ? createBoundsAnimation(DEFAULT_ANIMATION_DURATION)
- : AnimationProps.IMMEDIATE;
- animateNavBarScrimVisibility(hasNavBarScrim, animation);
- }
- mHasNavBarScrim = hasNavBarScrim;
- }
-
- /**
- * @return a default animation to aniamte the bounds of the scrim.
- */
- private AnimationProps createBoundsAnimation(int duration) {
- return new AnimationProps()
- .setDuration(AnimationProps.BOUNDS, duration)
- .setInterpolator(AnimationProps.BOUNDS, Interpolators.FAST_OUT_SLOW_IN);
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/TaskStackAnimationHelper.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/TaskStackAnimationHelper.java
deleted file mode 100644
index 55749348b004..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/TaskStackAnimationHelper.java
+++ /dev/null
@@ -1,705 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.views;
-
-import android.animation.Animator;
-import android.animation.AnimatorListenerAdapter;
-import android.animation.ValueAnimator;
-import android.content.Context;
-import android.content.res.Configuration;
-import android.content.res.Resources;
-import android.util.Log;
-import android.view.animation.Interpolator;
-import android.view.animation.PathInterpolator;
-
-import com.android.systemui.Interpolators;
-import com.android.systemui.R;
-import com.android.systemui.recents.LegacyRecentsImpl;
-import com.android.systemui.recents.RecentsActivityLaunchState;
-import com.android.systemui.recents.RecentsConfiguration;
-import com.android.systemui.recents.RecentsDebugFlags;
-import com.android.systemui.recents.events.EventBus;
-import com.android.systemui.recents.events.component.SetWaitingForTransitionStartEvent;
-import com.android.systemui.recents.misc.ReferenceCountedTrigger;
-import com.android.systemui.shared.recents.model.Task;
-import com.android.systemui.recents.model.TaskStack;
-import com.android.systemui.recents.views.lowram.TaskStackLowRamLayoutAlgorithm;
-import com.android.systemui.recents.utilities.AnimationProps;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * A helper class to create task view animations for {@link TaskView}s in a {@link TaskStackView},
- * but not the contents of the {@link TaskView}s.
- */
-public class TaskStackAnimationHelper {
-
- /**
- * Callbacks from the helper to coordinate view-content animations with view animations.
- */
- public interface Callbacks {
- /**
- * Callback to prepare for the start animation for the launch target {@link TaskView}.
- */
- void onPrepareLaunchTargetForEnterAnimation();
-
- /**
- * Callback to start the animation for the launch target {@link TaskView}.
- */
- void onStartLaunchTargetEnterAnimation(TaskViewTransform transform, int duration,
- boolean screenPinningEnabled, ReferenceCountedTrigger postAnimationTrigger);
-
- /**
- * Callback to start the animation for the launch target {@link TaskView} when it is
- * launched from Recents.
- */
- void onStartLaunchTargetLaunchAnimation(int duration, boolean screenPinningRequested,
- ReferenceCountedTrigger postAnimationTrigger);
-
- /**
- * Callback to start the animation for the front {@link TaskView} if there is no launch
- * target.
- */
- void onStartFrontTaskEnterAnimation(boolean screenPinningEnabled);
- }
-
- private static final int DOUBLE_FRAME_OFFSET_MS = 33;
- private static final int FRAME_OFFSET_MS = 16;
-
- private static final int ENTER_EXIT_NUM_ANIMATING_TASKS = 5;
-
- private static final int ENTER_FROM_HOME_ALPHA_DURATION = 100;
- public static final int ENTER_FROM_HOME_TRANSLATION_DURATION = 300;
- private static final Interpolator ENTER_FROM_HOME_ALPHA_INTERPOLATOR = Interpolators.LINEAR;
-
- public static final int EXIT_TO_HOME_TRANSLATION_DURATION = 200;
- private static final Interpolator EXIT_TO_HOME_TRANSLATION_INTERPOLATOR =
- new PathInterpolator(0.4f, 0, 0.6f, 1f);
-
- private static final int DISMISS_TASK_DURATION = 175;
- private static final int DISMISS_ALL_TASKS_DURATION = 200;
- private static final Interpolator DISMISS_ALL_TRANSLATION_INTERPOLATOR =
- new PathInterpolator(0.4f, 0, 1f, 1f);
-
- private static final Interpolator FOCUS_NEXT_TASK_INTERPOLATOR =
- new PathInterpolator(0.4f, 0, 0, 1f);
- private static final Interpolator FOCUS_IN_FRONT_NEXT_TASK_INTERPOLATOR =
- new PathInterpolator(0, 0, 0, 1f);
- private static final Interpolator FOCUS_BEHIND_NEXT_TASK_INTERPOLATOR =
- Interpolators.LINEAR_OUT_SLOW_IN;
-
- private static final Interpolator ENTER_WHILE_DOCKING_INTERPOLATOR =
- Interpolators.LINEAR_OUT_SLOW_IN;
-
- private final int mEnterAndExitFromHomeTranslationOffset;
- private TaskStackView mStackView;
-
- private TaskViewTransform mTmpTransform = new TaskViewTransform();
- private ArrayList<TaskViewTransform> mTmpCurrentTaskTransforms = new ArrayList<>();
- private ArrayList<TaskViewTransform> mTmpFinalTaskTransforms = new ArrayList<>();
-
- public TaskStackAnimationHelper(Context context, TaskStackView stackView) {
- mStackView = stackView;
- mEnterAndExitFromHomeTranslationOffset = LegacyRecentsImpl.getConfiguration().isGridEnabled
- ? 0 : DOUBLE_FRAME_OFFSET_MS;
- }
-
- /**
- * Prepares the stack views and puts them in their initial animation state while visible, before
- * the in-app enter animations start (after the window-transition completes).
- */
- public void prepareForEnterAnimation() {
- RecentsConfiguration config = LegacyRecentsImpl.getConfiguration();
- RecentsActivityLaunchState launchState = config.getLaunchState();
- Resources res = mStackView.getResources();
- Resources appResources = mStackView.getContext().getApplicationContext().getResources();
-
- TaskStackLayoutAlgorithm stackLayout = mStackView.getStackAlgorithm();
- TaskStackViewScroller stackScroller = mStackView.getScroller();
- TaskStack stack = mStackView.getStack();
- Task launchTargetTask = stack.getLaunchTarget();
-
- // Break early if there are no tasks
- if (stack.getTaskCount() == 0) {
- return;
- }
-
- int offscreenYOffset = stackLayout.mStackRect.height();
- int taskViewAffiliateGroupEnterOffset = res.getDimensionPixelSize(
- R.dimen.recents_task_stack_animation_affiliate_enter_offset);
- int launchedWhileDockingOffset = res.getDimensionPixelSize(
- R.dimen.recents_task_stack_animation_launched_while_docking_offset);
- boolean isLandscape = appResources.getConfiguration().orientation
- == Configuration.ORIENTATION_LANDSCAPE;
-
- float top = 0;
- final boolean isLowRamDevice = LegacyRecentsImpl.getConfiguration().isLowRamDevice;
- if (isLowRamDevice && launchState.launchedFromApp && !launchState.launchedViaDockGesture) {
- stackLayout.getStackTransform(launchTargetTask, stackScroller.getStackScroll(),
- mTmpTransform, null /* frontTransform */);
- top = mTmpTransform.rect.top;
- }
-
- // Prepare each of the task views for their enter animation from front to back
- List<TaskView> taskViews = mStackView.getTaskViews();
- for (int i = taskViews.size() - 1; i >= 0; i--) {
- TaskView tv = taskViews.get(i);
- Task task = tv.getTask();
-
- // Get the current transform for the task, which will be used to position it offscreen
- stackLayout.getStackTransform(task, stackScroller.getStackScroll(), mTmpTransform,
- null);
-
- if (launchState.launchedFromApp && !launchState.launchedViaDockGesture) {
- if (task.isLaunchTarget) {
- tv.onPrepareLaunchTargetForEnterAnimation();
- } else if (isLowRamDevice && i >= taskViews.size() -
- (TaskStackLowRamLayoutAlgorithm.MAX_LAYOUT_TASK_COUNT + 1)
- && !RecentsDebugFlags.Static.DisableRecentsLowRamEnterExitAnimation) {
- // Move the last 2nd and 3rd last tasks in-app animation to match the motion of
- // the last task's app transition
- stackLayout.getStackTransform(task, stackScroller.getStackScroll(),
- mTmpTransform, null);
- mTmpTransform.rect.offset(0, -top);
- mTmpTransform.alpha = 0f;
- mStackView.updateTaskViewToTransform(tv, mTmpTransform,
- AnimationProps.IMMEDIATE);
- stackLayout.getStackTransform(task, stackScroller.getStackScroll(),
- mTmpTransform, null);
- mTmpTransform.alpha = 1f;
- // Duration see {@link
- // com.android.server.wm.AppTransition#DEFAULT_APP_TRANSITION_DURATION}
- mStackView.updateTaskViewToTransform(tv, mTmpTransform,
- new AnimationProps(336, Interpolators.FAST_OUT_SLOW_IN));
- }
- } else if (launchState.launchedFromHome) {
- if (isLowRamDevice) {
- mTmpTransform.rect.offset(0, stackLayout.getTaskRect().height() / 4);
- } else {
- // Move the task view off screen (below) so we can animate it in
- mTmpTransform.rect.offset(0, offscreenYOffset);
- }
- mTmpTransform.alpha = 0f;
- mStackView.updateTaskViewToTransform(tv, mTmpTransform, AnimationProps.IMMEDIATE);
- } else if (launchState.launchedViaDockGesture) {
- int offset = isLandscape
- ? launchedWhileDockingOffset
- : (int) (offscreenYOffset * 0.9f);
- mTmpTransform.rect.offset(0, offset);
- mTmpTransform.alpha = 0f;
- mStackView.updateTaskViewToTransform(tv, mTmpTransform, AnimationProps.IMMEDIATE);
- }
- }
- }
-
- /**
- * Starts the in-app enter animation, which animates the {@link TaskView}s to their final places
- * depending on how Recents was triggered.
- */
- public void startEnterAnimation(final ReferenceCountedTrigger postAnimationTrigger) {
- RecentsConfiguration config = LegacyRecentsImpl.getConfiguration();
- RecentsActivityLaunchState launchState = config.getLaunchState();
- Resources res = mStackView.getResources();
- Resources appRes = mStackView.getContext().getApplicationContext().getResources();
-
- TaskStackLayoutAlgorithm stackLayout = mStackView.getStackAlgorithm();
- TaskStackViewScroller stackScroller = mStackView.getScroller();
- TaskStack stack = mStackView.getStack();
- Task launchTargetTask = stack.getLaunchTarget();
-
- // Break early if there are no tasks
- if (stack.getTaskCount() == 0) {
- return;
- }
-
- final boolean isLowRamDevice = LegacyRecentsImpl.getConfiguration().isLowRamDevice;
- int taskViewEnterFromAppDuration = res.getInteger(
- R.integer.recents_task_enter_from_app_duration);
- int taskViewEnterFromAffiliatedAppDuration = res.getInteger(
- R.integer.recents_task_enter_from_affiliated_app_duration);
- int dockGestureAnimDuration = appRes.getInteger(
- R.integer.long_press_dock_anim_duration);
-
- // Since low ram devices have an animation when entering app -> recents, do not allow
- // toggle until the animation is complete
- if (launchState.launchedFromApp && !launchState.launchedViaDockGesture && isLowRamDevice) {
- postAnimationTrigger.addLastDecrementRunnable(() -> EventBus.getDefault()
- .send(new SetWaitingForTransitionStartEvent(false)));
- }
-
- // Create enter animations for each of the views from front to back
- List<TaskView> taskViews = mStackView.getTaskViews();
- int taskViewCount = taskViews.size();
- for (int i = taskViewCount - 1; i >= 0; i--) {
- int taskIndexFromFront = taskViewCount - i - 1;
- int taskIndexFromBack = i;
- final TaskView tv = taskViews.get(i);
- Task task = tv.getTask();
-
- // Get the current transform for the task, which will be updated to the final transform
- // to animate to depending on how recents was invoked
- stackLayout.getStackTransform(task, stackScroller.getStackScroll(), mTmpTransform,
- null);
-
- if (launchState.launchedFromApp && !launchState.launchedViaDockGesture) {
- if (task.isLaunchTarget) {
- tv.onStartLaunchTargetEnterAnimation(mTmpTransform,
- taskViewEnterFromAppDuration, mStackView.mScreenPinningEnabled,
- postAnimationTrigger);
- }
-
- } else if (launchState.launchedFromHome) {
- // Animate the tasks up, but offset the animations to be relative to the front-most
- // task animation
- final float startOffsetFraction = (float) (Math.min(ENTER_EXIT_NUM_ANIMATING_TASKS,
- taskIndexFromFront) * mEnterAndExitFromHomeTranslationOffset) /
- ENTER_FROM_HOME_TRANSLATION_DURATION;
- AnimationProps taskAnimation = new AnimationProps()
- .setInterpolator(AnimationProps.ALPHA, ENTER_FROM_HOME_ALPHA_INTERPOLATOR)
- .setListener(postAnimationTrigger.decrementOnAnimationEnd());
- if (isLowRamDevice) {
- taskAnimation.setInterpolator(AnimationProps.BOUNDS,
- Interpolators.FAST_OUT_SLOW_IN)
- .setDuration(AnimationProps.BOUNDS, 150)
- .setDuration(AnimationProps.ALPHA, 150);
- } else {
- taskAnimation.setStartDelay(AnimationProps.ALPHA,
- Math.min(ENTER_EXIT_NUM_ANIMATING_TASKS, taskIndexFromFront) *
- FRAME_OFFSET_MS)
- .setInterpolator(AnimationProps.BOUNDS,
- new RecentsEntrancePathInterpolator(0f, 0f, 0.2f, 1f,
- startOffsetFraction))
- .setDuration(AnimationProps.BOUNDS, ENTER_FROM_HOME_TRANSLATION_DURATION)
- .setDuration(AnimationProps.ALPHA, ENTER_FROM_HOME_ALPHA_DURATION);
- }
- postAnimationTrigger.increment();
- mStackView.updateTaskViewToTransform(tv, mTmpTransform, taskAnimation);
- if (i == taskViewCount - 1) {
- tv.onStartFrontTaskEnterAnimation(mStackView.mScreenPinningEnabled);
- }
- } else if (launchState.launchedViaDockGesture) {
- // Animate the tasks up - add some delay to match the divider animation
- AnimationProps taskAnimation = new AnimationProps()
- .setDuration(AnimationProps.BOUNDS, dockGestureAnimDuration +
- (taskIndexFromBack * DOUBLE_FRAME_OFFSET_MS))
- .setInterpolator(AnimationProps.BOUNDS,
- ENTER_WHILE_DOCKING_INTERPOLATOR)
- .setStartDelay(AnimationProps.BOUNDS, 48)
- .setListener(postAnimationTrigger.decrementOnAnimationEnd());
- postAnimationTrigger.increment();
- mStackView.updateTaskViewToTransform(tv, mTmpTransform, taskAnimation);
- }
- }
- }
-
- /**
- * Starts an in-app animation to hide all the task views so that we can transition back home.
- */
- public void startExitToHomeAnimation(boolean animated,
- ReferenceCountedTrigger postAnimationTrigger) {
- TaskStackLayoutAlgorithm stackLayout = mStackView.getStackAlgorithm();
- TaskStack stack = mStackView.getStack();
-
- // Break early if there are no tasks
- if (stack.getTaskCount() == 0) {
- return;
- }
-
- int offscreenYOffset = stackLayout.mStackRect.height();
-
- // Create the animations for each of the tasks
- List<TaskView> taskViews = mStackView.getTaskViews();
- int taskViewCount = taskViews.size();
- for (int i = 0; i < taskViewCount; i++) {
- int taskIndexFromFront = taskViewCount - i - 1;
- TaskView tv = taskViews.get(i);
- Task task = tv.getTask();
-
- if (mStackView.isIgnoredTask(task)) {
- continue;
- }
-
- // Animate the tasks down
- AnimationProps taskAnimation;
- if (animated) {
- int delay = Math.min(ENTER_EXIT_NUM_ANIMATING_TASKS , taskIndexFromFront) *
- mEnterAndExitFromHomeTranslationOffset;
- taskAnimation = new AnimationProps()
- .setDuration(AnimationProps.BOUNDS, EXIT_TO_HOME_TRANSLATION_DURATION)
- .setListener(postAnimationTrigger.decrementOnAnimationEnd());
- if (LegacyRecentsImpl.getConfiguration().isLowRamDevice) {
- taskAnimation.setInterpolator(AnimationProps.BOUNDS,
- Interpolators.FAST_OUT_SLOW_IN);
- } else {
- taskAnimation.setStartDelay(AnimationProps.BOUNDS, delay)
- .setInterpolator(AnimationProps.BOUNDS,
- EXIT_TO_HOME_TRANSLATION_INTERPOLATOR);
- }
- postAnimationTrigger.increment();
- } else {
- taskAnimation = AnimationProps.IMMEDIATE;
- }
-
- mTmpTransform.fillIn(tv);
- if (LegacyRecentsImpl.getConfiguration().isLowRamDevice) {
- taskAnimation.setInterpolator(AnimationProps.ALPHA,
- EXIT_TO_HOME_TRANSLATION_INTERPOLATOR)
- .setDuration(AnimationProps.ALPHA, EXIT_TO_HOME_TRANSLATION_DURATION);
- mTmpTransform.rect.offset(0, stackLayout.mTaskStackLowRamLayoutAlgorithm
- .getTaskRect().height() / 4);
- mTmpTransform.alpha = 0f;
- } else {
- mTmpTransform.rect.offset(0, offscreenYOffset);
- }
- mStackView.updateTaskViewToTransform(tv, mTmpTransform, taskAnimation);
- }
- }
-
- /**
- * Starts the animation for the launching task view, hiding any tasks that might occlude the
- * window transition for the launching task.
- */
- public void startLaunchTaskAnimation(TaskView launchingTaskView, boolean screenPinningRequested,
- final ReferenceCountedTrigger postAnimationTrigger) {
- Resources res = mStackView.getResources();
-
- int taskViewExitToAppDuration = res.getInteger(
- R.integer.recents_task_exit_to_app_duration);
- int taskViewAffiliateGroupEnterOffset = res.getDimensionPixelSize(
- R.dimen.recents_task_stack_animation_affiliate_enter_offset);
-
- Task launchingTask = launchingTaskView.getTask();
- List<TaskView> taskViews = mStackView.getTaskViews();
- int taskViewCount = taskViews.size();
- for (int i = 0; i < taskViewCount; i++) {
- TaskView tv = taskViews.get(i);
- Task task = tv.getTask();
-
- if (tv == launchingTaskView) {
- tv.setClipViewInStack(false);
- postAnimationTrigger.addLastDecrementRunnable(new Runnable() {
- @Override
- public void run() {
- tv.setClipViewInStack(true);
- }
- });
- tv.onStartLaunchTargetLaunchAnimation(taskViewExitToAppDuration,
- screenPinningRequested, postAnimationTrigger);
- }
- }
- }
-
- /**
- * Starts the delete animation for the specified {@link TaskView}.
- */
- public void startDeleteTaskAnimation(final TaskView deleteTaskView, boolean gridLayout,
- final ReferenceCountedTrigger postAnimationTrigger) {
- if (gridLayout) {
- startTaskGridDeleteTaskAnimation(deleteTaskView, postAnimationTrigger);
- } else {
- startTaskStackDeleteTaskAnimation(deleteTaskView, postAnimationTrigger);
- }
- }
-
- /**
- * Starts the delete animation for all the {@link TaskView}s.
- */
- public void startDeleteAllTasksAnimation(final List<TaskView> taskViews, boolean gridLayout,
- final ReferenceCountedTrigger postAnimationTrigger) {
- if (gridLayout) {
- for (int i = 0; i < taskViews.size(); i++) {
- startTaskGridDeleteTaskAnimation(taskViews.get(i), postAnimationTrigger);
- }
- } else {
- startTaskStackDeleteAllTasksAnimation(taskViews, postAnimationTrigger);
- }
- }
-
- /**
- * Starts the animation to focus the next {@link TaskView} when paging through recents.
- *
- * @return whether or not this will trigger a scroll in the stack
- */
- public boolean startScrollToFocusedTaskAnimation(Task newFocusedTask,
- boolean requestViewFocus) {
- TaskStackLayoutAlgorithm stackLayout = mStackView.getStackAlgorithm();
- TaskStackViewScroller stackScroller = mStackView.getScroller();
- TaskStack stack = mStackView.getStack();
-
- final float curScroll = stackScroller.getStackScroll();
- final float newScroll = stackScroller.getBoundedStackScroll(
- stackLayout.getStackScrollForTask(newFocusedTask));
- boolean willScrollToFront = newScroll > curScroll;
- boolean willScroll = Float.compare(newScroll, curScroll) != 0;
-
- // Get the current set of task transforms
- int taskViewCount = mStackView.getTaskViews().size();
- ArrayList<Task> stackTasks = stack.getTasks();
- mStackView.getCurrentTaskTransforms(stackTasks, mTmpCurrentTaskTransforms);
-
- // Pick up the newly visible views after the scroll
- mStackView.bindVisibleTaskViews(newScroll);
-
- // Update the internal state
- stackLayout.setFocusState(TaskStackLayoutAlgorithm.STATE_FOCUSED);
- stackScroller.setStackScroll(newScroll, null /* animation */);
- mStackView.cancelDeferredTaskViewLayoutAnimation();
-
- // Get the final set of task transforms
- mStackView.getLayoutTaskTransforms(newScroll, stackLayout.getFocusState(), stackTasks,
- true /* ignoreTaskOverrides */, mTmpFinalTaskTransforms);
-
- // Focus the task view
- TaskView newFocusedTaskView = mStackView.getChildViewForTask(newFocusedTask);
- if (newFocusedTaskView == null) {
- // Log the error if we have no task view, and skip the animation
- Log.e("TaskStackAnimationHelper", "b/27389156 null-task-view prebind:" + taskViewCount +
- " postbind:" + mStackView.getTaskViews().size() + " prescroll:" + curScroll +
- " postscroll: " + newScroll);
- return false;
- }
- newFocusedTaskView.setFocusedState(true, requestViewFocus);
-
- // Setup the end listener to return all the hidden views to the view pool after the
- // focus animation
- ReferenceCountedTrigger postAnimTrigger = new ReferenceCountedTrigger();
- postAnimTrigger.addLastDecrementRunnable(new Runnable() {
- @Override
- public void run() {
- mStackView.bindVisibleTaskViews(newScroll);
- }
- });
-
- List<TaskView> taskViews = mStackView.getTaskViews();
- taskViewCount = taskViews.size();
- int newFocusTaskViewIndex = taskViews.indexOf(newFocusedTaskView);
- for (int i = 0; i < taskViewCount; i++) {
- TaskView tv = taskViews.get(i);
- Task task = tv.getTask();
-
- if (mStackView.isIgnoredTask(task)) {
- continue;
- }
-
- int taskIndex = stackTasks.indexOf(task);
- TaskViewTransform fromTransform = mTmpCurrentTaskTransforms.get(taskIndex);
- TaskViewTransform toTransform = mTmpFinalTaskTransforms.get(taskIndex);
-
- // Update the task to the initial state (for the newly picked up tasks)
- mStackView.updateTaskViewToTransform(tv, fromTransform, AnimationProps.IMMEDIATE);
-
- int duration;
- Interpolator interpolator;
- if (willScrollToFront) {
- duration = calculateStaggeredAnimDuration(i);
- interpolator = FOCUS_BEHIND_NEXT_TASK_INTERPOLATOR;
- } else {
- if (i < newFocusTaskViewIndex) {
- duration = 150 + ((newFocusTaskViewIndex - i - 1) * 50);
- interpolator = FOCUS_BEHIND_NEXT_TASK_INTERPOLATOR;
- } else if (i > newFocusTaskViewIndex) {
- duration = Math.max(100, 150 - ((i - newFocusTaskViewIndex - 1) * 50));
- interpolator = FOCUS_IN_FRONT_NEXT_TASK_INTERPOLATOR;
- } else {
- duration = 200;
- interpolator = FOCUS_NEXT_TASK_INTERPOLATOR;
- }
- }
-
- AnimationProps anim = new AnimationProps()
- .setDuration(AnimationProps.BOUNDS, duration)
- .setInterpolator(AnimationProps.BOUNDS, interpolator)
- .setListener(postAnimTrigger.decrementOnAnimationEnd());
- postAnimTrigger.increment();
- mStackView.updateTaskViewToTransform(tv, toTransform, anim);
- }
- return willScroll;
- }
-
- /**
- * Starts the animation to go to the initial stack layout with a task focused. In addition, the
- * previous task will be animated in after the scroll completes.
- */
- public void startNewStackScrollAnimation(TaskStack newStack,
- ReferenceCountedTrigger animationTrigger) {
- TaskStackLayoutAlgorithm stackLayout = mStackView.getStackAlgorithm();
- TaskStackViewScroller stackScroller = mStackView.getScroller();
-
- // Get the current set of task transforms
- ArrayList<Task> stackTasks = newStack.getTasks();
- mStackView.getCurrentTaskTransforms(stackTasks, mTmpCurrentTaskTransforms);
-
- // Update the stack
- mStackView.setTasks(newStack, false /* allowNotifyStackChanges */);
- mStackView.updateLayoutAlgorithm(false /* boundScroll */);
-
- // Pick up the newly visible views after the scroll
- final float newScroll = stackLayout.mInitialScrollP;
- mStackView.bindVisibleTaskViews(newScroll);
-
- // Update the internal state
- stackLayout.setFocusState(TaskStackLayoutAlgorithm.STATE_UNFOCUSED);
- stackLayout.setTaskOverridesForInitialState(newStack, true /* ignoreScrollToFront */);
- stackScroller.setStackScroll(newScroll);
- mStackView.cancelDeferredTaskViewLayoutAnimation();
-
- // Get the final set of task transforms
- mStackView.getLayoutTaskTransforms(newScroll, stackLayout.getFocusState(), stackTasks,
- false /* ignoreTaskOverrides */, mTmpFinalTaskTransforms);
-
- // Hide the front most task view until the scroll is complete
- Task frontMostTask = newStack.getFrontMostTask();
- final TaskView frontMostTaskView = mStackView.getChildViewForTask(frontMostTask);
- final TaskViewTransform frontMostTransform = mTmpFinalTaskTransforms.get(
- stackTasks.indexOf(frontMostTask));
- if (frontMostTaskView != null) {
- mStackView.updateTaskViewToTransform(frontMostTaskView,
- stackLayout.getFrontOfStackTransform(), AnimationProps.IMMEDIATE);
- }
-
- // Setup the end listener to return all the hidden views to the view pool after the
- // focus animation
- animationTrigger.addLastDecrementRunnable(new Runnable() {
- @Override
- public void run() {
- mStackView.bindVisibleTaskViews(newScroll);
-
- // Now, animate in the front-most task
- if (frontMostTaskView != null) {
- mStackView.updateTaskViewToTransform(frontMostTaskView, frontMostTransform,
- new AnimationProps(75, 250, FOCUS_BEHIND_NEXT_TASK_INTERPOLATOR));
- }
- }
- });
-
- List<TaskView> taskViews = mStackView.getTaskViews();
- int taskViewCount = taskViews.size();
- for (int i = 0; i < taskViewCount; i++) {
- TaskView tv = taskViews.get(i);
- Task task = tv.getTask();
-
- if (mStackView.isIgnoredTask(task)) {
- continue;
- }
- if (task == frontMostTask && frontMostTaskView != null) {
- continue;
- }
-
- int taskIndex = stackTasks.indexOf(task);
- TaskViewTransform fromTransform = mTmpCurrentTaskTransforms.get(taskIndex);
- TaskViewTransform toTransform = mTmpFinalTaskTransforms.get(taskIndex);
-
- // Update the task to the initial state (for the newly picked up tasks)
- mStackView.updateTaskViewToTransform(tv, fromTransform, AnimationProps.IMMEDIATE);
-
- int duration = calculateStaggeredAnimDuration(i);
- Interpolator interpolator = FOCUS_BEHIND_NEXT_TASK_INTERPOLATOR;
-
- AnimationProps anim = new AnimationProps()
- .setDuration(AnimationProps.BOUNDS, duration)
- .setInterpolator(AnimationProps.BOUNDS, interpolator)
- .setListener(animationTrigger.decrementOnAnimationEnd());
- animationTrigger.increment();
- mStackView.updateTaskViewToTransform(tv, toTransform, anim);
- }
- }
-
- /**
- * Caclulates a staggered duration for {@link #startScrollToFocusedTaskAnimation} and
- * {@link #startNewStackScrollAnimation}.
- */
- private int calculateStaggeredAnimDuration(int i) {
- return Math.max(100, 100 + ((i - 1) * 50));
- }
-
- private void startTaskGridDeleteTaskAnimation(final TaskView deleteTaskView,
- final ReferenceCountedTrigger postAnimationTrigger) {
- postAnimationTrigger.increment();
- postAnimationTrigger.addLastDecrementRunnable(() -> {
- mStackView.getTouchHandler().onChildDismissed(deleteTaskView);
- });
- deleteTaskView.animate().setDuration(300).scaleX(0.9f).scaleY(0.9f).alpha(0).setListener(
- new AnimatorListenerAdapter() {
- @Override
- public void onAnimationEnd(Animator animation) {
- postAnimationTrigger.decrement();
- }}).start();
- }
-
- private void startTaskStackDeleteTaskAnimation(final TaskView deleteTaskView,
- final ReferenceCountedTrigger postAnimationTrigger) {
- TaskStackViewTouchHandler touchHandler = mStackView.getTouchHandler();
- touchHandler.onBeginManualDrag(deleteTaskView);
-
- postAnimationTrigger.increment();
- postAnimationTrigger.addLastDecrementRunnable(() -> {
- touchHandler.onChildDismissed(deleteTaskView);
- });
-
- final float dismissSize = touchHandler.getScaledDismissSize();
- ValueAnimator animator = ValueAnimator.ofFloat(0f, 1f);
- animator.setDuration(400);
- animator.addUpdateListener((animation) -> {
- float progress = (Float) animation.getAnimatedValue();
- deleteTaskView.setTranslationX(progress * dismissSize);
- touchHandler.updateSwipeProgress(deleteTaskView, true, progress);
- });
- animator.addListener(new AnimatorListenerAdapter() {
- @Override
- public void onAnimationEnd(Animator animation) {
- postAnimationTrigger.decrement();
- }
- });
- animator.start();
- }
-
- private void startTaskStackDeleteAllTasksAnimation(final List<TaskView> taskViews,
- final ReferenceCountedTrigger postAnimationTrigger) {
- TaskStackLayoutAlgorithm stackLayout = mStackView.getStackAlgorithm();
-
- int offscreenXOffset = mStackView.getMeasuredWidth() - stackLayout.getTaskRect().left;
-
- int taskViewCount = taskViews.size();
- for (int i = taskViewCount - 1; i >= 0; i--) {
- TaskView tv = taskViews.get(i);
- int taskIndexFromFront = taskViewCount - i - 1;
- int startDelay = taskIndexFromFront * DOUBLE_FRAME_OFFSET_MS;
-
- // Disabling clipping with the stack while the view is animating away
- tv.setClipViewInStack(false);
-
- // Compose the new animation and transform and star the animation
- AnimationProps taskAnimation = new AnimationProps(startDelay,
- DISMISS_ALL_TASKS_DURATION, DISMISS_ALL_TRANSLATION_INTERPOLATOR,
- new AnimatorListenerAdapter() {
- @Override
- public void onAnimationEnd(Animator animation) {
- postAnimationTrigger.decrement();
-
- // Re-enable clipping with the stack (we will reuse this view)
- tv.setClipViewInStack(true);
- }
- });
- postAnimationTrigger.increment();
-
- mTmpTransform.fillIn(tv);
- mTmpTransform.rect.offset(offscreenXOffset, 0);
- mStackView.updateTaskViewToTransform(tv, mTmpTransform, taskAnimation);
- }
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/TaskStackLayoutAlgorithm.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/TaskStackLayoutAlgorithm.java
deleted file mode 100644
index 58a3f12c465d..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/TaskStackLayoutAlgorithm.java
+++ /dev/null
@@ -1,1283 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.views;
-
-import android.annotation.IntDef;
-import android.content.Context;
-import android.content.res.Configuration;
-import android.content.res.Resources;
-import android.graphics.Path;
-import android.graphics.Rect;
-import android.util.ArraySet;
-import android.util.Log;
-import android.util.SparseArray;
-import android.util.SparseIntArray;
-import android.view.ViewDebug;
-
-import com.android.systemui.R;
-import com.android.systemui.recents.LegacyRecentsImpl;
-import com.android.systemui.recents.RecentsActivityLaunchState;
-import com.android.systemui.recents.RecentsConfiguration;
-import com.android.systemui.recents.RecentsDebugFlags;
-import com.android.systemui.recents.misc.FreePathInterpolator;
-import com.android.systemui.recents.misc.SystemServicesProxy;
-import com.android.systemui.recents.utilities.Utilities;
-import com.android.systemui.shared.recents.model.Task;
-import com.android.systemui.recents.model.TaskStack;
-import com.android.systemui.recents.views.lowram.TaskStackLowRamLayoutAlgorithm;
-import com.android.systemui.recents.views.grid.TaskGridLayoutAlgorithm;
-
-import java.io.PrintWriter;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Used to describe a visible range that can be normalized to [0, 1].
- */
-class Range {
- final float relativeMin;
- final float relativeMax;
- float origin;
- float min;
- float max;
-
- public Range(float relMin, float relMax) {
- min = relativeMin = relMin;
- max = relativeMax = relMax;
- }
-
- /**
- * Offsets this range to a given absolute position.
- */
- public void offset(float x) {
- this.origin = x;
- min = x + relativeMin;
- max = x + relativeMax;
- }
-
- /**
- * Returns x normalized to the range 0 to 1 such that 0 = min, 0.5 = origin and 1 = max
- *
- * @param x is an absolute value in the same domain as origin
- */
- public float getNormalizedX(float x) {
- if (x < origin) {
- return 0.5f + 0.5f * (x - origin) / -relativeMin;
- } else {
- return 0.5f + 0.5f * (x - origin) / relativeMax;
- }
- }
-
- /**
- * Given a normalized {@param x} value in this range, projected onto the full range to get an
- * absolute value about the given {@param origin}.
- */
- public float getAbsoluteX(float normX) {
- if (normX < 0.5f) {
- return (normX - 0.5f) / 0.5f * -relativeMin;
- } else {
- return (normX - 0.5f) / 0.5f * relativeMax;
- }
- }
-
- /**
- * Returns whether a value at an absolute x would be within range.
- */
- public boolean isInRange(float absX) {
- return (absX >= Math.floor(min)) && (absX <= Math.ceil(max));
- }
-}
-
-/**
- * The layout logic for a TaskStackView. This layout needs to be able to calculate the stack layout
- * without an activity-specific context only with the information passed in. This layout can have
- * two states focused and unfocused, and in the focused state, there is a task that is displayed
- * more prominently in the stack.
- */
-public class TaskStackLayoutAlgorithm {
-
- private static final String TAG = "TaskStackLayoutAlgorithm";
-
- // The distribution of view bounds alpha
- // XXX: This is a hack because you can currently set the max alpha to be > 1f
- public static final float OUTLINE_ALPHA_MIN_VALUE = 0f;
- public static final float OUTLINE_ALPHA_MAX_VALUE = 2f;
-
- // The medium/maximum dim on the tasks
- private static final float MED_DIM = 0.15f;
- private static final float MAX_DIM = 0.25f;
-
- // The various focus states
- public static final int STATE_FOCUSED = 1;
- public static final int STATE_UNFOCUSED = 0;
-
- // The side that an offset is anchored
- @Retention(RetentionPolicy.SOURCE)
- @IntDef({FROM_TOP, FROM_BOTTOM})
- public @interface AnchorSide {}
- private static final int FROM_TOP = 0;
- private static final int FROM_BOTTOM = 1;
-
- // The extent that we care about when calculating fractions
- @Retention(RetentionPolicy.SOURCE)
- @IntDef({WIDTH, HEIGHT})
- public @interface Extent {}
- private static final int WIDTH = 0;
- private static final int HEIGHT = 1;
-
- public interface TaskStackLayoutAlgorithmCallbacks {
- void onFocusStateChanged(int prevFocusState, int curFocusState);
- }
-
- /**
- * @return True if we should use the grid layout.
- */
- boolean useGridLayout() {
- return LegacyRecentsImpl.getConfiguration().isGridEnabled;
- }
-
- // A report of the visibility state of the stack
- public static class VisibilityReport {
- public int numVisibleTasks;
- public int numVisibleThumbnails;
-
- public VisibilityReport(int tasks, int thumbnails) {
- numVisibleTasks = tasks;
- numVisibleThumbnails = thumbnails;
- }
- }
-
- Context mContext;
- private TaskStackLayoutAlgorithmCallbacks mCb;
-
- // The task bounds (untransformed) for layout. This rect is anchored at mTaskRoot.
- @ViewDebug.ExportedProperty(category="recents")
- public Rect mTaskRect = new Rect();
- // The stack bounds, inset from the top system insets, and runs to the bottom of the screen
- @ViewDebug.ExportedProperty(category="recents")
- public Rect mStackRect = new Rect();
- // This is the current system insets
- @ViewDebug.ExportedProperty(category="recents")
- public Rect mSystemInsets = new Rect();
-
- // The visible ranges when the stack is focused and unfocused
- private Range mUnfocusedRange;
- private Range mFocusedRange;
-
- // This is the bounds of the stack action above the stack rect
- @ViewDebug.ExportedProperty(category="recents")
- private Rect mStackActionButtonRect = new Rect();
- // The base top margin for the stack from the system insets
- @ViewDebug.ExportedProperty(category="recents")
- private int mBaseTopMargin;
- // The base side margin for the stack from the system insets
- @ViewDebug.ExportedProperty(category="recents")
- private int mBaseSideMargin;
- // The base bottom margin for the stack from the system insets
- @ViewDebug.ExportedProperty(category="recents")
- private int mBaseBottomMargin;
- private int mMinMargin;
-
- // The initial offset that the focused task is from the top
- @ViewDebug.ExportedProperty(category="recents")
- private int mInitialTopOffset;
- private int mBaseInitialTopOffset;
- // The initial offset that the launch-from task is from the bottom
- @ViewDebug.ExportedProperty(category="recents")
- private int mInitialBottomOffset;
- private int mBaseInitialBottomOffset;
-
- // The height between the top margin and the top of the focused task
- @ViewDebug.ExportedProperty(category="recents")
- private int mFocusedTopPeekHeight;
- // The height between the bottom margin and the top of task in front of the focused task
- @ViewDebug.ExportedProperty(category="recents")
- private int mFocusedBottomPeekHeight;
-
- // The offset from the bottom of the stack to the bottom of the bounds when the stack is
- // scrolled to the front
- @ViewDebug.ExportedProperty(category="recents")
- private int mStackBottomOffset;
-
- /** The height, in pixels, of each task view's title bar. */
- private int mTitleBarHeight;
-
- // The paths defining the motion of the tasks when the stack is focused and unfocused
- private Path mUnfocusedCurve;
- private Path mFocusedCurve;
- private FreePathInterpolator mUnfocusedCurveInterpolator;
- private FreePathInterpolator mFocusedCurveInterpolator;
-
- // The paths defining the distribution of the dim to apply to tasks in the stack when focused
- // and unfocused
- private Path mUnfocusedDimCurve;
- private Path mFocusedDimCurve;
- private FreePathInterpolator mUnfocusedDimCurveInterpolator;
- private FreePathInterpolator mFocusedDimCurveInterpolator;
-
- // The state of the stack focus (0..1), which controls the transition of the stack from the
- // focused to non-focused state
- @ViewDebug.ExportedProperty(category="recents")
- private int mFocusState;
-
- // The smallest scroll progress, at this value, the back most task will be visible
- @ViewDebug.ExportedProperty(category="recents")
- float mMinScrollP;
- // The largest scroll progress, at this value, the front most task will be visible above the
- // navigation bar
- @ViewDebug.ExportedProperty(category="recents")
- float mMaxScrollP;
- // The initial progress that the scroller is set when you first enter recents
- @ViewDebug.ExportedProperty(category="recents")
- float mInitialScrollP;
- // The task progress for the front-most task in the stack
- @ViewDebug.ExportedProperty(category="recents")
- float mFrontMostTaskP;
-
- // The last computed task counts
- @ViewDebug.ExportedProperty(category="recents")
- int mNumStackTasks;
-
- // The min/max z translations
- @ViewDebug.ExportedProperty(category="recents")
- int mMinTranslationZ;
- @ViewDebug.ExportedProperty(category="recents")
- public int mMaxTranslationZ;
-
- // Optimization, allows for quick lookup of task -> index
- private SparseIntArray mTaskIndexMap = new SparseIntArray();
- private SparseArray<Float> mTaskIndexOverrideMap = new SparseArray<>();
-
- TaskGridLayoutAlgorithm mTaskGridLayoutAlgorithm;
- TaskStackLowRamLayoutAlgorithm mTaskStackLowRamLayoutAlgorithm;
-
- // The transform to place TaskViews at the front and back of the stack respectively
- TaskViewTransform mBackOfStackTransform = new TaskViewTransform();
- TaskViewTransform mFrontOfStackTransform = new TaskViewTransform();
-
- public TaskStackLayoutAlgorithm(Context context, TaskStackLayoutAlgorithmCallbacks cb) {
- mContext = context;
- mCb = cb;
- mTaskGridLayoutAlgorithm = new TaskGridLayoutAlgorithm(context);
- mTaskStackLowRamLayoutAlgorithm = new TaskStackLowRamLayoutAlgorithm(context);
- reloadOnConfigurationChange(context);
- }
-
- /**
- * Reloads the layout for the current configuration.
- */
- public void reloadOnConfigurationChange(Context context) {
- Resources res = context.getResources();
- mFocusedRange = new Range(res.getFloat(R.integer.recents_layout_focused_range_min),
- res.getFloat(R.integer.recents_layout_focused_range_max));
- mUnfocusedRange = new Range(res.getFloat(R.integer.recents_layout_unfocused_range_min),
- res.getFloat(R.integer.recents_layout_unfocused_range_max));
- mFocusState = getInitialFocusState();
- mFocusedTopPeekHeight = res.getDimensionPixelSize(R.dimen.recents_layout_top_peek_size);
- mFocusedBottomPeekHeight =
- res.getDimensionPixelSize(R.dimen.recents_layout_bottom_peek_size);
- mMinTranslationZ = res.getDimensionPixelSize(R.dimen.recents_layout_z_min);
- mMaxTranslationZ = res.getDimensionPixelSize(R.dimen.recents_layout_z_max);
- mBaseInitialTopOffset = getDimensionForDevice(context,
- R.dimen.recents_layout_initial_top_offset_phone_port,
- R.dimen.recents_layout_initial_top_offset_phone_land,
- R.dimen.recents_layout_initial_top_offset_tablet,
- R.dimen.recents_layout_initial_top_offset_tablet,
- R.dimen.recents_layout_initial_top_offset_tablet,
- R.dimen.recents_layout_initial_top_offset_tablet,
- R.dimen.recents_layout_initial_top_offset_tablet);
- mBaseInitialBottomOffset = getDimensionForDevice(context,
- R.dimen.recents_layout_initial_bottom_offset_phone_port,
- R.dimen.recents_layout_initial_bottom_offset_phone_land,
- R.dimen.recents_layout_initial_bottom_offset_tablet,
- R.dimen.recents_layout_initial_bottom_offset_tablet,
- R.dimen.recents_layout_initial_bottom_offset_tablet,
- R.dimen.recents_layout_initial_bottom_offset_tablet,
- R.dimen.recents_layout_initial_bottom_offset_tablet);
- mTaskGridLayoutAlgorithm.reloadOnConfigurationChange(context);
- mTaskStackLowRamLayoutAlgorithm.reloadOnConfigurationChange(context);
- mMinMargin = res.getDimensionPixelSize(R.dimen.recents_layout_min_margin);
- mBaseTopMargin = getDimensionForDevice(context,
- R.dimen.recents_layout_top_margin_phone,
- R.dimen.recents_layout_top_margin_tablet,
- R.dimen.recents_layout_top_margin_tablet_xlarge,
- R.dimen.recents_layout_top_margin_tablet);
- mBaseSideMargin = getDimensionForDevice(context,
- R.dimen.recents_layout_side_margin_phone,
- R.dimen.recents_layout_side_margin_tablet,
- R.dimen.recents_layout_side_margin_tablet_xlarge,
- R.dimen.recents_layout_side_margin_tablet);
- mBaseBottomMargin = res.getDimensionPixelSize(R.dimen.recents_layout_bottom_margin);
- mTitleBarHeight = getDimensionForDevice(mContext,
- R.dimen.recents_task_view_header_height,
- R.dimen.recents_task_view_header_height,
- R.dimen.recents_task_view_header_height,
- R.dimen.recents_task_view_header_height_tablet_land,
- R.dimen.recents_task_view_header_height,
- R.dimen.recents_task_view_header_height_tablet_land,
- R.dimen.recents_grid_task_view_header_height);
- }
-
- /**
- * Resets this layout when the stack view is reset.
- */
- public void reset() {
- mTaskIndexOverrideMap.clear();
- setFocusState(getInitialFocusState());
- }
-
- /**
- * Sets the system insets.
- */
- public boolean setSystemInsets(Rect systemInsets) {
- boolean changed = !mSystemInsets.equals(systemInsets);
- mSystemInsets.set(systemInsets);
- mTaskGridLayoutAlgorithm.setSystemInsets(systemInsets);
- mTaskStackLowRamLayoutAlgorithm.setSystemInsets(systemInsets);
- return changed;
- }
-
- /**
- * Sets the focused state.
- */
- public void setFocusState(int focusState) {
- int prevFocusState = mFocusState;
- mFocusState = focusState;
- updateFrontBackTransforms();
- if (mCb != null) {
- mCb.onFocusStateChanged(prevFocusState, focusState);
- }
- }
-
- /**
- * Gets the focused state.
- */
- public int getFocusState() {
- return mFocusState;
- }
-
- /**
- * Computes the stack and task rects. The given task stack bounds already has the top/right
- * insets and left/right padding already applied.
- */
- public void initialize(Rect displayRect, Rect windowRect, Rect taskStackBounds) {
- Rect lastStackRect = new Rect(mStackRect);
-
- int topMargin = getScaleForExtent(windowRect, displayRect, mBaseTopMargin, mMinMargin, HEIGHT);
- int bottomMargin = getScaleForExtent(windowRect, displayRect, mBaseBottomMargin, mMinMargin,
- HEIGHT);
- mInitialTopOffset = getScaleForExtent(windowRect, displayRect, mBaseInitialTopOffset,
- mMinMargin, HEIGHT);
- mInitialBottomOffset = mBaseInitialBottomOffset;
-
- // Compute the stack bounds
- mStackBottomOffset = mSystemInsets.bottom + bottomMargin;
- mStackRect.set(taskStackBounds);
- mStackRect.top += topMargin;
-
- // The stack action button will take the full un-padded header space above the stack
- mStackActionButtonRect.set(mStackRect.left, mStackRect.top - topMargin,
- mStackRect.right, mStackRect.top + mFocusedTopPeekHeight);
-
- // Anchor the task rect top aligned to the stack rect
- int height = mStackRect.height() - mInitialTopOffset - mStackBottomOffset;
- mTaskRect.set(mStackRect.left, mStackRect.top, mStackRect.right, mStackRect.top + height);
-
- if (mTaskRect.width() <= 0 || mTaskRect.height() <= 0) {
- // Logging for b/36654830
- Log.e(TAG, "Invalid task rect: taskRect=" + mTaskRect + " stackRect=" + mStackRect
- + " displayRect=" + displayRect + " windowRect=" + windowRect
- + " taskStackBounds=" + taskStackBounds);
- }
-
- // Short circuit here if the stack rects haven't changed so we don't do all the work below
- if (!lastStackRect.equals(mStackRect)) {
- // Reinitialize the focused and unfocused curves
- mUnfocusedCurve = constructUnfocusedCurve();
- mUnfocusedCurveInterpolator = new FreePathInterpolator(mUnfocusedCurve);
- mFocusedCurve = constructFocusedCurve();
- mFocusedCurveInterpolator = new FreePathInterpolator(mFocusedCurve);
- mUnfocusedDimCurve = constructUnfocusedDimCurve();
- mUnfocusedDimCurveInterpolator = new FreePathInterpolator(mUnfocusedDimCurve);
- mFocusedDimCurve = constructFocusedDimCurve();
- mFocusedDimCurveInterpolator = new FreePathInterpolator(mFocusedDimCurve);
-
- updateFrontBackTransforms();
- }
-
- // Initialize the grid layout
- mTaskGridLayoutAlgorithm.initialize(windowRect);
- mTaskStackLowRamLayoutAlgorithm.initialize(windowRect);
- }
-
- /**
- * Computes the minimum and maximum scroll progress values and the progress values for each task
- * in the stack.
- */
- public void update(TaskStack stack, ArraySet<Task.TaskKey> ignoreTasksSet,
- RecentsActivityLaunchState launchState, float lastScrollPPercent) {
- SystemServicesProxy ssp = LegacyRecentsImpl.getSystemServices();
-
- // Clear the progress map
- mTaskIndexMap.clear();
-
- // Return early if we have no tasks
- ArrayList<Task> tasks = stack.getTasks();
- if (tasks.isEmpty()) {
- mFrontMostTaskP = 0;
- mMinScrollP = mMaxScrollP = mInitialScrollP = 0;
- mNumStackTasks = 0;
- return;
- }
-
- // Filter the set of stack tasks
- ArrayList<Task> stackTasks = new ArrayList<>();
- for (int i = 0; i < tasks.size(); i++) {
- Task task = tasks.get(i);
- if (ignoreTasksSet.contains(task.key)) {
- continue;
- }
- stackTasks.add(task);
- }
- mNumStackTasks = stackTasks.size();
-
- // Put each of the tasks in the progress map at a fixed index (does not need to actually
- // map to a scroll position, just by index)
- int taskCount = stackTasks.size();
- for (int i = 0; i < taskCount; i++) {
- Task task = stackTasks.get(i);
- mTaskIndexMap.put(task.key.id, i);
- }
-
- // Calculate the min/max/initial scroll
- Task launchTask = stack.getLaunchTarget();
- int launchTaskIndex = launchTask != null
- ? stack.indexOfTask(launchTask)
- : mNumStackTasks - 1;
- if (getInitialFocusState() == STATE_FOCUSED) {
- int maxBottomOffset = mStackBottomOffset + mTaskRect.height();
- float maxBottomNormX = getNormalizedXFromFocusedY(maxBottomOffset, FROM_BOTTOM);
- mFocusedRange.offset(0f);
- mMinScrollP = 0;
- mMaxScrollP = Math.max(mMinScrollP, (mNumStackTasks - 1) -
- Math.max(0, mFocusedRange.getAbsoluteX(maxBottomNormX)));
- if (launchState.launchedFromHome || launchState.launchedFromPipApp
- || launchState.launchedWithNextPipApp) {
- mInitialScrollP = Utilities.clamp(launchTaskIndex, mMinScrollP, mMaxScrollP);
- } else {
- mInitialScrollP = Utilities.clamp(launchTaskIndex - 1, mMinScrollP, mMaxScrollP);
- }
- } else if (mNumStackTasks == 1) {
- // If there is one stack task, ignore the min/max/initial scroll positions
- mMinScrollP = 0;
- mMaxScrollP = 0;
- mInitialScrollP = 0;
- } else {
- // Set the max scroll to be the point where the front most task is visible with the
- // stack bottom offset
- int maxBottomOffset = mStackBottomOffset + mTaskRect.height();
- float maxBottomNormX = getNormalizedXFromUnfocusedY(maxBottomOffset, FROM_BOTTOM);
- mUnfocusedRange.offset(0f);
- mMinScrollP = LegacyRecentsImpl.getConfiguration().isLowRamDevice
- ? mTaskStackLowRamLayoutAlgorithm.getMinScrollP()
- : 0;
- mMaxScrollP = LegacyRecentsImpl.getConfiguration().isLowRamDevice
- ? mTaskStackLowRamLayoutAlgorithm.getMaxScrollP(taskCount)
- : Math.max(mMinScrollP, (mNumStackTasks - 1) -
- Math.max(0, mUnfocusedRange.getAbsoluteX(maxBottomNormX)));
- boolean scrollToFront = launchState.launchedFromHome || launchState.launchedFromPipApp
- || launchState.launchedWithNextPipApp || launchState.launchedViaDockGesture;
-
- if (launchState.launchedWithAltTab) {
- mInitialScrollP = Utilities.clamp(launchTaskIndex, mMinScrollP, mMaxScrollP);
- } else if (0 <= lastScrollPPercent && lastScrollPPercent <= 1) {
- mInitialScrollP = Utilities.mapRange(lastScrollPPercent, mMinScrollP, mMaxScrollP);
- } else if (LegacyRecentsImpl.getConfiguration().isLowRamDevice) {
- mInitialScrollP = mTaskStackLowRamLayoutAlgorithm.getInitialScrollP(mNumStackTasks,
- scrollToFront);
- } else if (scrollToFront) {
- mInitialScrollP = Utilities.clamp(launchTaskIndex, mMinScrollP, mMaxScrollP);
- } else {
- // We are overriding the initial two task positions, so set the initial scroll
- // position to match the second task (aka focused task) position
- float initialTopNormX = getNormalizedXFromUnfocusedY(mInitialTopOffset, FROM_TOP);
- mInitialScrollP = Math.max(mMinScrollP, Math.min(mMaxScrollP, (mNumStackTasks - 2))
- - Math.max(0, mUnfocusedRange.getAbsoluteX(initialTopNormX)));
- }
- }
- }
-
- /**
- * Creates task overrides to ensure the initial stack layout if necessary.
- */
- public void setTaskOverridesForInitialState(TaskStack stack, boolean ignoreScrollToFront) {
- RecentsActivityLaunchState launchState = LegacyRecentsImpl.getConfiguration().getLaunchState();
-
- mTaskIndexOverrideMap.clear();
-
- boolean scrollToFront = launchState.launchedFromHome ||
- launchState.launchedFromPipApp ||
- launchState.launchedWithNextPipApp ||
- launchState.launchedViaDockGesture;
- if (getInitialFocusState() == STATE_UNFOCUSED && mNumStackTasks > 1) {
- if (ignoreScrollToFront || (!launchState.launchedWithAltTab && !scrollToFront)) {
- // Set the initial scroll to the predefined state (which differs from the stack)
- float [] initialNormX = null;
- float minBottomTaskNormX = getNormalizedXFromUnfocusedY(mSystemInsets.bottom +
- mInitialBottomOffset, FROM_BOTTOM);
- float maxBottomTaskNormX = getNormalizedXFromUnfocusedY(mFocusedTopPeekHeight +
- mTaskRect.height() - mMinMargin, FROM_TOP);
- if (mNumStackTasks <= 2) {
- // For small stacks, position the tasks so that they are top aligned to under
- // the action button, but ensure that it is at least a certain offset from the
- // bottom of the stack
- initialNormX = new float[] {
- Math.min(maxBottomTaskNormX, minBottomTaskNormX),
- getNormalizedXFromUnfocusedY(mFocusedTopPeekHeight, FROM_TOP)
- };
- } else {
- initialNormX = new float[] {
- minBottomTaskNormX,
- getNormalizedXFromUnfocusedY(mInitialTopOffset, FROM_TOP)
- };
- }
-
- mUnfocusedRange.offset(0f);
- List<Task> tasks = stack.getTasks();
- int taskCount = tasks.size();
- for (int i = taskCount - 1; i >= 0; i--) {
- int indexFromFront = taskCount - i - 1;
- if (indexFromFront >= initialNormX.length) {
- break;
- }
- float newTaskProgress = mInitialScrollP +
- mUnfocusedRange.getAbsoluteX(initialNormX[indexFromFront]);
- mTaskIndexOverrideMap.put(tasks.get(i).key.id, newTaskProgress);
- }
- }
- }
- }
-
- /**
- * Adds and override task progress for the given task when transitioning from focused to
- * unfocused state.
- */
- public void addUnfocusedTaskOverride(Task task, float stackScroll) {
- if (mFocusState != STATE_UNFOCUSED) {
- mFocusedRange.offset(stackScroll);
- mUnfocusedRange.offset(stackScroll);
- float focusedRangeX = mFocusedRange.getNormalizedX(mTaskIndexMap.get(task.key.id));
- float focusedY = mFocusedCurveInterpolator.getInterpolation(focusedRangeX);
- float unfocusedRangeX = mUnfocusedCurveInterpolator.getX(focusedY);
- float unfocusedTaskProgress = stackScroll + mUnfocusedRange.getAbsoluteX(unfocusedRangeX);
- if (Float.compare(focusedRangeX, unfocusedRangeX) != 0) {
- mTaskIndexOverrideMap.put(task.key.id, unfocusedTaskProgress);
- }
- }
- }
-
- /**
- * Adds and override task progress for the given task when transitioning from focused to
- * unfocused state.
- */
- public void addUnfocusedTaskOverride(TaskView taskView, float stackScroll) {
- mFocusedRange.offset(stackScroll);
- mUnfocusedRange.offset(stackScroll);
-
- Task task = taskView.getTask();
- int top = taskView.getTop() - mTaskRect.top;
- float focusedRangeX = getNormalizedXFromFocusedY(top, FROM_TOP);
- float unfocusedRangeX = getNormalizedXFromUnfocusedY(top, FROM_TOP);
- float unfocusedTaskProgress = stackScroll + mUnfocusedRange.getAbsoluteX(unfocusedRangeX);
- if (Float.compare(focusedRangeX, unfocusedRangeX) != 0) {
- mTaskIndexOverrideMap.put(task.key.id, unfocusedTaskProgress);
- }
- }
-
- public void clearUnfocusedTaskOverrides() {
- mTaskIndexOverrideMap.clear();
- }
-
- /**
- * Updates this stack when a scroll happens.
- *
- */
- public float updateFocusStateOnScroll(float lastTargetStackScroll, float targetStackScroll,
- float lastStackScroll) {
- if (targetStackScroll == lastStackScroll || LegacyRecentsImpl.getConfiguration().isLowRamDevice) {
- return targetStackScroll;
- }
-
- float deltaScroll = targetStackScroll - lastStackScroll;
- float deltaTargetScroll = targetStackScroll - lastTargetStackScroll;
- float newScroll = targetStackScroll;
- mUnfocusedRange.offset(targetStackScroll);
- for (int i = mTaskIndexOverrideMap.size() - 1; i >= 0; i--) {
- int taskId = mTaskIndexOverrideMap.keyAt(i);
- float x = mTaskIndexMap.get(taskId);
- float overrideX = mTaskIndexOverrideMap.get(taskId, 0f);
- float newOverrideX = overrideX + deltaScroll;
- if (isInvalidOverrideX(x, overrideX, newOverrideX)) {
- // Remove the override once we reach the original task index
- mTaskIndexOverrideMap.removeAt(i);
- } else if ((overrideX >= x && deltaScroll <= 0f) ||
- (overrideX <= x && deltaScroll >= 0f)) {
- // Scrolling from override x towards x, then lock the task in place
- mTaskIndexOverrideMap.put(taskId, newOverrideX);
- } else {
- // Scrolling override x away from x, we should still move the scroll towards x
- newScroll = lastStackScroll;
- newOverrideX = overrideX - deltaTargetScroll;
- if (isInvalidOverrideX(x, overrideX, newOverrideX)) {
- mTaskIndexOverrideMap.removeAt(i);
- } else{
- mTaskIndexOverrideMap.put(taskId, newOverrideX);
- }
- }
- }
- return newScroll;
- }
-
- private boolean isInvalidOverrideX(float x, float overrideX, float newOverrideX) {
- boolean outOfBounds = mUnfocusedRange.getNormalizedX(newOverrideX) < 0f ||
- mUnfocusedRange.getNormalizedX(newOverrideX) > 1f;
- return outOfBounds || (overrideX >= x && x >= newOverrideX) ||
- (overrideX <= x && x <= newOverrideX);
- }
-
- /**
- * Returns the default focus state.
- */
- public int getInitialFocusState() {
- RecentsActivityLaunchState launchState = LegacyRecentsImpl.getConfiguration().getLaunchState();
- RecentsDebugFlags debugFlags = LegacyRecentsImpl.getDebugFlags();
- if (launchState.launchedWithAltTab) {
- return STATE_FOCUSED;
- } else {
- return STATE_UNFOCUSED;
- }
- }
-
- public Rect getStackActionButtonRect() {
- return useGridLayout()
- ? mTaskGridLayoutAlgorithm.getStackActionButtonRect() : mStackActionButtonRect;
- }
-
- /**
- * Returns the TaskViewTransform that would put the task just off the back of the stack.
- */
- public TaskViewTransform getBackOfStackTransform() {
- return mBackOfStackTransform;
- }
-
- /**
- * Returns the TaskViewTransform that would put the task just off the front of the stack.
- */
- public TaskViewTransform getFrontOfStackTransform() {
- return mFrontOfStackTransform;
- }
-
- /**
- * Returns whether this stack layout has been initialized.
- */
- public boolean isInitialized() {
- return !mStackRect.isEmpty();
- }
-
- /**
- * Computes the maximum number of visible tasks and thumbnails when the scroll is at the initial
- * stack scroll. Requires that update() is called first.
- */
- public VisibilityReport computeStackVisibilityReport(ArrayList<Task> tasks) {
- if (useGridLayout()) {
- return mTaskGridLayoutAlgorithm.computeStackVisibilityReport(tasks);
- }
-
- if (LegacyRecentsImpl.getConfiguration().isLowRamDevice) {
- return mTaskStackLowRamLayoutAlgorithm.computeStackVisibilityReport(tasks);
- }
-
- // Ensure minimum visibility count
- if (tasks.size() <= 1) {
- return new VisibilityReport(1, 1);
- }
-
- // Otherwise, walk backwards in the stack and count the number of tasks and visible
- // thumbnails and add that to the total task count
- TaskViewTransform tmpTransform = new TaskViewTransform();
- Range currentRange = getInitialFocusState() > 0f ? mFocusedRange : mUnfocusedRange;
- currentRange.offset(mInitialScrollP);
- int taskBarHeight = mContext.getResources().getDimensionPixelSize(
- R.dimen.recents_task_view_header_height);
- int numVisibleTasks = 0;
- int numVisibleThumbnails = 0;
- float prevScreenY = Integer.MAX_VALUE;
- for (int i = tasks.size() - 1; i >= 0; i--) {
- Task task = tasks.get(i);
-
- // Skip invisible
- float taskProgress = getStackScrollForTask(task);
- if (!currentRange.isInRange(taskProgress)) {
- continue;
- }
-
- getStackTransform(taskProgress, taskProgress, mInitialScrollP, mFocusState,
- tmpTransform, null, false /* ignoreSingleTaskCase */, false /* forceUpdate */);
- float screenY = tmpTransform.rect.top;
- boolean hasVisibleThumbnail = (prevScreenY - screenY) > taskBarHeight;
- if (hasVisibleThumbnail) {
- numVisibleThumbnails++;
- numVisibleTasks++;
- prevScreenY = screenY;
- } else {
- // Once we hit the next front most task that does not have a visible thumbnail,
- // walk through remaining visible set
- for (int j = i; j >= 0; j--) {
- taskProgress = getStackScrollForTask(tasks.get(j));
- if (!currentRange.isInRange(taskProgress)) {
- break;
- }
- numVisibleTasks++;
- }
- break;
- }
- }
- return new VisibilityReport(numVisibleTasks, numVisibleThumbnails);
- }
-
- /**
- * Returns the transform for the given task. This transform is relative to the mTaskRect, which
- * is what the view is measured and laid out with.
- */
- public TaskViewTransform getStackTransform(Task task, float stackScroll,
- TaskViewTransform transformOut, TaskViewTransform frontTransform) {
- return getStackTransform(task, stackScroll, mFocusState, transformOut, frontTransform,
- false /* forceUpdate */, false /* ignoreTaskOverrides */);
- }
-
- public TaskViewTransform getStackTransform(Task task, float stackScroll,
- TaskViewTransform transformOut, TaskViewTransform frontTransform,
- boolean ignoreTaskOverrides) {
- return getStackTransform(task, stackScroll, mFocusState, transformOut, frontTransform,
- false /* forceUpdate */, ignoreTaskOverrides);
- }
-
- public TaskViewTransform getStackTransform(Task task, float stackScroll, int focusState,
- TaskViewTransform transformOut, TaskViewTransform frontTransform, boolean forceUpdate,
- boolean ignoreTaskOverrides) {
- if (useGridLayout()) {
- int taskIndex = mTaskIndexMap.get(task.key.id);
- int taskCount = mTaskIndexMap.size();
- mTaskGridLayoutAlgorithm.getTransform(taskIndex, taskCount, transformOut, this);
- return transformOut;
- } else if (LegacyRecentsImpl.getConfiguration().isLowRamDevice) {
- if (task == null) {
- transformOut.reset();
- return transformOut;
- }
- int taskIndex = mTaskIndexMap.get(task.key.id);
- mTaskStackLowRamLayoutAlgorithm.getTransform(taskIndex, stackScroll, transformOut,
- mNumStackTasks, this);
- return transformOut;
- } else {
- // Return early if we have an invalid index
- int nonOverrideTaskProgress = mTaskIndexMap.get(task.key.id, -1);
- if (task == null || nonOverrideTaskProgress == -1) {
- transformOut.reset();
- return transformOut;
- }
- float taskProgress = ignoreTaskOverrides
- ? nonOverrideTaskProgress
- : getStackScrollForTask(task);
-
- getStackTransform(taskProgress, nonOverrideTaskProgress, stackScroll, focusState,
- transformOut, frontTransform, false /* ignoreSingleTaskCase */, forceUpdate);
- return transformOut;
- }
- }
-
- /**
- * Like {@link #getStackTransform}, but in screen coordinates
- */
- public TaskViewTransform getStackTransformScreenCoordinates(Task task, float stackScroll,
- TaskViewTransform transformOut, TaskViewTransform frontTransform,
- Rect windowOverrideRect) {
- TaskViewTransform transform = getStackTransform(task, stackScroll, mFocusState,
- transformOut, frontTransform, true /* forceUpdate */,
- false /* ignoreTaskOverrides */);
- return transformToScreenCoordinates(transform, windowOverrideRect);
- }
-
- /**
- * Transforms the given {@param transformOut} to the screen coordinates, overriding the current
- * window rectangle with {@param windowOverrideRect} if non-null.
- */
- TaskViewTransform transformToScreenCoordinates(TaskViewTransform transformOut,
- Rect windowOverrideRect) {
- Rect windowRect = windowOverrideRect != null
- ? windowOverrideRect
- : LegacyRecentsImpl.getSystemServices().getWindowRect();
- transformOut.rect.offset(windowRect.left, windowRect.top);
- if (useGridLayout()) {
- // Draw the thumbnail a little lower to perfectly coincide with the view we are
- // transitioning to, where the header bar has already been drawn.
- transformOut.rect.offset(0, mTitleBarHeight);
- }
- return transformOut;
- }
-
- /**
- * Update/get the transform.
- *
- * @param ignoreSingleTaskCase When set, will ensure that the transform computed does not take
- * into account the special single-task case. This is only used
- * internally to ensure that we can calculate the transform for any
- * position in the stack.
- */
- public void getStackTransform(float taskProgress, float nonOverrideTaskProgress,
- float stackScroll, int focusState, TaskViewTransform transformOut,
- TaskViewTransform frontTransform, boolean ignoreSingleTaskCase, boolean forceUpdate) {
- SystemServicesProxy ssp = LegacyRecentsImpl.getSystemServices();
-
- // Ensure that the task is in range
- mUnfocusedRange.offset(stackScroll);
- mFocusedRange.offset(stackScroll);
- boolean unfocusedVisible = mUnfocusedRange.isInRange(taskProgress);
- boolean focusedVisible = mFocusedRange.isInRange(taskProgress);
-
- // Skip if the task is not visible
- if (!forceUpdate && !unfocusedVisible && !focusedVisible) {
- transformOut.reset();
- return;
- }
-
- // Map the absolute task progress to the normalized x at the stack scroll. We use this to
- // calculate positions along the curve.
- mUnfocusedRange.offset(stackScroll);
- mFocusedRange.offset(stackScroll);
- float unfocusedRangeX = mUnfocusedRange.getNormalizedX(taskProgress);
- float focusedRangeX = mFocusedRange.getNormalizedX(taskProgress);
-
- // Map the absolute task progress to the normalized x at the bounded stack scroll. We use
- // this to calculate bounded properties, like translationZ and outline alpha.
- float boundedStackScroll = Utilities.clamp(stackScroll, mMinScrollP, mMaxScrollP);
- mUnfocusedRange.offset(boundedStackScroll);
- mFocusedRange.offset(boundedStackScroll);
- float boundedScrollUnfocusedRangeX = mUnfocusedRange.getNormalizedX(taskProgress);
- float boundedScrollUnfocusedNonOverrideRangeX =
- mUnfocusedRange.getNormalizedX(nonOverrideTaskProgress);
-
- // Map the absolute task progress to the normalized x at the upper bounded stack scroll.
- // We use this to calculate the dim, which is bounded only on one end.
- float lowerBoundedStackScroll = Utilities.clamp(stackScroll, -Float.MAX_VALUE, mMaxScrollP);
- mUnfocusedRange.offset(lowerBoundedStackScroll);
- mFocusedRange.offset(lowerBoundedStackScroll);
- float lowerBoundedUnfocusedRangeX = mUnfocusedRange.getNormalizedX(taskProgress);
- float lowerBoundedFocusedRangeX = mFocusedRange.getNormalizedX(taskProgress);
-
- int x = (mStackRect.width() - mTaskRect.width()) / 2;
- int y;
- float z;
- float dimAlpha;
- float viewOutlineAlpha;
- if (mNumStackTasks == 1 && !ignoreSingleTaskCase) {
- // When there is exactly one task, then decouple the task from the stack and just move
- // in screen space
- float tmpP = (mMinScrollP - stackScroll) / mNumStackTasks;
- int centerYOffset = (mStackRect.top - mTaskRect.top) +
- (mStackRect.height() - mSystemInsets.bottom - mTaskRect.height()) / 2;
- y = centerYOffset + getYForDeltaP(tmpP, 0);
- z = mMaxTranslationZ;
- dimAlpha = 0f;
- viewOutlineAlpha = OUTLINE_ALPHA_MIN_VALUE +
- (OUTLINE_ALPHA_MAX_VALUE - OUTLINE_ALPHA_MIN_VALUE) / 2f;
-
- } else {
- // Otherwise, update the task to the stack layout
- int unfocusedY = (int) ((1f - mUnfocusedCurveInterpolator.getInterpolation(
- unfocusedRangeX)) * mStackRect.height());
- int focusedY = (int) ((1f - mFocusedCurveInterpolator.getInterpolation(
- focusedRangeX)) * mStackRect.height());
- float unfocusedDim = mUnfocusedDimCurveInterpolator.getInterpolation(
- lowerBoundedUnfocusedRangeX);
- float focusedDim = mFocusedDimCurveInterpolator.getInterpolation(
- lowerBoundedFocusedRangeX);
-
- // Special case, because we override the initial task positions differently for small
- // stacks, we clamp the dim to 0 in the initial position, and then only modulate the
- // dim when the task is scrolled back towards the top of the screen
- if (mNumStackTasks <= 2 && nonOverrideTaskProgress == 0f) {
- if (boundedScrollUnfocusedRangeX >= 0.5f) {
- unfocusedDim = 0f;
- } else {
- float offset = mUnfocusedDimCurveInterpolator.getInterpolation(0.5f);
- unfocusedDim -= offset;
- unfocusedDim *= MAX_DIM / (MAX_DIM - offset);
- }
- }
- y = (mStackRect.top - mTaskRect.top) +
- (int) com.android.systemui.recents.utilities.Utilities
- .mapRange(focusState, unfocusedY, focusedY);
- z = Utilities.mapRange(Utilities.clamp01(boundedScrollUnfocusedNonOverrideRangeX),
- mMinTranslationZ, mMaxTranslationZ);
- dimAlpha = com.android.systemui.recents.utilities.Utilities
- .mapRange(focusState, unfocusedDim, focusedDim);
- viewOutlineAlpha = Utilities.mapRange(Utilities.clamp01(boundedScrollUnfocusedRangeX),
- OUTLINE_ALPHA_MIN_VALUE, OUTLINE_ALPHA_MAX_VALUE);
- }
-
- // Fill out the transform
- transformOut.scale = 1f;
- transformOut.alpha = 1f;
- transformOut.translationZ = z;
- transformOut.dimAlpha = dimAlpha;
- transformOut.viewOutlineAlpha = viewOutlineAlpha;
- transformOut.rect.set(mTaskRect);
- transformOut.rect.offset(x, y);
- Utilities.scaleRectAboutCenter(transformOut.rect, transformOut.scale);
- transformOut.visible = (transformOut.rect.top < mStackRect.bottom) &&
- (frontTransform == null || transformOut.rect.top != frontTransform.rect.top);
- }
-
- /**
- * Returns the untransformed task view bounds.
- */
- public Rect getUntransformedTaskViewBounds() {
- return new Rect(mTaskRect);
- }
-
- /**
- * Returns the scroll progress to scroll to such that the top of the task is at the top of the
- * stack.
- */
- float getStackScrollForTask(Task t) {
- Float overrideP = mTaskIndexOverrideMap.get(t.key.id, null);
- if (LegacyRecentsImpl.getConfiguration().isLowRamDevice || overrideP == null) {
- return (float) mTaskIndexMap.get(t.key.id, 0);
- }
- return overrideP;
- }
-
- /**
- * Returns the original scroll progress to scroll to such that the top of the task is at the top
- * of the stack.
- */
- float getStackScrollForTaskIgnoreOverrides(Task t) {
- return (float) mTaskIndexMap.get(t.key.id, 0);
- }
-
- /**
- * Returns the scroll progress to scroll to such that the top of the task at the initial top
- * offset (which is at the task's brightest point).
- */
- float getStackScrollForTaskAtInitialOffset(Task t) {
- if (LegacyRecentsImpl.getConfiguration().isLowRamDevice) {
- RecentsActivityLaunchState launchState = LegacyRecentsImpl.getConfiguration().getLaunchState();
- return mTaskStackLowRamLayoutAlgorithm.getInitialScrollP(mNumStackTasks,
- launchState.launchedFromHome || launchState.launchedFromPipApp
- || launchState.launchedWithNextPipApp);
- }
- float normX = getNormalizedXFromUnfocusedY(mInitialTopOffset, FROM_TOP);
- mUnfocusedRange.offset(0f);
- return Utilities.clamp((float) mTaskIndexMap.get(t.key.id, 0) - Math.max(0,
- mUnfocusedRange.getAbsoluteX(normX)), mMinScrollP, mMaxScrollP);
- }
-
- /**
- * Maps a movement in screen y, relative to {@param downY}, to a movement in along the arc
- * length of the curve. We know the curve is mostly flat, so we just map the length of the
- * screen along the arc-length proportionally (1/arclength).
- */
- public float getDeltaPForY(int downY, int y) {
- if (LegacyRecentsImpl.getConfiguration().isLowRamDevice) {
- return mTaskStackLowRamLayoutAlgorithm.scrollToPercentage(downY - y);
- }
- float deltaP = (float) (y - downY) / mStackRect.height() *
- mUnfocusedCurveInterpolator.getArcLength();
- return -deltaP;
- }
-
- /**
- * This is the inverse of {@link #getDeltaPForY}. Given a movement along the arc length
- * of the curve, map back to the screen y.
- */
- public int getYForDeltaP(float downScrollP, float p) {
- if (LegacyRecentsImpl.getConfiguration().isLowRamDevice) {
- return mTaskStackLowRamLayoutAlgorithm.percentageToScroll(downScrollP - p);
- }
- int y = (int) ((p - downScrollP) * mStackRect.height() *
- (1f / mUnfocusedCurveInterpolator.getArcLength()));
- return -y;
- }
-
- /**
- * Returns the task stack bounds in the current orientation. This rect takes into account the
- * top and right system insets (but not the bottom inset) and left/right paddings, but _not_
- * the top/bottom padding or insets.
- */
- public void getTaskStackBounds(Rect displayRect, Rect windowRect, int topInset, int leftInset,
- int rightInset, Rect taskStackBounds) {
- taskStackBounds.set(windowRect.left + leftInset, windowRect.top + topInset,
- windowRect.right - rightInset, windowRect.bottom);
-
- // Ensure that the new width is at most the smaller display edge size
- int sideMargin = getScaleForExtent(windowRect, displayRect, mBaseSideMargin, mMinMargin,
- WIDTH);
- int targetStackWidth = taskStackBounds.width() - 2 * sideMargin;
- if (Utilities.getAppConfiguration(mContext).orientation
- == Configuration.ORIENTATION_LANDSCAPE) {
- // If we are in landscape, calculate the width of the stack in portrait and ensure that
- // we are not larger than that size
- Rect portraitDisplayRect = new Rect(0, 0,
- Math.min(displayRect.width(), displayRect.height()),
- Math.max(displayRect.width(), displayRect.height()));
- int portraitSideMargin = getScaleForExtent(portraitDisplayRect, portraitDisplayRect,
- mBaseSideMargin, mMinMargin, WIDTH);
- targetStackWidth = Math.min(targetStackWidth,
- portraitDisplayRect.width() - 2 * portraitSideMargin);
- }
- taskStackBounds.inset((taskStackBounds.width() - targetStackWidth) / 2, 0);
- }
-
- /**
- * Retrieves resources that are constant regardless of the current configuration of the device.
- */
- public static int getDimensionForDevice(Context ctx, int phoneResId,
- int tabletResId, int xlargeTabletResId, int gridLayoutResId) {
- return getDimensionForDevice(ctx, phoneResId, phoneResId, tabletResId, tabletResId,
- xlargeTabletResId, xlargeTabletResId, gridLayoutResId);
- }
-
- /**
- * Retrieves resources that are constant regardless of the current configuration of the device.
- */
- public static int getDimensionForDevice(Context ctx, int phonePortResId, int phoneLandResId,
- int tabletPortResId, int tabletLandResId, int xlargeTabletPortResId,
- int xlargeTabletLandResId, int gridLayoutResId) {
- RecentsConfiguration config = LegacyRecentsImpl.getConfiguration();
- Resources res = ctx.getResources();
- boolean isLandscape = Utilities.getAppConfiguration(ctx).orientation ==
- Configuration.ORIENTATION_LANDSCAPE;
- if (config.isGridEnabled) {
- return res.getDimensionPixelSize(gridLayoutResId);
- } else if (config.isXLargeScreen) {
- return res.getDimensionPixelSize(isLandscape
- ? xlargeTabletLandResId
- : xlargeTabletPortResId);
- } else if (config.isLargeScreen) {
- return res.getDimensionPixelSize(isLandscape
- ? tabletLandResId
- : tabletPortResId);
- } else {
- return res.getDimensionPixelSize(isLandscape
- ? phoneLandResId
- : phonePortResId);
- }
- }
-
- /**
- * Returns the normalized x on the unfocused curve given an absolute Y position (relative to the
- * stack height).
- */
- private float getNormalizedXFromUnfocusedY(float y, @AnchorSide int fromSide) {
- float offset = (fromSide == FROM_TOP)
- ? mStackRect.height() - y
- : y;
- float offsetPct = offset / mStackRect.height();
- return mUnfocusedCurveInterpolator.getX(offsetPct);
- }
-
- /**
- * Returns the normalized x on the focused curve given an absolute Y position (relative to the
- * stack height).
- */
- private float getNormalizedXFromFocusedY(float y, @AnchorSide int fromSide) {
- float offset = (fromSide == FROM_TOP)
- ? mStackRect.height() - y
- : y;
- float offsetPct = offset / mStackRect.height();
- return mFocusedCurveInterpolator.getX(offsetPct);
- }
-
- /**
- * Creates a new path for the focused curve.
- */
- private Path constructFocusedCurve() {
- // Initialize the focused curve. This curve is a piecewise curve composed of several
- // linear pieces that goes from (0,1) through (0.5, peek height offset),
- // (0.5, bottom task offsets), and (1,0).
- float topPeekHeightPct = (float) mFocusedTopPeekHeight / mStackRect.height();
- float bottomPeekHeightPct = (float) (mStackBottomOffset + mFocusedBottomPeekHeight) /
- mStackRect.height();
- float minBottomPeekHeightPct = (float) (mFocusedTopPeekHeight + mTaskRect.height() -
- mMinMargin) / mStackRect.height();
- Path p = new Path();
- p.moveTo(0f, 1f);
- p.lineTo(0.5f, 1f - topPeekHeightPct);
- p.lineTo(1f - (0.5f / mFocusedRange.relativeMax), Math.max(1f - minBottomPeekHeightPct,
- bottomPeekHeightPct));
- p.lineTo(1f, 0f);
- return p;
- }
-
- /**
- * Creates a new path for the unfocused curve.
- */
- private Path constructUnfocusedCurve() {
- // Initialize the unfocused curve. This curve is a piecewise curve composed of two quadradic
- // beziers that goes from (0,1) through (0.5, peek height offset) and ends at (1,0). This
- // ensures that we match the range, at which 0.5 represents the stack scroll at the current
- // task progress. Because the height offset can change depending on a resource, we compute
- // the control point of the second bezier such that between it and a first known point,
- // there is a tangent at (0.5, peek height offset).
- float cpoint1X = 0.4f;
- float cpoint1Y = 0.975f;
- float topPeekHeightPct = (float) mFocusedTopPeekHeight / mStackRect.height();
- float slope = ((1f - topPeekHeightPct) - cpoint1Y) / (0.5f - cpoint1X);
- float b = 1f - slope * cpoint1X;
- float cpoint2X = 0.65f;
- float cpoint2Y = slope * cpoint2X + b;
- Path p = new Path();
- p.moveTo(0f, 1f);
- p.cubicTo(0f, 1f, cpoint1X, cpoint1Y, 0.5f, 1f - topPeekHeightPct);
- p.cubicTo(0.5f, 1f - topPeekHeightPct, cpoint2X, cpoint2Y, 1f, 0f);
- return p;
- }
-
- /**
- * Creates a new path for the focused dim curve.
- */
- private Path constructFocusedDimCurve() {
- Path p = new Path();
- // The focused dim interpolator starts at max dim, reduces to zero at 0.5 (the focused
- // task), then goes back to max dim at the next task
- p.moveTo(0f, MAX_DIM);
- p.lineTo(0.5f, 0f);
- p.lineTo(0.5f + (0.5f / mFocusedRange.relativeMax), MAX_DIM);
- p.lineTo(1f, MAX_DIM);
- return p;
- }
-
- /**
- * Creates a new path for the unfocused dim curve.
- */
- private Path constructUnfocusedDimCurve() {
- float focusX = getNormalizedXFromUnfocusedY(mInitialTopOffset, FROM_TOP);
- float cpoint2X = focusX + (1f - focusX) / 2;
- Path p = new Path();
- // The unfocused dim interpolator starts at max dim, reduces to zero at 0.5 (the focused
- // task), then goes back to max dim towards the front of the stack
- p.moveTo(0f, MAX_DIM);
- p.cubicTo(focusX * 0.5f, MAX_DIM, focusX * 0.75f, MAX_DIM * 0.75f, focusX, 0f);
- p.cubicTo(cpoint2X, 0f, cpoint2X, MED_DIM, 1f, MED_DIM);
- return p;
- }
-
- /**
- * Scales the given {@param value} to the scale of the {@param instance} rect relative to the
- * {@param other} rect in the {@param extent} side.
- */
- private int getScaleForExtent(Rect instance, Rect other, int value, int minValue,
- @Extent int extent) {
- if (extent == WIDTH) {
- float scale = Utilities.clamp01((float) instance.width() / other.width());
- return Math.max(minValue, (int) (scale * value));
- } else if (extent == HEIGHT) {
- float scale = Utilities.clamp01((float) instance.height() / other.height());
- return Math.max(minValue, (int) (scale * value));
- }
- return value;
- }
-
- /**
- * Updates the current transforms that would put a TaskView at the front and back of the stack.
- */
- private void updateFrontBackTransforms() {
- // Return early if we have not yet initialized
- if (mStackRect.isEmpty()) {
- return;
- }
- if (LegacyRecentsImpl.getConfiguration().isLowRamDevice) {
- mTaskStackLowRamLayoutAlgorithm.getBackOfStackTransform(mBackOfStackTransform, this);
- mTaskStackLowRamLayoutAlgorithm.getFrontOfStackTransform(mFrontOfStackTransform, this);
- return;
- }
-
- float min = Utilities.mapRange(mFocusState, mUnfocusedRange.relativeMin,
- mFocusedRange.relativeMin);
- float max = Utilities.mapRange(mFocusState, mUnfocusedRange.relativeMax,
- mFocusedRange.relativeMax);
- getStackTransform(min, min, 0f, mFocusState, mBackOfStackTransform, null,
- true /* ignoreSingleTaskCase */, true /* forceUpdate */);
- getStackTransform(max, max, 0f, mFocusState, mFrontOfStackTransform, null,
- true /* ignoreSingleTaskCase */, true /* forceUpdate */);
- mBackOfStackTransform.visible = true;
- mFrontOfStackTransform.visible = true;
- }
-
- /**
- * Returns the proper task rectangle according to the current grid state.
- */
- public Rect getTaskRect() {
- if (LegacyRecentsImpl.getConfiguration().isLowRamDevice) {
- return mTaskStackLowRamLayoutAlgorithm.getTaskRect();
- }
- return useGridLayout() ? mTaskGridLayoutAlgorithm.getTaskGridRect() : mTaskRect;
- }
-
- public void dump(String prefix, PrintWriter writer) {
- String innerPrefix = prefix + " ";
-
- writer.print(prefix); writer.print(TAG);
- writer.write(" numStackTasks="); writer.print(mNumStackTasks);
- writer.println();
-
- writer.print(innerPrefix);
- writer.print("insets="); writer.print(Utilities.dumpRect(mSystemInsets));
- writer.print(" stack="); writer.print(Utilities.dumpRect(mStackRect));
- writer.print(" task="); writer.print(Utilities.dumpRect(mTaskRect));
- writer.print(" actionButton="); writer.print(
- Utilities.dumpRect(mStackActionButtonRect));
- writer.println();
-
- writer.print(innerPrefix);
- writer.print("minScroll="); writer.print(mMinScrollP);
- writer.print(" maxScroll="); writer.print(mMaxScrollP);
- writer.print(" initialScroll="); writer.print(mInitialScrollP);
- writer.println();
-
- writer.print(innerPrefix);
- writer.print("focusState="); writer.print(mFocusState);
- writer.println();
-
- if (mTaskIndexOverrideMap.size() > 0) {
- for (int i = mTaskIndexOverrideMap.size() - 1; i >= 0; i--) {
- int taskId = mTaskIndexOverrideMap.keyAt(i);
- float x = mTaskIndexMap.get(taskId);
- float overrideX = mTaskIndexOverrideMap.get(taskId, 0f);
-
- writer.print(innerPrefix);
- writer.print("taskId= "); writer.print(taskId);
- writer.print(" x= "); writer.print(x);
- writer.print(" overrideX= "); writer.print(overrideX);
- writer.println();
- }
- }
- }
-} \ No newline at end of file
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/TaskStackView.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/TaskStackView.java
deleted file mode 100644
index b89218c81a91..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/TaskStackView.java
+++ /dev/null
@@ -1,2291 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.views;
-
-import android.animation.Animator;
-import android.animation.AnimatorListenerAdapter;
-import android.animation.ValueAnimator;
-import android.annotation.IntDef;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.res.Configuration;
-import android.content.res.Resources;
-import android.graphics.Rect;
-import android.os.Bundle;
-import android.util.ArrayMap;
-import android.util.ArraySet;
-import android.util.MutableBoolean;
-import android.view.LayoutInflater;
-import android.view.MotionEvent;
-import android.view.View;
-import android.view.ViewDebug;
-import android.view.ViewGroup;
-import android.view.accessibility.AccessibilityEvent;
-import android.view.accessibility.AccessibilityNodeInfo;
-import android.widget.FrameLayout;
-import android.widget.ScrollView;
-
-import com.android.internal.logging.MetricsLogger;
-import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
-import com.android.systemui.Dependency;
-import com.android.systemui.Interpolators;
-import com.android.systemui.R;
-import com.android.systemui.plugins.FalsingManager;
-import com.android.systemui.recents.LegacyRecentsImpl;
-import com.android.systemui.recents.RecentsActivity;
-import com.android.systemui.recents.RecentsActivityLaunchState;
-import com.android.systemui.recents.RecentsConfiguration;
-import com.android.systemui.recents.RecentsDebugFlags;
-import com.android.systemui.recents.RecentsImpl;
-import com.android.systemui.recents.events.EventBus;
-import com.android.systemui.recents.events.activity.CancelEnterRecentsWindowAnimationEvent;
-import com.android.systemui.recents.events.activity.ConfigurationChangedEvent;
-import com.android.systemui.recents.events.activity.DismissRecentsToHomeAnimationStarted;
-import com.android.systemui.recents.events.activity.EnterRecentsWindowAnimationCompletedEvent;
-import com.android.systemui.recents.events.activity.HideRecentsEvent;
-import com.android.systemui.recents.events.activity.HideStackActionButtonEvent;
-import com.android.systemui.recents.events.activity.LaunchMostRecentTaskRequestEvent;
-import com.android.systemui.recents.events.activity.LaunchNextTaskRequestEvent;
-import com.android.systemui.recents.events.activity.LaunchTaskEvent;
-import com.android.systemui.recents.events.activity.LaunchTaskStartedEvent;
-import com.android.systemui.recents.events.activity.MultiWindowStateChangedEvent;
-import com.android.systemui.recents.events.activity.PackagesChangedEvent;
-import com.android.systemui.recents.events.activity.ShowEmptyViewEvent;
-import com.android.systemui.recents.events.activity.ShowStackActionButtonEvent;
-import com.android.systemui.recents.events.component.ActivityPinnedEvent;
-import com.android.systemui.recents.events.component.ExpandPipEvent;
-import com.android.systemui.recents.events.component.HidePipMenuEvent;
-import com.android.systemui.recents.events.component.RecentsVisibilityChangedEvent;
-import com.android.systemui.recents.events.ui.AllTaskViewsDismissedEvent;
-import com.android.systemui.recents.events.ui.DeleteTaskDataEvent;
-import com.android.systemui.recents.events.ui.DismissAllTaskViewsEvent;
-import com.android.systemui.recents.events.ui.DismissTaskViewEvent;
-import com.android.systemui.recents.events.ui.RecentsGrowingEvent;
-import com.android.systemui.recents.events.ui.TaskViewDismissedEvent;
-import com.android.systemui.recents.events.ui.UserInteractionEvent;
-import com.android.systemui.recents.events.ui.dragndrop.DragDropTargetChangedEvent;
-import com.android.systemui.recents.events.ui.dragndrop.DragEndCancelledEvent;
-import com.android.systemui.recents.events.ui.dragndrop.DragEndEvent;
-import com.android.systemui.recents.events.ui.dragndrop.DragStartEvent;
-import com.android.systemui.recents.events.ui.focus.DismissFocusedTaskViewEvent;
-import com.android.systemui.recents.events.ui.focus.FocusNextTaskViewEvent;
-import com.android.systemui.recents.events.ui.focus.FocusPreviousTaskViewEvent;
-import com.android.systemui.recents.events.ui.focus.NavigateTaskViewEvent;
-import com.android.systemui.recents.misc.DozeTrigger;
-import com.android.systemui.recents.misc.ReferenceCountedTrigger;
-import com.android.systemui.recents.misc.SystemServicesProxy;
-import com.android.systemui.recents.model.TaskStack;
-import com.android.systemui.recents.utilities.AnimationProps;
-import com.android.systemui.recents.utilities.Utilities;
-import com.android.systemui.recents.views.grid.GridTaskView;
-import com.android.systemui.recents.views.grid.TaskGridLayoutAlgorithm;
-import com.android.systemui.recents.views.grid.TaskViewFocusFrame;
-import com.android.systemui.shared.recents.model.Task;
-import com.android.systemui.shared.system.ActivityManagerWrapper;
-
-import java.io.PrintWriter;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.util.ArrayList;
-import java.util.List;
-
-
-/* The visual representation of a task stack view */
-public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCallbacks,
- TaskView.TaskViewCallbacks, TaskStackViewScroller.TaskStackViewScrollerCallbacks,
- TaskStackLayoutAlgorithm.TaskStackLayoutAlgorithmCallbacks,
- ViewPool.ViewPoolConsumer<TaskView, Task> {
-
- private static final String TAG = "TaskStackView";
-
- // The thresholds at which to show/hide the stack action button.
- private static final float SHOW_STACK_ACTION_BUTTON_SCROLL_THRESHOLD = 0.3f;
- private static final float HIDE_STACK_ACTION_BUTTON_SCROLL_THRESHOLD = 0.3f;
-
- public static final int DEFAULT_SYNC_STACK_DURATION = 200;
- public static final int SLOW_SYNC_STACK_DURATION = 250;
- private static final int DRAG_SCALE_DURATION = 175;
- static final float DRAG_SCALE_FACTOR = 1.05f;
-
- private static final int LAUNCH_NEXT_SCROLL_BASE_DURATION = 216;
- private static final int LAUNCH_NEXT_SCROLL_INCR_DURATION = 32;
-
- // The actions to perform when resetting to initial state,
- @Retention(RetentionPolicy.SOURCE)
- @IntDef({INITIAL_STATE_UPDATE_NONE, INITIAL_STATE_UPDATE_ALL, INITIAL_STATE_UPDATE_LAYOUT_ONLY})
- public @interface InitialStateAction {}
- /** Do not update the stack and layout to the initial state. */
- private static final int INITIAL_STATE_UPDATE_NONE = 0;
- /** Update both the stack and layout to the initial state. */
- private static final int INITIAL_STATE_UPDATE_ALL = 1;
- /** Update only the layout to the initial state. */
- private static final int INITIAL_STATE_UPDATE_LAYOUT_ONLY = 2;
-
- private LayoutInflater mInflater;
- private TaskStack mStack = new TaskStack();
- @ViewDebug.ExportedProperty(deepExport=true, prefix="layout_")
- TaskStackLayoutAlgorithm mLayoutAlgorithm;
- // The stable layout algorithm is only used to calculate the task rect with the stable bounds
- private TaskStackLayoutAlgorithm mStableLayoutAlgorithm;
- @ViewDebug.ExportedProperty(deepExport=true, prefix="scroller_")
- private TaskStackViewScroller mStackScroller;
- @ViewDebug.ExportedProperty(deepExport=true, prefix="touch_")
- private TaskStackViewTouchHandler mTouchHandler;
- private TaskStackAnimationHelper mAnimationHelper;
- private ViewPool<TaskView, Task> mViewPool;
-
- private ArrayList<TaskView> mTaskViews = new ArrayList<>();
- private ArrayList<TaskViewTransform> mCurrentTaskTransforms = new ArrayList<>();
- private ArraySet<Task.TaskKey> mIgnoreTasks = new ArraySet<>();
- private AnimationProps mDeferredTaskViewLayoutAnimation = null;
-
- @ViewDebug.ExportedProperty(deepExport=true, prefix="doze_")
- private DozeTrigger mUIDozeTrigger;
- @ViewDebug.ExportedProperty(deepExport=true, prefix="focused_task_")
- private Task mFocusedTask;
-
- private int mTaskCornerRadiusPx;
- private int mDividerSize;
- private int mStartTimerIndicatorDuration;
-
- @ViewDebug.ExportedProperty(category="recents")
- private boolean mTaskViewsClipDirty = true;
- @ViewDebug.ExportedProperty(category="recents")
- private boolean mEnterAnimationComplete = false;
- @ViewDebug.ExportedProperty(category="recents")
- private boolean mStackReloaded = false;
- @ViewDebug.ExportedProperty(category="recents")
- private boolean mFinishedLayoutAfterStackReload = false;
- @ViewDebug.ExportedProperty(category="recents")
- private boolean mLaunchNextAfterFirstMeasure = false;
- @ViewDebug.ExportedProperty(category="recents")
- @InitialStateAction
- private int mInitialState = INITIAL_STATE_UPDATE_ALL;
- @ViewDebug.ExportedProperty(category="recents")
- private boolean mInMeasureLayout = false;
- @ViewDebug.ExportedProperty(category="recents")
- boolean mTouchExplorationEnabled;
- @ViewDebug.ExportedProperty(category="recents")
- boolean mScreenPinningEnabled;
-
- // The stable stack bounds are the full bounds that we were measured with from RecentsView
- @ViewDebug.ExportedProperty(category="recents")
- private Rect mStableStackBounds = new Rect();
- // The current stack bounds are dynamic and may change as the user drags and drops
- @ViewDebug.ExportedProperty(category="recents")
- private Rect mStackBounds = new Rect();
- // The current window bounds at the point we were measured
- @ViewDebug.ExportedProperty(category="recents")
- private Rect mStableWindowRect = new Rect();
- // The current window bounds are dynamic and may change as the user drags and drops
- @ViewDebug.ExportedProperty(category="recents")
- private Rect mWindowRect = new Rect();
- // The current display bounds
- @ViewDebug.ExportedProperty(category="recents")
- private Rect mDisplayRect = new Rect();
- // The current display orientation
- @ViewDebug.ExportedProperty(category="recents")
- private int mDisplayOrientation = Configuration.ORIENTATION_UNDEFINED;
-
- private Rect mTmpRect = new Rect();
- private ArrayMap<Task.TaskKey, TaskView> mTmpTaskViewMap = new ArrayMap<>();
- private List<TaskView> mTmpTaskViews = new ArrayList<>();
- private TaskViewTransform mTmpTransform = new TaskViewTransform();
- private int[] mTmpIntPair = new int[2];
- private boolean mResetToInitialStateWhenResized;
- private int mLastWidth;
- private int mLastHeight;
- private boolean mStackActionButtonVisible;
-
- // Percentage of last ScrollP from the min to max scrollP that lives after configuration changes
- private float mLastScrollPPercent = -1;
-
- // We keep track of the task view focused by user interaction and draw a frame around it in the
- // grid layout.
- private TaskViewFocusFrame mTaskViewFocusFrame;
-
- private Task mPrefetchingTask;
- private final float mFastFlingVelocity;
-
- // A convenience update listener to request updating clipping of tasks
- private ValueAnimator.AnimatorUpdateListener mRequestUpdateClippingListener =
- new ValueAnimator.AnimatorUpdateListener() {
- @Override
- public void onAnimationUpdate(ValueAnimator animation) {
- if (!mTaskViewsClipDirty) {
- mTaskViewsClipDirty = true;
- invalidate();
- }
- }
- };
-
- private DropTarget mStackDropTarget = new DropTarget() {
- @Override
- public boolean acceptsDrop(int x, int y, int width, int height, Rect insets,
- boolean isCurrentTarget) {
- // This drop target has a fixed bounds and should be checked last, so just fall through
- // if it is the current target
- if (!isCurrentTarget) {
- return mLayoutAlgorithm.mStackRect.contains(x, y);
- }
- return false;
- }
- };
-
- public TaskStackView(Context context) {
- super(context);
- SystemServicesProxy ssp = LegacyRecentsImpl.getSystemServices();
- Resources res = context.getResources();
-
- // Set the stack first
- mStack.setCallbacks(this);
- mViewPool = new ViewPool<>(context, this);
- mInflater = LayoutInflater.from(context);
- mLayoutAlgorithm = new TaskStackLayoutAlgorithm(context, this);
- mStableLayoutAlgorithm = new TaskStackLayoutAlgorithm(context, null);
- mStackScroller = new TaskStackViewScroller(context, this, mLayoutAlgorithm);
- mTouchHandler = new TaskStackViewTouchHandler(
- context, this, mStackScroller, Dependency.get(FalsingManager.class));
- mAnimationHelper = new TaskStackAnimationHelper(context, this);
- mTaskCornerRadiusPx = LegacyRecentsImpl.getConfiguration().isGridEnabled ?
- res.getDimensionPixelSize(R.dimen.recents_grid_task_view_rounded_corners_radius) :
- res.getDimensionPixelSize(R.dimen.recents_task_view_rounded_corners_radius);
- mFastFlingVelocity = res.getDimensionPixelSize(R.dimen.recents_fast_fling_velocity);
- mDividerSize = ssp.getDockedDividerSize(context);
- mDisplayOrientation = Utilities.getAppConfiguration(mContext).orientation;
- mDisplayRect = ssp.getDisplayRect();
- mStackActionButtonVisible = false;
-
- // Create a frame to draw around the focused task view
- if (LegacyRecentsImpl.getConfiguration().isGridEnabled) {
- mTaskViewFocusFrame = new TaskViewFocusFrame(mContext, this,
- mLayoutAlgorithm.mTaskGridLayoutAlgorithm);
- addView(mTaskViewFocusFrame);
- getViewTreeObserver().addOnGlobalFocusChangeListener(mTaskViewFocusFrame);
- }
-
- int taskBarDismissDozeDelaySeconds = getResources().getInteger(
- R.integer.recents_task_bar_dismiss_delay_seconds);
- mUIDozeTrigger = new DozeTrigger(taskBarDismissDozeDelaySeconds, new Runnable() {
- @Override
- public void run() {
- // Show the task bar dismiss buttons
- List<TaskView> taskViews = getTaskViews();
- int taskViewCount = taskViews.size();
- for (int i = 0; i < taskViewCount; i++) {
- TaskView tv = taskViews.get(i);
- tv.startNoUserInteractionAnimation();
- }
- }
- });
- setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
- }
-
- @Override
- protected void onAttachedToWindow() {
- EventBus.getDefault().register(this, RecentsActivity.EVENT_BUS_PRIORITY + 1);
- super.onAttachedToWindow();
- readSystemFlags();
- }
-
- @Override
- protected void onDetachedFromWindow() {
- super.onDetachedFromWindow();
- EventBus.getDefault().unregister(this);
- }
-
- /**
- * Called from RecentsActivity when it is relaunched.
- */
- void onReload(boolean isResumingFromVisible) {
- if (!isResumingFromVisible) {
- // Reset the focused task
- resetFocusedTask(getFocusedTask());
- }
-
- // Reset the state of each of the task views
- List<TaskView> taskViews = new ArrayList<>();
- taskViews.addAll(getTaskViews());
- taskViews.addAll(mViewPool.getViews());
- for (int i = taskViews.size() - 1; i >= 0; i--) {
- taskViews.get(i).onReload(isResumingFromVisible);
- }
-
- // Reset the stack state
- readSystemFlags();
- mTaskViewsClipDirty = true;
- mUIDozeTrigger.stopDozing();
- if (!isResumingFromVisible) {
- mStackScroller.reset();
- mStableLayoutAlgorithm.reset();
- mLayoutAlgorithm.reset();
- mLastScrollPPercent = -1;
- }
-
- // Since we always animate to the same place in (the initial state), always reset the stack
- // to the initial state when resuming
- mStackReloaded = true;
- mFinishedLayoutAfterStackReload = false;
- mLaunchNextAfterFirstMeasure = false;
- mInitialState = INITIAL_STATE_UPDATE_ALL;
- requestLayout();
- }
-
- /**
- * Sets the stack tasks of this TaskStackView from the given TaskStack.
- */
- public void setTasks(TaskStack stack, boolean allowNotifyStackChanges) {
- boolean isInitialized = mLayoutAlgorithm.isInitialized();
-
- // Only notify if we are already initialized, otherwise, everything will pick up all the
- // new and old tasks when we next layout
- mStack.setTasks(stack, allowNotifyStackChanges && isInitialized);
- }
-
- /** Returns the task stack. */
- public TaskStack getStack() {
- return mStack;
- }
-
- /**
- * Updates this TaskStackView to the initial state.
- */
- public void updateToInitialState() {
- mStackScroller.setStackScrollToInitialState();
- mLayoutAlgorithm.setTaskOverridesForInitialState(mStack, false /* ignoreScrollToFront */);
- }
-
- /** Updates the list of task views */
- void updateTaskViewsList() {
- mTaskViews.clear();
- int childCount = getChildCount();
- for (int i = 0; i < childCount; i++) {
- View v = getChildAt(i);
- if (v instanceof TaskView) {
- mTaskViews.add((TaskView) v);
- }
- }
- }
-
- /** Gets the list of task views */
- List<TaskView> getTaskViews() {
- return mTaskViews;
- }
-
- /**
- * Returns the front most task view.
- */
- private TaskView getFrontMostTaskView() {
- List<TaskView> taskViews = getTaskViews();
- if (taskViews.isEmpty()) {
- return null;
- }
- return taskViews.get(taskViews.size() - 1);
- }
-
- /**
- * Finds the child view given a specific {@param task}.
- */
- public TaskView getChildViewForTask(Task t) {
- List<TaskView> taskViews = getTaskViews();
- int taskViewCount = taskViews.size();
- for (int i = 0; i < taskViewCount; i++) {
- TaskView tv = taskViews.get(i);
- if (tv.getTask() == t) {
- return tv;
- }
- }
- return null;
- }
-
- /** Returns the stack algorithm for this task stack. */
- public TaskStackLayoutAlgorithm getStackAlgorithm() {
- return mLayoutAlgorithm;
- }
-
- /** Returns the grid algorithm for this task stack. */
- public TaskGridLayoutAlgorithm getGridAlgorithm() {
- return mLayoutAlgorithm.mTaskGridLayoutAlgorithm;
- }
-
- /**
- * Returns the touch handler for this task stack.
- */
- public TaskStackViewTouchHandler getTouchHandler() {
- return mTouchHandler;
- }
-
- /**
- * Adds a task to the ignored set.
- */
- void addIgnoreTask(Task task) {
- mIgnoreTasks.add(task.key);
- }
-
- /**
- * Removes a task from the ignored set.
- */
- void removeIgnoreTask(Task task) {
- mIgnoreTasks.remove(task.key);
- }
-
- /**
- * Returns whether the specified {@param task} is ignored.
- */
- boolean isIgnoredTask(Task task) {
- return mIgnoreTasks.contains(task.key);
- }
-
- /**
- * Computes the task transforms at the current stack scroll for all visible tasks. If a valid
- * target stack scroll is provided (ie. is different than {@param curStackScroll}), then the
- * visible range includes all tasks at the target stack scroll. This is useful for ensure that
- * all views necessary for a transition or animation will be visible at the start.
- *
- * @param taskTransforms The set of task view transforms to reuse, this list will be sized to
- * match the size of {@param tasks}
- * @param tasks The set of tasks for which to generate transforms
- * @param curStackScroll The current stack scroll
- * @param targetStackScroll The stack scroll that we anticipate we are going to be scrolling to.
- * The range of the union of the visible views at the current and
- * target stack scrolls will be returned.
- * @param ignoreTasksSet The set of tasks to skip for purposes of calculaing the visible range.
- * Transforms will still be calculated for the ignore tasks.
- * @return the front and back most visible task indices (there may be non visible tasks in
- * between this range)
- */
- int[] computeVisibleTaskTransforms(ArrayList<TaskViewTransform> taskTransforms,
- ArrayList<Task> tasks, float curStackScroll, float targetStackScroll,
- ArraySet<Task.TaskKey> ignoreTasksSet, boolean ignoreTaskOverrides) {
- int taskCount = tasks.size();
- int[] visibleTaskRange = mTmpIntPair;
- visibleTaskRange[0] = -1;
- visibleTaskRange[1] = -1;
- boolean useTargetStackScroll = Float.compare(curStackScroll, targetStackScroll) != 0;
-
- // We can reuse the task transforms where possible to reduce object allocation
- matchTaskListSize(tasks, taskTransforms);
-
- // Update the stack transforms
- TaskViewTransform frontTransform = null;
- TaskViewTransform frontTransformAtTarget = null;
- TaskViewTransform transform = null;
- TaskViewTransform transformAtTarget = null;
- for (int i = taskCount - 1; i >= 0; i--) {
- Task task = tasks.get(i);
-
- // Calculate the current and (if necessary) the target transform for the task
- transform = mLayoutAlgorithm.getStackTransform(task, curStackScroll,
- taskTransforms.get(i), frontTransform, ignoreTaskOverrides);
- if (useTargetStackScroll && !transform.visible) {
- // If we have a target stack scroll and the task is not currently visible, then we
- // just update the transform at the new scroll
- // TODO: Optimize this
- transformAtTarget = mLayoutAlgorithm.getStackTransform(task, targetStackScroll,
- new TaskViewTransform(), frontTransformAtTarget);
- if (transformAtTarget.visible) {
- transform.copyFrom(transformAtTarget);
- }
- }
-
- // For ignore tasks, only calculate the stack transform and skip the calculation of the
- // visible stack indices
- if (ignoreTasksSet.contains(task.key)) {
- continue;
- }
-
- frontTransform = transform;
- frontTransformAtTarget = transformAtTarget;
- if (transform.visible) {
- if (visibleTaskRange[0] < 0) {
- visibleTaskRange[0] = i;
- }
- visibleTaskRange[1] = i;
- }
- }
- return visibleTaskRange;
- }
-
- /**
- * Binds the visible {@link TaskView}s at the given target scroll.
- */
- void bindVisibleTaskViews(float targetStackScroll) {
- bindVisibleTaskViews(targetStackScroll, false /* ignoreTaskOverrides */);
- }
-
- /**
- * Synchronizes the set of children {@link TaskView}s to match the visible set of tasks in the
- * current {@link TaskStack}. This call does not continue on to update their position to the
- * computed {@link TaskViewTransform}s of the visible range, but only ensures that they will
- * be added/removed from the view hierarchy and placed in the correct Z order and initial
- * position (if not currently on screen).
- *
- * @param targetStackScroll If provided, will ensure that the set of visible {@link TaskView}s
- * includes those visible at the current stack scroll, and all at the
- * target stack scroll.
- * @param ignoreTaskOverrides If set, the visible task computation will get the transforms for
- * tasks at their non-overridden task progress
- */
- void bindVisibleTaskViews(float targetStackScroll, boolean ignoreTaskOverrides) {
- // Get all the task transforms
- ArrayList<Task> tasks = mStack.getTasks();
- int[] visibleTaskRange = computeVisibleTaskTransforms(mCurrentTaskTransforms, tasks,
- mStackScroller.getStackScroll(), targetStackScroll, mIgnoreTasks,
- ignoreTaskOverrides);
-
- // Return all the invisible children to the pool
- mTmpTaskViewMap.clear();
- List<TaskView> taskViews = getTaskViews();
- int lastFocusedTaskIndex = -1;
- int taskViewCount = taskViews.size();
- for (int i = taskViewCount - 1; i >= 0; i--) {
- TaskView tv = taskViews.get(i);
- Task task = tv.getTask();
-
- // Skip ignored tasks
- if (mIgnoreTasks.contains(task.key)) {
- continue;
- }
-
- // It is possible for the set of lingering TaskViews to differ from the stack if the
- // stack was updated before the relayout. If the task view is no longer in the stack,
- // then just return it back to the view pool.
- int taskIndex = mStack.indexOfTask(task);
- TaskViewTransform transform = null;
- if (taskIndex != -1) {
- transform = mCurrentTaskTransforms.get(taskIndex);
- }
-
- if (transform != null && transform.visible) {
- mTmpTaskViewMap.put(task.key, tv);
- } else {
- if (mTouchExplorationEnabled && Utilities.isDescendentAccessibilityFocused(tv)) {
- lastFocusedTaskIndex = taskIndex;
- resetFocusedTask(task);
- }
- mViewPool.returnViewToPool(tv);
- }
- }
-
- // Pick up all the newly visible children
- for (int i = tasks.size() - 1; i >= 0; i--) {
- Task task = tasks.get(i);
- TaskViewTransform transform = mCurrentTaskTransforms.get(i);
-
- // Skip ignored tasks
- if (mIgnoreTasks.contains(task.key)) {
- continue;
- }
-
- // Skip the invisible stack tasks
- if (!transform.visible) {
- continue;
- }
-
- TaskView tv = mTmpTaskViewMap.get(task.key);
- if (tv == null) {
- tv = mViewPool.pickUpViewFromPool(task, task);
- if (transform.rect.top <= mLayoutAlgorithm.mStackRect.top) {
- updateTaskViewToTransform(tv, mLayoutAlgorithm.getBackOfStackTransform(),
- AnimationProps.IMMEDIATE);
- } else {
- updateTaskViewToTransform(tv, mLayoutAlgorithm.getFrontOfStackTransform(),
- AnimationProps.IMMEDIATE);
- }
- } else {
- // Reattach it in the right z order
- final int taskIndex = mStack.indexOfTask(task);
- final int insertIndex = findTaskViewInsertIndex(task, taskIndex);
- if (insertIndex != getTaskViews().indexOf(tv)){
- detachViewFromParent(tv);
- attachViewToParent(tv, insertIndex, tv.getLayoutParams());
- updateTaskViewsList();
- }
- }
- }
-
- updatePrefetchingTask(tasks, visibleTaskRange[0], visibleTaskRange[1]);
-
- // Update the focus if the previous focused task was returned to the view pool
- if (lastFocusedTaskIndex != -1) {
- int newFocusedTaskIndex = (lastFocusedTaskIndex < visibleTaskRange[1])
- ? visibleTaskRange[1]
- : visibleTaskRange[0];
- setFocusedTask(newFocusedTaskIndex, false /* scrollToTask */,
- true /* requestViewFocus */);
- TaskView focusedTaskView = getChildViewForTask(mFocusedTask);
- if (focusedTaskView != null) {
- focusedTaskView.requestAccessibilityFocus();
- }
- }
- }
-
- /**
- * @see #relayoutTaskViews(AnimationProps, ArrayMap<Task, AnimationProps>, boolean)
- */
- public void relayoutTaskViews(AnimationProps animation) {
- relayoutTaskViews(animation, null /* animationOverrides */,
- false /* ignoreTaskOverrides */);
- }
-
- /**
- * Relayout the the visible {@link TaskView}s to their current transforms as specified by the
- * {@link TaskStackLayoutAlgorithm} with the given {@param animation}. This call cancels any
- * animations that are current running on those task views, and will ensure that the children
- * {@link TaskView}s will match the set of visible tasks in the stack. If a {@link Task} has
- * an animation provided in {@param animationOverrides}, that will be used instead.
- */
- private void relayoutTaskViews(AnimationProps animation,
- ArrayMap<Task, AnimationProps> animationOverrides, boolean ignoreTaskOverrides) {
- // If we had a deferred animation, cancel that
- cancelDeferredTaskViewLayoutAnimation();
-
- // Synchronize the current set of TaskViews
- bindVisibleTaskViews(mStackScroller.getStackScroll(), ignoreTaskOverrides);
-
- // Animate them to their final transforms with the given animation
- List<TaskView> taskViews = getTaskViews();
- int taskViewCount = taskViews.size();
- for (int i = 0; i < taskViewCount; i++) {
- TaskView tv = taskViews.get(i);
- Task task = tv.getTask();
-
- if (mIgnoreTasks.contains(task.key)) {
- continue;
- }
-
- int taskIndex = mStack.indexOfTask(task);
- TaskViewTransform transform = mCurrentTaskTransforms.get(taskIndex);
- if (animationOverrides != null && animationOverrides.containsKey(task)) {
- animation = animationOverrides.get(task);
- }
-
- updateTaskViewToTransform(tv, transform, animation);
- }
- }
-
- /**
- * Posts an update to synchronize the {@link TaskView}s with the stack on the next frame.
- */
- void relayoutTaskViewsOnNextFrame(AnimationProps animation) {
- mDeferredTaskViewLayoutAnimation = animation;
- invalidate();
- }
-
- /**
- * Called to update a specific {@link TaskView} to a given {@link TaskViewTransform} with a
- * given set of {@link AnimationProps} properties.
- */
- public void updateTaskViewToTransform(TaskView taskView, TaskViewTransform transform,
- AnimationProps animation) {
- if (taskView.isAnimatingTo(transform)) {
- return;
- }
- taskView.cancelTransformAnimation();
- taskView.updateViewPropertiesToTaskTransform(transform, animation,
- mRequestUpdateClippingListener);
- }
-
- /**
- * Returns the current task transforms of all tasks, falling back to the stack layout if there
- * is no {@link TaskView} for the task.
- */
- public void getCurrentTaskTransforms(ArrayList<Task> tasks,
- ArrayList<TaskViewTransform> transformsOut) {
- matchTaskListSize(tasks, transformsOut);
- int focusState = mLayoutAlgorithm.getFocusState();
- for (int i = tasks.size() - 1; i >= 0; i--) {
- Task task = tasks.get(i);
- TaskViewTransform transform = transformsOut.get(i);
- TaskView tv = getChildViewForTask(task);
- if (tv != null) {
- transform.fillIn(tv);
- } else {
- mLayoutAlgorithm.getStackTransform(task, mStackScroller.getStackScroll(),
- focusState, transform, null, true /* forceUpdate */,
- false /* ignoreTaskOverrides */);
- }
- transform.visible = true;
- }
- }
-
- /**
- * Returns the task transforms for all the tasks in the stack if the stack was at the given
- * {@param stackScroll} and {@param focusState}.
- */
- public void getLayoutTaskTransforms(float stackScroll, int focusState, ArrayList<Task> tasks,
- boolean ignoreTaskOverrides, ArrayList<TaskViewTransform> transformsOut) {
- matchTaskListSize(tasks, transformsOut);
- for (int i = tasks.size() - 1; i >= 0; i--) {
- Task task = tasks.get(i);
- TaskViewTransform transform = transformsOut.get(i);
- mLayoutAlgorithm.getStackTransform(task, stackScroll, focusState, transform, null,
- true /* forceUpdate */, ignoreTaskOverrides);
- transform.visible = true;
- }
- }
-
- /**
- * Cancels the next deferred task view layout.
- */
- void cancelDeferredTaskViewLayoutAnimation() {
- mDeferredTaskViewLayoutAnimation = null;
- }
-
- /**
- * Cancels all {@link TaskView} animations.
- */
- void cancelAllTaskViewAnimations() {
- List<TaskView> taskViews = getTaskViews();
- for (int i = taskViews.size() - 1; i >= 0; i--) {
- final TaskView tv = taskViews.get(i);
- if (!mIgnoreTasks.contains(tv.getTask().key)) {
- tv.cancelTransformAnimation();
- }
- }
- }
-
- /**
- * Updates the clip for each of the task views from back to front.
- */
- private void clipTaskViews() {
- // We never clip task views in grid layout
- if (LegacyRecentsImpl.getConfiguration().isGridEnabled) {
- return;
- }
-
- // Update the clip on each task child
- List<TaskView> taskViews = getTaskViews();
- TaskView tmpTv = null;
- TaskView prevVisibleTv = null;
- int taskViewCount = taskViews.size();
- for (int i = 0; i < taskViewCount; i++) {
- TaskView tv = taskViews.get(i);
- TaskView frontTv = null;
- int clipBottom = 0;
-
- if (isIgnoredTask(tv.getTask())) {
- // For each of the ignore tasks, update the translationZ of its TaskView to be
- // between the translationZ of the tasks immediately underneath it
- if (prevVisibleTv != null) {
- tv.setTranslationZ(Math.max(tv.getTranslationZ(),
- prevVisibleTv.getTranslationZ() + 0.1f));
- }
- }
-
- if (i < (taskViewCount - 1) && tv.shouldClipViewInStack()) {
- // Find the next view to clip against
- for (int j = i + 1; j < taskViewCount; j++) {
- tmpTv = taskViews.get(j);
-
- if (tmpTv.shouldClipViewInStack()) {
- frontTv = tmpTv;
- break;
- }
- }
-
- // Clip against the next view, this is just an approximation since we are
- // stacked and we can make assumptions about the visibility of the this
- // task relative to the ones in front of it.
- if (frontTv != null) {
- float taskBottom = tv.getBottom();
- float frontTaskTop = frontTv.getTop();
- if (frontTaskTop < taskBottom) {
- // Map the stack view space coordinate (the rects) to view space
- clipBottom = (int) (taskBottom - frontTaskTop) - mTaskCornerRadiusPx;
- }
- }
- }
- tv.getViewBounds().setClipBottom(clipBottom);
- tv.mThumbnailView.updateThumbnailVisibility(clipBottom - tv.getPaddingBottom());
- prevVisibleTv = tv;
- }
- mTaskViewsClipDirty = false;
- }
-
- public void updateLayoutAlgorithm(boolean boundScrollToNewMinMax) {
- updateLayoutAlgorithm(boundScrollToNewMinMax, LegacyRecentsImpl.getConfiguration().getLaunchState());
- }
-
- /**
- * Updates the layout algorithm min and max virtual scroll bounds.
- */
- public void updateLayoutAlgorithm(boolean boundScrollToNewMinMax,
- RecentsActivityLaunchState launchState) {
- // Compute the min and max scroll values
- mLayoutAlgorithm.update(mStack, mIgnoreTasks, launchState, mLastScrollPPercent);
-
- if (boundScrollToNewMinMax) {
- mStackScroller.boundScroll();
- }
- }
-
- /**
- * Updates the stack layout to its stable places.
- */
- private void updateLayoutToStableBounds() {
- mWindowRect.set(mStableWindowRect);
- mStackBounds.set(mStableStackBounds);
- mLayoutAlgorithm.setSystemInsets(mStableLayoutAlgorithm.mSystemInsets);
- mLayoutAlgorithm.initialize(mDisplayRect, mWindowRect, mStackBounds);
- updateLayoutAlgorithm(true /* boundScroll */);
- }
-
- /** Returns the scroller. */
- public TaskStackViewScroller getScroller() {
- return mStackScroller;
- }
-
- /**
- * Sets the focused task to the provided (bounded taskIndex).
- *
- * @return whether or not the stack will scroll as a part of this focus change
- */
- public boolean setFocusedTask(int taskIndex, boolean scrollToTask,
- final boolean requestViewFocus) {
- return setFocusedTask(taskIndex, scrollToTask, requestViewFocus, 0);
- }
-
- /**
- * Sets the focused task to the provided (bounded focusTaskIndex).
- *
- * @return whether or not the stack will scroll as a part of this focus change
- */
- public boolean setFocusedTask(int focusTaskIndex, boolean scrollToTask,
- boolean requestViewFocus, int timerIndicatorDuration) {
- // Find the next task to focus
- int newFocusedTaskIndex = mStack.getTaskCount() > 0 ?
- Utilities.clamp(focusTaskIndex, 0, mStack.getTaskCount() - 1) : -1;
- final Task newFocusedTask = (newFocusedTaskIndex != -1) ?
- mStack.getTasks().get(newFocusedTaskIndex) : null;
-
- // Reset the last focused task state if changed
- if (mFocusedTask != null) {
- // Cancel the timer indicator, if applicable
- if (timerIndicatorDuration > 0) {
- final TaskView tv = getChildViewForTask(mFocusedTask);
- if (tv != null) {
- tv.getHeaderView().cancelFocusTimerIndicator();
- }
- }
-
- resetFocusedTask(mFocusedTask);
- }
-
- boolean willScroll = false;
- mFocusedTask = newFocusedTask;
-
- if (newFocusedTask != null) {
- // Start the timer indicator, if applicable
- if (timerIndicatorDuration > 0) {
- final TaskView tv = getChildViewForTask(mFocusedTask);
- if (tv != null) {
- tv.getHeaderView().startFocusTimerIndicator(timerIndicatorDuration);
- } else {
- // The view is null; set a flag for later
- mStartTimerIndicatorDuration = timerIndicatorDuration;
- }
- }
-
- if (scrollToTask) {
- // Cancel any running enter animations at this point when we scroll or change focus
- if (!mEnterAnimationComplete) {
- cancelAllTaskViewAnimations();
- }
-
- mLayoutAlgorithm.clearUnfocusedTaskOverrides();
- willScroll = mAnimationHelper.startScrollToFocusedTaskAnimation(newFocusedTask,
- requestViewFocus);
- if (willScroll) {
- sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_SCROLLED);
- }
- } else {
- // Focus the task view
- TaskView newFocusedTaskView = getChildViewForTask(newFocusedTask);
- if (newFocusedTaskView != null) {
- newFocusedTaskView.setFocusedState(true, requestViewFocus);
- }
- }
- // Any time a task view gets the focus, we move the focus frame around it.
- if (mTaskViewFocusFrame != null) {
- mTaskViewFocusFrame.moveGridTaskViewFocus(getChildViewForTask(newFocusedTask));
- }
- }
- return willScroll;
- }
-
- /**
- * Sets the focused task relative to the currently focused task.
- *
- * @param forward whether to go to the next task in the stack (along the curve) or the previous
- * @param stackTasksOnly if set, will ensure that the traversal only goes along stack tasks, and
- * if the currently focused task is not a stack task, will set the focus
- * to the first visible stack task
- * @param animated determines whether to actually draw the highlight along with the change in
- * focus.
- */
- public void setRelativeFocusedTask(boolean forward, boolean stackTasksOnly, boolean animated) {
- setRelativeFocusedTask(forward, stackTasksOnly, animated, false, 0);
- }
-
- /**
- * Sets the focused task relative to the currently focused task.
- *
- * @param forward whether to go to the next task in the stack (along the curve) or the previous
- * @param stackTasksOnly if set, will ensure that the traversal only goes along stack tasks, and
- * if the currently focused task is not a stack task, will set the focus
- * to the first visible stack task
- * @param animated determines whether to actually draw the highlight along with the change in
- * focus.
- * @param cancelWindowAnimations if set, will attempt to cancel window animations if a scroll
- * happens.
- * @param timerIndicatorDuration the duration to initialize the auto-advance timer indicator
- */
- public void setRelativeFocusedTask(boolean forward, boolean stackTasksOnly, boolean animated,
- boolean cancelWindowAnimations, int timerIndicatorDuration) {
- Task focusedTask = getFocusedTask();
- int newIndex = mStack.indexOfTask(focusedTask);
- if (focusedTask != null) {
- if (stackTasksOnly) {
- List<Task> tasks = mStack.getTasks();
- // Try the next task if it is a stack task
- int tmpNewIndex = newIndex + (forward ? -1 : 1);
- if (0 <= tmpNewIndex && tmpNewIndex < tasks.size()) {
- newIndex = tmpNewIndex;
- }
- } else {
- // No restrictions, lets just move to the new task (looping forward/backwards if
- // necessary)
- int taskCount = mStack.getTaskCount();
- newIndex = (newIndex + (forward ? -1 : 1) + taskCount) % taskCount;
- }
- } else {
- // We don't have a focused task
- float stackScroll = mStackScroller.getStackScroll();
- ArrayList<Task> tasks = mStack.getTasks();
- int taskCount = tasks.size();
- if (useGridLayout()) {
- // For the grid layout, we directly set focus to the most recently used task
- // no matter we're moving forwards or backwards.
- newIndex = taskCount - 1;
- } else {
- // For the grid layout we pick a proper task to focus, according to the current
- // stack scroll.
- if (forward) {
- // Walk backwards and focus the next task smaller than the current stack scroll
- for (newIndex = taskCount - 1; newIndex >= 0; newIndex--) {
- float taskP = mLayoutAlgorithm.getStackScrollForTask(tasks.get(newIndex));
- if (Float.compare(taskP, stackScroll) <= 0) {
- break;
- }
- }
- } else {
- // Walk forwards and focus the next task larger than the current stack scroll
- for (newIndex = 0; newIndex < taskCount; newIndex++) {
- float taskP = mLayoutAlgorithm.getStackScrollForTask(tasks.get(newIndex));
- if (Float.compare(taskP, stackScroll) >= 0) {
- break;
- }
- }
- }
- }
- }
- if (newIndex != -1) {
- boolean willScroll = setFocusedTask(newIndex, true /* scrollToTask */,
- true /* requestViewFocus */, timerIndicatorDuration);
- if (willScroll && cancelWindowAnimations) {
- // As we iterate to the next/previous task, cancel any current/lagging window
- // transition animations
- EventBus.getDefault().send(new CancelEnterRecentsWindowAnimationEvent(null));
- }
- }
- }
-
- /**
- * Resets the focused task.
- */
- public void resetFocusedTask(Task task) {
- if (task != null) {
- TaskView tv = getChildViewForTask(task);
- if (tv != null) {
- tv.setFocusedState(false, false /* requestViewFocus */);
- }
- }
- if (mTaskViewFocusFrame != null) {
- mTaskViewFocusFrame.moveGridTaskViewFocus(null);
- }
- mFocusedTask = null;
- }
-
- /**
- * Returns the focused task.
- */
- public Task getFocusedTask() {
- return mFocusedTask;
- }
-
- /**
- * Returns the accessibility focused task.
- */
- Task getAccessibilityFocusedTask() {
- List<TaskView> taskViews = getTaskViews();
- int taskViewCount = taskViews.size();
- for (int i = 0; i < taskViewCount; i++) {
- TaskView tv = taskViews.get(i);
- if (Utilities.isDescendentAccessibilityFocused(tv)) {
- return tv.getTask();
- }
- }
- TaskView frontTv = getFrontMostTaskView();
- if (frontTv != null) {
- return frontTv.getTask();
- }
- return null;
- }
-
- @Override
- public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
- super.onInitializeAccessibilityEvent(event);
- List<TaskView> taskViews = getTaskViews();
- int taskViewCount = taskViews.size();
- if (taskViewCount > 0) {
- TaskView backMostTask = taskViews.get(0);
- TaskView frontMostTask = taskViews.get(taskViewCount - 1);
- event.setFromIndex(mStack.indexOfTask(backMostTask.getTask()));
- event.setToIndex(mStack.indexOfTask(frontMostTask.getTask()));
- event.setContentDescription(frontMostTask.getTask().title);
- }
- event.setItemCount(mStack.getTaskCount());
-
- int stackHeight = mLayoutAlgorithm.mStackRect.height();
- event.setScrollY((int) (mStackScroller.getStackScroll() * stackHeight));
- event.setMaxScrollY((int) (mLayoutAlgorithm.mMaxScrollP * stackHeight));
- }
-
- @Override
- public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
- super.onInitializeAccessibilityNodeInfo(info);
- List<TaskView> taskViews = getTaskViews();
- int taskViewCount = taskViews.size();
- if (taskViewCount > 1) {
- // Find the accessibility focused task
- Task focusedTask = getAccessibilityFocusedTask();
- info.setScrollable(true);
- int focusedTaskIndex = mStack.indexOfTask(focusedTask);
- if (focusedTaskIndex > 0 || !mStackActionButtonVisible) {
- info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD);
- }
- if (0 <= focusedTaskIndex && focusedTaskIndex < mStack.getTaskCount() - 1) {
- info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD);
- }
- }
- }
-
- @Override
- public CharSequence getAccessibilityClassName() {
- return ScrollView.class.getName();
- }
-
- @Override
- public boolean performAccessibilityAction(int action, Bundle arguments) {
- if (super.performAccessibilityAction(action, arguments)) {
- return true;
- }
- Task focusedTask = getAccessibilityFocusedTask();
- int taskIndex = mStack.indexOfTask(focusedTask);
- if (0 <= taskIndex && taskIndex < mStack.getTaskCount()) {
- switch (action) {
- case AccessibilityNodeInfo.ACTION_SCROLL_FORWARD: {
- setFocusedTask(taskIndex + 1, true /* scrollToTask */, true /* requestViewFocus */,
- 0);
- return true;
- }
- case AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD: {
- setFocusedTask(taskIndex - 1, true /* scrollToTask */, true /* requestViewFocus */,
- 0);
- return true;
- }
- }
- }
- return false;
- }
-
- @Override
- public boolean onInterceptTouchEvent(MotionEvent ev) {
- return mTouchHandler.onInterceptTouchEvent(ev);
- }
-
- @Override
- public boolean onTouchEvent(MotionEvent ev) {
- return mTouchHandler.onTouchEvent(ev);
- }
-
- @Override
- public boolean onGenericMotionEvent(MotionEvent ev) {
- return mTouchHandler.onGenericMotionEvent(ev);
- }
-
- @Override
- public void computeScroll() {
- if (mStackScroller.computeScroll()) {
- // Notify accessibility
- sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_SCROLLED);
- LegacyRecentsImpl.getTaskLoader().getHighResThumbnailLoader().setFlingingFast(
- mStackScroller.getScrollVelocity() > mFastFlingVelocity);
- }
- if (mDeferredTaskViewLayoutAnimation != null) {
- relayoutTaskViews(mDeferredTaskViewLayoutAnimation);
- mTaskViewsClipDirty = true;
- mDeferredTaskViewLayoutAnimation = null;
- }
- if (mTaskViewsClipDirty) {
- clipTaskViews();
- }
- mLastScrollPPercent = Utilities.clamp(Utilities.unmapRange(mStackScroller.getStackScroll(),
- mLayoutAlgorithm.mMinScrollP, mLayoutAlgorithm.mMaxScrollP), 0, 1);
- }
-
- /**
- * Computes the maximum number of visible tasks and thumbnails. Requires that
- * updateLayoutForStack() is called first.
- */
- public TaskStackLayoutAlgorithm.VisibilityReport computeStackVisibilityReport() {
- return mLayoutAlgorithm.computeStackVisibilityReport(mStack.getTasks());
- }
-
- /**
- * Updates the system insets.
- */
- public void setSystemInsets(Rect systemInsets) {
- boolean changed = false;
- changed |= mStableLayoutAlgorithm.setSystemInsets(systemInsets);
- changed |= mLayoutAlgorithm.setSystemInsets(systemInsets);
- if (changed) {
- requestLayout();
- }
- }
-
- /**
- * This is called with the full window width and height to allow stack view children to
- * perform the full screen transition down.
- */
- @Override
- protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
- mInMeasureLayout = true;
- int width = MeasureSpec.getSize(widthMeasureSpec);
- int height = MeasureSpec.getSize(heightMeasureSpec);
-
- // Update the stable stack bounds, but only update the current stack bounds if the stable
- // bounds have changed. This is because we may get spurious measures while dragging where
- // our current stack bounds reflect the target drop region.
- mLayoutAlgorithm.getTaskStackBounds(mDisplayRect, new Rect(0, 0, width, height),
- mLayoutAlgorithm.mSystemInsets.top, mLayoutAlgorithm.mSystemInsets.left,
- mLayoutAlgorithm.mSystemInsets.right, mTmpRect);
- if (!mTmpRect.equals(mStableStackBounds)) {
- mStableStackBounds.set(mTmpRect);
- mStackBounds.set(mTmpRect);
- mStableWindowRect.set(0, 0, width, height);
- mWindowRect.set(0, 0, width, height);
- }
-
- // Compute the rects in the stack algorithm
- mStableLayoutAlgorithm.initialize(mDisplayRect, mStableWindowRect, mStableStackBounds);
- mLayoutAlgorithm.initialize(mDisplayRect, mWindowRect, mStackBounds);
- updateLayoutAlgorithm(false /* boundScroll */);
-
- // If this is the first layout, then scroll to the front of the stack, then update the
- // TaskViews with the stack so that we can lay them out
- boolean resetToInitialState = (width != mLastWidth || height != mLastHeight)
- && mResetToInitialStateWhenResized;
- if (!mFinishedLayoutAfterStackReload || mInitialState != INITIAL_STATE_UPDATE_NONE
- || resetToInitialState) {
- if (mInitialState != INITIAL_STATE_UPDATE_LAYOUT_ONLY || resetToInitialState) {
- updateToInitialState();
- mResetToInitialStateWhenResized = false;
- }
- if (mFinishedLayoutAfterStackReload) {
- mInitialState = INITIAL_STATE_UPDATE_NONE;
- }
- }
- // If we got the launch-next event before the first layout pass, then re-send it after the
- // initial state has been updated
- if (mLaunchNextAfterFirstMeasure) {
- mLaunchNextAfterFirstMeasure = false;
- EventBus.getDefault().post(new LaunchNextTaskRequestEvent());
- }
-
- // Rebind all the views, including the ignore ones
- bindVisibleTaskViews(mStackScroller.getStackScroll(), false /* ignoreTaskOverrides */);
-
- // Measure each of the TaskViews
- mTmpTaskViews.clear();
- mTmpTaskViews.addAll(getTaskViews());
- mTmpTaskViews.addAll(mViewPool.getViews());
- int taskViewCount = mTmpTaskViews.size();
- for (int i = 0; i < taskViewCount; i++) {
- measureTaskView(mTmpTaskViews.get(i));
- }
- if (mTaskViewFocusFrame != null) {
- mTaskViewFocusFrame.measure();
- }
-
- setMeasuredDimension(width, height);
- mLastWidth = width;
- mLastHeight = height;
- mInMeasureLayout = false;
- }
-
- /**
- * Measures a TaskView.
- */
- private void measureTaskView(TaskView tv) {
- Rect padding = new Rect();
- if (tv.getBackground() != null) {
- tv.getBackground().getPadding(padding);
- }
- mTmpRect.set(mStableLayoutAlgorithm.getTaskRect());
- mTmpRect.union(mLayoutAlgorithm.getTaskRect());
- tv.measure(
- MeasureSpec.makeMeasureSpec(mTmpRect.width() + padding.left + padding.right,
- MeasureSpec.EXACTLY),
- MeasureSpec.makeMeasureSpec(mTmpRect.height() + padding.top + padding.bottom,
- MeasureSpec.EXACTLY));
- }
-
- @Override
- protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
- // Layout each of the TaskViews
- mTmpTaskViews.clear();
- mTmpTaskViews.addAll(getTaskViews());
- mTmpTaskViews.addAll(mViewPool.getViews());
- int taskViewCount = mTmpTaskViews.size();
- for (int i = 0; i < taskViewCount; i++) {
- layoutTaskView(changed, mTmpTaskViews.get(i));
- }
- if (mTaskViewFocusFrame != null) {
- mTaskViewFocusFrame.layout();
- }
-
- if (changed) {
- if (mStackScroller.isScrollOutOfBounds()) {
- mStackScroller.boundScroll();
- }
- }
-
- // Relayout all of the task views including the ignored ones
- relayoutTaskViews(AnimationProps.IMMEDIATE);
- clipTaskViews();
-
- if (!mFinishedLayoutAfterStackReload) {
- // Prepare the task enter animations (this can be called numerous times)
- mInitialState = INITIAL_STATE_UPDATE_NONE;
- onFirstLayout();
-
- if (mStackReloaded) {
- mFinishedLayoutAfterStackReload = true;
- tryStartEnterAnimation();
- }
- }
- }
-
- /**
- * Lays out a TaskView.
- */
- private void layoutTaskView(boolean changed, TaskView tv) {
- if (changed) {
- Rect padding = new Rect();
- if (tv.getBackground() != null) {
- tv.getBackground().getPadding(padding);
- }
- mTmpRect.set(mStableLayoutAlgorithm.getTaskRect());
- mTmpRect.union(mLayoutAlgorithm.getTaskRect());
- tv.cancelTransformAnimation();
- tv.layout(mTmpRect.left - padding.left, mTmpRect.top - padding.top,
- mTmpRect.right + padding.right, mTmpRect.bottom + padding.bottom);
- } else {
- // If the layout has not changed, then just lay it out again in-place
- tv.layout(tv.getLeft(), tv.getTop(), tv.getRight(), tv.getBottom());
- }
- }
-
- /** Handler for the first layout. */
- void onFirstLayout() {
- // Setup the view for the enter animation
- mAnimationHelper.prepareForEnterAnimation();
-
- // Set the task focused state without requesting view focus, and leave the focus animations
- // until after the enter-animation
- RecentsConfiguration config = LegacyRecentsImpl.getConfiguration();
- RecentsActivityLaunchState launchState = config.getLaunchState();
-
- // We set the initial focused task view iff the following conditions are satisfied:
- // 1. Recents is showing task views in stack layout.
- // 2. Recents is launched with ALT + TAB.
- boolean setFocusOnFirstLayout = !useGridLayout() || launchState.launchedWithAltTab;
- if (setFocusOnFirstLayout) {
- int focusedTaskIndex = getInitialFocusTaskIndex(launchState, mStack.getTaskCount(),
- useGridLayout());
- if (focusedTaskIndex != -1) {
- setFocusedTask(focusedTaskIndex, false /* scrollToTask */,
- false /* requestViewFocus */);
- }
- }
- updateStackActionButtonVisibility();
- }
-
- public boolean isTouchPointInView(float x, float y, TaskView tv) {
- mTmpRect.set(tv.getLeft(), tv.getTop(), tv.getRight(), tv.getBottom());
- mTmpRect.offset((int) tv.getTranslationX(), (int) tv.getTranslationY());
- return mTmpRect.contains((int) x, (int) y);
- }
-
- /**
- * Returns a non-ignored task in the {@param tasks} list that can be used as an achor when
- * calculating the scroll position before and after a layout change.
- */
- public Task findAnchorTask(List<Task> tasks, MutableBoolean isFrontMostTask) {
- for (int i = tasks.size() - 1; i >= 0; i--) {
- Task task = tasks.get(i);
-
- // Ignore deleting tasks
- if (isIgnoredTask(task)) {
- if (i == tasks.size() - 1) {
- isFrontMostTask.value = true;
- }
- continue;
- }
- return task;
- }
- return null;
- }
-
- /**** TaskStackCallbacks Implementation ****/
-
- @Override
- public void onStackTaskAdded(TaskStack stack, Task newTask) {
- // Update the min/max scroll and animate other task views into their new positions
- updateLayoutAlgorithm(true /* boundScroll */);
-
- // Animate all the tasks into place
- relayoutTaskViews(!mFinishedLayoutAfterStackReload
- ? AnimationProps.IMMEDIATE
- : new AnimationProps(DEFAULT_SYNC_STACK_DURATION, Interpolators.FAST_OUT_SLOW_IN));
- }
-
- /**
- * We expect that the {@link TaskView} associated with the removed task is already hidden.
- */
- @Override
- public void onStackTaskRemoved(TaskStack stack, Task removedTask, Task newFrontMostTask,
- AnimationProps animation, boolean fromDockGesture, boolean dismissRecentsIfAllRemoved) {
- if (mFocusedTask == removedTask) {
- resetFocusedTask(removedTask);
- }
-
- // Remove the view associated with this task, we can't rely on updateTransforms
- // to work here because the task is no longer in the list
- TaskView tv = getChildViewForTask(removedTask);
- if (tv != null) {
- mViewPool.returnViewToPool(tv);
- }
-
- // Remove the task from the ignored set
- removeIgnoreTask(removedTask);
-
- // If requested, relayout with the given animation
- if (animation != null) {
- updateLayoutAlgorithm(true /* boundScroll */);
- relayoutTaskViews(animation);
- }
-
- // Update the new front most task's action button
- if (mScreenPinningEnabled && newFrontMostTask != null) {
- TaskView frontTv = getChildViewForTask(newFrontMostTask);
- if (frontTv != null) {
- frontTv.showActionButton(true /* fadeIn */, DEFAULT_SYNC_STACK_DURATION);
- }
- }
-
- // If there are no remaining tasks, then just close recents
- if (mStack.getTaskCount() == 0) {
- if (dismissRecentsIfAllRemoved) {
- EventBus.getDefault().send(new AllTaskViewsDismissedEvent(fromDockGesture
- ? R.string.recents_empty_message
- : R.string.recents_empty_message_dismissed_all));
- } else {
- EventBus.getDefault().send(new ShowEmptyViewEvent());
- }
- }
- }
-
- @Override
- public void onStackTasksRemoved(TaskStack stack) {
- // Reset the focused task
- resetFocusedTask(getFocusedTask());
-
- // Return all the views to the pool
- List<TaskView> taskViews = new ArrayList<>();
- taskViews.addAll(getTaskViews());
- for (int i = taskViews.size() - 1; i >= 0; i--) {
- mViewPool.returnViewToPool(taskViews.get(i));
- }
-
- // Remove all the ignore tasks
- mIgnoreTasks.clear();
-
- // If there are no remaining tasks, then just close recents
- EventBus.getDefault().send(new AllTaskViewsDismissedEvent(
- R.string.recents_empty_message_dismissed_all));
- }
-
- @Override
- public void onStackTasksUpdated(TaskStack stack) {
- if (!mFinishedLayoutAfterStackReload) {
- return;
- }
-
- // Update the layout and immediately layout
- updateLayoutAlgorithm(false /* boundScroll */);
- relayoutTaskViews(AnimationProps.IMMEDIATE);
-
- // Rebind all the task views. This will not trigger new resources to be loaded
- // unless they have actually changed
- List<TaskView> taskViews = getTaskViews();
- int taskViewCount = taskViews.size();
- for (int i = 0; i < taskViewCount; i++) {
- TaskView tv = taskViews.get(i);
- bindTaskView(tv, tv.getTask());
- }
- }
-
- /**** ViewPoolConsumer Implementation ****/
-
- @Override
- public TaskView createView(Context context) {
- if (LegacyRecentsImpl.getConfiguration().isGridEnabled) {
- return (GridTaskView) mInflater.inflate(R.layout.recents_grid_task_view, this, false);
- } else {
- return (TaskView) mInflater.inflate(R.layout.recents_task_view, this, false);
- }
- }
-
- @Override
- public void onReturnViewToPool(TaskView tv) {
- final Task task = tv.getTask();
-
- // Unbind the task from the task view
- unbindTaskView(tv, task);
-
- // Reset the view properties and view state
- tv.clearAccessibilityFocus();
- tv.resetViewProperties();
- tv.setFocusedState(false, false /* requestViewFocus */);
- tv.setClipViewInStack(false);
- if (mScreenPinningEnabled) {
- tv.hideActionButton(false /* fadeOut */, 0 /* duration */, false /* scaleDown */, null);
- }
-
- // Detach the view from the hierarchy
- detachViewFromParent(tv);
- // Update the task views list after removing the task view
- updateTaskViewsList();
- }
-
- @Override
- public void onPickUpViewFromPool(TaskView tv, Task task, boolean isNewView) {
- // Find the index where this task should be placed in the stack
- int taskIndex = mStack.indexOfTask(task);
- int insertIndex = findTaskViewInsertIndex(task, taskIndex);
-
- // Add/attach the view to the hierarchy
- if (isNewView) {
- if (mInMeasureLayout) {
- // If we are measuring the layout, then just add the view normally as it will be
- // laid out during the layout pass
- addView(tv, insertIndex);
- } else {
- // Otherwise, this is from a bindVisibleTaskViews() call outside the measure/layout
- // pass, and we should layout the new child ourselves
- ViewGroup.LayoutParams params = tv.getLayoutParams();
- if (params == null) {
- params = generateDefaultLayoutParams();
- }
- addViewInLayout(tv, insertIndex, params, true /* preventRequestLayout */);
- measureTaskView(tv);
- layoutTaskView(true /* changed */, tv);
- }
- } else {
- attachViewToParent(tv, insertIndex, tv.getLayoutParams());
- }
- // Update the task views list after adding the new task view
- updateTaskViewsList();
-
- // Bind the task view to the new task
- bindTaskView(tv, task);
-
- // Set the new state for this view, including the callbacks and view clipping
- tv.setCallbacks(this);
- tv.setTouchEnabled(true);
- tv.setClipViewInStack(true);
- if (mFocusedTask == task) {
- tv.setFocusedState(true, false /* requestViewFocus */);
- if (mStartTimerIndicatorDuration > 0) {
- // The timer indicator couldn't be started before, so start it now
- tv.getHeaderView().startFocusTimerIndicator(mStartTimerIndicatorDuration);
- mStartTimerIndicatorDuration = 0;
- }
- }
-
- // Restore the action button visibility if it is the front most task view
- if (mScreenPinningEnabled && tv.getTask() == mStack.getFrontMostTask()) {
- tv.showActionButton(false /* fadeIn */, 0 /* fadeInDuration */);
- }
- }
-
- @Override
- public boolean hasPreferredData(TaskView tv, Task preferredData) {
- return (tv.getTask() == preferredData);
- }
-
- private void bindTaskView(TaskView tv, Task task) {
- // Rebind the task and request that this task's data be filled into the TaskView
- tv.onTaskBound(task, mTouchExplorationEnabled, mDisplayOrientation, mDisplayRect);
-
- // If the doze trigger has already fired, then update the state for this task view
- if (mUIDozeTrigger.isAsleep() ||
- useGridLayout() || LegacyRecentsImpl.getConfiguration().isLowRamDevice) {
- tv.setNoUserInteractionState();
- }
-
- if (task == mPrefetchingTask) {
- task.notifyTaskDataLoaded(task.thumbnail, task.icon);
- } else {
- // Load the task data
- LegacyRecentsImpl.getTaskLoader().loadTaskData(task);
- }
- LegacyRecentsImpl.getTaskLoader().getHighResThumbnailLoader().onTaskVisible(task);
- }
-
- private void unbindTaskView(TaskView tv, Task task) {
- if (task != mPrefetchingTask) {
- // Report that this task's data is no longer being used
- LegacyRecentsImpl.getTaskLoader().unloadTaskData(task);
- }
- LegacyRecentsImpl.getTaskLoader().getHighResThumbnailLoader().onTaskInvisible(task);
- }
-
- private void updatePrefetchingTask(ArrayList<Task> tasks, int frontIndex, int backIndex) {
- Task t = null;
- boolean somethingVisible = frontIndex != -1 && backIndex != -1;
- if (somethingVisible && frontIndex < tasks.size() - 1) {
- t = tasks.get(frontIndex + 1);
- }
- if (mPrefetchingTask != t) {
- if (mPrefetchingTask != null) {
- int index = tasks.indexOf(mPrefetchingTask);
- if (index < backIndex || index > frontIndex) {
- LegacyRecentsImpl.getTaskLoader().unloadTaskData(mPrefetchingTask);
- }
- }
- mPrefetchingTask = t;
- if (t != null) {
- LegacyRecentsImpl.getTaskLoader().loadTaskData(t);
- }
- }
- }
-
- private void clearPrefetchingTask() {
- if (mPrefetchingTask != null) {
- LegacyRecentsImpl.getTaskLoader().unloadTaskData(mPrefetchingTask);
- }
- mPrefetchingTask = null;
- }
-
- /**** TaskViewCallbacks Implementation ****/
-
- @Override
- public void onTaskViewClipStateChanged(TaskView tv) {
- if (!mTaskViewsClipDirty) {
- mTaskViewsClipDirty = true;
- invalidate();
- }
- }
-
- /**** TaskStackLayoutAlgorithm.TaskStackLayoutAlgorithmCallbacks ****/
-
- @Override
- public void onFocusStateChanged(int prevFocusState, int curFocusState) {
- if (mDeferredTaskViewLayoutAnimation == null) {
- mUIDozeTrigger.poke();
- relayoutTaskViewsOnNextFrame(AnimationProps.IMMEDIATE);
- }
- }
-
- /**** TaskStackViewScroller.TaskStackViewScrollerCallbacks ****/
-
- @Override
- public void onStackScrollChanged(float prevScroll, float curScroll, AnimationProps animation) {
- mUIDozeTrigger.poke();
- if (animation != null) {
- relayoutTaskViewsOnNextFrame(animation);
- }
-
- // In grid layout, the stack action button always remains visible.
- if (mEnterAnimationComplete && !useGridLayout()) {
- if (LegacyRecentsImpl.getConfiguration().isLowRamDevice) {
- // Show stack button when user drags down to show older tasks on low ram devices
- if (mStack.getTaskCount() > 0 && !mStackActionButtonVisible
- && mTouchHandler.mIsScrolling && curScroll - prevScroll < 0) {
- // Going up
- EventBus.getDefault().send(
- new ShowStackActionButtonEvent(true /* translate */));
- }
- return;
- }
- if (prevScroll > SHOW_STACK_ACTION_BUTTON_SCROLL_THRESHOLD &&
- curScroll <= SHOW_STACK_ACTION_BUTTON_SCROLL_THRESHOLD &&
- mStack.getTaskCount() > 0) {
- EventBus.getDefault().send(new ShowStackActionButtonEvent(true /* translate */));
- } else if (prevScroll < HIDE_STACK_ACTION_BUTTON_SCROLL_THRESHOLD &&
- curScroll >= HIDE_STACK_ACTION_BUTTON_SCROLL_THRESHOLD) {
- EventBus.getDefault().send(new HideStackActionButtonEvent());
- }
- }
- }
-
- /**** EventBus Events ****/
-
- public final void onBusEvent(PackagesChangedEvent event) {
- // Compute which components need to be removed
- ArraySet<ComponentName> removedComponents = mStack.computeComponentsRemoved(
- event.packageName, event.userId);
-
- // For other tasks, just remove them directly if they no longer exist
- ArrayList<Task> tasks = mStack.getTasks();
- for (int i = tasks.size() - 1; i >= 0; i--) {
- final Task t = tasks.get(i);
- if (removedComponents.contains(t.key.getComponent())) {
- final TaskView tv = getChildViewForTask(t);
- if (tv != null) {
- // For visible children, defer removing the task until after the animation
- tv.dismissTask();
- } else {
- // Otherwise, remove the task from the stack immediately
- mStack.removeTask(t, AnimationProps.IMMEDIATE, false /* fromDockGesture */);
- }
- }
- }
- }
-
- public final void onBusEvent(LaunchTaskEvent event) {
- // Cancel any doze triggers once a task is launched
- mUIDozeTrigger.stopDozing();
- }
-
- public final void onBusEvent(LaunchMostRecentTaskRequestEvent event) {
- if (mStack.getTaskCount() > 0) {
- Task mostRecentTask = mStack.getFrontMostTask();
- launchTask(mostRecentTask);
- }
- }
-
- public final void onBusEvent(ShowStackActionButtonEvent event) {
- mStackActionButtonVisible = true;
- }
-
- public final void onBusEvent(HideStackActionButtonEvent event) {
- mStackActionButtonVisible = false;
- }
-
- public final void onBusEvent(LaunchNextTaskRequestEvent event) {
- if (!mFinishedLayoutAfterStackReload) {
- mLaunchNextAfterFirstMeasure = true;
- return;
- }
-
- if (mStack.getTaskCount() == 0) {
- if (RecentsImpl.getLastPipTime() != -1) {
- EventBus.getDefault().send(new ExpandPipEvent());
- MetricsLogger.action(getContext(), MetricsEvent.OVERVIEW_LAUNCH_PREVIOUS_TASK,
- "pip");
- } else {
- // If there are no tasks, then just hide recents back to home.
- EventBus.getDefault().send(new HideRecentsEvent(false, true));
- }
- return;
- }
-
- if (!LegacyRecentsImpl.getConfiguration().getLaunchState().launchedFromPipApp
- && mStack.isNextLaunchTargetPip(RecentsImpl.getLastPipTime())) {
- // If the launch task is in the pinned stack, then expand the PiP now
- EventBus.getDefault().send(new ExpandPipEvent());
- MetricsLogger.action(getContext(), MetricsEvent.OVERVIEW_LAUNCH_PREVIOUS_TASK, "pip");
- } else {
- final Task launchTask = mStack.getNextLaunchTarget();
- if (launchTask != null) {
- // Defer launching the task until the PiP menu has been dismissed (if it is
- // showing at all)
- HidePipMenuEvent hideMenuEvent = new HidePipMenuEvent();
- hideMenuEvent.addPostAnimationCallback(() -> {
- launchTask(launchTask);
- });
- EventBus.getDefault().send(hideMenuEvent);
- MetricsLogger.action(getContext(), MetricsEvent.OVERVIEW_LAUNCH_PREVIOUS_TASK,
- launchTask.key.getComponent().toString());
- }
- }
- }
-
- public final void onBusEvent(LaunchTaskStartedEvent event) {
- mAnimationHelper.startLaunchTaskAnimation(event.taskView, event.screenPinningRequested,
- event.getAnimationTrigger());
- }
-
- public final void onBusEvent(DismissRecentsToHomeAnimationStarted event) {
- // Stop any scrolling
- mTouchHandler.cancelNonDismissTaskAnimations();
- mStackScroller.stopScroller();
- mStackScroller.stopBoundScrollAnimation();
- cancelDeferredTaskViewLayoutAnimation();
-
- // Start the task animations
- mAnimationHelper.startExitToHomeAnimation(event.animated, event.getAnimationTrigger());
-
- // Dismiss the grid task view focus frame
- if (mTaskViewFocusFrame != null) {
- mTaskViewFocusFrame.moveGridTaskViewFocus(null);
- }
- }
-
- public final void onBusEvent(DismissFocusedTaskViewEvent event) {
- if (mFocusedTask != null) {
- if (mTaskViewFocusFrame != null) {
- mTaskViewFocusFrame.moveGridTaskViewFocus(null);
- }
- TaskView tv = getChildViewForTask(mFocusedTask);
- if (tv != null) {
- tv.dismissTask();
- }
- resetFocusedTask(mFocusedTask);
- }
- }
-
- public final void onBusEvent(DismissTaskViewEvent event) {
- // For visible children, defer removing the task until after the animation
- mAnimationHelper.startDeleteTaskAnimation(
- event.taskView, useGridLayout(), event.getAnimationTrigger());
- }
-
- public final void onBusEvent(final DismissAllTaskViewsEvent event) {
- // Keep track of the tasks which will have their data removed
- ArrayList<Task> tasks = new ArrayList<>(mStack.getTasks());
- mAnimationHelper.startDeleteAllTasksAnimation(
- getTaskViews(), useGridLayout(), event.getAnimationTrigger());
- event.addPostAnimationCallback(new Runnable() {
- @Override
- public void run() {
- // Announce for accessibility
- announceForAccessibility(getContext().getString(
- R.string.accessibility_recents_all_items_dismissed));
-
- // Remove all tasks and delete the task data for all tasks
- mStack.removeAllTasks(true /* notifyStackChanges */);
- for (int i = tasks.size() - 1; i >= 0; i--) {
- EventBus.getDefault().send(new DeleteTaskDataEvent(tasks.get(i)));
- }
-
- MetricsLogger.action(getContext(), MetricsEvent.OVERVIEW_DISMISS_ALL);
- }
- });
-
- }
-
- public final void onBusEvent(TaskViewDismissedEvent event) {
- // Announce for accessibility
- announceForAccessibility(getContext().getString(
- R.string.accessibility_recents_item_dismissed, event.task.title));
-
- if (useGridLayout() && event.animation != null) {
- event.animation.setListener(new AnimatorListenerAdapter() {
- public void onAnimationEnd(Animator animator) {
- if (mTaskViewFocusFrame != null) {
- // Resize the grid layout task view focus frame
- mTaskViewFocusFrame.resize();
- }
- }
- });
- }
-
- // Remove the task from the stack
- mStack.removeTask(event.task, event.animation, false /* fromDockGesture */);
- EventBus.getDefault().send(new DeleteTaskDataEvent(event.task));
- if (mStack.getTaskCount() > 0 && LegacyRecentsImpl.getConfiguration().isLowRamDevice) {
- EventBus.getDefault().send(new ShowStackActionButtonEvent(false /* translate */));
- }
-
- MetricsLogger.action(getContext(), MetricsEvent.OVERVIEW_DISMISS,
- event.task.key.getComponent().toString());
- }
-
- public final void onBusEvent(FocusNextTaskViewEvent event) {
- // Stop any scrolling
- mStackScroller.stopScroller();
- mStackScroller.stopBoundScrollAnimation();
-
- setRelativeFocusedTask(true, false /* stackTasksOnly */, true /* animated */, false, 0);
- }
-
- public final void onBusEvent(FocusPreviousTaskViewEvent event) {
- // Stop any scrolling
- mStackScroller.stopScroller();
- mStackScroller.stopBoundScrollAnimation();
-
- setRelativeFocusedTask(false, false /* stackTasksOnly */, true /* animated */);
- }
-
- public final void onBusEvent(NavigateTaskViewEvent event) {
- if (useGridLayout()) {
- final int taskCount = mStack.getTaskCount();
- final int currentIndex = mStack.indexOfTask(getFocusedTask());
- final int nextIndex = mLayoutAlgorithm.mTaskGridLayoutAlgorithm.navigateFocus(taskCount,
- currentIndex, event.direction);
- setFocusedTask(nextIndex, false, true);
- } else {
- switch (event.direction) {
- case UP:
- EventBus.getDefault().send(new FocusPreviousTaskViewEvent());
- break;
- case DOWN:
- EventBus.getDefault().send(new FocusNextTaskViewEvent());
- break;
- }
- }
- }
-
- public final void onBusEvent(UserInteractionEvent event) {
- // Poke the doze trigger on user interaction
- mUIDozeTrigger.poke();
-
- RecentsDebugFlags debugFlags = LegacyRecentsImpl.getDebugFlags();
- if (mFocusedTask != null) {
- TaskView tv = getChildViewForTask(mFocusedTask);
- if (tv != null) {
- tv.getHeaderView().cancelFocusTimerIndicator();
- }
- }
- }
-
- public final void onBusEvent(DragStartEvent event) {
- // Ensure that the drag task is not animated
- addIgnoreTask(event.task);
-
- // Enlarge the dragged view slightly
- float finalScale = event.taskView.getScaleX() * DRAG_SCALE_FACTOR;
- mLayoutAlgorithm.getStackTransform(event.task, getScroller().getStackScroll(),
- mTmpTransform, null);
- mTmpTransform.scale = finalScale;
- mTmpTransform.translationZ = mLayoutAlgorithm.mMaxTranslationZ + 1;
- mTmpTransform.dimAlpha = 0f;
- updateTaskViewToTransform(event.taskView, mTmpTransform,
- new AnimationProps(DRAG_SCALE_DURATION, Interpolators.FAST_OUT_SLOW_IN));
- }
-
- public final void onBusEvent(DragDropTargetChangedEvent event) {
- AnimationProps animation = new AnimationProps(SLOW_SYNC_STACK_DURATION,
- Interpolators.FAST_OUT_SLOW_IN);
- boolean ignoreTaskOverrides = false;
- if (event.dropTarget instanceof DockState) {
- // Calculate the new task stack bounds that matches the window size that Recents will
- // have after the drop
- final DockState dockState = (DockState) event.dropTarget;
- Rect systemInsets = new Rect(mStableLayoutAlgorithm.mSystemInsets);
- // When docked, the nav bar insets are consumed and the activity is measured without
- // insets. However, the window bounds include the insets, so we need to subtract them
- // here to make them identical.
- int height = getMeasuredHeight();
- height -= systemInsets.bottom;
- systemInsets.bottom = 0;
- mStackBounds.set(dockState.getDockedTaskStackBounds(mDisplayRect, getMeasuredWidth(),
- height, mDividerSize, systemInsets,
- mLayoutAlgorithm, getResources(), mWindowRect));
- mLayoutAlgorithm.setSystemInsets(systemInsets);
- mLayoutAlgorithm.initialize(mDisplayRect, mWindowRect, mStackBounds);
- updateLayoutAlgorithm(true /* boundScroll */);
- ignoreTaskOverrides = true;
- } else {
- // Restore the pre-drag task stack bounds, but ensure that we don't layout the dragging
- // task view, so add it back to the ignore set after updating the layout
- removeIgnoreTask(event.task);
- updateLayoutToStableBounds();
- addIgnoreTask(event.task);
- }
- relayoutTaskViews(animation, null /* animationOverrides */, ignoreTaskOverrides);
- }
-
- public final void onBusEvent(final DragEndEvent event) {
- // We don't handle drops on the dock regions
- if (event.dropTarget instanceof DockState) {
- // However, we do need to reset the overrides, since the last state of this task stack
- // view layout was ignoring task overrides (see DragDropTargetChangedEvent handler)
- mLayoutAlgorithm.clearUnfocusedTaskOverrides();
- return;
- }
-
- // Restore the task, so that relayout will apply to it below
- removeIgnoreTask(event.task);
-
- // Convert the dragging task view back to its final layout-space rect
- Utilities.setViewFrameFromTranslation(event.taskView);
-
- // Animate all the tasks into place
- ArrayMap<Task, AnimationProps> animationOverrides = new ArrayMap<>();
- animationOverrides.put(event.task, new AnimationProps(SLOW_SYNC_STACK_DURATION,
- Interpolators.FAST_OUT_SLOW_IN,
- event.getAnimationTrigger().decrementOnAnimationEnd()));
- relayoutTaskViews(new AnimationProps(SLOW_SYNC_STACK_DURATION,
- Interpolators.FAST_OUT_SLOW_IN));
- event.getAnimationTrigger().increment();
- }
-
- public final void onBusEvent(final DragEndCancelledEvent event) {
- // Restore the pre-drag task stack bounds, including the dragging task view
- removeIgnoreTask(event.task);
- updateLayoutToStableBounds();
-
- // Convert the dragging task view back to its final layout-space rect
- Utilities.setViewFrameFromTranslation(event.taskView);
-
- // Animate all the tasks into place
- ArrayMap<Task, AnimationProps> animationOverrides = new ArrayMap<>();
- animationOverrides.put(event.task, new AnimationProps(SLOW_SYNC_STACK_DURATION,
- Interpolators.FAST_OUT_SLOW_IN,
- event.getAnimationTrigger().decrementOnAnimationEnd()));
- relayoutTaskViews(new AnimationProps(SLOW_SYNC_STACK_DURATION,
- Interpolators.FAST_OUT_SLOW_IN));
- event.getAnimationTrigger().increment();
- }
-
- public final void onBusEvent(EnterRecentsWindowAnimationCompletedEvent event) {
- mEnterAnimationComplete = true;
- tryStartEnterAnimation();
- }
-
- private void tryStartEnterAnimation() {
- if (!mStackReloaded || !mFinishedLayoutAfterStackReload || !mEnterAnimationComplete) {
- return;
- }
-
- if (mStack.getTaskCount() > 0) {
- // Start the task enter animations
- ReferenceCountedTrigger trigger = new ReferenceCountedTrigger();
- mAnimationHelper.startEnterAnimation(trigger);
-
- // Add a runnable to the post animation ref counter to clear all the views
- trigger.addLastDecrementRunnable(() -> {
- // Start the dozer to trigger to trigger any UI that shows after a timeout
- mUIDozeTrigger.startDozing();
-
- // Update the focused state here -- since we only set the focused task without
- // requesting view focus in onFirstLayout(), actually request view focus and
- // animate the focused state if we are alt-tabbing now, after the window enter
- // animation is completed
- if (mFocusedTask != null) {
- RecentsConfiguration config = LegacyRecentsImpl.getConfiguration();
- RecentsActivityLaunchState launchState = config.getLaunchState();
- setFocusedTask(mStack.indexOfTask(mFocusedTask),
- false /* scrollToTask */, launchState.launchedWithAltTab);
- TaskView focusedTaskView = getChildViewForTask(mFocusedTask);
- if (mTouchExplorationEnabled && focusedTaskView != null) {
- focusedTaskView.requestAccessibilityFocus();
- }
- }
- });
- }
-
- // This flag is only used to choreograph the enter animation, so we can reset it here
- mStackReloaded = false;
- }
-
- public final void onBusEvent(final MultiWindowStateChangedEvent event) {
- if (event.inMultiWindow || !event.showDeferredAnimation) {
- setTasks(event.stack, true /* allowNotifyStackChanges */);
- } else {
- // Reset the launch state before handling the multiwindow change
- RecentsActivityLaunchState launchState = LegacyRecentsImpl.getConfiguration().getLaunchState();
- launchState.reset();
-
- // Defer until the next frame to ensure that we have received all the system insets, and
- // initial layout updates
- event.getAnimationTrigger().increment();
- post(new Runnable() {
- @Override
- public void run() {
- // Scroll the stack to the front to see the undocked task
- mAnimationHelper.startNewStackScrollAnimation(event.stack,
- event.getAnimationTrigger());
- event.getAnimationTrigger().decrement();
- }
- });
- }
- }
-
- public final void onBusEvent(ConfigurationChangedEvent event) {
- if (event.fromDeviceOrientationChange) {
- mDisplayOrientation = Utilities.getAppConfiguration(mContext).orientation;
- mDisplayRect = LegacyRecentsImpl.getSystemServices().getDisplayRect();
-
- // Always stop the scroller, otherwise, we may continue setting the stack scroll to the
- // wrong bounds in the new layout
- mStackScroller.stopScroller();
- }
- reloadOnConfigurationChange();
-
- // Notify the task views of the configuration change so they can reload their resources
- if (!event.fromMultiWindow) {
- mTmpTaskViews.clear();
- mTmpTaskViews.addAll(getTaskViews());
- mTmpTaskViews.addAll(mViewPool.getViews());
- int taskViewCount = mTmpTaskViews.size();
- for (int i = 0; i < taskViewCount; i++) {
- mTmpTaskViews.get(i).onConfigurationChanged();
- }
- }
-
- // Update the Clear All button in case we're switching in or out of grid layout.
- updateStackActionButtonVisibility();
-
- // Trigger a new layout and update to the initial state if necessary. When entering split
- // screen, the multi-window configuration change event can happen after the stack is already
- // reloaded (but pending measure/layout), in this case, do not override the intiial state
- // and just wait for the upcoming measure/layout pass.
- if (event.fromMultiWindow && mInitialState == INITIAL_STATE_UPDATE_NONE) {
- mInitialState = INITIAL_STATE_UPDATE_LAYOUT_ONLY;
- requestLayout();
- } else if (event.fromDeviceOrientationChange) {
- mInitialState = INITIAL_STATE_UPDATE_ALL;
- requestLayout();
- }
- }
-
- public final void onBusEvent(RecentsGrowingEvent event) {
- mResetToInitialStateWhenResized = true;
- }
-
- public final void onBusEvent(RecentsVisibilityChangedEvent event) {
- if (!event.visible) {
- if (mTaskViewFocusFrame != null) {
- mTaskViewFocusFrame.moveGridTaskViewFocus(null);
- }
-
- List<TaskView> taskViews = new ArrayList<>(getTaskViews());
- for (int i = 0; i < taskViews.size(); i++) {
- mViewPool.returnViewToPool(taskViews.get(i));
- }
- clearPrefetchingTask();
-
- // We can not reset mEnterAnimationComplete in onReload() because when docking the top
- // task, we can receive the enter animation callback before onReload(), so reset it
- // here onces Recents is not visible
- mEnterAnimationComplete = false;
- }
- }
-
- public final void onBusEvent(ActivityPinnedEvent event) {
- // If an activity enters PiP while Recents is open, remove the stack task associated with
- // the new PiP task
- Task removeTask = mStack.findTaskWithId(event.taskId);
- if (removeTask != null) {
- // In this case, we remove the task, but if the last task is removed, don't dismiss
- // Recents to home
- mStack.removeTask(removeTask, AnimationProps.IMMEDIATE, false /* fromDockGesture */,
- false /* dismissRecentsIfAllRemoved */);
- }
- updateLayoutAlgorithm(false /* boundScroll */);
- updateToInitialState();
- }
-
- public void reloadOnConfigurationChange() {
- mStableLayoutAlgorithm.reloadOnConfigurationChange(getContext());
- mLayoutAlgorithm.reloadOnConfigurationChange(getContext());
- }
-
- /**
- * Returns the insert index for the task in the current set of task views. If the given task
- * is already in the task view list, then this method returns the insert index assuming it
- * is first removed at the previous index.
- *
- * @param task the task we are finding the index for
- * @param taskIndex the index of the task in the stack
- */
- private int findTaskViewInsertIndex(Task task, int taskIndex) {
- if (taskIndex != -1) {
- List<TaskView> taskViews = getTaskViews();
- boolean foundTaskView = false;
- int taskViewCount = taskViews.size();
- for (int i = 0; i < taskViewCount; i++) {
- Task tvTask = taskViews.get(i).getTask();
- if (tvTask == task) {
- foundTaskView = true;
- } else if (taskIndex < mStack.indexOfTask(tvTask)) {
- if (foundTaskView) {
- return i - 1;
- } else {
- return i;
- }
- }
- }
- }
- return -1;
- }
-
- private void launchTask(Task task) {
- // Stop all animations
- cancelAllTaskViewAnimations();
-
- float curScroll = mStackScroller.getStackScroll();
- float targetScroll = mLayoutAlgorithm.getStackScrollForTaskAtInitialOffset(task);
- float absScrollDiff = Math.abs(targetScroll - curScroll);
- if (getChildViewForTask(task) == null || absScrollDiff > 0.35f) {
- int duration = (int) (LAUNCH_NEXT_SCROLL_BASE_DURATION +
- absScrollDiff * LAUNCH_NEXT_SCROLL_INCR_DURATION);
- mStackScroller.animateScroll(targetScroll,
- duration, new Runnable() {
- @Override
- public void run() {
- EventBus.getDefault().send(new LaunchTaskEvent(
- getChildViewForTask(task), task, null,
- false /* screenPinningRequested */));
- }
- });
- } else {
- EventBus.getDefault().send(new LaunchTaskEvent(getChildViewForTask(task), task, null,
- false /* screenPinningRequested */));
- }
- }
-
- /**
- * Check whether we should use the grid layout.
- */
- public boolean useGridLayout() {
- return mLayoutAlgorithm.useGridLayout();
- }
-
- /**
- * Reads current system flags related to accessibility and screen pinning.
- */
- private void readSystemFlags() {
- SystemServicesProxy ssp = LegacyRecentsImpl.getSystemServices();
- mTouchExplorationEnabled = ssp.isTouchExplorationEnabled();
- mScreenPinningEnabled = ActivityManagerWrapper.getInstance().isScreenPinningEnabled()
- && !ActivityManagerWrapper.getInstance().isLockToAppActive();
- }
-
- private void updateStackActionButtonVisibility() {
- if (LegacyRecentsImpl.getConfiguration().isLowRamDevice) {
- return;
- }
-
- // Always show the button in grid layout.
- if (useGridLayout() ||
- (mStackScroller.getStackScroll() < SHOW_STACK_ACTION_BUTTON_SCROLL_THRESHOLD &&
- mStack.getTaskCount() > 0)) {
- EventBus.getDefault().send(new ShowStackActionButtonEvent(false /* translate */));
- } else {
- EventBus.getDefault().send(new HideStackActionButtonEvent());
- }
- }
-
- /**
- * Returns the task to focus given the current launch state.
- */
- private int getInitialFocusTaskIndex(RecentsActivityLaunchState launchState, int numTasks,
- boolean useGridLayout) {
- if (launchState.launchedFromApp) {
- if (useGridLayout) {
- // If coming from another app to the grid layout, focus the front most task
- return numTasks - 1;
- }
-
- // If coming from another app, focus the next task
- return Math.max(0, numTasks - 2);
- } else {
- // If coming from home, focus the front most task
- return numTasks - 1;
- }
- }
-
- /**
- * Updates {@param transforms} to be the same size as {@param tasks}.
- */
- private void matchTaskListSize(List<Task> tasks, List<TaskViewTransform> transforms) {
- // We can reuse the task transforms where possible to reduce object allocation
- int taskTransformCount = transforms.size();
- int taskCount = tasks.size();
- if (taskTransformCount < taskCount) {
- // If there are less transforms than tasks, then add as many transforms as necessary
- for (int i = taskTransformCount; i < taskCount; i++) {
- transforms.add(new TaskViewTransform());
- }
- } else if (taskTransformCount > taskCount) {
- // If there are more transforms than tasks, then just subset the transform list
- transforms.subList(taskCount, taskTransformCount).clear();
- }
- }
-
- public void dump(String prefix, PrintWriter writer) {
- String innerPrefix = prefix + " ";
- String id = Integer.toHexString(System.identityHashCode(this));
-
- writer.print(prefix); writer.print(TAG);
- writer.print(" hasDefRelayout=");
- writer.print(mDeferredTaskViewLayoutAnimation != null ? "Y" : "N");
- writer.print(" clipDirty="); writer.print(mTaskViewsClipDirty ? "Y" : "N");
- writer.print(" awaitingStackReload="); writer.print(mFinishedLayoutAfterStackReload ? "Y" : "N");
- writer.print(" initialState="); writer.print(mInitialState);
- writer.print(" inMeasureLayout="); writer.print(mInMeasureLayout ? "Y" : "N");
- writer.print(" enterAnimCompleted="); writer.print(mEnterAnimationComplete ? "Y" : "N");
- writer.print(" touchExplorationOn="); writer.print(mTouchExplorationEnabled ? "Y" : "N");
- writer.print(" screenPinningOn="); writer.print(mScreenPinningEnabled ? "Y" : "N");
- writer.print(" numIgnoreTasks="); writer.print(mIgnoreTasks.size());
- writer.print(" numViewPool="); writer.print(mViewPool.getViews().size());
- writer.print(" stableStackBounds="); writer.print(
- Utilities.dumpRect(mStableStackBounds));
- writer.print(" stackBounds="); writer.print(
- Utilities.dumpRect(mStackBounds));
- writer.print(" stableWindow="); writer.print(
- Utilities.dumpRect(mStableWindowRect));
- writer.print(" window="); writer.print(Utilities.dumpRect(mWindowRect));
- writer.print(" display="); writer.print(Utilities.dumpRect(mDisplayRect));
- writer.print(" orientation="); writer.print(mDisplayOrientation);
- writer.print(" [0x"); writer.print(id); writer.print("]");
- writer.println();
-
- if (mFocusedTask != null) {
- writer.print(innerPrefix);
- writer.print("Focused task: ");
- mFocusedTask.dump("", writer);
- }
-
- int numTaskViews = mTaskViews.size();
- for (int i = 0; i < numTaskViews; i++) {
- mTaskViews.get(i).dump(innerPrefix, writer);
- }
-
- mLayoutAlgorithm.dump(innerPrefix, writer);
- mStackScroller.dump(innerPrefix, writer);
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/TaskStackViewScroller.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/TaskStackViewScroller.java
deleted file mode 100644
index 42efe59da54c..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/TaskStackViewScroller.java
+++ /dev/null
@@ -1,347 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.views;
-
-import android.animation.Animator;
-import android.animation.AnimatorListenerAdapter;
-import android.animation.ObjectAnimator;
-import android.animation.TimeInterpolator;
-import android.animation.ValueAnimator;
-import android.content.Context;
-import android.util.FloatProperty;
-import android.util.Log;
-import android.util.Property;
-import android.view.ViewConfiguration;
-import android.view.ViewDebug;
-import android.widget.OverScroller;
-
-import com.android.systemui.Interpolators;
-import com.android.systemui.R;
-import com.android.systemui.recents.LegacyRecentsImpl;
-import com.android.systemui.recents.utilities.AnimationProps;
-import com.android.systemui.recents.utilities.Utilities;
-import com.android.systemui.recents.views.lowram.TaskStackLowRamLayoutAlgorithm;
-import com.android.systemui.statusbar.FlingAnimationUtils;
-
-import java.io.PrintWriter;
-
-/* The scrolling logic for a TaskStackView */
-public class TaskStackViewScroller {
-
- private static final String TAG = "TaskStackViewScroller";
- private static final boolean DEBUG = false;
-
- public interface TaskStackViewScrollerCallbacks {
- void onStackScrollChanged(float prevScroll, float curScroll, AnimationProps animation);
- }
-
- /**
- * A Property wrapper around the <code>stackScroll</code> functionality handled by the
- * {@link #setStackScroll(float)} and
- * {@link #getStackScroll()} methods.
- */
- private static final Property<TaskStackViewScroller, Float> STACK_SCROLL =
- new FloatProperty<TaskStackViewScroller>("stackScroll") {
- @Override
- public void setValue(TaskStackViewScroller object, float value) {
- object.setStackScroll(value);
- }
-
- @Override
- public Float get(TaskStackViewScroller object) {
- return object.getStackScroll();
- }
- };
-
- Context mContext;
- TaskStackLayoutAlgorithm mLayoutAlgorithm;
- TaskStackViewScrollerCallbacks mCb;
-
- @ViewDebug.ExportedProperty(category="recents")
- float mStackScrollP;
- @ViewDebug.ExportedProperty(category="recents")
- float mLastDeltaP = 0f;
- float mFlingDownScrollP;
- int mFlingDownY;
-
- OverScroller mScroller;
- ObjectAnimator mScrollAnimator;
- float mFinalAnimatedScroll;
-
- final FlingAnimationUtils mFlingAnimationUtils;
-
- public TaskStackViewScroller(Context context, TaskStackViewScrollerCallbacks cb,
- TaskStackLayoutAlgorithm layoutAlgorithm) {
- mContext = context;
- mCb = cb;
- mScroller = new OverScroller(context);
- if (LegacyRecentsImpl.getConfiguration().isLowRamDevice) {
- mScroller.setFriction(0.06f);
- }
- mLayoutAlgorithm = layoutAlgorithm;
- mFlingAnimationUtils = new FlingAnimationUtils(context, 0.3f);
- }
-
- /** Resets the task scroller. */
- void reset() {
- mStackScrollP = 0f;
- mLastDeltaP = 0f;
- }
-
- void resetDeltaScroll() {
- mLastDeltaP = 0f;
- }
-
- /** Gets the current stack scroll */
- public float getStackScroll() {
- return mStackScrollP;
- }
-
- /**
- * Sets the current stack scroll immediately.
- */
- public void setStackScroll(float s) {
- setStackScroll(s, AnimationProps.IMMEDIATE);
- }
-
- /**
- * Sets the current stack scroll immediately, and returns the difference between the target
- * scroll and the actual scroll after accounting for the effect on the focus state.
- */
- public float setDeltaStackScroll(float downP, float deltaP) {
- float targetScroll = downP + deltaP;
- float newScroll = mLayoutAlgorithm.updateFocusStateOnScroll(downP + mLastDeltaP, targetScroll,
- mStackScrollP);
- setStackScroll(newScroll, AnimationProps.IMMEDIATE);
- mLastDeltaP = deltaP;
- return newScroll - targetScroll;
- }
-
- /**
- * Sets the current stack scroll, but indicates to the callback the preferred animation to
- * update to this new scroll.
- */
- public void setStackScroll(float newScroll, AnimationProps animation) {
- float prevScroll = mStackScrollP;
- mStackScrollP = newScroll;
- if (mCb != null) {
- mCb.onStackScrollChanged(prevScroll, mStackScrollP, animation);
- }
- }
-
- /**
- * Sets the current stack scroll to the initial state when you first enter recents.
- * @return whether the stack progress changed.
- */
- public boolean setStackScrollToInitialState() {
- float prevScroll = mStackScrollP;
- setStackScroll(mLayoutAlgorithm.mInitialScrollP);
- return Float.compare(prevScroll, mStackScrollP) != 0;
- }
-
- /**
- * Starts a fling that is coordinated with the {@link TaskStackViewTouchHandler}.
- */
- public void fling(float downScrollP, int downY, int y, int velY, int minY, int maxY,
- int overscroll) {
- if (DEBUG) {
- Log.d(TAG, "fling: " + downScrollP + ", downY: " + downY + ", y: " + y +
- ", velY: " + velY + ", minY: " + minY + ", maxY: " + maxY);
- }
- mFlingDownScrollP = downScrollP;
- mFlingDownY = downY;
- mScroller.fling(0, y, 0, velY, 0, 0, minY, maxY, 0, overscroll);
- }
-
- /** Bounds the current scroll if necessary */
- public boolean boundScroll() {
- float curScroll = getStackScroll();
- float newScroll = getBoundedStackScroll(curScroll);
- if (Float.compare(newScroll, curScroll) != 0) {
- setStackScroll(newScroll);
- return true;
- }
- return false;
- }
-
- /** Returns the bounded stack scroll */
- float getBoundedStackScroll(float scroll) {
- return Utilities.clamp(scroll, mLayoutAlgorithm.mMinScrollP, mLayoutAlgorithm.mMaxScrollP);
- }
-
- /** Returns the amount that the absolute value of how much the scroll is out of bounds. */
- float getScrollAmountOutOfBounds(float scroll) {
- if (scroll < mLayoutAlgorithm.mMinScrollP) {
- return Math.abs(scroll - mLayoutAlgorithm.mMinScrollP);
- } else if (scroll > mLayoutAlgorithm.mMaxScrollP) {
- return Math.abs(scroll - mLayoutAlgorithm.mMaxScrollP);
- }
- return 0f;
- }
-
- /** Returns whether the specified scroll is out of bounds */
- boolean isScrollOutOfBounds() {
- return Float.compare(getScrollAmountOutOfBounds(mStackScrollP), 0f) != 0;
- }
-
- /**
- * Scrolls the closest task and snaps into place. Only used in recents for low ram devices.
- * @param velocity of scroll
- */
- void scrollToClosestTask(int velocity) {
- float stackScroll = getStackScroll();
-
- // Skip if not in low ram layout and if the scroll is out of min and max bounds
- if (!LegacyRecentsImpl.getConfiguration().isLowRamDevice || stackScroll < mLayoutAlgorithm.mMinScrollP
- || stackScroll > mLayoutAlgorithm.mMaxScrollP) {
- return;
- }
- TaskStackLowRamLayoutAlgorithm algorithm = mLayoutAlgorithm.mTaskStackLowRamLayoutAlgorithm;
-
- float flingThreshold = ViewConfiguration.get(mContext).getScaledMinimumFlingVelocity();
- if (Math.abs(velocity) > flingThreshold) {
- int minY = algorithm.percentageToScroll(mLayoutAlgorithm.mMinScrollP);
- int maxY = algorithm.percentageToScroll(mLayoutAlgorithm.mMaxScrollP);
-
- // Calculate the fling and snap to closest task from final y position, computeScroll()
- // never runs when cancelled with animateScroll() and the overscroll is not calculated
- // here
- fling(0 /* downScrollP */, 0 /* downY */, algorithm.percentageToScroll(stackScroll),
- -velocity, minY, maxY, 0 /* overscroll */);
- float pos = algorithm.scrollToPercentage(mScroller.getFinalY());
-
- float newScrollP = algorithm.getClosestTaskP(pos, mLayoutAlgorithm.mNumStackTasks,
- velocity);
- ValueAnimator animator = ObjectAnimator.ofFloat(stackScroll, newScrollP);
- mFlingAnimationUtils.apply(animator, algorithm.percentageToScroll(stackScroll),
- algorithm.percentageToScroll(newScrollP), velocity);
- animateScroll(newScrollP, (int) animator.getDuration(), animator.getInterpolator(),
- null /* postRunnable */);
- } else {
- float newScrollP = algorithm.getClosestTaskP(stackScroll,
- mLayoutAlgorithm.mNumStackTasks, velocity);
- animateScroll(newScrollP, 300, Interpolators.ACCELERATE_DECELERATE,
- null /* postRunnable */);
- }
- }
-
- /** Animates the stack scroll into bounds */
- ObjectAnimator animateBoundScroll() {
- // TODO: Take duration for snap back
- float curScroll = getStackScroll();
- float newScroll = getBoundedStackScroll(curScroll);
- if (Float.compare(newScroll, curScroll) != 0) {
- // Start a new scroll animation
- animateScroll(newScroll, null /* postScrollRunnable */);
- }
- return mScrollAnimator;
- }
-
- /** Animates the stack scroll */
- void animateScroll(float newScroll, final Runnable postRunnable) {
- int duration = mContext.getResources().getInteger(
- R.integer.recents_animate_task_stack_scroll_duration);
- animateScroll(newScroll, duration, postRunnable);
- }
-
- /** Animates the stack scroll */
- void animateScroll(float newScroll, int duration, final Runnable postRunnable) {
- animateScroll(newScroll, duration, Interpolators.LINEAR_OUT_SLOW_IN, postRunnable);
- }
-
- /** Animates the stack scroll with time interpolator */
- void animateScroll(float newScroll, int duration, TimeInterpolator interpolator,
- final Runnable postRunnable) {
- ObjectAnimator an = ObjectAnimator.ofFloat(this, STACK_SCROLL, getStackScroll(), newScroll);
- an.setDuration(duration);
- an.setInterpolator(interpolator);
- animateScroll(newScroll, an, postRunnable);
- }
-
- /** Animates the stack scroll with animator */
- private void animateScroll(float newScroll, ObjectAnimator animator,
- final Runnable postRunnable) {
- // Finish any current scrolling animations
- if (mScrollAnimator != null && mScrollAnimator.isRunning()) {
- setStackScroll(mFinalAnimatedScroll);
- mScroller.forceFinished(true);
- }
- stopScroller();
- stopBoundScrollAnimation();
-
- if (Float.compare(mStackScrollP, newScroll) != 0) {
- mFinalAnimatedScroll = newScroll;
- mScrollAnimator = animator;
- mScrollAnimator.addListener(new AnimatorListenerAdapter() {
- @Override
- public void onAnimationEnd(Animator animation) {
- if (postRunnable != null) {
- postRunnable.run();
- }
- mScrollAnimator.removeAllListeners();
- }
- });
- mScrollAnimator.start();
- } else {
- if (postRunnable != null) {
- postRunnable.run();
- }
- }
- }
-
- /** Aborts any current stack scrolls */
- void stopBoundScrollAnimation() {
- Utilities.cancelAnimationWithoutCallbacks(mScrollAnimator);
- }
-
- /**** OverScroller ****/
-
- /** Called from the view draw, computes the next scroll. */
- boolean computeScroll() {
- if (mScroller.computeScrollOffset()) {
- float deltaP = mLayoutAlgorithm.getDeltaPForY(mFlingDownY, mScroller.getCurrY());
- mFlingDownScrollP += setDeltaStackScroll(mFlingDownScrollP, deltaP);
- if (DEBUG) {
- Log.d(TAG, "computeScroll: " + (mFlingDownScrollP + deltaP));
- }
- return true;
- }
- return false;
- }
-
- /** Returns whether the overscroller is scrolling. */
- boolean isScrolling() {
- return !mScroller.isFinished();
- }
-
- float getScrollVelocity() {
- return mScroller.getCurrVelocity();
- }
-
- /** Stops the scroller and any current fling. */
- void stopScroller() {
- if (!mScroller.isFinished()) {
- mScroller.abortAnimation();
- }
- }
-
- public void dump(String prefix, PrintWriter writer) {
- writer.print(prefix); writer.print(TAG);
- writer.print(" stackScroll:"); writer.print(mStackScrollP);
- writer.println();
- }
-} \ No newline at end of file
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/TaskStackViewTouchHandler.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/TaskStackViewTouchHandler.java
deleted file mode 100644
index a7fb4fae09ec..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/TaskStackViewTouchHandler.java
+++ /dev/null
@@ -1,706 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.views;
-
-import android.animation.Animator;
-import android.animation.ValueAnimator;
-import android.content.Context;
-import android.content.res.Resources;
-import android.graphics.Path;
-import android.util.ArrayMap;
-import android.util.MutableBoolean;
-import android.view.InputDevice;
-import android.view.MotionEvent;
-import android.view.VelocityTracker;
-import android.view.View;
-import android.view.ViewConfiguration;
-import android.view.ViewDebug;
-import android.view.ViewParent;
-import android.view.animation.Interpolator;
-
-import com.android.internal.logging.MetricsLogger;
-import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
-import com.android.systemui.Interpolators;
-import com.android.systemui.R;
-import com.android.systemui.SwipeHelper;
-import com.android.systemui.plugins.FalsingManager;
-import com.android.systemui.recents.Constants;
-import com.android.systemui.recents.LegacyRecentsImpl;
-import com.android.systemui.recents.events.EventBus;
-import com.android.systemui.recents.events.activity.HideRecentsEvent;
-import com.android.systemui.recents.events.ui.StackViewScrolledEvent;
-import com.android.systemui.recents.events.ui.TaskViewDismissedEvent;
-import com.android.systemui.recents.misc.FreePathInterpolator;
-import com.android.systemui.recents.utilities.AnimationProps;
-import com.android.systemui.recents.utilities.Utilities;
-import com.android.systemui.shared.recents.model.Task;
-import com.android.systemui.statusbar.FlingAnimationUtils;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Handles touch events for a TaskStackView.
- */
-class TaskStackViewTouchHandler implements SwipeHelper.Callback {
-
- private static final int INACTIVE_POINTER_ID = -1;
- private static final float CHALLENGING_SWIPE_ESCAPE_VELOCITY = 800f; // dp/sec
- // The min overscroll is the amount of task progress overscroll we want / the max overscroll
- // curve value below
- private static final float MAX_OVERSCROLL = 0.7f / 0.3f;
- private static final Interpolator OVERSCROLL_INTERP;
- static {
- Path OVERSCROLL_PATH = new Path();
- OVERSCROLL_PATH.moveTo(0, 0);
- OVERSCROLL_PATH.cubicTo(0.2f, 0.175f, 0.25f, 0.3f, 1f, 0.3f);
- OVERSCROLL_INTERP = new FreePathInterpolator(OVERSCROLL_PATH);
- }
-
- Context mContext;
- TaskStackView mSv;
- TaskStackViewScroller mScroller;
- VelocityTracker mVelocityTracker;
- FlingAnimationUtils mFlingAnimUtils;
- ValueAnimator mScrollFlingAnimator;
-
- @ViewDebug.ExportedProperty(category="recents")
- boolean mIsScrolling;
- float mDownScrollP;
- int mDownX, mDownY;
- int mLastY;
- int mActivePointerId = INACTIVE_POINTER_ID;
- int mOverscrollSize;
- TaskView mActiveTaskView = null;
-
- int mMinimumVelocity;
- int mMaximumVelocity;
- // The scroll touch slop is used to calculate when we start scrolling
- int mScrollTouchSlop;
- // Used to calculate when a tap is outside a task view rectangle.
- final int mWindowTouchSlop;
-
- private final StackViewScrolledEvent mStackViewScrolledEvent = new StackViewScrolledEvent();
-
- // The current and final set of task transforms, sized to match the list of tasks in the stack
- private ArrayList<Task> mCurrentTasks = new ArrayList<>();
- private ArrayList<TaskViewTransform> mCurrentTaskTransforms = new ArrayList<>();
- private ArrayList<TaskViewTransform> mFinalTaskTransforms = new ArrayList<>();
- private ArrayMap<View, Animator> mSwipeHelperAnimations = new ArrayMap<>();
- private TaskViewTransform mTmpTransform = new TaskViewTransform();
- private float mTargetStackScroll;
-
- SwipeHelper mSwipeHelper;
- boolean mInterceptedBySwipeHelper;
-
- public TaskStackViewTouchHandler(Context context, TaskStackView sv,
- TaskStackViewScroller scroller, FalsingManager falsingManager) {
- Resources res = context.getResources();
- ViewConfiguration configuration = ViewConfiguration.get(context);
- mContext = context;
- mSv = sv;
- mScroller = scroller;
- mMinimumVelocity = configuration.getScaledMinimumFlingVelocity();
- mMaximumVelocity = configuration.getScaledMaximumFlingVelocity();
- mScrollTouchSlop = configuration.getScaledTouchSlop();
- mWindowTouchSlop = configuration.getScaledWindowTouchSlop();
- mFlingAnimUtils = new FlingAnimationUtils(context, 0.2f);
- mOverscrollSize = res.getDimensionPixelSize(R.dimen.recents_fling_overscroll_distance);
- mSwipeHelper = new SwipeHelper(SwipeHelper.X, this, context, falsingManager) {
- @Override
- protected float getSize(View v) {
- return getScaledDismissSize();
- }
-
- @Override
- protected void prepareDismissAnimation(View v, Animator anim) {
- mSwipeHelperAnimations.put(v, anim);
- }
-
- @Override
- protected void prepareSnapBackAnimation(View v, Animator anim) {
- anim.setInterpolator(Interpolators.FAST_OUT_SLOW_IN);
- mSwipeHelperAnimations.put(v, anim);
- }
-
- @Override
- protected float getUnscaledEscapeVelocity() {
- return CHALLENGING_SWIPE_ESCAPE_VELOCITY;
- }
-
- @Override
- protected long getMaxEscapeAnimDuration() {
- return 700;
- }
- };
- mSwipeHelper.setDisableHardwareLayers(true);
- }
-
- /** Velocity tracker helpers */
- void initOrResetVelocityTracker() {
- if (mVelocityTracker == null) {
- mVelocityTracker = VelocityTracker.obtain();
- } else {
- mVelocityTracker.clear();
- }
- }
- void recycleVelocityTracker() {
- if (mVelocityTracker != null) {
- mVelocityTracker.recycle();
- mVelocityTracker = null;
- }
- }
-
- /** Touch preprocessing for handling below */
- public boolean onInterceptTouchEvent(MotionEvent ev) {
- // Pass through to swipe helper if we are swiping
- mInterceptedBySwipeHelper = isSwipingEnabled() && mSwipeHelper.onInterceptTouchEvent(ev);
- if (mInterceptedBySwipeHelper) {
- return true;
- }
-
- return handleTouchEvent(ev);
- }
-
- /** Handles touch events once we have intercepted them */
- public boolean onTouchEvent(MotionEvent ev) {
- // Pass through to swipe helper if we are swiping
- if (mInterceptedBySwipeHelper && mSwipeHelper.onTouchEvent(ev)) {
- return true;
- }
-
- handleTouchEvent(ev);
- return true;
- }
-
- /**
- * Finishes all scroll-fling and non-dismissing animations currently running.
- */
- public void cancelNonDismissTaskAnimations() {
- Utilities.cancelAnimationWithoutCallbacks(mScrollFlingAnimator);
- if (!mSwipeHelperAnimations.isEmpty()) {
- // For the non-dismissing tasks, freeze the position into the task overrides
- List<TaskView> taskViews = mSv.getTaskViews();
- for (int i = taskViews.size() - 1; i >= 0; i--) {
- TaskView tv = taskViews.get(i);
-
- if (mSv.isIgnoredTask(tv.getTask())) {
- continue;
- }
-
- tv.cancelTransformAnimation();
- mSv.getStackAlgorithm().addUnfocusedTaskOverride(tv, mTargetStackScroll);
- }
- mSv.getStackAlgorithm().setFocusState(TaskStackLayoutAlgorithm.STATE_UNFOCUSED);
- // Update the scroll to the final scroll position from onBeginDrag()
- mSv.getScroller().setStackScroll(mTargetStackScroll, null);
-
- mSwipeHelperAnimations.clear();
- }
- mActiveTaskView = null;
- }
-
- private boolean handleTouchEvent(MotionEvent ev) {
- // Short circuit if we have no children
- if (mSv.getTaskViews().size() == 0) {
- return false;
- }
-
- final TaskStackLayoutAlgorithm layoutAlgorithm = mSv.mLayoutAlgorithm;
- int action = ev.getAction();
- switch (action & MotionEvent.ACTION_MASK) {
- case MotionEvent.ACTION_DOWN: {
- // Stop the current scroll if it is still flinging
- mScroller.stopScroller();
- mScroller.stopBoundScrollAnimation();
- mScroller.resetDeltaScroll();
- cancelNonDismissTaskAnimations();
- mSv.cancelDeferredTaskViewLayoutAnimation();
-
- // Save the touch down info
- mDownX = (int) ev.getX();
- mDownY = (int) ev.getY();
- mLastY = mDownY;
- mDownScrollP = mScroller.getStackScroll();
- mActivePointerId = ev.getPointerId(0);
- mActiveTaskView = findViewAtPoint(mDownX, mDownY);
-
- // Initialize the velocity tracker
- initOrResetVelocityTracker();
- mVelocityTracker.addMovement(ev);
- break;
- }
- case MotionEvent.ACTION_POINTER_DOWN: {
- final int index = ev.getActionIndex();
- mActivePointerId = ev.getPointerId(index);
- mDownX = (int) ev.getX(index);
- mDownY = (int) ev.getY(index);
- mLastY = mDownY;
- mDownScrollP = mScroller.getStackScroll();
- mScroller.resetDeltaScroll();
- mVelocityTracker.addMovement(ev);
- break;
- }
- case MotionEvent.ACTION_MOVE: {
- int activePointerIndex = ev.findPointerIndex(mActivePointerId);
- if (activePointerIndex == -1) {
- break;
- }
- int y = (int) ev.getY(activePointerIndex);
- int x = (int) ev.getX(activePointerIndex);
- if (!mIsScrolling) {
- int yDiff = Math.abs(y - mDownY);
- int xDiff = Math.abs(x - mDownX);
- if (Math.abs(y - mDownY) > mScrollTouchSlop && yDiff > xDiff) {
- mIsScrolling = true;
- float stackScroll = mScroller.getStackScroll();
- List<TaskView> taskViews = mSv.getTaskViews();
- for (int i = taskViews.size() - 1; i >= 0; i--) {
- layoutAlgorithm.addUnfocusedTaskOverride(taskViews.get(i).getTask(),
- stackScroll);
- }
- layoutAlgorithm.setFocusState(TaskStackLayoutAlgorithm.STATE_UNFOCUSED);
-
- // Disallow parents from intercepting touch events
- final ViewParent parent = mSv.getParent();
- if (parent != null) {
- parent.requestDisallowInterceptTouchEvent(true);
- }
-
- MetricsLogger.action(mSv.getContext(), MetricsEvent.OVERVIEW_SCROLL);
- mLastY = mDownY = y;
- }
- }
- if (mIsScrolling) {
- // If we just move linearly on the screen, then that would map to 1/arclength
- // of the curve, so just move the scroll proportional to that
- float deltaP = layoutAlgorithm.getDeltaPForY(mDownY, y);
-
- // Modulate the overscroll to prevent users from pulling the stack too far
- float minScrollP = layoutAlgorithm.mMinScrollP;
- float maxScrollP = layoutAlgorithm.mMaxScrollP;
- float curScrollP = mDownScrollP + deltaP;
- if (curScrollP < minScrollP || curScrollP > maxScrollP) {
- float clampedScrollP = Utilities.clamp(curScrollP, minScrollP, maxScrollP);
- float overscrollP = (curScrollP - clampedScrollP);
- float maxOverscroll = LegacyRecentsImpl.getConfiguration().isLowRamDevice
- ? layoutAlgorithm.mTaskStackLowRamLayoutAlgorithm.getMaxOverscroll()
- : MAX_OVERSCROLL;
- float overscrollX = Math.abs(overscrollP) / maxOverscroll;
- float interpX = OVERSCROLL_INTERP.getInterpolation(overscrollX);
- curScrollP = clampedScrollP + Math.signum(overscrollP) *
- (interpX * maxOverscroll);
- }
- mDownScrollP += mScroller.setDeltaStackScroll(mDownScrollP,
- curScrollP - mDownScrollP);
- mStackViewScrolledEvent.updateY(y - mLastY);
- EventBus.getDefault().send(mStackViewScrolledEvent);
- }
-
- mLastY = y;
- mVelocityTracker.addMovement(ev);
- break;
- }
- case MotionEvent.ACTION_POINTER_UP: {
- int pointerIndex = ev.getActionIndex();
- int pointerId = ev.getPointerId(pointerIndex);
- if (pointerId == mActivePointerId) {
- // Select a new active pointer id and reset the motion state
- final int newPointerIndex = (pointerIndex == 0) ? 1 : 0;
- mActivePointerId = ev.getPointerId(newPointerIndex);
- mDownX = (int) ev.getX(pointerIndex);
- mDownY = (int) ev.getY(pointerIndex);
- mLastY = mDownY;
- mDownScrollP = mScroller.getStackScroll();
- }
- mVelocityTracker.addMovement(ev);
- break;
- }
- case MotionEvent.ACTION_UP: {
- mVelocityTracker.addMovement(ev);
- mVelocityTracker.computeCurrentVelocity(1000, mMaximumVelocity);
- int activePointerIndex = ev.findPointerIndex(mActivePointerId);
- int y = (int) ev.getY(activePointerIndex);
- int velocity = (int) mVelocityTracker.getYVelocity(mActivePointerId);
- if (mIsScrolling) {
- if (mScroller.isScrollOutOfBounds()) {
- mScroller.animateBoundScroll();
- } else if (Math.abs(velocity) > mMinimumVelocity &&
- !LegacyRecentsImpl.getConfiguration().isLowRamDevice) {
- float minY = mDownY + layoutAlgorithm.getYForDeltaP(mDownScrollP,
- layoutAlgorithm.mMaxScrollP);
- float maxY = mDownY + layoutAlgorithm.getYForDeltaP(mDownScrollP,
- layoutAlgorithm.mMinScrollP);
- mScroller.fling(mDownScrollP, mDownY, y, velocity, (int) minY, (int) maxY,
- mOverscrollSize);
- mSv.invalidate();
- }
-
- // Reset the focused task after the user has scrolled, but we have no scrolling
- // in grid layout and therefore we don't want to reset the focus there.
- if (!mSv.mTouchExplorationEnabled && !mSv.useGridLayout()) {
- if (LegacyRecentsImpl.getConfiguration().isLowRamDevice) {
- mScroller.scrollToClosestTask(velocity);
- } else {
- mSv.resetFocusedTask(mSv.getFocusedTask());
- }
- }
- } else if (mActiveTaskView == null) {
- // This tap didn't start on a task.
- maybeHideRecentsFromBackgroundTap((int) ev.getX(), (int) ev.getY());
- }
-
- mActivePointerId = INACTIVE_POINTER_ID;
- mIsScrolling = false;
- recycleVelocityTracker();
- break;
- }
- case MotionEvent.ACTION_CANCEL: {
- mActivePointerId = INACTIVE_POINTER_ID;
- mIsScrolling = false;
- recycleVelocityTracker();
- break;
- }
- }
- return mIsScrolling;
- }
-
- /** Hides recents if the up event at (x, y) is a tap on the background area. */
- void maybeHideRecentsFromBackgroundTap(int x, int y) {
- // Ignore the up event if it's too far from its start position. The user might have been
- // trying to scroll or swipe.
- int dx = Math.abs(mDownX - x);
- int dy = Math.abs(mDownY - y);
- if (dx > mScrollTouchSlop || dy > mScrollTouchSlop) {
- return;
- }
-
- // Shift the tap position toward the center of the task stack and check to see if it would
- // have hit a view. The user might have tried to tap on a task and missed slightly.
- int shiftedX = x;
- if (x > (mSv.getRight() - mSv.getLeft()) / 2) {
- shiftedX -= mWindowTouchSlop;
- } else {
- shiftedX += mWindowTouchSlop;
- }
- if (findViewAtPoint(shiftedX, y) != null) {
- return;
- }
-
- // Disallow tapping above and below the stack to dismiss recents
- if (x > mSv.mLayoutAlgorithm.mStackRect.left && x < mSv.mLayoutAlgorithm.mStackRect.right) {
- return;
- }
-
- // The user intentionally tapped on the background, which is like a tap on the "desktop".
- // Hide recents and transition to the launcher.
- EventBus.getDefault().send(new HideRecentsEvent(false, true));
- }
-
- /** Handles generic motion events */
- public boolean onGenericMotionEvent(MotionEvent ev) {
- if ((ev.getSource() & InputDevice.SOURCE_CLASS_POINTER) ==
- InputDevice.SOURCE_CLASS_POINTER) {
- int action = ev.getAction();
- switch (action & MotionEvent.ACTION_MASK) {
- case MotionEvent.ACTION_SCROLL:
- // Find the front most task and scroll the next task to the front
- float vScroll = ev.getAxisValue(MotionEvent.AXIS_VSCROLL);
- if (vScroll > 0) {
- mSv.setRelativeFocusedTask(true, true /* stackTasksOnly */,
- false /* animated */);
- } else {
- mSv.setRelativeFocusedTask(false, true /* stackTasksOnly */,
- false /* animated */);
- }
- return true;
- }
- }
- return false;
- }
-
- /**** SwipeHelper Implementation ****/
-
- @Override
- public View getChildAtPosition(MotionEvent ev) {
- TaskView tv = findViewAtPoint((int) ev.getX(), (int) ev.getY());
- if (tv != null && canChildBeDismissed(tv)) {
- return tv;
- }
- return null;
- }
-
- @Override
- public boolean canChildBeDismissed(View v) {
- // Disallow dismissing an already dismissed task
- TaskView tv = (TaskView) v;
- Task task = tv.getTask();
- return !mSwipeHelperAnimations.containsKey(v) &&
- (mSv.getStack().indexOfTask(task) != -1);
- }
-
- /**
- * Starts a manual drag that goes through the same swipe helper path.
- */
- public void onBeginManualDrag(TaskView v) {
- mActiveTaskView = v;
- mSwipeHelperAnimations.put(v, null);
- onBeginDrag(v);
- }
-
- @Override
- public void onBeginDrag(View v) {
- TaskView tv = (TaskView) v;
-
- // Disable clipping with the stack while we are swiping
- tv.setClipViewInStack(false);
- // Disallow touch events from this task view
- tv.setTouchEnabled(false);
- // Disallow parents from intercepting touch events
- final ViewParent parent = mSv.getParent();
- if (parent != null) {
- parent.requestDisallowInterceptTouchEvent(true);
- }
-
- // Add this task to the set of tasks we are deleting
- mSv.addIgnoreTask(tv.getTask());
-
- // Determine if we are animating the other tasks while dismissing this task
- mCurrentTasks = new ArrayList<Task>(mSv.getStack().getTasks());
- MutableBoolean isFrontMostTask = new MutableBoolean(false);
- Task anchorTask = mSv.findAnchorTask(mCurrentTasks, isFrontMostTask);
- TaskStackLayoutAlgorithm layoutAlgorithm = mSv.getStackAlgorithm();
- TaskStackViewScroller stackScroller = mSv.getScroller();
- if (anchorTask != null) {
- // Get the current set of task transforms
- mSv.getCurrentTaskTransforms(mCurrentTasks, mCurrentTaskTransforms);
-
- // Get the stack scroll of the task to anchor to (since we are removing something, the
- // front most task will be our anchor task)
- float prevAnchorTaskScroll = 0;
- boolean pullStackForward = mCurrentTasks.size() > 0;
- if (pullStackForward) {
- if (LegacyRecentsImpl.getConfiguration().isLowRamDevice) {
- float index = layoutAlgorithm.getStackScrollForTask(anchorTask);
- prevAnchorTaskScroll = mSv.getStackAlgorithm().mTaskStackLowRamLayoutAlgorithm
- .getScrollPForTask((int) index);
- } else {
- prevAnchorTaskScroll = layoutAlgorithm.getStackScrollForTask(anchorTask);
- }
- }
-
- // Calculate where the views would be without the deleting tasks
- mSv.updateLayoutAlgorithm(false /* boundScroll */);
-
- float newStackScroll = stackScroller.getStackScroll();
- if (isFrontMostTask.value) {
- // Bound the stack scroll to pull tasks forward if necessary
- newStackScroll = stackScroller.getBoundedStackScroll(newStackScroll);
- } else if (pullStackForward) {
- // Otherwise, offset the scroll by the movement of the anchor task
- float anchorTaskScroll =
- layoutAlgorithm.getStackScrollForTaskIgnoreOverrides(anchorTask);
- if (LegacyRecentsImpl.getConfiguration().isLowRamDevice) {
- float index = layoutAlgorithm.getStackScrollForTask(anchorTask);
- anchorTaskScroll = mSv.getStackAlgorithm().mTaskStackLowRamLayoutAlgorithm
- .getScrollPForTask((int) index);
- }
- float stackScrollOffset = (anchorTaskScroll - prevAnchorTaskScroll);
- if (layoutAlgorithm.getFocusState() != TaskStackLayoutAlgorithm.STATE_FOCUSED
- && !LegacyRecentsImpl.getConfiguration().isLowRamDevice) {
- // If we are focused, we don't want the front task to move, but otherwise, we
- // allow the back task to move up, and the front task to move back
- stackScrollOffset *= 0.75f;
- }
- newStackScroll = stackScroller.getBoundedStackScroll(stackScroller.getStackScroll()
- + stackScrollOffset);
- }
-
- // Pick up the newly visible views, not including the deleting tasks
- mSv.bindVisibleTaskViews(newStackScroll, true /* ignoreTaskOverrides */);
-
- // Get the final set of task transforms (with task removed)
- mSv.getLayoutTaskTransforms(newStackScroll, TaskStackLayoutAlgorithm.STATE_UNFOCUSED,
- mCurrentTasks, true /* ignoreTaskOverrides */, mFinalTaskTransforms);
-
- // Set the target to scroll towards upon dismissal
- mTargetStackScroll = newStackScroll;
-
- /*
- * Post condition: All views that will be visible as a part of the gesture are retrieved
- * and at their initial positions. The stack is still at the current
- * scroll, but the layout is updated without the task currently being
- * dismissed. The final layout is in the unfocused stack state, which
- * will be applied when the current task is dismissed.
- */
- }
- }
-
- @Override
- public boolean updateSwipeProgress(View v, boolean dismissable, float swipeProgress) {
- // Only update the swipe progress for the surrounding tasks if the dismiss animation was not
- // preempted from a call to cancelNonDismissTaskAnimations
- if ((mActiveTaskView == v || mSwipeHelperAnimations.containsKey(v)) &&
- !LegacyRecentsImpl.getConfiguration().isLowRamDevice) {
- updateTaskViewTransforms(
- Interpolators.FAST_OUT_SLOW_IN.getInterpolation(swipeProgress));
- }
- return true;
- }
-
- /**
- * Called after the {@link TaskView} is finished animating away.
- */
- @Override
- public void onChildDismissed(View v) {
- TaskView tv = (TaskView) v;
-
- // Re-enable clipping with the stack (we will reuse this view)
- tv.setClipViewInStack(true);
- // Re-enable touch events from this task view
- tv.setTouchEnabled(true);
- // Update the scroll to the final scroll position before laying out the tasks during dismiss
- if (mSwipeHelperAnimations.containsKey(v)) {
- mSv.getScroller().setStackScroll(mTargetStackScroll, null);
- }
- // Remove the task view from the stack, ignoring the animation if we've started dragging
- // again
- EventBus.getDefault().send(new TaskViewDismissedEvent(tv.getTask(), tv,
- mSwipeHelperAnimations.containsKey(v)
- ? new AnimationProps(TaskStackView.DEFAULT_SYNC_STACK_DURATION,
- Interpolators.FAST_OUT_SLOW_IN)
- : null));
- // Only update the final scroll and layout state (set in onBeginDrag()) if the dismiss
- // animation was not preempted from a call to cancelNonDismissTaskAnimations
- if (mSwipeHelperAnimations.containsKey(v)) {
- // Update the focus state to the final focus state
- mSv.getStackAlgorithm().setFocusState(TaskStackLayoutAlgorithm.STATE_UNFOCUSED);
- mSv.getStackAlgorithm().clearUnfocusedTaskOverrides();
- // Stop tracking this deletion animation
- mSwipeHelperAnimations.remove(v);
- }
- // Keep track of deletions by keyboard
- MetricsLogger.histogram(tv.getContext(), "overview_task_dismissed_source",
- Constants.Metrics.DismissSourceSwipeGesture);
- }
-
- /**
- * Called after the {@link TaskView} is finished animating back into the list.
- * onChildDismissed() calls.
- */
- @Override
- public void onChildSnappedBack(View v, float targetLeft) {
- TaskView tv = (TaskView) v;
-
- // Re-enable clipping with the stack
- tv.setClipViewInStack(true);
- // Re-enable touch events from this task view
- tv.setTouchEnabled(true);
-
- // Stop tracking this deleting task, and update the layout to include this task again. The
- // stack scroll does not need to be reset, since the scroll has not actually changed in
- // onBeginDrag().
- mSv.removeIgnoreTask(tv.getTask());
- mSv.updateLayoutAlgorithm(false /* boundScroll */);
- mSv.relayoutTaskViews(AnimationProps.IMMEDIATE);
- mSwipeHelperAnimations.remove(v);
- }
-
- @Override
- public void onDragCancelled(View v) {
- // Do nothing
- }
-
- @Override
- public boolean isAntiFalsingNeeded() {
- return false;
- }
-
- @Override
- public float getFalsingThresholdFactor() {
- return 0;
- }
-
- /**
- * Interpolates the non-deleting tasks to their final transforms from their current transforms.
- */
- private void updateTaskViewTransforms(float dismissFraction) {
- List<TaskView> taskViews = mSv.getTaskViews();
- int taskViewCount = taskViews.size();
- for (int i = 0; i < taskViewCount; i++) {
- TaskView tv = taskViews.get(i);
- Task task = tv.getTask();
-
- if (mSv.isIgnoredTask(task)) {
- continue;
- }
-
- int taskIndex = mCurrentTasks.indexOf(task);
- if (taskIndex == -1) {
- // If a task was added to the stack view after the start of the dismiss gesture,
- // just ignore it
- continue;
- }
-
- TaskViewTransform fromTransform = mCurrentTaskTransforms.get(taskIndex);
- TaskViewTransform toTransform = mFinalTaskTransforms.get(taskIndex);
-
- mTmpTransform.copyFrom(fromTransform);
- // We only really need to interpolate the bounds, progress and translation
- mTmpTransform.rect.set(Utilities.RECTF_EVALUATOR.evaluate(dismissFraction,
- fromTransform.rect, toTransform.rect));
- mTmpTransform.dimAlpha = fromTransform.dimAlpha + (toTransform.dimAlpha -
- fromTransform.dimAlpha) * dismissFraction;
- mTmpTransform.viewOutlineAlpha = fromTransform.viewOutlineAlpha +
- (toTransform.viewOutlineAlpha - fromTransform.viewOutlineAlpha) *
- dismissFraction;
- mTmpTransform.translationZ = fromTransform.translationZ +
- (toTransform.translationZ - fromTransform.translationZ) * dismissFraction;
-
- mSv.updateTaskViewToTransform(tv, mTmpTransform, AnimationProps.IMMEDIATE);
- }
- }
-
- /** Returns the view at the specified coordinates */
- private TaskView findViewAtPoint(int x, int y) {
- List<Task> tasks = mSv.getStack().getTasks();
- int taskCount = tasks.size();
- for (int i = taskCount - 1; i >= 0; i--) {
- TaskView tv = mSv.getChildViewForTask(tasks.get(i));
- if (tv != null && tv.getVisibility() == View.VISIBLE) {
- if (mSv.isTouchPointInView(x, y, tv)) {
- return tv;
- }
- }
- }
- return null;
- }
-
- /**
- * Returns the scaled size used to calculate the dismiss fraction.
- */
- public float getScaledDismissSize() {
- return 1.5f * Math.max(mSv.getWidth(), mSv.getHeight());
- }
-
- /**
- * Returns whether swiping is enabled.
- */
- private boolean isSwipingEnabled() {
- return !mSv.useGridLayout();
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/TaskView.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/TaskView.java
deleted file mode 100644
index ab0bf9570ffd..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/TaskView.java
+++ /dev/null
@@ -1,737 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.views;
-
-import android.animation.Animator;
-import android.animation.AnimatorSet;
-import android.animation.ObjectAnimator;
-import android.animation.ValueAnimator;
-import android.content.Context;
-import android.content.res.Resources;
-import android.graphics.Outline;
-import android.graphics.Point;
-import android.graphics.Rect;
-import android.util.AttributeSet;
-import android.util.FloatProperty;
-import android.util.Property;
-import android.view.MotionEvent;
-import android.view.View;
-import android.view.ViewDebug;
-import android.view.ViewOutlineProvider;
-import android.widget.TextView;
-import android.widget.Toast;
-
-import com.android.internal.logging.MetricsLogger;
-import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
-import com.android.systemui.Interpolators;
-import com.android.systemui.R;
-import com.android.systemui.recents.LegacyRecentsImpl;
-import com.android.systemui.recents.RecentsActivity;
-import com.android.systemui.recents.RecentsConfiguration;
-import com.android.systemui.recents.events.EventBus;
-import com.android.systemui.recents.events.activity.LaunchTaskEvent;
-import com.android.systemui.recents.events.ui.DismissTaskViewEvent;
-import com.android.systemui.recents.events.ui.TaskViewDismissedEvent;
-import com.android.systemui.recents.events.ui.dragndrop.DragEndCancelledEvent;
-import com.android.systemui.recents.events.ui.dragndrop.DragEndEvent;
-import com.android.systemui.recents.events.ui.dragndrop.DragStartEvent;
-import com.android.systemui.recents.misc.ReferenceCountedTrigger;
-import com.android.systemui.recents.misc.SystemServicesProxy;
-import com.android.systemui.recents.utilities.AnimationProps;
-import com.android.systemui.recents.utilities.Utilities;
-import com.android.systemui.shared.recents.model.Task;
-import com.android.systemui.shared.recents.model.ThumbnailData;
-
-import java.io.PrintWriter;
-import java.util.ArrayList;
-
-/**
- * A {@link TaskView} represents a fixed view of a task. Because the TaskView's layout is directed
- * solely by the {@link TaskStackView}, we make it a fixed size layout which allows relayouts down
- * the view hierarchy, but not upwards from any of its children (the TaskView will relayout itself
- * with the previous bounds if any child requests layout).
- */
-public class TaskView extends FixedSizeFrameLayout implements Task.TaskCallbacks,
- TaskStackAnimationHelper.Callbacks, View.OnClickListener, View.OnLongClickListener {
-
- /** The TaskView callbacks */
- interface TaskViewCallbacks {
- void onTaskViewClipStateChanged(TaskView tv);
- }
-
- /**
- * The dim overlay is generally calculated from the task progress, but occasionally (like when
- * launching) needs to be animated independently of the task progress. This call is only used
- * when animating the task into Recents, when the header dim is already applied
- */
- public static final Property<TaskView, Float> DIM_ALPHA_WITHOUT_HEADER =
- new FloatProperty<TaskView>("dimAlphaWithoutHeader") {
- @Override
- public void setValue(TaskView tv, float dimAlpha) {
- tv.setDimAlphaWithoutHeader(dimAlpha);
- }
-
- @Override
- public Float get(TaskView tv) {
- return tv.getDimAlpha();
- }
- };
-
- /**
- * The dim overlay is generally calculated from the task progress, but occasionally (like when
- * launching) needs to be animated independently of the task progress.
- */
- public static final Property<TaskView, Float> DIM_ALPHA =
- new FloatProperty<TaskView>("dimAlpha") {
- @Override
- public void setValue(TaskView tv, float dimAlpha) {
- tv.setDimAlpha(dimAlpha);
- }
-
- @Override
- public Float get(TaskView tv) {
- return tv.getDimAlpha();
- }
- };
-
- /**
- * The dim overlay is generally calculated from the task progress, but occasionally (like when
- * launching) needs to be animated independently of the task progress.
- */
- public static final Property<TaskView, Float> VIEW_OUTLINE_ALPHA =
- new FloatProperty<TaskView>("viewOutlineAlpha") {
- @Override
- public void setValue(TaskView tv, float alpha) {
- tv.getViewBounds().setAlpha(alpha);
- }
-
- @Override
- public Float get(TaskView tv) {
- return tv.getViewBounds().getAlpha();
- }
- };
-
- @ViewDebug.ExportedProperty(category="recents")
- private float mDimAlpha;
- private float mActionButtonTranslationZ;
-
- @ViewDebug.ExportedProperty(deepExport=true, prefix="task_")
- private Task mTask;
- private boolean mTaskBound;
- @ViewDebug.ExportedProperty(category="recents")
- private boolean mClipViewInStack = true;
- @ViewDebug.ExportedProperty(category="recents")
- private boolean mTouchExplorationEnabled;
- @ViewDebug.ExportedProperty(category="recents")
- private boolean mIsDisabledInSafeMode;
- @ViewDebug.ExportedProperty(deepExport=true, prefix="view_bounds_")
- private AnimateableViewBounds mViewBounds;
-
- private AnimatorSet mTransformAnimation;
- private ObjectAnimator mDimAnimator;
- private ObjectAnimator mOutlineAnimator;
- private final TaskViewTransform mTargetAnimationTransform = new TaskViewTransform();
- private ArrayList<Animator> mTmpAnimators = new ArrayList<>();
-
- @ViewDebug.ExportedProperty(deepExport=true, prefix="thumbnail_")
- protected TaskViewThumbnail mThumbnailView;
- @ViewDebug.ExportedProperty(deepExport=true, prefix="header_")
- protected TaskViewHeader mHeaderView;
- private View mActionButtonView;
- private View mIncompatibleAppToastView;
- private TaskViewCallbacks mCb;
-
- @ViewDebug.ExportedProperty(category="recents")
- private Point mDownTouchPos = new Point();
-
- private Toast mDisabledAppToast;
-
- public TaskView(Context context) {
- this(context, null);
- }
-
- public TaskView(Context context, AttributeSet attrs) {
- this(context, attrs, 0);
- }
-
- public TaskView(Context context, AttributeSet attrs, int defStyleAttr) {
- this(context, attrs, defStyleAttr, 0);
- }
-
- public TaskView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
- super(context, attrs, defStyleAttr, defStyleRes);
- RecentsConfiguration config = LegacyRecentsImpl.getConfiguration();
- Resources res = context.getResources();
- mViewBounds = createOutlineProvider();
- if (config.fakeShadows) {
- setBackground(new FakeShadowDrawable(res, config));
- }
- setOutlineProvider(mViewBounds);
- setOnLongClickListener(this);
- setAccessibilityDelegate(new TaskViewAccessibilityDelegate(this));
- }
-
- /** Set callback */
- void setCallbacks(TaskViewCallbacks cb) {
- mCb = cb;
- }
-
- /**
- * Called from RecentsActivity when it is relaunched.
- */
- void onReload(boolean isResumingFromVisible) {
- resetNoUserInteractionState();
- if (!isResumingFromVisible) {
- resetViewProperties();
- }
- }
-
- /** Gets the task */
- public Task getTask() {
- return mTask;
- }
-
- /* Create an outline provider to clip and outline the view */
- protected AnimateableViewBounds createOutlineProvider() {
- return new AnimateableViewBounds(this, mContext.getResources().getDimensionPixelSize(
- R.dimen.recents_task_view_shadow_rounded_corners_radius));
- }
-
- /** Returns the view bounds. */
- AnimateableViewBounds getViewBounds() {
- return mViewBounds;
- }
-
- @Override
- protected void onFinishInflate() {
- // Bind the views
- mHeaderView = findViewById(R.id.task_view_bar);
- mThumbnailView = findViewById(R.id.task_view_thumbnail);
- mThumbnailView.updateClipToTaskBar(mHeaderView);
- mActionButtonView = findViewById(R.id.lock_to_app_fab);
- mActionButtonView.setOutlineProvider(new ViewOutlineProvider() {
- @Override
- public void getOutline(View view, Outline outline) {
- // Set the outline to match the FAB background
- outline.setOval(0, 0, mActionButtonView.getWidth(), mActionButtonView.getHeight());
- outline.setAlpha(0.35f);
- }
- });
- mActionButtonView.setOnClickListener(this);
- mActionButtonTranslationZ = mActionButtonView.getTranslationZ();
- }
-
- /**
- * Update the task view when the configuration changes.
- */
- protected void onConfigurationChanged() {
- mHeaderView.onConfigurationChanged();
- }
-
- @Override
- protected void onSizeChanged(int w, int h, int oldw, int oldh) {
- super.onSizeChanged(w, h, oldw, oldh);
- if (w > 0 && h > 0) {
- mHeaderView.onTaskViewSizeChanged(w, h);
- mThumbnailView.onTaskViewSizeChanged(w, h);
-
- mActionButtonView.setTranslationX(w - getMeasuredWidth());
- mActionButtonView.setTranslationY(h - getMeasuredHeight());
- }
- }
-
- @Override
- public boolean hasOverlappingRendering() {
- return false;
- }
-
- @Override
- public boolean onInterceptTouchEvent(MotionEvent ev) {
- if (ev.getAction() == MotionEvent.ACTION_DOWN) {
- mDownTouchPos.set((int) (ev.getX() * getScaleX()), (int) (ev.getY() * getScaleY()));
- }
- return super.onInterceptTouchEvent(ev);
- }
-
- @Override
- protected void measureContents(int width, int height) {
- int widthWithoutPadding = width - mPaddingLeft - mPaddingRight;
- int heightWithoutPadding = height - mPaddingTop - mPaddingBottom;
- int widthSpec = MeasureSpec.makeMeasureSpec(widthWithoutPadding, MeasureSpec.EXACTLY);
- int heightSpec = MeasureSpec.makeMeasureSpec(heightWithoutPadding, MeasureSpec.EXACTLY);
-
- // Measure the content
- measureChildren(widthSpec, heightSpec);
-
- setMeasuredDimension(width, height);
- }
-
- void updateViewPropertiesToTaskTransform(TaskViewTransform toTransform,
- AnimationProps toAnimation, ValueAnimator.AnimatorUpdateListener updateCallback) {
- RecentsConfiguration config = LegacyRecentsImpl.getConfiguration();
- cancelTransformAnimation();
-
- // Compose the animations for the transform
- mTmpAnimators.clear();
- toTransform.applyToTaskView(this, mTmpAnimators, toAnimation, !config.fakeShadows);
- if (toAnimation.isImmediate()) {
- if (Float.compare(getDimAlpha(), toTransform.dimAlpha) != 0) {
- setDimAlpha(toTransform.dimAlpha);
- }
- if (Float.compare(mViewBounds.getAlpha(), toTransform.viewOutlineAlpha) != 0) {
- mViewBounds.setAlpha(toTransform.viewOutlineAlpha);
- }
- // Manually call back to the animator listener and update callback
- if (toAnimation.getListener() != null) {
- toAnimation.getListener().onAnimationEnd(null);
- }
- if (updateCallback != null) {
- updateCallback.onAnimationUpdate(null);
- }
- } else {
- // Both the progress and the update are a function of the bounds movement of the task
- if (Float.compare(getDimAlpha(), toTransform.dimAlpha) != 0) {
- mDimAnimator = ObjectAnimator.ofFloat(this, DIM_ALPHA, getDimAlpha(),
- toTransform.dimAlpha);
- mTmpAnimators.add(toAnimation.apply(AnimationProps.BOUNDS, mDimAnimator));
- }
- if (Float.compare(mViewBounds.getAlpha(), toTransform.viewOutlineAlpha) != 0) {
- mOutlineAnimator = ObjectAnimator.ofFloat(this, VIEW_OUTLINE_ALPHA,
- mViewBounds.getAlpha(), toTransform.viewOutlineAlpha);
- mTmpAnimators.add(toAnimation.apply(AnimationProps.BOUNDS, mOutlineAnimator));
- }
- if (updateCallback != null) {
- ValueAnimator updateCallbackAnim = ValueAnimator.ofInt(0, 1);
- updateCallbackAnim.addUpdateListener(updateCallback);
- mTmpAnimators.add(toAnimation.apply(AnimationProps.BOUNDS, updateCallbackAnim));
- }
-
- // Create the animator
- mTransformAnimation = toAnimation.createAnimator(mTmpAnimators);
- mTransformAnimation.start();
- mTargetAnimationTransform.copyFrom(toTransform);
- }
- }
-
- /** Resets this view's properties */
- void resetViewProperties() {
- cancelTransformAnimation();
- setDimAlpha(0);
- setVisibility(View.VISIBLE);
- getViewBounds().reset();
- getHeaderView().reset();
- TaskViewTransform.reset(this);
-
- mActionButtonView.setScaleX(1f);
- mActionButtonView.setScaleY(1f);
- mActionButtonView.setAlpha(0f);
- mActionButtonView.setTranslationX(0f);
- mActionButtonView.setTranslationY(0f);
- mActionButtonView.setTranslationZ(mActionButtonTranslationZ);
- if (mIncompatibleAppToastView != null) {
- mIncompatibleAppToastView.setVisibility(View.INVISIBLE);
- }
- }
-
- /**
- * @return whether we are animating towards {@param transform}
- */
- boolean isAnimatingTo(TaskViewTransform transform) {
- return mTransformAnimation != null && mTransformAnimation.isStarted()
- && mTargetAnimationTransform.isSame(transform);
- }
-
- /**
- * Cancels any current transform animations.
- */
- public void cancelTransformAnimation() {
- cancelDimAnimationIfExists();
- Utilities.cancelAnimationWithoutCallbacks(mTransformAnimation);
- Utilities.cancelAnimationWithoutCallbacks(mOutlineAnimator);
- }
-
- private void cancelDimAnimationIfExists() {
- if (mDimAnimator != null) {
- mDimAnimator.cancel();
- }
- }
-
- /** Enables/disables handling touch on this task view. */
- public void setTouchEnabled(boolean enabled) {
- setOnClickListener(enabled ? this : null);
- }
-
- /** Animates this task view if the user does not interact with the stack after a certain time. */
- public void startNoUserInteractionAnimation() {
- mHeaderView.startNoUserInteractionAnimation();
- }
-
- /** Mark this task view that the user does has not interacted with the stack after a certain time. */
- void setNoUserInteractionState() {
- mHeaderView.setNoUserInteractionState();
- }
-
- /** Resets the state tracking that the user has not interacted with the stack after a certain time. */
- void resetNoUserInteractionState() {
- mHeaderView.resetNoUserInteractionState();
- }
-
- /** Dismisses this task. */
- void dismissTask() {
- // Animate out the view and call the callback
- final TaskView tv = this;
- DismissTaskViewEvent dismissEvent = new DismissTaskViewEvent(tv);
- dismissEvent.addPostAnimationCallback(new Runnable() {
- @Override
- public void run() {
- EventBus.getDefault().send(new TaskViewDismissedEvent(mTask, tv,
- new AnimationProps(TaskStackView.DEFAULT_SYNC_STACK_DURATION,
- Interpolators.FAST_OUT_SLOW_IN)));
- }
- });
- EventBus.getDefault().send(dismissEvent);
- }
-
- /**
- * Returns whether this view should be clipped, or any views below should clip against this
- * view.
- */
- boolean shouldClipViewInStack() {
- if (getVisibility() != View.VISIBLE || LegacyRecentsImpl.getConfiguration().isLowRamDevice) {
- return false;
- }
- return mClipViewInStack;
- }
-
- /** Sets whether this view should be clipped, or clipped against. */
- void setClipViewInStack(boolean clip) {
- if (clip != mClipViewInStack) {
- mClipViewInStack = clip;
- if (mCb != null) {
- mCb.onTaskViewClipStateChanged(this);
- }
- }
- }
-
- public TaskViewHeader getHeaderView() {
- return mHeaderView;
- }
-
- /**
- * Sets the current dim.
- */
- public void setDimAlpha(float dimAlpha) {
- mDimAlpha = dimAlpha;
- mThumbnailView.setDimAlpha(dimAlpha);
- mHeaderView.setDimAlpha(dimAlpha);
- }
-
- /**
- * Sets the current dim without updating the header's dim.
- */
- public void setDimAlphaWithoutHeader(float dimAlpha) {
- mDimAlpha = dimAlpha;
- mThumbnailView.setDimAlpha(dimAlpha);
- }
-
- /**
- * Returns the current dim.
- */
- public float getDimAlpha() {
- return mDimAlpha;
- }
-
- /**
- * Explicitly sets the focused state of this task.
- */
- public void setFocusedState(boolean isFocused, boolean requestViewFocus) {
- if (isFocused) {
- if (requestViewFocus && !isFocused()) {
- requestFocus();
- }
- } else {
- if (isAccessibilityFocused() && mTouchExplorationEnabled) {
- clearAccessibilityFocus();
- }
- }
- }
-
- /**
- * Shows the action button.
- * @param fadeIn whether or not to animate the action button in.
- * @param fadeInDuration the duration of the action button animation, only used if
- * {@param fadeIn} is true.
- */
- public void showActionButton(boolean fadeIn, int fadeInDuration) {
- mActionButtonView.setVisibility(View.VISIBLE);
-
- if (fadeIn && mActionButtonView.getAlpha() < 1f) {
- mActionButtonView.animate()
- .alpha(1f)
- .scaleX(1f)
- .scaleY(1f)
- .setDuration(fadeInDuration)
- .setInterpolator(Interpolators.ALPHA_IN)
- .start();
- } else {
- mActionButtonView.setScaleX(1f);
- mActionButtonView.setScaleY(1f);
- mActionButtonView.setAlpha(1f);
- mActionButtonView.setTranslationZ(mActionButtonTranslationZ);
- }
- }
-
- /**
- * Immediately hides the action button.
- *
- * @param fadeOut whether or not to animate the action button out.
- */
- public void hideActionButton(boolean fadeOut, int fadeOutDuration, boolean scaleDown,
- final Animator.AnimatorListener animListener) {
- if (fadeOut && mActionButtonView.getAlpha() > 0f) {
- if (scaleDown) {
- float toScale = 0.9f;
- mActionButtonView.animate()
- .scaleX(toScale)
- .scaleY(toScale);
- }
- mActionButtonView.animate()
- .alpha(0f)
- .setDuration(fadeOutDuration)
- .setInterpolator(Interpolators.ALPHA_OUT)
- .withEndAction(new Runnable() {
- @Override
- public void run() {
- if (animListener != null) {
- animListener.onAnimationEnd(null);
- }
- mActionButtonView.setVisibility(View.INVISIBLE);
- }
- })
- .start();
- } else {
- mActionButtonView.setAlpha(0f);
- mActionButtonView.setVisibility(View.INVISIBLE);
- if (animListener != null) {
- animListener.onAnimationEnd(null);
- }
- }
- }
-
- /**** TaskStackAnimationHelper.Callbacks Implementation ****/
-
- @Override
- public void onPrepareLaunchTargetForEnterAnimation() {
- // These values will be animated in when onStartLaunchTargetEnterAnimation() is called
- setDimAlphaWithoutHeader(0);
- mActionButtonView.setAlpha(0f);
- if (mIncompatibleAppToastView != null &&
- mIncompatibleAppToastView.getVisibility() == View.VISIBLE) {
- mIncompatibleAppToastView.setAlpha(0f);
- }
- }
-
- @Override
- public void onStartLaunchTargetEnterAnimation(TaskViewTransform transform, int duration,
- boolean screenPinningEnabled, ReferenceCountedTrigger postAnimationTrigger) {
- cancelDimAnimationIfExists();
-
- // Dim the view after the app window transitions down into recents
- postAnimationTrigger.increment();
- AnimationProps animation = new AnimationProps(duration, Interpolators.ALPHA_OUT);
- mDimAnimator = animation.apply(AnimationProps.DIM_ALPHA, ObjectAnimator.ofFloat(this,
- DIM_ALPHA_WITHOUT_HEADER, getDimAlpha(), transform.dimAlpha));
- mDimAnimator.addListener(postAnimationTrigger.decrementOnAnimationEnd());
- mDimAnimator.start();
-
- if (screenPinningEnabled) {
- showActionButton(true /* fadeIn */, duration /* fadeInDuration */);
- }
-
- if (mIncompatibleAppToastView != null &&
- mIncompatibleAppToastView.getVisibility() == View.VISIBLE) {
- mIncompatibleAppToastView.animate()
- .alpha(1f)
- .setDuration(duration)
- .setInterpolator(Interpolators.ALPHA_IN)
- .start();
- }
- }
-
- @Override
- public void onStartLaunchTargetLaunchAnimation(int duration, boolean screenPinningRequested,
- ReferenceCountedTrigger postAnimationTrigger) {
- Utilities.cancelAnimationWithoutCallbacks(mDimAnimator);
-
- // Un-dim the view before/while launching the target
- AnimationProps animation = new AnimationProps(duration, Interpolators.ALPHA_OUT);
- mDimAnimator = animation.apply(AnimationProps.DIM_ALPHA, ObjectAnimator.ofFloat(this,
- DIM_ALPHA, getDimAlpha(), 0));
- mDimAnimator.start();
-
- postAnimationTrigger.increment();
- hideActionButton(true /* fadeOut */, duration,
- !screenPinningRequested /* scaleDown */,
- postAnimationTrigger.decrementOnAnimationEnd());
- }
-
- @Override
- public void onStartFrontTaskEnterAnimation(boolean screenPinningEnabled) {
- if (screenPinningEnabled) {
- showActionButton(false /* fadeIn */, 0 /* fadeInDuration */);
- }
- }
-
- /**** TaskCallbacks Implementation ****/
-
- public void onTaskBound(Task t, boolean touchExplorationEnabled, int displayOrientation,
- Rect displayRect) {
- SystemServicesProxy ssp = LegacyRecentsImpl.getSystemServices();
- mTouchExplorationEnabled = touchExplorationEnabled;
- mTask = t;
- mTaskBound = true;
- mTask.addCallback(this);
- mIsDisabledInSafeMode = !mTask.isSystemApp && ssp.isInSafeMode();
- mThumbnailView.bindToTask(mTask, mIsDisabledInSafeMode, displayOrientation, displayRect);
- mHeaderView.bindToTask(mTask, mTouchExplorationEnabled, mIsDisabledInSafeMode);
-
- if (!t.isDockable && ssp.hasDockedTask()) {
- if (mIncompatibleAppToastView == null) {
- mIncompatibleAppToastView = Utilities.findViewStubById(this,
- R.id.incompatible_app_toast_stub).inflate();
- TextView msg = findViewById(com.android.internal.R.id.message);
- msg.setText(R.string.dock_non_resizeble_failed_to_dock_text);
- }
- mIncompatibleAppToastView.setVisibility(View.VISIBLE);
- } else if (mIncompatibleAppToastView != null) {
- mIncompatibleAppToastView.setVisibility(View.INVISIBLE);
- }
- }
-
- @Override
- public void onTaskDataLoaded(Task task, ThumbnailData thumbnailData) {
- if (mTaskBound) {
- // Update each of the views to the new task data
- mThumbnailView.onTaskDataLoaded(thumbnailData);
- mHeaderView.onTaskDataLoaded();
- }
- }
-
- @Override
- public void onTaskDataUnloaded() {
- // Unbind each of the views from the task and remove the task callback
- mTask.removeCallback(this);
- mThumbnailView.unbindFromTask();
- mHeaderView.unbindFromTask(mTouchExplorationEnabled);
- mTaskBound = false;
- }
-
- @Override
- public void onTaskWindowingModeChanged() {
- // Force rebind the header, the thumbnail does not change due to stack changes
- mHeaderView.bindToTask(mTask, mTouchExplorationEnabled, mIsDisabledInSafeMode);
- mHeaderView.onTaskDataLoaded();
- }
-
- /**** View.OnClickListener Implementation ****/
-
- @Override
- public void onClick(final View v) {
- if (mIsDisabledInSafeMode) {
- Context context = getContext();
- String msg = context.getString(R.string.recents_launch_disabled_message, mTask.title);
- if (mDisabledAppToast != null) {
- mDisabledAppToast.cancel();
- }
- mDisabledAppToast = Toast.makeText(context, msg, Toast.LENGTH_SHORT);
- mDisabledAppToast.show();
- return;
- }
-
- boolean screenPinningRequested = false;
- if (v == mActionButtonView) {
- // Reset the translation of the action button before we animate it out
- mActionButtonView.setTranslationZ(0f);
- screenPinningRequested = true;
- }
- EventBus.getDefault().send(new LaunchTaskEvent(this, mTask, null, screenPinningRequested));
-
- MetricsLogger.action(v.getContext(), MetricsEvent.ACTION_OVERVIEW_SELECT,
- mTask.key.getComponent().toString());
- }
-
- /**** View.OnLongClickListener Implementation ****/
-
- @Override
- public boolean onLongClick(View v) {
- if (!LegacyRecentsImpl.getConfiguration().dragToSplitEnabled) {
- return false;
- }
- SystemServicesProxy ssp = LegacyRecentsImpl.getSystemServices();
- boolean inBounds = false;
- Rect clipBounds = new Rect(mViewBounds.getClipBounds());
- if (!clipBounds.isEmpty()) {
- // If we are clipping the view to the bounds, manually do the hit test.
- clipBounds.scale(getScaleX());
- inBounds = clipBounds.contains(mDownTouchPos.x, mDownTouchPos.y);
- } else {
- // Otherwise just make sure we're within the view's bounds.
- inBounds = mDownTouchPos.x <= getWidth() && mDownTouchPos.y <= getHeight();
- }
- if (v == this && inBounds && !ssp.hasDockedTask()) {
- // Start listening for drag events
- setClipViewInStack(false);
-
- mDownTouchPos.x += ((1f - getScaleX()) * getWidth()) / 2;
- mDownTouchPos.y += ((1f - getScaleY()) * getHeight()) / 2;
-
- EventBus.getDefault().register(this, RecentsActivity.EVENT_BUS_PRIORITY + 1);
- EventBus.getDefault().send(new DragStartEvent(mTask, this, mDownTouchPos));
- return true;
- }
- return false;
- }
-
- /**** Events ****/
-
- public final void onBusEvent(DragEndEvent event) {
- if (!(event.dropTarget instanceof DockState)) {
- event.addPostAnimationCallback(() -> {
- // Reset the clip state for the drag view after the end animation completes
- setClipViewInStack(true);
- });
- }
- EventBus.getDefault().unregister(this);
- }
-
- public final void onBusEvent(DragEndCancelledEvent event) {
- // Reset the clip state for the drag view after the cancel animation completes
- event.addPostAnimationCallback(() -> {
- setClipViewInStack(true);
- });
- }
-
- public void dump(String prefix, PrintWriter writer) {
- String innerPrefix = prefix + " ";
-
- writer.print(prefix); writer.print("TaskView");
- writer.print(" mTask="); writer.print(mTask.key.id);
- writer.println();
-
- mThumbnailView.dump(innerPrefix, writer);
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/TaskViewAccessibilityDelegate.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/TaskViewAccessibilityDelegate.java
deleted file mode 100644
index 7bcad75cefcf..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/TaskViewAccessibilityDelegate.java
+++ /dev/null
@@ -1,94 +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.recents.views;
-
-import android.app.ActivityTaskManager;
-import android.content.Context;
-import android.graphics.Point;
-import android.os.Bundle;
-import android.util.SparseArray;
-import android.view.View;
-import android.view.accessibility.AccessibilityNodeInfo;
-import android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction;
-import com.android.systemui.R;
-import com.android.systemui.recents.LegacyRecentsImpl;
-import com.android.systemui.recents.events.EventBus;
-import com.android.systemui.recents.events.ui.dragndrop.DragEndEvent;
-import com.android.systemui.recents.events.ui.dragndrop.DragStartEvent;
-
-public class TaskViewAccessibilityDelegate extends View.AccessibilityDelegate {
- private static final String TAG = "TaskViewAccessibilityDelegate";
-
- private final TaskView mTaskView;
-
- protected static final int SPLIT_TASK_TOP = R.id.action_split_task_to_top;
- protected static final int SPLIT_TASK_LEFT = R.id.action_split_task_to_left;
- protected static final int SPLIT_TASK_RIGHT = R.id.action_split_task_to_right;
-
- protected final SparseArray<AccessibilityAction> mActions = new SparseArray<>();
-
- public TaskViewAccessibilityDelegate(TaskView taskView) {
- mTaskView = taskView;
- Context context = taskView.getContext();
- mActions.put(SPLIT_TASK_TOP, new AccessibilityAction(SPLIT_TASK_TOP,
- context.getString(R.string.recents_accessibility_split_screen_top)));
- mActions.put(SPLIT_TASK_LEFT, new AccessibilityAction(SPLIT_TASK_LEFT,
- context.getString(R.string.recents_accessibility_split_screen_left)));
- mActions.put(SPLIT_TASK_RIGHT, new AccessibilityAction(SPLIT_TASK_RIGHT,
- context.getString(R.string.recents_accessibility_split_screen_right)));
- }
-
- @Override
- public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfo info) {
- super.onInitializeAccessibilityNodeInfo(host, info);
- if (ActivityTaskManager.supportsSplitScreenMultiWindow(mTaskView.getContext())
- && !LegacyRecentsImpl.getSystemServices().hasDockedTask()) {
- DockState[] dockStates = LegacyRecentsImpl.getConfiguration()
- .getDockStatesForCurrentOrientation();
- for (DockState dockState: dockStates) {
- if (dockState == DockState.TOP) {
- info.addAction(mActions.get(SPLIT_TASK_TOP));
- } else if (dockState == DockState.LEFT) {
- info.addAction(mActions.get(SPLIT_TASK_LEFT));
- } else if (dockState == DockState.RIGHT) {
- info.addAction(mActions.get(SPLIT_TASK_RIGHT));
- }
- }
- }
- }
-
- @Override
- public boolean performAccessibilityAction(View host, int action, Bundle args) {
- if (action == SPLIT_TASK_TOP) {
- simulateDragIntoMultiwindow(DockState.TOP);
- } else if (action == SPLIT_TASK_LEFT) {
- simulateDragIntoMultiwindow(DockState.LEFT);
- } else if (action == SPLIT_TASK_RIGHT) {
- simulateDragIntoMultiwindow(DockState.RIGHT);
- } else {
- return super.performAccessibilityAction(host, action, args);
- }
- return true;
- }
-
- /** Simulate a user drag event to split the screen to the respected side */
- private void simulateDragIntoMultiwindow(DockState dockState) {
- EventBus.getDefault().send(new DragStartEvent(mTaskView.getTask(), mTaskView,
- new Point(0,0), false /* isUserTouchInitiated */));
- EventBus.getDefault().send(new DragEndEvent(mTaskView.getTask(), mTaskView, dockState));
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/TaskViewHeader.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/TaskViewHeader.java
deleted file mode 100644
index 21c0234121c4..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/TaskViewHeader.java
+++ /dev/null
@@ -1,685 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.views;
-
-import static android.app.WindowConfiguration.ACTIVITY_TYPE_UNDEFINED;
-import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED;
-
-import android.animation.Animator;
-import android.animation.AnimatorListenerAdapter;
-import android.annotation.Nullable;
-import android.app.AppGlobals;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.pm.ActivityInfo;
-import android.content.res.Resources;
-import android.graphics.Canvas;
-import android.graphics.Color;
-import android.graphics.ColorFilter;
-import android.graphics.Paint;
-import android.graphics.PixelFormat;
-import android.graphics.Rect;
-import android.graphics.drawable.Drawable;
-import android.graphics.drawable.RippleDrawable;
-import android.os.CountDownTimer;
-import androidx.core.graphics.ColorUtils;
-import android.util.AttributeSet;
-import android.util.IconDrawableFactory;
-import android.view.Gravity;
-import android.view.View;
-import android.view.ViewAnimationUtils;
-import android.view.ViewDebug;
-import android.view.ViewGroup;
-import android.widget.FrameLayout;
-import android.widget.ImageView;
-import android.widget.ProgressBar;
-import android.widget.TextView;
-
-import com.android.internal.logging.MetricsLogger;
-import com.android.systemui.Interpolators;
-import com.android.systemui.R;
-import com.android.systemui.recents.Constants;
-import com.android.systemui.recents.LegacyRecentsImpl;
-import com.android.systemui.recents.events.EventBus;
-import com.android.systemui.recents.events.activity.LaunchTaskEvent;
-import com.android.systemui.recents.events.ui.ShowApplicationInfoEvent;
-import com.android.systemui.recents.misc.SystemServicesProxy;
-import com.android.systemui.shared.system.ActivityManagerWrapper;
-import com.android.systemui.shared.system.PackageManagerWrapper;
-import com.android.systemui.recents.utilities.Utilities;
-import com.android.systemui.shared.recents.model.Task;
-
-/* The task bar view */
-public class TaskViewHeader extends FrameLayout
- implements View.OnClickListener, View.OnLongClickListener {
-
- private static IconDrawableFactory sDrawableFactory;
-
- private static final float HIGHLIGHT_LIGHTNESS_INCREMENT = 0.075f;
- private static final float OVERLAY_LIGHTNESS_INCREMENT = -0.0625f;
- private static final int OVERLAY_REVEAL_DURATION = 250;
- private static final long FOCUS_INDICATOR_INTERVAL_MS = 30;
-
- /**
- * A color drawable that draws a slight highlight at the top to help it stand out.
- */
- private class HighlightColorDrawable extends Drawable {
-
- private Paint mHighlightPaint = new Paint();
- private Paint mBackgroundPaint = new Paint();
- private int mColor;
- private float mDimAlpha;
-
- public HighlightColorDrawable() {
- mBackgroundPaint.setColor(Color.argb(255, 0, 0, 0));
- mBackgroundPaint.setAntiAlias(true);
- mHighlightPaint.setColor(Color.argb(255, 255, 255, 255));
- mHighlightPaint.setAntiAlias(true);
- }
-
- public void setColorAndDim(int color, float dimAlpha) {
- if (mColor != color || Float.compare(mDimAlpha, dimAlpha) != 0) {
- mColor = color;
- mDimAlpha = dimAlpha;
- if (mShouldDarkenBackgroundColor) {
- color = getSecondaryColor(color, false /* useLightOverlayColor */);
- }
- mBackgroundPaint.setColor(color);
-
- ColorUtils.colorToHSL(color, mTmpHSL);
- // TODO: Consider using the saturation of the color to adjust the lightness as well
- mTmpHSL[2] = Math.min(1f,
- mTmpHSL[2] + HIGHLIGHT_LIGHTNESS_INCREMENT * (1.0f - dimAlpha));
- mHighlightPaint.setColor(ColorUtils.HSLToColor(mTmpHSL));
-
- invalidateSelf();
- }
- }
-
- @Override
- public void setColorFilter(@Nullable ColorFilter colorFilter) {
- // Do nothing
- }
-
- @Override
- public void setAlpha(int alpha) {
- // Do nothing
- }
-
- @Override
- public void draw(Canvas canvas) {
- // Draw the highlight at the top edge (but put the bottom edge just out of view)
- canvas.drawRoundRect(0, 0, mTaskViewRect.width(),
- 2 * Math.max(mHighlightHeight, mCornerRadius),
- mCornerRadius, mCornerRadius, mHighlightPaint);
-
- // Draw the background with the rounded corners
- canvas.drawRoundRect(0, mHighlightHeight, mTaskViewRect.width(),
- getHeight() + mCornerRadius,
- mCornerRadius, mCornerRadius, mBackgroundPaint);
- }
-
- @Override
- public int getOpacity() {
- return PixelFormat.OPAQUE;
- }
-
- public int getColor() {
- return mColor;
- }
- }
-
- Task mTask;
-
- // Header views
- ImageView mIconView;
- TextView mTitleView;
- ImageView mMoveTaskButton;
- ImageView mDismissButton;
- FrameLayout mAppOverlayView;
- ImageView mAppIconView;
- ImageView mAppInfoView;
- TextView mAppTitleView;
- ProgressBar mFocusTimerIndicator;
-
- // Header drawables
- @ViewDebug.ExportedProperty(category="recents")
- Rect mTaskViewRect = new Rect();
- int mHeaderBarHeight;
- int mHeaderButtonPadding;
- int mCornerRadius;
- int mHighlightHeight;
- @ViewDebug.ExportedProperty(category="recents")
- float mDimAlpha;
- Drawable mLightDismissDrawable;
- Drawable mDarkDismissDrawable;
- Drawable mLightFullscreenIcon;
- Drawable mDarkFullscreenIcon;
- Drawable mLightInfoIcon;
- Drawable mDarkInfoIcon;
- int mTaskBarViewLightTextColor;
- int mTaskBarViewDarkTextColor;
- int mDisabledTaskBarBackgroundColor;
- String mDismissDescFormat;
- String mAppInfoDescFormat;
- int mTaskWindowingMode = WINDOWING_MODE_UNDEFINED;
-
- // Header background
- private HighlightColorDrawable mBackground;
- private HighlightColorDrawable mOverlayBackground;
- private float[] mTmpHSL = new float[3];
-
- // Header dim, which is only used when task view hardware layers are not used
- private Paint mDimLayerPaint = new Paint();
-
- // Whether the background color should be darkened to differentiate from the primary color.
- // Used in grid layout.
- private boolean mShouldDarkenBackgroundColor = false;
-
- private CountDownTimer mFocusTimerCountDown;
-
- public TaskViewHeader(Context context) {
- this(context, null);
- }
-
- public TaskViewHeader(Context context, AttributeSet attrs) {
- this(context, attrs, 0);
- }
-
- public TaskViewHeader(Context context, AttributeSet attrs, int defStyleAttr) {
- this(context, attrs, defStyleAttr, 0);
- }
-
- public TaskViewHeader(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
- super(context, attrs, defStyleAttr, defStyleRes);
- setWillNotDraw(false);
-
- // Load the dismiss resources
- Resources res = context.getResources();
- mLightDismissDrawable = context.getDrawable(R.drawable.recents_dismiss_light);
- mDarkDismissDrawable = context.getDrawable(R.drawable.recents_dismiss_dark);
- mCornerRadius = LegacyRecentsImpl.getConfiguration().isGridEnabled ?
- res.getDimensionPixelSize(R.dimen.recents_grid_task_view_rounded_corners_radius) :
- res.getDimensionPixelSize(R.dimen.recents_task_view_rounded_corners_radius);
- mHighlightHeight = res.getDimensionPixelSize(R.dimen.recents_task_view_highlight);
- mTaskBarViewLightTextColor = context.getColor(R.color.recents_task_bar_light_text_color);
- mTaskBarViewDarkTextColor = context.getColor(R.color.recents_task_bar_dark_text_color);
- mLightFullscreenIcon = context.getDrawable(R.drawable.recents_move_task_fullscreen_light);
- mDarkFullscreenIcon = context.getDrawable(R.drawable.recents_move_task_fullscreen_dark);
- mLightInfoIcon = context.getDrawable(R.drawable.recents_info_light);
- mDarkInfoIcon = context.getDrawable(R.drawable.recents_info_dark);
- mDisabledTaskBarBackgroundColor =
- context.getColor(R.color.recents_task_bar_disabled_background_color);
- mDismissDescFormat = mContext.getString(
- R.string.accessibility_recents_item_will_be_dismissed);
- mAppInfoDescFormat = mContext.getString(R.string.accessibility_recents_item_open_app_info);
-
- // Configure the background and dim
- mBackground = new HighlightColorDrawable();
- mBackground.setColorAndDim(Color.argb(255, 0, 0, 0), 0f);
- setBackground(mBackground);
- mOverlayBackground = new HighlightColorDrawable();
- mDimLayerPaint.setColor(Color.argb(255, 0, 0, 0));
- mDimLayerPaint.setAntiAlias(true);
- }
-
- /**
- * Resets this header along with the TaskView.
- */
- public void reset() {
- hideAppOverlay(true /* immediate */);
- }
-
- @Override
- protected void onFinishInflate() {
- SystemServicesProxy ssp = LegacyRecentsImpl.getSystemServices();
-
- // Initialize the icon and description views
- mIconView = findViewById(R.id.icon);
- mIconView.setOnLongClickListener(this);
- mTitleView = findViewById(R.id.title);
- mDismissButton = findViewById(R.id.dismiss_task);
-
- onConfigurationChanged();
- }
-
- /**
- * Programmatically sets the layout params for a header bar layout. This is necessary because
- * we can't get resources based on the current configuration, but instead need to get them
- * based on the device configuration.
- */
- private void updateLayoutParams(View icon, View title, View secondaryButton, View button) {
- FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(
- ViewGroup.LayoutParams.MATCH_PARENT, mHeaderBarHeight, Gravity.TOP);
- setLayoutParams(lp);
- lp = new FrameLayout.LayoutParams(mHeaderBarHeight, mHeaderBarHeight, Gravity.START);
- icon.setLayoutParams(lp);
- lp = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
- ViewGroup.LayoutParams.WRAP_CONTENT, Gravity.START | Gravity.CENTER_VERTICAL);
- lp.setMarginStart(mHeaderBarHeight);
- lp.setMarginEnd(mMoveTaskButton != null
- ? 2 * mHeaderBarHeight
- : mHeaderBarHeight);
- title.setLayoutParams(lp);
- if (secondaryButton != null) {
- lp = new FrameLayout.LayoutParams(mHeaderBarHeight, mHeaderBarHeight, Gravity.END);
- lp.setMarginEnd(mHeaderBarHeight);
- secondaryButton.setLayoutParams(lp);
- secondaryButton.setPadding(mHeaderButtonPadding, mHeaderButtonPadding,
- mHeaderButtonPadding, mHeaderButtonPadding);
- }
- lp = new FrameLayout.LayoutParams(mHeaderBarHeight, mHeaderBarHeight, Gravity.END);
- button.setLayoutParams(lp);
- button.setPadding(mHeaderButtonPadding, mHeaderButtonPadding, mHeaderButtonPadding,
- mHeaderButtonPadding);
- }
-
- /**
- * Update the header view when the configuration changes.
- */
- public void onConfigurationChanged() {
- // Update the dimensions of everything in the header. We do this because we need to use
- // resources for the display, and not the current configuration.
- Resources res = getResources();
- int headerBarHeight = TaskStackLayoutAlgorithm.getDimensionForDevice(getContext(),
- R.dimen.recents_task_view_header_height,
- R.dimen.recents_task_view_header_height,
- R.dimen.recents_task_view_header_height,
- R.dimen.recents_task_view_header_height_tablet_land,
- R.dimen.recents_task_view_header_height,
- R.dimen.recents_task_view_header_height_tablet_land,
- R.dimen.recents_grid_task_view_header_height);
- int headerButtonPadding = TaskStackLayoutAlgorithm.getDimensionForDevice(getContext(),
- R.dimen.recents_task_view_header_button_padding,
- R.dimen.recents_task_view_header_button_padding,
- R.dimen.recents_task_view_header_button_padding,
- R.dimen.recents_task_view_header_button_padding_tablet_land,
- R.dimen.recents_task_view_header_button_padding,
- R.dimen.recents_task_view_header_button_padding_tablet_land,
- R.dimen.recents_grid_task_view_header_button_padding);
- if (headerBarHeight != mHeaderBarHeight || headerButtonPadding != mHeaderButtonPadding) {
- mHeaderBarHeight = headerBarHeight;
- mHeaderButtonPadding = headerButtonPadding;
- updateLayoutParams(mIconView, mTitleView, mMoveTaskButton, mDismissButton);
- if (mAppOverlayView != null) {
- updateLayoutParams(mAppIconView, mAppTitleView, null, mAppInfoView);
- }
- }
- }
-
- @Override
- protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
- super.onLayout(changed, left, top, right, bottom);
-
- // Since we update the position of children based on the width of the parent and this view
- // recompute these changes with the new view size
- onTaskViewSizeChanged(mTaskViewRect.width(), mTaskViewRect.height());
- }
-
- /**
- * Called when the task view frame changes, allowing us to move the contents of the header
- * to match the frame changes.
- */
- public void onTaskViewSizeChanged(int width, int height) {
- mTaskViewRect.set(0, 0, width, height);
-
- boolean showTitle = true;
- boolean showMoveIcon = true;
- boolean showDismissIcon = true;
- int rightInset = width - getMeasuredWidth();
-
- mTitleView.setVisibility(showTitle ? View.VISIBLE : View.INVISIBLE);
- if (mMoveTaskButton != null) {
- mMoveTaskButton.setVisibility(showMoveIcon ? View.VISIBLE : View.INVISIBLE);
- mMoveTaskButton.setTranslationX(rightInset);
- }
- mDismissButton.setVisibility(showDismissIcon ? View.VISIBLE : View.INVISIBLE);
- mDismissButton.setTranslationX(rightInset);
-
- setLeftTopRightBottom(0, 0, width, getMeasuredHeight());
- }
-
- @Override
- public void onDrawForeground(Canvas canvas) {
- super.onDrawForeground(canvas);
-
- // Draw the dim layer with the rounded corners
- canvas.drawRoundRect(0, 0, mTaskViewRect.width(), getHeight() + mCornerRadius,
- mCornerRadius, mCornerRadius, mDimLayerPaint);
- }
-
- /** Starts the focus timer. */
- public void startFocusTimerIndicator(int duration) {
- if (mFocusTimerIndicator == null) {
- return;
- }
-
- mFocusTimerIndicator.setVisibility(View.VISIBLE);
- mFocusTimerIndicator.setMax(duration);
- mFocusTimerIndicator.setProgress(duration);
- if (mFocusTimerCountDown != null) {
- mFocusTimerCountDown.cancel();
- }
- mFocusTimerCountDown = new CountDownTimer(duration,
- FOCUS_INDICATOR_INTERVAL_MS) {
- public void onTick(long millisUntilFinished) {
- mFocusTimerIndicator.setProgress((int) millisUntilFinished);
- }
-
- public void onFinish() {
- // Do nothing
- }
- }.start();
- }
-
- /** Cancels the focus timer. */
- public void cancelFocusTimerIndicator() {
- if (mFocusTimerIndicator == null) {
- return;
- }
-
- if (mFocusTimerCountDown != null) {
- mFocusTimerCountDown.cancel();
- mFocusTimerIndicator.setProgress(0);
- mFocusTimerIndicator.setVisibility(View.INVISIBLE);
- }
- }
-
- /** Only exposed for the workaround for b/27815919. */
- public ImageView getIconView() {
- return mIconView;
- }
-
- /** Returns the secondary color for a primary color. */
- int getSecondaryColor(int primaryColor, boolean useLightOverlayColor) {
- int overlayColor = useLightOverlayColor ? Color.WHITE : Color.BLACK;
- return Utilities.getColorWithOverlay(primaryColor, overlayColor, 0.8f);
- }
-
- /**
- * Sets the dim alpha, only used when we are not using hardware layers.
- * (see RecentsConfiguration.useHardwareLayers)
- */
- public void setDimAlpha(float dimAlpha) {
- if (Float.compare(mDimAlpha, dimAlpha) != 0) {
- mDimAlpha = dimAlpha;
- mTitleView.setAlpha(1f - dimAlpha);
- updateBackgroundColor(mBackground.getColor(), dimAlpha);
- }
- }
-
- /**
- * Updates the background and highlight colors for this header.
- */
- private void updateBackgroundColor(int color, float dimAlpha) {
- if (mTask != null) {
- mBackground.setColorAndDim(color, dimAlpha);
- // TODO: Consider using the saturation of the color to adjust the lightness as well
- ColorUtils.colorToHSL(color, mTmpHSL);
- mTmpHSL[2] = Math.min(1f, mTmpHSL[2] + OVERLAY_LIGHTNESS_INCREMENT * (1.0f - dimAlpha));
- mOverlayBackground.setColorAndDim(ColorUtils.HSLToColor(mTmpHSL), dimAlpha);
- mDimLayerPaint.setAlpha((int) (dimAlpha * 255));
- invalidate();
- }
- }
-
- /**
- * Sets whether the background color should be darkened to differentiate from the primary color.
- */
- public void setShouldDarkenBackgroundColor(boolean flag) {
- mShouldDarkenBackgroundColor = flag;
- }
-
- /**
- * Binds the bar view to the task.
- */
- public void bindToTask(Task t, boolean touchExplorationEnabled, boolean disabledInSafeMode) {
- mTask = t;
-
- int primaryColor = disabledInSafeMode
- ? mDisabledTaskBarBackgroundColor
- : t.colorPrimary;
- if (mBackground.getColor() != primaryColor) {
- updateBackgroundColor(primaryColor, mDimAlpha);
- }
- if (!mTitleView.getText().toString().equals(t.title)) {
- mTitleView.setText(t.title);
- }
- mTitleView.setContentDescription(t.titleDescription);
- mTitleView.setTextColor(t.useLightOnPrimaryColor ?
- mTaskBarViewLightTextColor : mTaskBarViewDarkTextColor);
- mDismissButton.setImageDrawable(t.useLightOnPrimaryColor ?
- mLightDismissDrawable : mDarkDismissDrawable);
- mDismissButton.setContentDescription(String.format(mDismissDescFormat, t.titleDescription));
- mDismissButton.setOnClickListener(this);
- mDismissButton.setClickable(false);
- ((RippleDrawable) mDismissButton.getBackground()).setForceSoftware(true);
-
- // In accessibility, a single click on the focused app info button will show it
- if (touchExplorationEnabled) {
- mIconView.setContentDescription(String.format(mAppInfoDescFormat, t.titleDescription));
- mIconView.setOnClickListener(this);
- mIconView.setClickable(true);
- }
- }
-
- /**
- * Called when the bound task's data has loaded and this view should update to reflect the
- * changes.
- */
- public void onTaskDataLoaded() {
- if (mTask != null && mTask.icon != null) {
- mIconView.setImageDrawable(mTask.icon);
- }
- }
-
- /** Unbinds the bar view from the task */
- void unbindFromTask(boolean touchExplorationEnabled) {
- mTask = null;
- mIconView.setImageDrawable(null);
- if (touchExplorationEnabled) {
- mIconView.setClickable(false);
- }
- }
-
- /** Animates this task bar if the user does not interact with the stack after a certain time. */
- void startNoUserInteractionAnimation() {
- int duration = getResources().getInteger(R.integer.recents_task_enter_from_app_duration);
- mDismissButton.setVisibility(View.VISIBLE);
- mDismissButton.setClickable(true);
- if (mDismissButton.getVisibility() == VISIBLE) {
- mDismissButton.animate()
- .alpha(1f)
- .setInterpolator(Interpolators.FAST_OUT_LINEAR_IN)
- .setDuration(duration)
- .start();
- } else {
- mDismissButton.setAlpha(1f);
- }
- if (mMoveTaskButton != null) {
- if (mMoveTaskButton.getVisibility() == VISIBLE) {
- mMoveTaskButton.setVisibility(View.VISIBLE);
- mMoveTaskButton.setClickable(true);
- mMoveTaskButton.animate()
- .alpha(1f)
- .setInterpolator(Interpolators.FAST_OUT_LINEAR_IN)
- .setDuration(duration)
- .start();
- } else {
- mMoveTaskButton.setAlpha(1f);
- }
- }
- }
-
- /**
- * Mark this task view that the user does has not interacted with the stack after a certain
- * time.
- */
- public void setNoUserInteractionState() {
- mDismissButton.setVisibility(View.VISIBLE);
- mDismissButton.animate().cancel();
- mDismissButton.setAlpha(1f);
- mDismissButton.setClickable(true);
- if (mMoveTaskButton != null) {
- mMoveTaskButton.setVisibility(View.VISIBLE);
- mMoveTaskButton.animate().cancel();
- mMoveTaskButton.setAlpha(1f);
- mMoveTaskButton.setClickable(true);
- }
- }
-
- /**
- * Resets the state tracking that the user has not interacted with the stack after a certain
- * time.
- */
- void resetNoUserInteractionState() {
- mDismissButton.setVisibility(View.INVISIBLE);
- mDismissButton.setAlpha(0f);
- mDismissButton.setClickable(false);
- if (mMoveTaskButton != null) {
- mMoveTaskButton.setVisibility(View.INVISIBLE);
- mMoveTaskButton.setAlpha(0f);
- mMoveTaskButton.setClickable(false);
- }
- }
-
- @Override
- protected int[] onCreateDrawableState(int extraSpace) {
-
- // Don't forward our state to the drawable - we do it manually in onTaskViewFocusChanged.
- // This is to prevent layer trashing when the view is pressed.
- return new int[] {};
- }
-
- @Override
- public void onClick(View v) {
- if (v == mIconView) {
- // In accessibility, a single click on the focused app info button will show it
- EventBus.getDefault().send(new ShowApplicationInfoEvent(mTask));
- } else if (v == mDismissButton) {
- TaskView tv = Utilities.findParent(this, TaskView.class);
- tv.dismissTask();
-
- // Keep track of deletions by the dismiss button
- MetricsLogger.histogram(getContext(), "overview_task_dismissed_source",
- Constants.Metrics.DismissSourceHeaderButton);
- } else if (v == mMoveTaskButton) {
- TaskView tv = Utilities.findParent(this, TaskView.class);
- EventBus.getDefault().send(new LaunchTaskEvent(tv, mTask, null, false,
- mTaskWindowingMode, ACTIVITY_TYPE_UNDEFINED));
- } else if (v == mAppInfoView) {
- EventBus.getDefault().send(new ShowApplicationInfoEvent(mTask));
- } else if (v == mAppIconView) {
- hideAppOverlay(false /* immediate */);
- }
- }
-
- @Override
- public boolean onLongClick(View v) {
- if (v == mIconView) {
- showAppOverlay();
- return true;
- } else if (v == mAppIconView) {
- hideAppOverlay(false /* immediate */);
- return true;
- }
- return false;
- }
-
- /**
- * Shows the application overlay.
- */
- private void showAppOverlay() {
- // Skip early if the task is invalid
- SystemServicesProxy ssp = LegacyRecentsImpl.getSystemServices();
- ComponentName cn = mTask.key.getComponent();
- int userId = mTask.key.userId;
- ActivityInfo activityInfo = PackageManagerWrapper.getInstance().getActivityInfo(cn, userId);
- if (activityInfo == null) {
- return;
- }
-
- // Inflate the overlay if necessary
- if (mAppOverlayView == null) {
- mAppOverlayView = (FrameLayout) Utilities.findViewStubById(this,
- R.id.app_overlay_stub).inflate();
- mAppOverlayView.setBackground(mOverlayBackground);
- mAppIconView = (ImageView) mAppOverlayView.findViewById(R.id.app_icon);
- mAppIconView.setOnClickListener(this);
- mAppIconView.setOnLongClickListener(this);
- mAppInfoView = (ImageView) mAppOverlayView.findViewById(R.id.app_info);
- mAppInfoView.setOnClickListener(this);
- mAppTitleView = (TextView) mAppOverlayView.findViewById(R.id.app_title);
- updateLayoutParams(mAppIconView, mAppTitleView, null, mAppInfoView);
- }
-
- // Update the overlay contents for the current app
- mAppTitleView.setText(ActivityManagerWrapper.getInstance().getBadgedApplicationLabel(
- activityInfo.applicationInfo, userId));
- mAppTitleView.setTextColor(mTask.useLightOnPrimaryColor ?
- mTaskBarViewLightTextColor : mTaskBarViewDarkTextColor);
- mAppIconView.setImageDrawable(getIconDrawableFactory().getBadgedIcon(
- activityInfo.applicationInfo, userId));
- mAppInfoView.setImageDrawable(mTask.useLightOnPrimaryColor
- ? mLightInfoIcon
- : mDarkInfoIcon);
- mAppOverlayView.setVisibility(View.VISIBLE);
-
- int x = mIconView.getLeft() + mIconView.getWidth() / 2;
- int y = mIconView.getTop() + mIconView.getHeight() / 2;
- Animator revealAnim = ViewAnimationUtils.createCircularReveal(mAppOverlayView, x, y, 0,
- getWidth());
- revealAnim.setDuration(OVERLAY_REVEAL_DURATION);
- revealAnim.setInterpolator(Interpolators.LINEAR_OUT_SLOW_IN);
- revealAnim.start();
- }
-
- /**
- * Hide the application overlay.
- */
- private void hideAppOverlay(boolean immediate) {
- // Skip if we haven't even loaded the overlay yet
- if (mAppOverlayView == null) {
- return;
- }
-
- if (immediate) {
- mAppOverlayView.setVisibility(View.GONE);
- } else {
- int x = mIconView.getLeft() + mIconView.getWidth() / 2;
- int y = mIconView.getTop() + mIconView.getHeight() / 2;
- Animator revealAnim = ViewAnimationUtils.createCircularReveal(mAppOverlayView, x, y,
- getWidth(), 0);
- revealAnim.setDuration(OVERLAY_REVEAL_DURATION);
- revealAnim.setInterpolator(Interpolators.LINEAR_OUT_SLOW_IN);
- revealAnim.addListener(new AnimatorListenerAdapter() {
- @Override
- public void onAnimationEnd(Animator animation) {
- mAppOverlayView.setVisibility(View.GONE);
- }
- });
- revealAnim.start();
- }
- }
-
- private static IconDrawableFactory getIconDrawableFactory() {
- if (sDrawableFactory == null) {
- sDrawableFactory = IconDrawableFactory.newInstance(AppGlobals.getInitialApplication());
- }
- return sDrawableFactory;
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/TaskViewThumbnail.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/TaskViewThumbnail.java
deleted file mode 100644
index 68f85a50a9d6..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/TaskViewThumbnail.java
+++ /dev/null
@@ -1,392 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.views;
-
-import android.content.Context;
-import android.content.res.Configuration;
-import android.content.res.Resources;
-import android.graphics.Bitmap;
-import android.graphics.BitmapShader;
-import android.graphics.Canvas;
-import android.graphics.Color;
-import android.graphics.ColorMatrix;
-import android.graphics.ColorMatrixColorFilter;
-import android.graphics.LightingColorFilter;
-import android.graphics.Matrix;
-import android.graphics.Paint;
-import android.graphics.Rect;
-import android.graphics.Shader;
-import android.util.AttributeSet;
-import android.view.View;
-import android.view.ViewDebug;
-
-import com.android.systemui.R;
-import com.android.systemui.recents.events.EventBus;
-import com.android.systemui.recents.events.ui.TaskSnapshotChangedEvent;
-import com.android.systemui.recents.utilities.Utilities;
-import com.android.systemui.shared.recents.model.Task;
-import com.android.systemui.shared.recents.model.ThumbnailData;
-import java.io.PrintWriter;
-
-
-/**
- * The task thumbnail view. It implements an image view that allows for animating the dim and
- * alpha of the thumbnail image.
- */
-public class TaskViewThumbnail extends View {
-
- private static final ColorMatrix TMP_FILTER_COLOR_MATRIX = new ColorMatrix();
- private static final ColorMatrix TMP_BRIGHTNESS_COLOR_MATRIX = new ColorMatrix();
-
- private Task mTask;
-
- private int mDisplayOrientation = Configuration.ORIENTATION_UNDEFINED;
- private Rect mDisplayRect = new Rect();
-
- // Drawing
- @ViewDebug.ExportedProperty(category="recents")
- protected Rect mTaskViewRect = new Rect();
- @ViewDebug.ExportedProperty(category="recents")
- protected Rect mThumbnailRect = new Rect();
- @ViewDebug.ExportedProperty(category="recents")
- protected float mThumbnailScale;
- private float mFullscreenThumbnailScale = 1f;
- /** The height, in pixels, of the task view's title bar. */
- private int mTitleBarHeight;
- private boolean mSizeToFit = false;
- private boolean mOverlayHeaderOnThumbnailActionBar = true;
- private ThumbnailData mThumbnailData;
-
- protected int mCornerRadius;
- @ViewDebug.ExportedProperty(category="recents")
- private float mDimAlpha;
- private Matrix mMatrix = new Matrix();
- private Paint mDrawPaint = new Paint();
- protected Paint mLockedPaint = new Paint();
- protected Paint mBgFillPaint = new Paint();
- protected BitmapShader mBitmapShader;
- protected boolean mUserLocked = false;
- private LightingColorFilter mLightingColorFilter = new LightingColorFilter(0xffffffff, 0);
-
- // Clip the top of the thumbnail against the opaque header bar that overlaps this view
- private View mTaskBar;
-
- // Visibility optimization, if the thumbnail height is less than the height of the header
- // bar for the task view, then just mark this thumbnail view as invisible
- @ViewDebug.ExportedProperty(category="recents")
- private boolean mInvisible;
-
- @ViewDebug.ExportedProperty(category="recents")
- private boolean mDisabledInSafeMode;
-
- public TaskViewThumbnail(Context context) {
- this(context, null);
- }
-
- public TaskViewThumbnail(Context context, AttributeSet attrs) {
- this(context, attrs, 0);
- }
-
- public TaskViewThumbnail(Context context, AttributeSet attrs, int defStyleAttr) {
- this(context, attrs, defStyleAttr, 0);
- }
-
- public TaskViewThumbnail(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
- super(context, attrs, defStyleAttr, defStyleRes);
- mDrawPaint.setColorFilter(mLightingColorFilter);
- mDrawPaint.setFilterBitmap(true);
- mDrawPaint.setAntiAlias(true);
- Resources res = getResources();
- mCornerRadius = res.getDimensionPixelSize(R.dimen.recents_task_view_rounded_corners_radius);
- mBgFillPaint.setColor(Color.WHITE);
- mLockedPaint.setColor(Color.WHITE);
- mTitleBarHeight = res.getDimensionPixelSize(R.dimen.recents_grid_task_view_header_height);
- }
-
- /**
- * Called when the task view frame changes, allowing us to move the contents of the header
- * to match the frame changes.
- */
- public void onTaskViewSizeChanged(int width, int height) {
- // Return early if the bounds have not changed
- if (mTaskViewRect.width() == width && mTaskViewRect.height() == height) {
- return;
- }
-
- mTaskViewRect.set(0, 0, width, height);
- setLeftTopRightBottom(0, 0, width, height);
- updateThumbnailMatrix();
- }
-
- @Override
- protected void onDraw(Canvas canvas) {
- if (mInvisible) {
- return;
- }
-
- int viewWidth = mTaskViewRect.width();
- int viewHeight = mTaskViewRect.height();
- int thumbnailWidth = Math.min(viewWidth,
- (int) (mThumbnailRect.width() * mThumbnailScale));
- int thumbnailHeight = Math.min(viewHeight,
- (int) (mThumbnailRect.height() * mThumbnailScale));
-
- if (mUserLocked) {
- canvas.drawRoundRect(0, 0, viewWidth, viewHeight, mCornerRadius, mCornerRadius,
- mLockedPaint);
- } else if (mBitmapShader != null && thumbnailWidth > 0 && thumbnailHeight > 0) {
- int topOffset = 0;
- if (mTaskBar != null && mOverlayHeaderOnThumbnailActionBar) {
- topOffset = mTaskBar.getHeight() - mCornerRadius;
- }
-
- // Draw the background, there will be some small overdraw with the thumbnail
- if (thumbnailWidth < viewWidth) {
- // Portrait thumbnail on a landscape task view
- canvas.drawRoundRect(Math.max(0, thumbnailWidth - mCornerRadius), topOffset,
- viewWidth, viewHeight,
- mCornerRadius, mCornerRadius, mBgFillPaint);
- }
- if (thumbnailHeight < viewHeight) {
- // Landscape thumbnail on a portrait task view
- canvas.drawRoundRect(0, Math.max(topOffset, thumbnailHeight - mCornerRadius),
- viewWidth, viewHeight,
- mCornerRadius, mCornerRadius, mBgFillPaint);
- }
-
- // Draw the thumbnail
- canvas.drawRoundRect(0, topOffset, thumbnailWidth, thumbnailHeight,
- mCornerRadius, mCornerRadius, mDrawPaint);
- } else {
- canvas.drawRoundRect(0, 0, viewWidth, viewHeight, mCornerRadius, mCornerRadius,
- mBgFillPaint);
- }
- }
-
- /** Sets the thumbnail to a given bitmap. */
- void setThumbnail(ThumbnailData thumbnailData) {
- if (thumbnailData != null && thumbnailData.thumbnail != null) {
- Bitmap bm = thumbnailData.thumbnail;
- bm.prepareToDraw();
- mFullscreenThumbnailScale = thumbnailData.scale;
- mBitmapShader = new BitmapShader(bm, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
- mDrawPaint.setShader(mBitmapShader);
- mThumbnailRect.set(0, 0,
- bm.getWidth() - thumbnailData.insets.left - thumbnailData.insets.right,
- bm.getHeight() - thumbnailData.insets.top - thumbnailData.insets.bottom);
- mThumbnailData = thumbnailData;
- updateThumbnailMatrix();
- updateThumbnailPaintFilter();
- } else {
- mBitmapShader = null;
- mDrawPaint.setShader(null);
- mThumbnailRect.setEmpty();
- mThumbnailData = null;
- }
- }
-
- /** Updates the paint to draw the thumbnail. */
- void updateThumbnailPaintFilter() {
- if (mInvisible) {
- return;
- }
- int mul = (int) ((1.0f - mDimAlpha) * 255);
- if (mBitmapShader != null) {
- if (mDisabledInSafeMode) {
- // Brightness: C-new = C-old*(1-amount) + amount
- TMP_FILTER_COLOR_MATRIX.setSaturation(0);
- float scale = 1f - mDimAlpha;
- float[] mat = TMP_BRIGHTNESS_COLOR_MATRIX.getArray();
- mat[0] = scale;
- mat[6] = scale;
- mat[12] = scale;
- mat[4] = mDimAlpha * 255f;
- mat[9] = mDimAlpha * 255f;
- mat[14] = mDimAlpha * 255f;
- TMP_FILTER_COLOR_MATRIX.preConcat(TMP_BRIGHTNESS_COLOR_MATRIX);
- ColorMatrixColorFilter filter = new ColorMatrixColorFilter(TMP_FILTER_COLOR_MATRIX);
- mDrawPaint.setColorFilter(filter);
- mBgFillPaint.setColorFilter(filter);
- mLockedPaint.setColorFilter(filter);
- } else {
- mLightingColorFilter.setColorMultiply(Color.argb(255, mul, mul, mul));
- mDrawPaint.setColorFilter(mLightingColorFilter);
- mDrawPaint.setColor(0xFFffffff);
- mBgFillPaint.setColorFilter(mLightingColorFilter);
- mLockedPaint.setColorFilter(mLightingColorFilter);
- }
- } else {
- int grey = mul;
- mDrawPaint.setColorFilter(null);
- mDrawPaint.setColor(Color.argb(255, grey, grey, grey));
- }
- if (!mInvisible) {
- invalidate();
- }
- }
-
- /**
- * Updates the scale of the bitmap relative to this view.
- */
- public void updateThumbnailMatrix() {
- mThumbnailScale = 1f;
- if (mBitmapShader != null && mThumbnailData != null) {
- if (mTaskViewRect.isEmpty()) {
- // If we haven't measured , skip the thumbnail drawing and only draw the background
- // color
- mThumbnailScale = 0f;
- } else if (mSizeToFit) {
- // Make sure we fill the entire space regardless of the orientation.
- float viewAspectRatio = (float) mTaskViewRect.width() /
- (float) (mTaskViewRect.height() - mTitleBarHeight);
- float thumbnailAspectRatio =
- (float) mThumbnailRect.width() / (float) mThumbnailRect.height();
- if (viewAspectRatio > thumbnailAspectRatio) {
- mThumbnailScale =
- (float) mTaskViewRect.width() / (float) mThumbnailRect.width();
- } else {
- mThumbnailScale = (float) (mTaskViewRect.height() - mTitleBarHeight)
- / (float) mThumbnailRect.height();
- }
- } else {
- float invThumbnailScale = 1f / mFullscreenThumbnailScale;
- if (mDisplayOrientation == Configuration.ORIENTATION_PORTRAIT) {
- if (mThumbnailData.orientation == Configuration.ORIENTATION_PORTRAIT) {
- // If we are in the same orientation as the screenshot, just scale it to the
- // width of the task view
- mThumbnailScale = (float) mTaskViewRect.width() / mThumbnailRect.width();
- } else {
- // Scale the landscape thumbnail up to app size, then scale that to the task
- // view size to match other portrait screenshots
- mThumbnailScale = invThumbnailScale *
- ((float) mTaskViewRect.width() / mDisplayRect.width());
- }
- } else {
- // Otherwise, scale the screenshot to fit 1:1 in the current orientation
- mThumbnailScale = invThumbnailScale;
- }
- }
- mMatrix.setTranslate(-mThumbnailData.insets.left * mFullscreenThumbnailScale,
- -mThumbnailData.insets.top * mFullscreenThumbnailScale);
- mMatrix.postScale(mThumbnailScale, mThumbnailScale);
- mBitmapShader.setLocalMatrix(mMatrix);
- }
- if (!mInvisible) {
- invalidate();
- }
- }
-
- /** Sets whether the thumbnail should be resized to fit the task view in all orientations. */
- public void setSizeToFit(boolean flag) {
- mSizeToFit = flag;
- }
-
- /**
- * Sets whether the header should overlap (and hide) the action bar in the thumbnail, or
- * be stacked just above it.
- */
- public void setOverlayHeaderOnThumbnailActionBar(boolean flag) {
- mOverlayHeaderOnThumbnailActionBar = flag;
- }
-
- /** Updates the clip rect based on the given task bar. */
- void updateClipToTaskBar(View taskBar) {
- mTaskBar = taskBar;
- invalidate();
- }
-
- /** Updates the visibility of the the thumbnail. */
- void updateThumbnailVisibility(int clipBottom) {
- boolean invisible = mTaskBar != null && (getHeight() - clipBottom) <= mTaskBar.getHeight();
- if (invisible != mInvisible) {
- mInvisible = invisible;
- if (!mInvisible) {
- updateThumbnailPaintFilter();
- }
- }
- }
-
- /**
- * Sets the dim alpha, only used when we are not using hardware layers.
- * (see RecentsConfiguration.useHardwareLayers)
- */
- public void setDimAlpha(float dimAlpha) {
- mDimAlpha = dimAlpha;
- updateThumbnailPaintFilter();
- }
-
- /**
- * Returns the {@link Paint} used to draw a task screenshot, or {@link #mLockedPaint} if the
- * thumbnail shouldn't be drawn because it belongs to a locked user.
- */
- protected Paint getDrawPaint() {
- if (mUserLocked) {
- return mLockedPaint;
- }
- return mDrawPaint;
- }
-
- /**
- * Binds the thumbnail view to the task.
- */
- void bindToTask(Task t, boolean disabledInSafeMode, int displayOrientation, Rect displayRect) {
- mTask = t;
- mDisabledInSafeMode = disabledInSafeMode;
- mDisplayOrientation = displayOrientation;
- mDisplayRect.set(displayRect);
- if (t.colorBackground != 0) {
- mBgFillPaint.setColor(t.colorBackground);
- }
- if (t.colorPrimary != 0) {
- mLockedPaint.setColor(t.colorPrimary);
- }
- mUserLocked = t.isLocked;
- EventBus.getDefault().register(this);
- }
-
- /**
- * Called when the bound task's data has loaded and this view should update to reflect the
- * changes.
- */
- void onTaskDataLoaded(ThumbnailData thumbnailData) {
- setThumbnail(thumbnailData);
- }
-
- /** Unbinds the thumbnail view from the task */
- void unbindFromTask() {
- mTask = null;
- setThumbnail(null);
- EventBus.getDefault().unregister(this);
- }
-
- public final void onBusEvent(TaskSnapshotChangedEvent event) {
- if (mTask == null || event.taskId != mTask.key.id || event.thumbnailData == null
- || event.thumbnailData.thumbnail == null) {
- return;
- }
- setThumbnail(event.thumbnailData);
- }
-
- public void dump(String prefix, PrintWriter writer) {
- writer.print(prefix); writer.print("TaskViewThumbnail");
- writer.print(" mTaskViewRect="); writer.print(Utilities.dumpRect(mTaskViewRect));
- writer.print(" mThumbnailRect="); writer.print(Utilities.dumpRect(mThumbnailRect));
- writer.print(" mThumbnailScale="); writer.print(mThumbnailScale);
- writer.print(" mDimAlpha="); writer.print(mDimAlpha);
- writer.println();
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/TaskViewTransform.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/TaskViewTransform.java
deleted file mode 100644
index 48a733663fad..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/TaskViewTransform.java
+++ /dev/null
@@ -1,203 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.views;
-
-import android.animation.Animator;
-import android.animation.ObjectAnimator;
-import android.animation.PropertyValuesHolder;
-import android.graphics.Rect;
-import android.graphics.RectF;
-import android.util.Property;
-import android.view.View;
-
-import com.android.systemui.recents.utilities.AnimationProps;
-import com.android.systemui.recents.utilities.Utilities;
-
-import java.util.ArrayList;
-
-/**
- * The visual properties for a {@link TaskView}.
- */
-public class TaskViewTransform {
-
- public static final Property<View, Rect> LTRB =
- new Property<View, Rect>(Rect.class, "leftTopRightBottom") {
-
- private Rect mTmpRect = new Rect();
-
- @Override
- public void set(View v, Rect ltrb) {
- v.setLeftTopRightBottom(ltrb.left, ltrb.top, ltrb.right, ltrb.bottom);
- }
-
- @Override
- public Rect get(View v) {
- mTmpRect.set(v.getLeft(), v.getTop(), v.getRight(), v.getBottom());
- return mTmpRect;
- }
- };
-
- public float translationZ = 0;
- public float scale = 1f;
- public float alpha = 1f;
- public float dimAlpha = 0f;
- public float viewOutlineAlpha = 0f;
-
- public boolean visible = false;
-
- // This is a window-space rect used for positioning the task in the stack
- public RectF rect = new RectF();
-
- /**
- * Fills int this transform from the state of the given TaskView.
- */
- public void fillIn(TaskView tv) {
- translationZ = tv.getTranslationZ();
- scale = tv.getScaleX();
- alpha = tv.getAlpha();
- visible = true;
- dimAlpha = tv.getDimAlpha();
- viewOutlineAlpha = tv.getViewBounds().getAlpha();
- rect.set(tv.getLeft(), tv.getTop(), tv.getRight(), tv.getBottom());
- }
-
- /**
- * Copies the transform state from another {@link TaskViewTransform}.
- */
- public void copyFrom(TaskViewTransform other) {
- translationZ = other.translationZ;
- scale = other.scale;
- alpha = other.alpha;
- visible = other.visible;
- dimAlpha = other.dimAlpha;
- viewOutlineAlpha = other.viewOutlineAlpha;
- rect.set(other.rect);
- }
-
- /**
- * @return whether {@param other} is the same transform as this
- */
- public boolean isSame(TaskViewTransform other) {
- return translationZ == other.translationZ
- && scale == other.scale
- && other.alpha == alpha
- && dimAlpha == other.dimAlpha
- && visible == other.visible
- && rect.equals(other.rect);
- }
-
- /**
- * Resets the current transform.
- */
- public void reset() {
- translationZ = 0;
- scale = 1f;
- alpha = 1f;
- dimAlpha = 0f;
- viewOutlineAlpha = 0f;
- visible = false;
- rect.setEmpty();
- }
-
- /** Convenience functions to compare against current property values */
- public boolean hasAlphaChangedFrom(float v) {
- return (Float.compare(alpha, v) != 0);
- }
-
- public boolean hasScaleChangedFrom(float v) {
- return (Float.compare(scale, v) != 0);
- }
-
- public boolean hasTranslationZChangedFrom(float v) {
- return (Float.compare(translationZ, v) != 0);
- }
-
- public boolean hasRectChangedFrom(View v) {
- return ((int) rect.left != v.getLeft()) || ((int) rect.right != v.getRight()) ||
- ((int) rect.top != v.getTop()) || ((int) rect.bottom != v.getBottom());
- }
-
- /**
- * Applies this transform to a view.
- */
- public void applyToTaskView(TaskView v, ArrayList<Animator> animators,
- AnimationProps animation, boolean allowShadows) {
- // Return early if not visible
- if (!visible) {
- return;
- }
-
- if (animation.isImmediate()) {
- if (allowShadows && hasTranslationZChangedFrom(v.getTranslationZ())) {
- v.setTranslationZ(translationZ);
- }
- if (hasScaleChangedFrom(v.getScaleX())) {
- v.setScaleX(scale);
- v.setScaleY(scale);
- }
- if (hasAlphaChangedFrom(v.getAlpha())) {
- v.setAlpha(alpha);
- }
- if (hasRectChangedFrom(v)) {
- v.setLeftTopRightBottom((int) rect.left, (int) rect.top, (int) rect.right,
- (int) rect.bottom);
- }
- } else {
- if (allowShadows && hasTranslationZChangedFrom(v.getTranslationZ())) {
- ObjectAnimator anim = ObjectAnimator.ofFloat(v, View.TRANSLATION_Z,
- v.getTranslationZ(), translationZ);
- animators.add(animation.apply(AnimationProps.TRANSLATION_Z, anim));
- }
- if (hasScaleChangedFrom(v.getScaleX())) {
- ObjectAnimator anim = ObjectAnimator.ofPropertyValuesHolder(v,
- PropertyValuesHolder.ofFloat(View.SCALE_X, v.getScaleX(), scale),
- PropertyValuesHolder.ofFloat(View.SCALE_Y, v.getScaleX(), scale));
- animators.add(animation.apply(AnimationProps.SCALE, anim));
- }
- if (hasAlphaChangedFrom(v.getAlpha())) {
- ObjectAnimator anim = ObjectAnimator.ofFloat(v, View.ALPHA, v.getAlpha(), alpha);
- animators.add(animation.apply(AnimationProps.ALPHA, anim));
- }
- if (hasRectChangedFrom(v)) {
- Rect fromViewRect = new Rect(v.getLeft(), v.getTop(), v.getRight(), v.getBottom());
- Rect toViewRect = new Rect();
- rect.round(toViewRect);
- ObjectAnimator anim = ObjectAnimator.ofPropertyValuesHolder(v,
- PropertyValuesHolder.ofObject(LTRB, Utilities.RECT_EVALUATOR,
- fromViewRect, toViewRect));
- animators.add(animation.apply(AnimationProps.BOUNDS, anim));
- }
- }
- }
-
- /** Reset the transform on a view. */
- public static void reset(TaskView v) {
- v.setTranslationX(0f);
- v.setTranslationY(0f);
- v.setTranslationZ(0f);
- v.setScaleX(1f);
- v.setScaleY(1f);
- v.setAlpha(1f);
- v.getViewBounds().setClipBottom(0);
- v.setLeftTopRightBottom(0, 0, 0, 0);
- }
-
- @Override
- public String toString() {
- return "R: " + rect + " V: " + visible;
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/ViewPool.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/ViewPool.java
deleted file mode 100644
index a287fe642002..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/ViewPool.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.views;
-
-import android.content.Context;
-
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-
-
-/* A view pool to manage more views than we can visibly handle */
-public class ViewPool<V, T> {
-
- /* An interface to the consumer of a view pool */
- public interface ViewPoolConsumer<V, T> {
- public V createView(Context context);
- public void onReturnViewToPool(V v);
- public void onPickUpViewFromPool(V v, T prepareData, boolean isNewView);
- public boolean hasPreferredData(V v, T preferredData);
- }
-
- Context mContext;
- ViewPoolConsumer<V, T> mViewCreator;
- LinkedList<V> mPool = new LinkedList<V>();
-
- /** Initializes the pool with a fixed predetermined pool size */
- public ViewPool(Context context, ViewPoolConsumer<V, T> viewCreator) {
- mContext = context;
- mViewCreator = viewCreator;
- }
-
- /** Returns a view into the pool */
- void returnViewToPool(V v) {
- mViewCreator.onReturnViewToPool(v);
- mPool.push(v);
- }
-
- /** Gets a view from the pool and prepares it */
- V pickUpViewFromPool(T preferredData, T prepareData) {
- V v = null;
- boolean isNewView = false;
- if (mPool.isEmpty()) {
- v = mViewCreator.createView(mContext);
- isNewView = true;
- } else {
- // Try and find a preferred view
- Iterator<V> iter = mPool.iterator();
- while (iter.hasNext()) {
- V vpv = iter.next();
- if (mViewCreator.hasPreferredData(vpv, preferredData)) {
- v = vpv;
- iter.remove();
- break;
- }
- }
- // Otherwise, just grab the first view
- if (v == null) {
- v = mPool.pop();
- }
- }
- mViewCreator.onPickUpViewFromPool(v, prepareData, isNewView);
- return v;
- }
-
- /**
- * Returns the list of views in the pool.
- */
- List<V> getViews() {
- return mPool;
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/grid/AnimateableGridViewBounds.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/grid/AnimateableGridViewBounds.java
deleted file mode 100644
index a029478c2045..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/grid/AnimateableGridViewBounds.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.views.grid;
-
-import android.view.View;
-import com.android.systemui.recents.views.AnimateableViewBounds;
-
-/* An outline provider for grid-based task views. */
-class AnimateableGridViewBounds extends AnimateableViewBounds {
-
- public AnimateableGridViewBounds(View source, int cornerRadius) {
- super(source, cornerRadius);
- }
-
- @Override
- protected void updateClipBounds() {
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/grid/GridTaskView.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/grid/GridTaskView.java
deleted file mode 100644
index 8b4700c54b00..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/grid/GridTaskView.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.views.grid;
-
-import android.content.Context;
-import android.util.AttributeSet;
-import com.android.systemui.R;
-import com.android.systemui.recents.views.AnimateableViewBounds;
-import com.android.systemui.recents.views.TaskView;
-
-public class GridTaskView extends TaskView {
-
- /** The height, in pixels, of the header view. */
- private int mHeaderHeight;
-
- public GridTaskView(Context context) {
- this(context, null);
- }
-
- public GridTaskView(Context context, AttributeSet attrs) {
- this(context, attrs, 0);
- }
-
- public GridTaskView(Context context, AttributeSet attrs, int defStyleAttr) {
- this(context, attrs, defStyleAttr, 0);
- }
-
- public GridTaskView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
- super(context, attrs, defStyleAttr, defStyleRes);
- mHeaderHeight = context.getResources().getDimensionPixelSize(
- R.dimen.recents_grid_task_view_header_height);
- }
-
- @Override
- protected void onFinishInflate() {
- super.onFinishInflate();
- // Show the full thumbnail and don't overlap with the header.
- mThumbnailView.setSizeToFit(true);
- mThumbnailView.setOverlayHeaderOnThumbnailActionBar(false);
- mThumbnailView.updateThumbnailMatrix();
- mThumbnailView.setTranslationY(mHeaderHeight);
- mHeaderView.setShouldDarkenBackgroundColor(true);
- }
-
- @Override
- protected AnimateableViewBounds createOutlineProvider() {
- return new AnimateableGridViewBounds(this, mContext.getResources().getDimensionPixelSize(
- R.dimen.recents_task_view_shadow_rounded_corners_radius));
- }
-
- @Override
- protected void onConfigurationChanged() {
- super.onConfigurationChanged();
- mHeaderHeight = mContext.getResources().getDimensionPixelSize(
- R.dimen.recents_grid_task_view_header_height);
- mThumbnailView.setTranslationY(mHeaderHeight);
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/grid/GridTaskViewThumbnail.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/grid/GridTaskViewThumbnail.java
deleted file mode 100644
index 2d7cfb1ab167..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/grid/GridTaskViewThumbnail.java
+++ /dev/null
@@ -1,192 +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.recents.views.grid;
-
-import android.content.Context;
-import android.graphics.Canvas;
-import android.graphics.Path;
-import android.util.AttributeSet;
-
-import com.android.systemui.R;
-import com.android.systemui.recents.views.TaskViewThumbnail;
-
-public class GridTaskViewThumbnail extends TaskViewThumbnail {
-
- private final Path mThumbnailOutline = new Path();
- private final Path mRestBackgroundOutline = new Path();
- // True if either this view's size or thumbnail scale has changed and mThumbnailOutline should
- // be updated.
- private boolean mUpdateThumbnailOutline = true;
-
- public GridTaskViewThumbnail(Context context) {
- this(context, null);
- }
-
- public GridTaskViewThumbnail(Context context, AttributeSet attrs) {
- this(context, attrs, 0);
- }
-
- public GridTaskViewThumbnail(Context context, AttributeSet attrs, int defStyleAttr) {
- this(context, attrs, defStyleAttr, 0);
- }
-
- public GridTaskViewThumbnail(Context context, AttributeSet attrs, int defStyleAttr,
- int defStyleRes) {
- super(context, attrs, defStyleAttr, defStyleRes);
- mCornerRadius = getResources().getDimensionPixelSize(
- R.dimen.recents_grid_task_view_rounded_corners_radius);
- }
-
- /**
- * Called when the task view frame changes, allowing us to move the contents of the header
- * to match the frame changes.
- */
- public void onTaskViewSizeChanged(int width, int height) {
- mUpdateThumbnailOutline = true;
- super.onTaskViewSizeChanged(width, height);
- }
-
- /**
- * Updates the scale of the bitmap relative to this view.
- */
- public void updateThumbnailMatrix() {
- mUpdateThumbnailOutline = true;
- super.updateThumbnailMatrix();
- }
-
- private void updateThumbnailOutline() {
- final int titleHeight = getResources().getDimensionPixelSize(
- R.dimen.recents_grid_task_view_header_height);
- final int viewWidth = mTaskViewRect.width();
- final int viewHeight = mTaskViewRect.height() - titleHeight;
- final int thumbnailWidth = Math.min(viewWidth,
- (int) (mThumbnailRect.width() * mThumbnailScale));
- final int thumbnailHeight = Math.min(viewHeight,
- (int) (mThumbnailRect.height() * mThumbnailScale));
-
- if (mBitmapShader != null && thumbnailWidth > 0 && thumbnailHeight > 0) {
- // Draw the thumbnail, we only round the bottom corners:
- //
- // outerLeft outerRight
- // <-----------------------> mRestBackgroundOutline
- // _________________________ (thumbnailWidth < viewWidth)
- // |_______________________| outerTop A ____ B
- // | | ↑ | |
- // | | | | |
- // | | | | |
- // | | | | | C
- // \_______________________/ ↓ |__/
- // mCornerRadius outerBottom E D
- //
- // mRestBackgroundOutline (thumbnailHeight < viewHeight)
- // A _________________________ B
- // | | C
- // F \_______________________/
- // E D
- final int outerLeft = 0;
- final int outerTop = 0;
- final int outerRight = outerLeft + thumbnailWidth;
- final int outerBottom = outerTop + thumbnailHeight;
- createThumbnailPath(outerLeft, outerTop, outerRight, outerBottom, mThumbnailOutline);
-
- if (thumbnailWidth < viewWidth) {
- final int l = Math.max(0, outerRight - mCornerRadius);
- final int r = outerRight;
- final int t = outerTop;
- final int b = outerBottom;
- mRestBackgroundOutline.reset();
- mRestBackgroundOutline.moveTo(l, t); // A
- mRestBackgroundOutline.lineTo(r, t); // B
- mRestBackgroundOutline.lineTo(r, b - mCornerRadius); // C
- mRestBackgroundOutline.arcTo(r - 2 * mCornerRadius, b - 2 * mCornerRadius, r, b,
- 0, 90, false); // D
- mRestBackgroundOutline.lineTo(l, b); // E
- mRestBackgroundOutline.lineTo(l, t); // A
- mRestBackgroundOutline.close();
-
- }
- if (thumbnailHeight < viewHeight) {
- final int l = outerLeft;
- final int r = outerRight;
- final int t = Math.max(0, thumbnailHeight - mCornerRadius);
- final int b = outerBottom;
- mRestBackgroundOutline.reset();
- mRestBackgroundOutline.moveTo(l, t); // A
- mRestBackgroundOutline.lineTo(r, t); // B
- mRestBackgroundOutline.lineTo(r, b - mCornerRadius); // C
- mRestBackgroundOutline.arcTo(r - 2 * mCornerRadius, b - 2 * mCornerRadius, r, b,
- 0, 90, false); // D
- mRestBackgroundOutline.lineTo(l + mCornerRadius, b); // E
- mRestBackgroundOutline.arcTo(l, b - 2 * mCornerRadius, l + 2 * mCornerRadius, b,
- 90, 90, false); // F
- mRestBackgroundOutline.lineTo(l, t); // A
- mRestBackgroundOutline.close();
- }
- } else {
- createThumbnailPath(0, 0, viewWidth, viewHeight, mThumbnailOutline);
- }
- }
-
- private void createThumbnailPath(int outerLeft, int outerTop, int outerRight, int outerBottom,
- Path outPath) {
- outPath.reset();
- outPath.moveTo(outerLeft, outerTop);
- outPath.lineTo(outerRight, outerTop);
- outPath.lineTo(outerRight, outerBottom - mCornerRadius);
- outPath.arcTo(outerRight - 2 * mCornerRadius, outerBottom - 2 * mCornerRadius, outerRight,
- outerBottom, 0, 90, false);
- outPath.lineTo(outerLeft + mCornerRadius, outerBottom);
- outPath.arcTo(outerLeft, outerBottom - 2 * mCornerRadius, outerLeft + 2 * mCornerRadius,
- outerBottom, 90, 90, false);
- outPath.lineTo(outerLeft, outerTop);
- outPath.close();
- }
-
- @Override
- protected void onDraw(Canvas canvas) {
- final int titleHeight = getResources().getDimensionPixelSize(
- R.dimen.recents_grid_task_view_header_height);
- final int viewWidth = mTaskViewRect.width();
- final int viewHeight = mTaskViewRect.height() - titleHeight;
- final int thumbnailWidth = Math.min(viewWidth,
- (int) (mThumbnailRect.width() * mThumbnailScale));
- final int thumbnailHeight = Math.min(viewHeight,
- (int) (mThumbnailRect.height() * mThumbnailScale));
-
- if (mUpdateThumbnailOutline) {
- updateThumbnailOutline();
- mUpdateThumbnailOutline = false;
- }
-
- if (mUserLocked) {
- canvas.drawPath(mThumbnailOutline, mLockedPaint);
- } else if (mBitmapShader != null && thumbnailWidth > 0 && thumbnailHeight > 0) {
- // Draw the background, there will be some small overdraw with the thumbnail
- if (thumbnailWidth < viewWidth) {
- // Portrait thumbnail on a landscape task view
- canvas.drawPath(mRestBackgroundOutline, mBgFillPaint);
- }
- if (thumbnailHeight < viewHeight) {
- // Landscape thumbnail on a portrait task view
- canvas.drawPath(mRestBackgroundOutline, mBgFillPaint);
- }
- canvas.drawPath(mThumbnailOutline, getDrawPaint());
- } else {
- canvas.drawPath(mThumbnailOutline, mBgFillPaint);
- }
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/grid/TaskGridLayoutAlgorithm.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/grid/TaskGridLayoutAlgorithm.java
deleted file mode 100644
index 719eaa71f788..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/grid/TaskGridLayoutAlgorithm.java
+++ /dev/null
@@ -1,325 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents.views.grid;
-
-import static com.android.systemui.recents.views.TaskStackLayoutAlgorithm.*;
-
-import android.content.Context;
-import android.content.res.Resources;
-import android.graphics.Point;
-import android.graphics.Rect;
-import android.view.WindowManager;
-
-import com.android.systemui.R;
-import com.android.systemui.recents.events.ui.focus.NavigateTaskViewEvent.Direction;
-import com.android.systemui.recents.utilities.Utilities;
-import com.android.systemui.shared.recents.model.Task;
-import com.android.systemui.recents.views.TaskStackLayoutAlgorithm;
-import com.android.systemui.recents.views.TaskViewTransform;
-
-import java.util.ArrayList;
-
-public class TaskGridLayoutAlgorithm {
-
- private final String TAG = "TaskGridLayoutAlgorithm";
- public static final int MAX_LAYOUT_TASK_COUNT = 8;
-
- /** The horizontal padding around the whole recents view. */
- private int mPaddingLeftRight;
- /** The vertical padding around the whole recents view. */
- private int mPaddingTopBottom;
- /** The padding between task views. */
- private int mPaddingTaskView;
-
- private Rect mWindowRect;
- private Point mScreenSize = new Point();
-
- private Rect mTaskGridRect;
-
- /** The height, in pixels, of each task view's title bar. */
- private int mTitleBarHeight;
-
- /** The aspect ratio of each task thumbnail, without the title bar. */
- private float mAppAspectRatio;
- private Rect mSystemInsets = new Rect();
-
- /** The thickness of the focused task view frame. */
- private int mFocusedFrameThickness;
-
- /**
- * When the amount of tasks is determined, the size and position of every task view can be
- * decided. Each instance of TaskGridRectInfo store the task view information for a certain
- * amount of tasks.
- */
- class TaskGridRectInfo {
- Rect size;
- int[] xOffsets;
- int[] yOffsets;
- int tasksPerLine;
- int lines;
-
- TaskGridRectInfo(int taskCount) {
- size = new Rect();
- xOffsets = new int[taskCount];
- yOffsets = new int[taskCount];
-
- int layoutTaskCount = Math.min(MAX_LAYOUT_TASK_COUNT, taskCount);
- tasksPerLine = getTasksPerLine(layoutTaskCount);
- lines = layoutTaskCount < 4 ? 1 : 2;
-
- // A couple of special cases.
- boolean landscapeWindow = mWindowRect.width() > mWindowRect.height();
- boolean landscapeTaskView = mAppAspectRatio > 1;
- // If we're in portrait but task views are landscape, show more lines of fewer tasks.
- if (!landscapeWindow && landscapeTaskView) {
- tasksPerLine = layoutTaskCount < 2 ? 1 : 2;
- lines = layoutTaskCount < 3 ? 1 : (
- layoutTaskCount < 5 ? 2 : (
- layoutTaskCount < 7 ? 3 : 4));
- }
- // If we're in landscape but task views are portrait, show fewer lines of more tasks.
- if (landscapeWindow && !landscapeTaskView) {
- tasksPerLine = layoutTaskCount < 7 ? layoutTaskCount : 6;
- lines = layoutTaskCount < 7 ? 1 : 2;
- }
-
- int taskWidth, taskHeight;
- int maxTaskWidth = (mWindowRect.width() - 2 * mPaddingLeftRight
- - (tasksPerLine - 1) * mPaddingTaskView) / tasksPerLine;
- int maxTaskHeight = (mWindowRect.height() - 2 * mPaddingTopBottom
- - (lines - 1) * mPaddingTaskView) / lines;
-
- if (maxTaskHeight >= maxTaskWidth / mAppAspectRatio + mTitleBarHeight) {
- // Width bound.
- taskWidth = maxTaskWidth;
- // Here we should round the height to the nearest integer.
- taskHeight = (int) (maxTaskWidth / mAppAspectRatio + mTitleBarHeight + 0.5);
- } else {
- // Height bound.
- taskHeight = maxTaskHeight;
- // Here we should round the width to the nearest integer.
- taskWidth = (int) ((taskHeight - mTitleBarHeight) * mAppAspectRatio + 0.5);
- }
- size.set(0, 0, taskWidth, taskHeight);
-
- int emptySpaceX = mWindowRect.width() - 2 * mPaddingLeftRight
- - (tasksPerLine * taskWidth) - (tasksPerLine - 1) * mPaddingTaskView;
- int emptySpaceY = mWindowRect.height() - 2 * mPaddingTopBottom
- - (lines * taskHeight) - (lines - 1) * mPaddingTaskView;
- for (int taskIndex = 0; taskIndex < taskCount; taskIndex++) {
- // We also need to invert the index in order to display the most recent tasks first.
- int taskLayoutIndex = taskCount - taskIndex - 1;
-
- int xIndex = taskLayoutIndex % tasksPerLine;
- int yIndex = taskLayoutIndex / tasksPerLine;
- xOffsets[taskIndex] = mWindowRect.left +
- emptySpaceX / 2 + mPaddingLeftRight + (taskWidth + mPaddingTaskView) * xIndex;
- yOffsets[taskIndex] = mWindowRect.top +
- emptySpaceY / 2 + mPaddingTopBottom + (taskHeight + mPaddingTaskView) * yIndex;
- }
- }
-
- private int getTasksPerLine(int taskCount) {
- switch(taskCount) {
- case 0:
- return 0;
- case 1:
- return 1;
- case 2:
- case 4:
- return 2;
- case 3:
- case 5:
- case 6:
- return 3;
- case 7:
- case 8:
- return 4;
- default:
- throw new IllegalArgumentException("Unsupported task count " + taskCount);
- }
- }
- }
-
- /**
- * We can find task view sizes and positions from mTaskGridRectInfoList[k - 1] when there
- * are k tasks.
- */
- private TaskGridRectInfo[] mTaskGridRectInfoList;
-
- public TaskGridLayoutAlgorithm(Context context) {
- reloadOnConfigurationChange(context);
- }
-
- public void reloadOnConfigurationChange(Context context) {
- Resources res = context.getResources();
- mPaddingTaskView = res.getDimensionPixelSize(R.dimen.recents_grid_padding_task_view);
- mFocusedFrameThickness = res.getDimensionPixelSize(
- R.dimen.recents_grid_task_view_focused_frame_thickness);
-
- mTaskGridRect = new Rect();
- mTitleBarHeight = res.getDimensionPixelSize(R.dimen.recents_grid_task_view_header_height);
-
- WindowManager windowManager = (WindowManager) context
- .getSystemService(Context.WINDOW_SERVICE);
- windowManager.getDefaultDisplay().getRealSize(mScreenSize);
-
- updateAppAspectRatio();
- }
-
- /**
- * Returns the proper task view transform of a certain task view, according to its index and the
- * amount of task views.
- * @param taskIndex The index of the task view whose transform we want. It's never greater
- * than {@link MAX_LAYOUT_TASK_COUNT}.
- * @param taskCount The current amount of task views.
- * @param transformOut The result transform that this method returns.
- * @param stackLayout The base stack layout algorithm.
- * @return The expected transform of the (taskIndex)th task view.
- */
- public TaskViewTransform getTransform(int taskIndex, int taskCount,
- TaskViewTransform transformOut, TaskStackLayoutAlgorithm stackLayout) {
- if (taskCount == 0) {
- transformOut.reset();
- return transformOut;
- }
-
- TaskGridRectInfo gridInfo = mTaskGridRectInfoList[taskCount - 1];
- mTaskGridRect.set(gridInfo.size);
-
- int x = gridInfo.xOffsets[taskIndex];
- int y = gridInfo.yOffsets[taskIndex];
- float z = stackLayout.mMaxTranslationZ;
-
- // We always set the dim alpha to 0, since we don't want grid task views to dim.
- float dimAlpha = 0f;
- // We always set the alpha of the view outline to 1, to make sure the shadow is visible.
- float viewOutlineAlpha = 1f;
-
- // We also need to invert the index in order to display the most recent tasks first.
- int taskLayoutIndex = taskCount - taskIndex - 1;
- boolean isTaskViewVisible = taskLayoutIndex < MAX_LAYOUT_TASK_COUNT;
-
- // Fill out the transform
- transformOut.scale = 1f;
- transformOut.alpha = isTaskViewVisible ? 1f : 0f;
- transformOut.translationZ = z;
- transformOut.dimAlpha = dimAlpha;
- transformOut.viewOutlineAlpha = viewOutlineAlpha;
- transformOut.rect.set(mTaskGridRect);
- transformOut.rect.offset(x, y);
- Utilities.scaleRectAboutCenter(transformOut.rect, transformOut.scale);
- // We only show the 8 most recent tasks.
- transformOut.visible = isTaskViewVisible;
- return transformOut;
- }
-
- /**
- * Return the proper task index to focus for arrow key navigation.
- * @param taskCount The amount of tasks.
- * @param currentFocusedIndex The index of the currently focused task.
- * @param direction The direction we're navigating.
- * @return The index of the task that should get the focus.
- */
- public int navigateFocus(int taskCount, int currentFocusedIndex, Direction direction) {
- if (taskCount < 1 || taskCount > MAX_LAYOUT_TASK_COUNT) {
- return -1;
- }
- if (currentFocusedIndex == -1) {
- return 0;
- }
- int newIndex = currentFocusedIndex;
- final TaskGridRectInfo gridInfo = mTaskGridRectInfoList[taskCount - 1];
- final int currentLine = (taskCount - 1 - currentFocusedIndex) / gridInfo.tasksPerLine;
- switch (direction) {
- case UP:
- newIndex += gridInfo.tasksPerLine;
- newIndex = newIndex >= taskCount ? currentFocusedIndex : newIndex;
- break;
- case DOWN:
- newIndex -= gridInfo.tasksPerLine;
- newIndex = newIndex < 0 ? currentFocusedIndex : newIndex;
- break;
- case LEFT:
- newIndex++;
- final int leftMostIndex = (taskCount - 1) - currentLine * gridInfo.tasksPerLine;
- newIndex = newIndex > leftMostIndex ? currentFocusedIndex : newIndex;
- break;
- case RIGHT:
- newIndex--;
- int rightMostIndex =
- (taskCount - 1) - (currentLine + 1) * gridInfo.tasksPerLine + 1;
- rightMostIndex = rightMostIndex < 0 ? 0 : rightMostIndex;
- newIndex = newIndex < rightMostIndex ? currentFocusedIndex : newIndex;
- break;
- }
- return newIndex;
- }
-
- public void initialize(Rect windowRect) {
- mWindowRect = windowRect;
- // Define paddings in terms of percentage of the total area.
- mPaddingLeftRight = (int) (0.025f * Math.min(mWindowRect.width(), mWindowRect.height()));
- mPaddingTopBottom = (int) (0.1 * mWindowRect.height());
-
- // Pre-calculate the positions and offsets of task views so that we can reuse them directly
- // in the future.
- mTaskGridRectInfoList = new TaskGridRectInfo[MAX_LAYOUT_TASK_COUNT];
- for (int i = 0; i < MAX_LAYOUT_TASK_COUNT; i++) {
- mTaskGridRectInfoList[i] = new TaskGridRectInfo(i + 1);
- }
- }
-
- public void setSystemInsets(Rect systemInsets) {
- mSystemInsets = systemInsets;
- updateAppAspectRatio();
- }
-
- private void updateAppAspectRatio() {
- int usableWidth = mScreenSize.x - mSystemInsets.left - mSystemInsets.right;
- int usableHeight = mScreenSize.y - mSystemInsets.top - mSystemInsets.bottom;
- mAppAspectRatio = (float) usableWidth / (float) usableHeight;
- }
-
- public Rect getStackActionButtonRect() {
- Rect buttonRect = new Rect(mWindowRect);
- buttonRect.right -= mPaddingLeftRight;
- buttonRect.left += mPaddingLeftRight;
- buttonRect.bottom = buttonRect.top + mPaddingTopBottom;
- return buttonRect;
- }
-
- public void updateTaskGridRect(int taskCount) {
- if (taskCount > 0) {
- TaskGridRectInfo gridInfo = mTaskGridRectInfoList[taskCount - 1];
- mTaskGridRect.set(gridInfo.size);
- }
- }
-
- public Rect getTaskGridRect() {
- return mTaskGridRect;
- }
-
- public int getFocusFrameThickness() {
- return mFocusedFrameThickness;
- }
-
- public VisibilityReport computeStackVisibilityReport(ArrayList<Task> tasks) {
- int visibleCount = Math.min(TaskGridLayoutAlgorithm.MAX_LAYOUT_TASK_COUNT, tasks.size());
- return new VisibilityReport(visibleCount, visibleCount);
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/grid/TaskViewFocusFrame.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/grid/TaskViewFocusFrame.java
deleted file mode 100644
index 1655f6c83c53..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/grid/TaskViewFocusFrame.java
+++ /dev/null
@@ -1,141 +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.recents.views.grid;
-
-import android.content.Context;
-import android.graphics.Rect;
-import android.util.AttributeSet;
-import android.view.View;
-
-import android.view.ViewTreeObserver.OnGlobalFocusChangeListener;
-import com.android.systemui.R;
-import com.android.systemui.recents.model.TaskStack;
-import com.android.systemui.recents.views.TaskStackView;
-
-public class TaskViewFocusFrame extends View implements OnGlobalFocusChangeListener {
-
- private TaskStackView mSv;
- private TaskGridLayoutAlgorithm mTaskGridLayoutAlgorithm;
- public TaskViewFocusFrame(Context context) {
- this(context, null);
- }
-
- public TaskViewFocusFrame(Context context, AttributeSet attrs) {
- this(context, attrs, 0);
- }
-
- public TaskViewFocusFrame(Context context, AttributeSet attrs, int defStyleAttr) {
- this(context, attrs, defStyleAttr, 0);
- }
-
- public TaskViewFocusFrame(Context context, AttributeSet attrs, int defStyleAttr,
- int defStyleRes) {
- super(context, attrs, defStyleAttr, defStyleRes);
- setBackground(mContext.getDrawable(
- R.drawable.recents_grid_task_view_focus_frame_background));
- setFocusable(false);
- hide();
- }
-
- public TaskViewFocusFrame(Context context, TaskStackView stackView,
- TaskGridLayoutAlgorithm taskGridLayoutAlgorithm) {
- this(context);
- mSv = stackView;
- mTaskGridLayoutAlgorithm = taskGridLayoutAlgorithm;
- }
-
- /**
- * Measure the width and height of the focus frame according to the current grid task view size.
- */
- public void measure() {
- int thickness = mTaskGridLayoutAlgorithm.getFocusFrameThickness();
- Rect rect = mTaskGridLayoutAlgorithm.getTaskGridRect();
- measure(
- MeasureSpec.makeMeasureSpec(rect.width() + thickness * 2, MeasureSpec.EXACTLY),
- MeasureSpec.makeMeasureSpec(rect.height() + thickness * 2, MeasureSpec.EXACTLY));
- }
-
- /**
- * Layout the focus frame with its size.
- */
- public void layout() {
- layout(0, 0, getMeasuredWidth(), getMeasuredHeight());
- }
-
- /**
- * Update the current size of grid task view and the focus frame.
- */
- public void resize() {
- if (mSv.useGridLayout()) {
- mTaskGridLayoutAlgorithm.updateTaskGridRect(mSv.getStack().getTaskCount());
- measure();
- requestLayout();
- }
- }
-
- /**
- * Move the task view focus frame to surround the newly focused view. If it's {@code null} or
- * it's not an instance of GridTaskView, we hide the focus frame.
- * @param newFocus The newly focused view.
- */
- public void moveGridTaskViewFocus(View newFocus) {
- if (mSv.useGridLayout()) {
- // The frame only shows up in the grid layout. It shouldn't show up in the stack
- // layout including when we're in the split screen.
- if (newFocus instanceof GridTaskView) {
- // If the focus goes to a GridTaskView, we show the frame and layout it.
- int[] location = new int[2];
- newFocus.getLocationInWindow(location);
- int thickness = mTaskGridLayoutAlgorithm.getFocusFrameThickness();
- setTranslationX(location[0] - thickness);
- setTranslationY(location[1] - thickness);
- show();
- } else {
- // If focus goes to other views, we hide the frame.
- hide();
- }
- }
- }
-
- @Override
- public void onGlobalFocusChanged(View oldFocus, View newFocus) {
- if (!mSv.useGridLayout()) {
- return;
- }
- if (newFocus == null) {
- // We're going to touch mode, unset the focus.
- moveGridTaskViewFocus(null);
- return;
- }
- if (oldFocus == null) {
- // We're returning from touch mode, set the focus to the previously focused task.
- final TaskStack stack = mSv.getStack();
- final int taskCount = stack.getTaskCount();
- final int k = stack.indexOfTask(mSv.getFocusedTask());
- final int taskIndexToFocus = k == -1 ? (taskCount - 1) : (k % taskCount);
- mSv.setFocusedTask(taskIndexToFocus, false, true);
- }
- }
-
- private void show() {
- setAlpha(1f);
- }
-
- private void hide() {
- setAlpha(0f);
- }
-}
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/lowram/TaskStackLowRamLayoutAlgorithm.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/lowram/TaskStackLowRamLayoutAlgorithm.java
deleted file mode 100644
index 15c7c87366d2..000000000000
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/lowram/TaskStackLowRamLayoutAlgorithm.java
+++ /dev/null
@@ -1,261 +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.recents.views.lowram;
-
-import android.content.Context;
-import android.graphics.Rect;
-import android.view.ViewConfiguration;
-
-import com.android.systemui.R;
-import com.android.systemui.recents.LegacyRecentsImpl;
-import com.android.systemui.recents.RecentsActivityLaunchState;
-import com.android.systemui.recents.utilities.Utilities;
-import com.android.systemui.shared.recents.model.Task;
-import com.android.systemui.recents.views.TaskStackLayoutAlgorithm;
-import com.android.systemui.recents.views.TaskViewTransform;
-
-import java.util.ArrayList;
-
-import static com.android.systemui.recents.views.TaskStackLayoutAlgorithm.VisibilityReport;
-
-public class TaskStackLowRamLayoutAlgorithm {
-
- private static final String TAG = "TaskStackLowRamLayoutAlgorithm";
- private static final float MAX_OVERSCROLL = 0.2f / 0.3f;
-
- public static final int MAX_LAYOUT_TASK_COUNT = 9;
- public static final int NUM_TASK_VISIBLE_LAUNCHED_FROM_HOME = 2;
- public static final int NUM_TASK_VISIBLE_LAUNCHED_FROM_APP =
- NUM_TASK_VISIBLE_LAUNCHED_FROM_HOME + 1;
- private Rect mWindowRect;
-
- private int mFlingThreshold;
- private int mPadding;
- private int mPaddingLeftRight;
- private int mTopOffset;
- private int mPaddingEndTopBottom;
- private Rect mTaskRect = new Rect();
- private Rect mSystemInsets = new Rect();
-
- public TaskStackLowRamLayoutAlgorithm(Context context) {
- reloadOnConfigurationChange(context);
- }
-
- public void reloadOnConfigurationChange(Context context) {
- mPadding = context.getResources()
- .getDimensionPixelSize(R.dimen.recents_layout_side_margin_phone);
- mFlingThreshold = ViewConfiguration.get(context).getScaledMinimumFlingVelocity();
- }
-
- public void initialize(Rect windowRect) {
- mWindowRect = windowRect;
- if (mWindowRect.height() > 0) {
- int windowHeight = mWindowRect.height() - mSystemInsets.bottom;
- int windowWidth = mWindowRect.width() - mSystemInsets.right - mSystemInsets.left;
- int width = Math.min(windowWidth, windowHeight) - mPadding * 2;
- boolean isLandscape = windowWidth > windowHeight;
- mTaskRect.set(0, 0, width, isLandscape ? width * 2 / 3 : width);
- mPaddingLeftRight = (windowWidth - mTaskRect.width()) / 2;
- mPaddingEndTopBottom = (windowHeight - mTaskRect.height()) / 2;
-
- // Compute the top offset to center tasks in the middle of the screen
- mTopOffset = (getTotalHeightOfTasks(MAX_LAYOUT_TASK_COUNT) - windowHeight) / 2;
- }
- }
-
- public void setSystemInsets(Rect systemInsets) {
- mSystemInsets = systemInsets;
- }
-
- public VisibilityReport computeStackVisibilityReport(ArrayList<Task> tasks) {
- RecentsActivityLaunchState launchState = LegacyRecentsImpl.getConfiguration().getLaunchState();
- int maxVisible = launchState.launchedFromHome || launchState.launchedFromPipApp
- || launchState.launchedWithNextPipApp
- ? NUM_TASK_VISIBLE_LAUNCHED_FROM_HOME
- : NUM_TASK_VISIBLE_LAUNCHED_FROM_APP;
- int visibleCount = Math.min(maxVisible, tasks.size());
- return new VisibilityReport(visibleCount, visibleCount);
- }
-
- public void getFrontOfStackTransform(TaskViewTransform transformOut,
- TaskStackLayoutAlgorithm stackLayout) {
- if (mWindowRect == null) {
- transformOut.reset();
- return;
- }
-
- // Calculate the static task y position 2 tasks after/below the middle/current task
- int windowHeight = mWindowRect.height() - mSystemInsets.bottom;
- int bottomOfCurrentTask = (windowHeight + mTaskRect.height()) / 2;
- int y = bottomOfCurrentTask + mTaskRect.height() + mPadding * 2;
- fillStackTransform(transformOut, y, stackLayout.mMaxTranslationZ, true);
- }
-
- public void getBackOfStackTransform(TaskViewTransform transformOut,
- TaskStackLayoutAlgorithm stackLayout) {
- if (mWindowRect == null) {
- transformOut.reset();
- return;
- }
-
- // Calculate the static task y position 2 tasks before/above the middle/current task
- int windowHeight = mWindowRect.height() - mSystemInsets.bottom;
- int topOfCurrentTask = (windowHeight - mTaskRect.height()) / 2;
- int y = topOfCurrentTask - (mTaskRect.height() + mPadding) * 2;
- fillStackTransform(transformOut, y, stackLayout.mMaxTranslationZ, true);
- }
-
- public TaskViewTransform getTransform(int taskIndex, float stackScroll,
- TaskViewTransform transformOut, int taskCount, TaskStackLayoutAlgorithm stackLayout) {
- if (taskCount == 0) {
- transformOut.reset();
- return transformOut;
- }
- boolean visible = true;
- int y;
- if (taskCount > 1) {
- y = getTaskTopFromIndex(taskIndex) - percentageToScroll(stackScroll);
-
- // Check visibility from the bottom of the task
- visible = y + mPadding + getTaskRect().height() > 0;
- } else {
- int windowHeight = mWindowRect.height() - mSystemInsets.bottom;
- y = (windowHeight - mTaskRect.height()) / 2 - percentageToScroll(stackScroll);
- }
- fillStackTransform(transformOut, y, stackLayout.mMaxTranslationZ, visible);
- return transformOut;
- }
-
- /**
- * Finds the closest task to the scroll percentage in the y axis and returns the percentage of
- * the task to scroll to.
- * @param scrollP percentage to find nearest to
- * @param numTasks number of tasks in recents stack
- * @param velocity speed of fling
- */
- public float getClosestTaskP(float scrollP, int numTasks, int velocity) {
- int y = percentageToScroll(scrollP);
-
- int lastY = getTaskTopFromIndex(0) - mPaddingEndTopBottom;
- for (int i = 1; i < numTasks; i++) {
- int taskY = getTaskTopFromIndex(i) - mPaddingEndTopBottom;
- int diff = taskY - y;
- if (diff > 0) {
- int diffPrev = Math.abs(y - lastY);
- boolean useNext = diff > diffPrev;
- if (Math.abs(velocity) > mFlingThreshold) {
- useNext = velocity > 0;
- }
- return useNext
- ? scrollToPercentage(lastY) : scrollToPercentage(taskY);
- }
- lastY = taskY;
- }
- return scrollToPercentage(lastY);
- }
-
- /**
- * Convert a scroll value to a percentage
- * @param scroll a scroll value
- * @return a percentage that represents the scroll from the total height of tasks
- */
- public float scrollToPercentage(int scroll) {
- return (float) scroll / (mTaskRect.height() + mPadding);
- }
-
- /**
- * Converts a percentage to the scroll value from the total height of tasks
- * @param p a percentage that represents the scroll value
- * @return a scroll value in pixels
- */
- public int percentageToScroll(float p) {
- return (int) (p * (mTaskRect.height() + mPadding));
- }
-
- /**
- * Get the min scroll progress for low ram layout. This computes the top position of the
- * first task and reduce by the end padding to center the first task
- * @return position of max scroll
- */
- public float getMinScrollP() {
- return getScrollPForTask(0);
- }
-
- /**
- * Get the max scroll progress for low ram layout. This computes the top position of the last
- * task and reduce by the end padding to center the last task
- * @param taskCount the amount of tasks in the recents stack
- * @return position of max scroll
- */
- public float getMaxScrollP(int taskCount) {
- return getScrollPForTask(taskCount - 1);
- }
-
- /**
- * Get the initial scroll value whether launched from home or from an app.
- * @param taskCount the amount of tasks currently in recents
- * @param fromHome if launching recents from home or not
- * @return from home it will return max value and from app it will return 2nd last task
- */
- public float getInitialScrollP(int taskCount, boolean fromHome) {
- if (fromHome) {
- return getMaxScrollP(taskCount);
- }
- if (taskCount < 2) {
- return 0;
- }
- return getScrollPForTask(taskCount - 2);
- }
-
- /**
- * Get the scroll progress for any task
- * @param taskIndex task index to get the scroll progress of
- * @return scroll progress of task
- */
- public float getScrollPForTask(int taskIndex) {
- return scrollToPercentage(getTaskTopFromIndex(taskIndex) - mPaddingEndTopBottom);
- }
-
- public Rect getTaskRect() {
- return mTaskRect;
- }
-
- public float getMaxOverscroll() {
- return MAX_OVERSCROLL;
- }
-
- private int getTaskTopFromIndex(int index) {
- return getTotalHeightOfTasks(index) - mTopOffset;
- }
-
- private int getTotalHeightOfTasks(int taskCount) {
- return taskCount * mTaskRect.height() + (taskCount + 1) * mPadding;
- }
-
- private void fillStackTransform(TaskViewTransform transformOut, int y, int translationZ,
- boolean visible) {
- transformOut.scale = 1f;
- transformOut.alpha = 1f;
- transformOut.translationZ = translationZ;
- transformOut.dimAlpha = 0f;
- transformOut.viewOutlineAlpha = 1f;
- transformOut.rect.set(getTaskRect());
- transformOut.rect.offset(mPaddingLeftRight + mSystemInsets.left, y);
- Utilities.scaleRectAboutCenter(transformOut.rect, transformOut.scale);
- transformOut.visible = visible;
- }
-}