Commit Graph

574 Commits

Author SHA1 Message Date
Riddle Hsu
a0530caa33 Apply override scale from entry points on client
This provides a sandbox-like scaled environment on client side.

- This prevents the metrics and config from being scaled multiple
  times because the entry points are only called from server side,
  there won't have reentrancy for applying the scale.
- App's configuration callback method can get scaled config.
- If override scale is enabled, the legacy compat mode will be
  skipped. That avoids mixing different approaches of scaling.
  - Legacy compat mode is to simulate a 320dp x 480dp screen
    size with density 160 (the surface scale and config scale
    are different).
  - Override scale is to downscale the app for better performance
    (the surface scale and config scale are the same).

Bug: 238416387
Bug: 240335717
Test: atest ActivityThreadTest#testOverrideScale
Test: atest CtsWindowManagerDeviceTestCases:CompatScaleTests
Test: am compat enable DOWNSCALED $pkg
      am compat enable DOWNSCALE_50 $pkg
Change-Id: I0ddf333996f229063511273f8aeb3867c9ba8bda
2022-08-31 17:49:24 +00:00
Chris Li
6757ccaaeb Merge "Make WCT#requestFocusOnTaskFragment a TestApi" into tm-qpr-dev am: 69d314f23e am: 3d65738ac7
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/19745196

Change-Id: Ieac08be96474c2685605f9a5667c91a4f46ff206
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2022-08-29 17:36:21 +00:00
Chris Li
69d314f23e Merge "Make WCT#requestFocusOnTaskFragment a TestApi" into tm-qpr-dev 2022-08-29 16:34:35 +00:00
Chris Li
cd9be246fd Merge "Handle TaskFragmentOrganizer#onTransactionReady in sync" into tm-qpr-dev am: e102950286 am: adfd2deb74
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/19691944

Change-Id: I1bf446bc582b8f9012917a51f88c68f7b3f2b0e5
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2022-08-27 10:48:04 +00:00
Chris Li
513a9ffcbb Handle TaskFragmentOrganizer#onTransactionReady in sync
Refactor TaskFragmentOrganizer#onTransactionReady to
SplitController#onTransactionReady to make sure that the
transaction is handled in one sync block.

Bug: 240519866
Test: pass existing for refactor
Change-Id: I9e7191e2b71ba262e1a3f8c947f9354698382972
2022-08-27 07:38:50 +08:00
Chris Li
da64f9599f Make WCT#requestFocusOnTaskFragment a TestApi
So that we can verify the API in CTS.

Bug: 232476698
Test: CtsWindowManagerDeviceTestCases:TaskFragmentOrganizerPolicyTest
Change-Id: I0e064f8cae48cc0281a0b462b8d072baceeeca9f
2022-08-26 10:19:37 +08:00
Wei Sheng Shih
4ec0b52029 Merge "[RESTRICT AUTOMERGE]BackGestureAnimation: a lightweight recents animation controller" into tm-qpr-dev 2022-08-25 14:04:21 +00:00
Ming-Shin Lu
91d1d949bd Merge "Fix no cross-profile thumbnail animation" into tm-qpr-dev am: 95264856d1 am: fcbea80252
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/19574870

Change-Id: I264dc31357dcb36ce7ee78266d022311ae9b4fe5
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2022-08-25 06:09:55 +00:00
Ming-Shin Lu
95264856d1 Merge "Fix no cross-profile thumbnail animation" into tm-qpr-dev 2022-08-25 04:41:36 +00:00
Ming-Shin Lu
389ef0bb5e Fix no cross-profile thumbnail animation
As the task of the launching activity requests attaching cross-profile
thumbnail animation but in Transication#onTransitionReady didn't be
promoted into change list, so it ends up no-op since attaching thumbnail
for cross-task requires the animating target is the task.

Fix the issue by
1) Add {FLAG_CROSS_PROFILE_OWNER_THUMBNAIL,
   FLAG_CROSS_PROFILE_WORK_THUMBNAIL} in TransitionInfo.Change for shell
   to know which thumbnail icon should load, according to the userId of
   launching activity.
2) Remove isTask and add 1)'s change flag check in
   attachCrossProfileThumbnailAnimation to make the thumbnail animation
   can be played and attached on the activity-level.

Fix: 239798040
Test: as issue steps
 1) Use Gmail app
 2) Tap the account icon
 3) Select "Switch to personal profile" (or "Switch to work profile")
 4) Expect the dimmed background thumbnail icon with
    task opening transition are animated in parallel
Change-Id: I90eecf4e8ba104c7234a39d1b2638295820d2ac7
2022-08-24 23:58:15 +08:00
Chris Li
ca4cd1a963 Merge "Wait for TaskFragmentOrganizer to finish handling transaction" into tm-qpr-dev am: 3294ef42e4 am: 570d249c9c
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/19564031

Change-Id: I860a58b9810dff8f844e1116c812ef95eea01516
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2022-08-24 05:56:05 +00:00
wilsonshih
c9c9a757a8 [RESTRICT AUTOMERGE]BackGestureAnimation: a lightweight recents
animation controller

Copy most of code from RecentsAnimationController to back gesture
animation controller(BackNaviAnimationController), the infrastructure
can be reused for either back-to-home/back-to-task/back-to-activity
animations if needed. Since the infrasturcture of legacy recents
animation controller should be stable already, we don't need to
worry about issues like leak leashes/flickers/fixed rotation.

BackAnimationAdaptor is a temporary class to help migrate to shell
transition, the target is to replace it by RemoteTransition.

Next step: Migrate to shell transition, decouple animation info from
BackNavigationInfo.
Test: manually play back to home animation to verify no flicker/black
background/leak surface. Also test that there can play back to home
animation even when quick swipe.
Test: atest BackNavigationTest
Test: atest BackNavigationControllerTests BackAnimationControllerTest
Bug: 237642535

Change-Id: I436a3dcf5011c56c08d131b40168f19128cc8723
2022-08-24 02:35:46 +00:00
Chris Li
4e9c5b44b1 Wait for TaskFragmentOrganizer to finish handling transaction
When a TaskFragmentTransaction is sent to the organizer during a
transition, have the transition wait for the organizer to finish
handling the transaction.

Bug: 207070762
Test: atest WmTests:TaskFragmentOrganizerControllerTest
Change-Id: I4b7955171cd8ce386686ff2cd64b7c04a6436ddf
2022-08-23 09:46:05 +08:00
Chris Li
f215542792 Merge "Apply TaskFragmentOrganizer changes in one WCT (2/2)" into tm-qpr-dev 2022-08-21 02:07:04 +00:00
Chris Li
660101fdc7 Apply TaskFragmentOrganizer changes in one WCT (2/2)
Before, when receive TaskFragment transaction, we apply changes in
multiple WindowContainerTransactions. Now, update to apply all changes
in one WCT for the whole TaskFragment transaction.

Bug: 240519866
Test: pass existing
Change-Id: I943d6232ff226ed6f67367fa9b7f73e1f861de64
Merged-In: I943d6232ff226ed6f67367fa9b7f73e1f861de64
2022-08-20 20:19:57 +08:00
Chris Li
87cc485c6a Apply TaskFragmentOrganizer changes in one WCT (2/2)
Before, when receive TaskFragment transaction, we apply changes in
multiple WindowContainerTransactions. Now, update to apply all changes
in one WCT for the whole TaskFragment transaction.

Bug: 240519866
Test: pass existing
Change-Id: I943d6232ff226ed6f67367fa9b7f73e1f861de64
2022-08-20 17:38:36 +08:00
Chris Li
45c117ef7d Merge "Apply TaskFragmentOrganizer changes in one WCT (1/2)" into tm-qpr-dev am: 2224d4712a am: 364b73aa31
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/19588352

Change-Id: I863c89d6dbce617f9014bb385734e33b9aad4a43
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2022-08-19 17:11:55 +00:00
Chris Li
c8587817c4 Merge "Address TaskFragmentOrganizer style comments" into tm-qpr-dev am: 153bf507fd am: 5003636f7a
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/19590596

Change-Id: I2cb6c3c432e33aeaf432679728edca39c7e1944a
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2022-08-19 17:05:23 +00:00
Chris Li
2224d4712a Merge "Apply TaskFragmentOrganizer changes in one WCT (1/2)" into tm-qpr-dev 2022-08-19 08:56:42 +00:00
Chris Li
153bf507fd Merge "Address TaskFragmentOrganizer style comments" into tm-qpr-dev 2022-08-19 03:30:11 +00:00
Chris Li
e9a1037439 Apply TaskFragmentOrganizer changes in one WCT (1/2)
Before, when receive TaskFragment transaction, we apply changes in
multiple WindowContainerTransactions. Now, update to apply all changes
in one WCT for the whole TaskFragment transaction.

Will update the TestAPI in the followup cl.

Bug: 240519866
Test: pass existing
Change-Id: I2e15b187bee95193874d76bc6963d3e01eba3910
2022-08-17 08:51:03 +08:00
Chris Li
99da16cdc8 Address TaskFragmentOrganizer style comments
1. Rename onActivityReparentToTask to onActivityReparentedToTask
2. Annotate @NonNull and @Nullable for the Extensions methods that are
   not yet annotated.

Bug: 240519866
Test: Refactor and add annotation. Pass existing tests.
Change-Id: I85c5927e6e7261cae3bce715b1955523d430e1e2
2022-08-17 08:46:28 +08:00
Gaurav Bhola
15a8232e38 Merge "Handle alwaysOnTop in DisplayAreas." into tm-qpr-dev 2022-08-12 03:23:30 +00:00
Tony Huang
f05ddf7262 Merge "Add setForceTranslucent API" into tm-qpr-dev am: 103a3b441f am: 6d4e72cb4d
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/19534875

Change-Id: I28265c978ad074f0b2e11870836e4b2c3da301f3
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2022-08-11 07:53:43 +00:00
Tony Huang
103a3b441f Merge "Add setForceTranslucent API" into tm-qpr-dev 2022-08-11 06:51:28 +00:00
Shan Huang
0be76567fe Merge "Respect the enforce flag for callback registration." into tm-qpr-dev am: a2c8daf7d1 am: fa21ec758e
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/19563307

Change-Id: Ib397a041f574fcd547ebb556ef56970087ce979c
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2022-08-09 23:05:00 +00:00
Shan Huang
a2c8daf7d1 Merge "Respect the enforce flag for callback registration." into tm-qpr-dev 2022-08-09 22:34:23 +00:00
Shan Huang
d6c5d36d1c Respect the enforce flag for callback registration.
Predictive back infra respect the enforce flag everywhere else (e.g. for
compat / default callback registrations), so we follow the same pattern
here.

This flag is a development only flag, so this CL should not affect
droidfood or public builds.

Test: `adb shell setprop persist.wm.debug.predictive_back_always_enforce
1`. Restart. Check apps can register callbacks without opting in (e.g.
   can swipe back to LS from bouncer)

Change-Id: I7d5a85b37b50b11f6e4be28d022dd0e528a7d4fd
2022-08-09 00:39:07 +00:00
Tony Huang
f93ff02d21 Add setForceTranslucent API
Add this api for split screen improve enter transition.

When we start intent on side stage task, the top split root task
will go to top and current top one task will be set as invisible
then cause black screen due to split root task is full screen.
Solve this by use new wct api setForceTranslucent to make split
root task as translucent when split inactive. We need to reset
it when split active otherwise it cause flicker when back to home.

Bug: 223325631
Bug: 235029020
Test: atest WmTests
Change-Id: I28df2879345718b726af9fdb7ea54644c77ab925
2022-08-08 11:28:38 +00:00
Chris Li
f3bf098243 Merge "Pass Task configuration changed for all TaskFragments at once" into tm-qpr-dev am: 678fb7f436 am: 50443fe2f7
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/19482729

Change-Id: Ie41ca928938550f35c2b092e642a51677b2b6557
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2022-08-06 02:41:30 +00:00
Chris Li
678fb7f436 Merge "Pass Task configuration changed for all TaskFragments at once" into tm-qpr-dev 2022-08-06 00:02:07 +00:00
Gaurav Bhola
ef72f1134b Handle alwaysOnTop in DisplayAreas.
- Also add setAlwaysOnTop API in WindowContainerTransaction.

Bug: 188102153
Test: atest DisplayAreaTest
Test: Tested manually by setting it on DisplayAreas
Change-Id: I683e3c6bdf1bb6a590829a197f5dbef2c171d7e9
Merged-In: I683e3c6bdf1bb6a590829a197f5dbef2c171d7e9
2022-08-04 10:05:24 -07:00
TreeHugger Robot
4ab5a9873c Merge "Convert TaskFragmentOrganizer callbacks to a transaction callback" into tm-qpr-dev am: d600010bc5 am: 50051d1535
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/19449149

Change-Id: I7621a0b432c0118072e337887733518026493390
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2022-08-04 11:28:48 +00:00
TreeHugger Robot
d600010bc5 Merge "Convert TaskFragmentOrganizer callbacks to a transaction callback" into tm-qpr-dev 2022-08-04 11:12:36 +00:00
Chris Li
8980a9fe87 Pass Task configuration changed for all TaskFragments at once
Before, we passed Task configuration changed for every embedded
TaskFragment. Now, we only passed one Task configuration changed for the
whole Task. The organizer will then update TaskFragments in the Task
accordingly.

Bug: 240519866
Test: atest WmTests:TaskFragmentOrganizerControllerTest
Change-Id: I755c11a1bcee0dd0305a090b229e867b79eee46d
2022-08-04 10:50:11 +08:00
Chris Li
6b94ca2d5f Convert TaskFragmentOrganizer callbacks to a transaction callback
Before, we have several different callbacks, such as
onTaskFragmentAppeared, onTaskFragmentInfoChanged, etc. As migrating to
Shell transition, we need a new model to better sync between app
process, WM Core and Shell.

The flow will be:
1. WM Shell startTransition with a WindowContainerTransaction
2. After apply the WCT, notify TaskFragmentOrganizerController
3. TFOrganizerController pack the TF related events into one transaction
4. TFOrganizerController call deferTransitionReady and send the
   transaction to the TFOrganizer in app process
5. TFOrganizer update TFs based on the transaction and apply a WCT
6. When TFOrganizerController get that WCT, call continueTransitionReady

Bug: 240519866
Test: pass existing
Change-Id: I110953f7b73f565a2b1299ef5c3827eaa39e84b8
2022-08-04 10:32:34 +08:00
TreeHugger Robot
f8b45dd301 Merge "Add willShowImeOnTarget in RemoteAnimationTarget(Compat)" into tm-qpr-dev am: 5c0ba8f0f5 am: 442b26f30d
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/19395267

Change-Id: Icc7c12431ee12ca8046702a25bce06b34a2d0f2e
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2022-08-02 13:23:06 +00:00
TreeHugger Robot
5c0ba8f0f5 Merge "Add willShowImeOnTarget in RemoteAnimationTarget(Compat)" into tm-qpr-dev 2022-08-02 13:05:02 +00:00
Wei Sheng Shih
83c72c89b7 Merge "Inject back key events if no focus window found." into tm-qpr-dev am: 117bab591c am: 23c3dd0294
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/19144840

Change-Id: I678242b3a7b6164c6782b82040d386417971f8dc
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2022-08-02 12:22:57 +00:00
Wei Sheng Shih
117bab591c Merge "Inject back key events if no focus window found." into tm-qpr-dev 2022-08-02 11:40:59 +00:00
Gaurav Bhola
63faf7908a Merge "Handle alwaysOnTop in DisplayAreas." 2022-07-29 21:53:33 +00:00
Gaurav Bhola
335c26296b Handle alwaysOnTop in DisplayAreas.
- Also add setAlwaysOnTop API in WindowContainerTransaction.

Bug: 188102153
Test: atest DisplayAreaTest
Test: Tested manually by setting it on DisplayAreas
Change-Id: I683e3c6bdf1bb6a590829a197f5dbef2c171d7e9
2022-07-29 09:11:21 -07:00
Tiger Huang
ae9d2aa672 Merge "Send size-compat scale to the client" into tm-qpr-dev am: 93a238d15d am: 3995c4d303
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/19149526

Change-Id: Ic48b954694b8d6cafce8b421dcbcd94f63793acc
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2022-07-29 09:47:33 +00:00
Tiger Huang
93a238d15d Merge "Send size-compat scale to the client" into tm-qpr-dev 2022-07-29 08:56:14 +00:00
wilsonshih
f22e6b03ef Inject back key events if no focus window found.
If user applied a back gesture but core cannot find a focus window,
inject back key event, so that event can dispatch to client once it
gain focus window. And since the gesture was happened, treat it as
onBackPressed.
And if device is playing recents animation but the focus window is
point to live tile, we can also inject back key because Home/Recents
activity shall not have the same behavior as normal app.

Bug: 237629607
Test: cross test that back gesture can finish recents with legacy/shell
transition on Nexus/3rd launcher.
Test: test on BackTestApp for both 3btn mode and gesture mode.
Test: atest AnrTests BackNavigationLegacyGestureTest
Test: atest OnBackInvokedDispatcherTest KeyboardVisibilityControlTest
BackInvokedOnWidgetTest BackNavigationTests BackNavigationControllerTests

Change-Id: If754e66ea7c1c4ec313c45d17d7f6c10bfc2c465
2022-07-29 13:00:54 +08:00
Arthur Hung
a97e9a07d5 Merge "Cancel back invoke when window focus has lost" into tm-qpr-dev am: f52b49886c am: 89c25ce1f4
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/19415501

Change-Id: Id8175c049118c567a47563ef361afa416c7b9810
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2022-07-29 01:55:46 +00:00
Ming-Shin Lu
ce1a4f3fe5 Add willShowImeOnTarget in RemoteAnimationTarget(Compat)
..used for signaling the launcher to crop the
remote animation target bounds when task animating on the taskbar.

If the task will show IME on the top means the animation taget would not
need to be cropped according to the taskBar insets, since visually the
taskbar is hidden when IME is visible.

Bug: 219981732
Test: manual as steps
 0) enable taskbar with Settings > Developer options > Smallest width
    as 600dp.
 1) launch an app from all apps and show the IME by tapping the editor.
 2) swipe out to home and launch it again by pressing the shortcut.
 3) Verify the animating task preview with IME shown without being
    cropped.

Change-Id: Iab526e78614c68626bd5424e0e3219044f671f4d
2022-07-28 15:41:26 +00:00
Arthur Hung
e3476afe2a Cancel back invoke when window focus has lost
This reverts commit 0099ca8fab and provide
new mechanism.

The back invoke target could lost focus during back navigation gesture.
To prevent the non-focused window could still trigger back action cause
some unexpected behavior, this CL will listen the focus change of
current focused window and cancel back gesture when its focus has lost.

Bug: 238050065
Bug: 239792909
Test: atest BackNavigationControllerTests
Test: atest BackNavigationLegacyGestureTest BackNavigationLegacyTest
Test: atest BackNavigationTests
Test: atest WindowOnBackInvokedDispatcherTest BackNavigationTest
Test: atset BackAnimationControllerTest

Change-Id: I65eb19371020ce39977eeb2a2a80c7f08600aaec
2022-07-28 06:42:10 +00:00
Louis Chang
61bfe6e0dc Sending TaskFragmentInfo and operation type in #onTaskFragmentError
So, the TaskFragmentOrganizer can know what exact operation was
failed and perform error handles if needed.

Removes the pending appeared activities when starting/reparenting
activity into a TaskFragment was failed.

Deprecating the #onTaskFragmentError method with another overloaded
version, but still making sure the deprecated one is called in order
to make it compatible with Android T CTS.

Bug: 236668365
Bug: 233989810
Test: atest TaskFragmentTest
Test: atest TaskFragmentOrganizerControllerTest
Test: atest TaskFragmentOrganizerTest
Test: atest TaskFragmentOrganizerPolicyTest
Change-Id: Id328d037536d32b3acb9c424d36052b6dca8628a
Merged-In: Id328d037536d32b3acb9c424d36052b6dca8628a
2022-07-28 01:36:38 +00:00
Tiger Huang
c77eaf873d Send size-compat scale to the client
The client computes the window frame on its own in ViewRootImpl#setView.
However, the bounds obtained from WindowConfiguration is not size-
compatible, which makes legacy apps produce wrong frames. The frame is
larger than expected, so when computing WindowInsets with size-
compatible InsetsState, the window cannot receive insets.

Although the client will receive the correct window frame from relayout,
but the first WindowInsets has been dispatched before that.

This CL sends the size-compat scale to the client, so the client can use
the correct WindowConfiguration to compute frames.

This is also a step to enable the client to perform local window layout.

Bug: 237749017
Bug: 161810301
Bug: 175861127
Test: atest StartingSurfaceDrawerTests WindowAddRemovePerfTest
      ActivityRecordTests WindowManagerServiceTests
Change-Id: I6b23901f4b1f009444c04da7e078ea971a386ad7
2022-07-27 14:10:10 +08:00