summaryrefslogtreecommitdiff
path: root/core/java/android/view/InsetsController.java
Commit message (Collapse)AuthorAgeFilesLines
* Merge "Add passive callback for system-run insets animation" into tm-qpr-devHyunyoung Song2022-08-191-2/+24
|\
| * Add passive callback for system-run insets animationHyunyoung Song2022-08-191-2/+24
| | | | | | | | | | | | | | | | | | | | | | This passive window inset animation control listener is used to for logging purpose when hide, show method is called. Test: atest InsetsControllerTest Bug: 240192346 Change-Id: I399268ead9d04b356f10cc3e9ac1da9e31306e86
* | Fix some issues that make caption insets remainGarfield Tan2022-08-031-1/+1
|/ | | | | | | | | | | | | | This CL does the following: * Remove caption insets when releasing the window decor * Update caption insets in InsetsController when the caption is in WM shell * Dump LocalInsetsSourceProviders to help debug related issues Bug: 241029178 Test: The caption type of insets provider is removed when window decor is released. Test: atest WindowDecorationTests Change-Id: Ia20e1958588de3a7d965b3ac3d3e4333c67dff36
* Fix InsetsState#calculateVisibleInsetsTiger Huang2022-04-131-3/+5
| | | | | | | | | | | | | | | Before the new insets system, a window wouldn't receive visible insets if it: - has FLAG_LAYOUT_NO_LIMITS, - is not TYPE_WALLPAPER or TYPE_SYSTEM_ERROR, and - is not in multi-window mode. This CL makes the visible insets compatible with the legacy insets system. Fix: 223536648 Test: atest InsetsStateTest Change-Id: Ia73142cfae701d0532a9a397366c50aeef82abb2
* Fix insets animations being skipped when the host view was invisibleMing-Shin Lu2022-04-011-2/+2
| | | | | | | | | | | | | | | | | | | | In case the insets animation frame will not be scheduled by render thread when the host window was not visible to user, added ViewRootInsetsControllerHost#isVisibleToUser to check when invoking applySurfaceParams to schedule the next frame, if the host was not visible means we don't have to synchronize with the window host and just apply the surface transaction on the UI thread directly. Fix: 206992027 Test: manual as steps 1) Receive any incoming message 2) Tap on inline reply to show the keyboard 3) Tap on the voice input button on the keyboard 4) when permission dialogue prompts on the screen, expecting both notification shade panel collpse animation and IME hiding animation are working fine without any stucked frame. Change-Id: I266587d5a3f136149d116214e2a49de92466ec2e
* Introduce a flag to enable shell captionYunfan Chen2022-03-101-8/+23
| | | | | | | | | | | | | | | | A new interface in WindowManagerProxy was introduced to let the shell be able to set insets with a given frame. The interface won't work for caption as we applied special logic to assemble the caption frame with the attached task frame. To make it work with caption insets, we need to disable all the special logics to make use of the shell interface. A flag CAPTION_ON_SHELL is introduced to disable the calling path and enable the above client owned logic. Turn the flag to true when the caption is moved to shell. Test: InsetsControllerTest, WindowContainerInsetsSourceProviderTest Bug: 189998209 Change-Id: I989b319001a118d1f1ff8e34761b39ee18fde335
* Prevent resize animation from changing the requested visibilitiesTiger Huang2021-11-051-0/+5
| | | | | | | | | | | | | The insets resize animation is used to produce the callbacks of the animation progress to the app. It shouldn't change the state of the insets controller. Fix: 205082601 Test: 1. Open a sticky-immersive app on a device which has taskbar. 2. Make sure taskbar is minimized on apps. 3. Swipe from bottom twice to go to home screen. 4. Open the same app again and see if task bar is hidden. Change-Id: I5d9213d7b3e32eccbf3a51335654f5f53899e6ae
* Merge "Prevent adding methods in WindowInsetsAnimationController" into ↵Tiger Huang2021-09-031-2/+2
|\ | | | | | | | | | | | | | | sc-v2-dev am: 4fba1c4453 am: a1c5970293 Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15746916 Change-Id: I5224d890d1632148fd2a89a39d8b68c0d7386311
| * Prevent adding methods in WindowInsetsAnimationControllerTiger Huang2021-09-031-2/+2
| | | | | | | | | | | | | | | | | | | | It is a public interface which should not have different versions sharing the same API level. This CL moves the methods to an @hide interface. Fix: 198614722 Test: atest android.signature.cts.api.current.SignatureTest Change-Id: Ib02708aeb1ec960bda20b6b60d4df6f0c9b4d9d6
* | Merge "Invoke insets animation callbacks when resizing system bars" into ↵Tiger Huang2021-09-021-25/+64
|\| | | | | | | | | | | | | | | sc-v2-dev am: a42a8d6bf3 am: c5c07300ea Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15327977 Change-Id: I855558a2b85c58d7e2cd31bc5a429083d4de6d0f
| * Merge "Invoke insets animation callbacks when resizing system bars" into ↵Tiger Huang2021-09-021-25/+64
| |\ | | | | | | | | | sc-v2-dev
| | * Invoke insets animation callbacks when resizing system barsTiger Huang2021-07-211-25/+64
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This gives the app a chance to react to the animation of resizing system bars. Fix: 191269755 Test: atest InsetsAnimationControlImplTest InsetsControllerTest InsetsStateTest Change-Id: Ibf47047c131867983064bef4e9ac011daf66ea18
* | | Merge "Use InsetsVisibilities to carry requested visibilities" into ↵Tiger Huang2021-07-271-22/+23
|\| | | | | | | | | | | | | | | | | | | | | | | sc-v2-dev am: 9052763843 am: 6b52c08bbf Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15385730 Change-Id: I31b54ea52b0d977e0161458ba7e41c4b9578df9d
| * | Use InsetsVisibilities to carry requested visibilitiesTiger Huang2021-07-261-22/+23
| |/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | InsetsState contains much more information than visibilities, such as display frame, display cutout, rounded corners, privacy indicator bounds, and frames of of insets sources. The control target only needs to send the requested visibilities to WMS, so it can be too heavy to use InsetsState. This CL introduces an new class, InsetsVisibilities, which only contains which type has which visibility. So it uses less memory, and it is more efficient on copying and checking the equality. Fix: 194186241 Test: atest InsetsVisibilitiesTest WindowAddRemovePerfTest InsetsControllerTest RegisterStatusBarResultTest CommandQueueTest LightsOutNotifControllerTest ActivityRecordTests DisplayContentTests DisplayPolicyLayoutTests InsetsPolicyTest InsetsSourceProviderTest InsetsStateControllerTest WindowFrameTests WindowManagerServiceTests WindowStateTests Change-Id: I86c1b26b4383bfa3b924726d580e5706e13ba735
* | Merge "Merge android.util.imetracing into com.android.internal.inputmethod"TreeHugger Robot2021-07-131-1/+1
|\ \ | |/ |/|
| * Merge android.util.imetracing into com.android.internal.inputmethodYohei Yukawa2021-07-091-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This CL renames classes related to IME tracing as follows * android.util.imetracing.ImeTracing => com.android.internal.inputmethod.ImeTracing * android.util.imetracing.ImeTracingClientImpl => com.android.internal.inputmethod.ImeTracingClientImpl * android.util.imetracing.InputConnectionHelper => com.android.internal.inputmethod.InputConnectionProtoDumper Other than those renamings, there should be no observable chagnes. Fix: 175761228 Test: presubmit Test: Manually verified that IME tracing still works Change-Id: I6518d946e1832037f240f57aa900d3447083f1fa
* | Use the real behavior to decide the animationTiger Huang2021-07-081-0/+16
|/ | | | | | | | | | | | If the appearance or the behavior are not controlled by APIs, InsetsController will still return the default values, but the internal logic will access the real value. Fix: 192635471 Test: Open an app which hides system bars with SYSTEM_UI_FLAG_IMMERSIVE_STICKY, but not BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE. Change-Id: I1c2f947e3707fcb4c151c1ad19c9cd16527e11d9
* Insets Animations: Always dispatch onEnd when cancelledAdrian Roos2021-06-211-1/+1
| | | | | | | | | | | | Previously, we only dispatched onEnd if onStart was already dispatched. However, some animations might get cancelled after onPrepare but before onStart. In that case, it is rather tricky for apps to actually cancel the animation. Now we always dispatch onEnd if onPrepare has been dispatched already. Fixes: 177983907 Test: atest WindowInsetsAnimationControllerTests Change-Id: I3fa142110bd5593679f87561c138ed3318034fca
* Update the surface position of each control in insets animationTiger Huang2021-05-311-0/+6
| | | | | | | | | | | | | | | If the surface position is changed during the insets animation, the surface position of the controls in the animation should be updated. Otherwise, the cached position in the animation will overwrite the newly-updated leash position. Fix: 177925500 Test: Steps in the bug. Test: 1. Open Window Insets Tests -> Window Insets Controller. 2. Click on the [IME INVISIBLE] button. 3. Click on the [STATUS BARS VISIBLE] button during IME animation. See if the position of IME (Gborad) is correct. Change-Id: I7441426a41019996651220e86ca90dd416ef9498
* Merge "Flush the animation if it is canceled" into sc-devTiger Huang2021-05-251-2/+3
|\
| * Flush the animation if it is canceledTiger Huang2021-05-251-2/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The issue was that: if navigation bar is requested to show while a controller is playing an animation of hiding both status bar and navigation bar, the animation will be canceled and will stay in an intermediate state, and then, another controller will play an animation of showing navigation bar. At the end, status bar will stay visible but it should be invisible. This CL fast-forwards the insets animation to the end state if it is canceled. Fix: 185459811 Test: Steps in the bug. Change-Id: Id6ae321b6c153ed1d7155afd6111b193ac9c045c
* | Add PrivacyIndicator APIs to WindowInsetsNate Myren2021-05-201-0/+1
|/ | | | | | | | | Add an API to WindowInsets that allows apps to see the maximum bounds of the system privacy indicator Fixes: 185932128 Test: atest PrivacyIndicatorBoundsTests Change-Id: I01d9e36ccbbea15752eccadfbce4c54bdd35ed5a
* Force showing navigation bar while IME is visibleTiger Huang2021-05-171-1/+3
| | | | | | | | | | | | | This CL revokes navigation bar control to make navigation bar visible while IME is showing, so the button to dismiss IME would be available. This CL also lets IME receive visible navigation bar insets, regardless of the navigation bar visibility. Fix: 167971834 Fix: 186789472 Test: atest WindowStateTests WindowInsetsControllerTests Change-Id: I2e723d4fc50d006127caa473d67c2f6af0d2cbcd
* Merge "Clear controls in the temp list after using them" into sc-devTiger Huang2021-04-201-9/+7
|\
| * Clear controls in the temp list after using themTiger Huang2021-04-201-9/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The list would be cleared while next time we use them, so it could constantly occupy the memory. This CL clears the temp list right after we use the controls. So it won't occupy the memory while they are not being used. This CL also sends a new list to the app when dispatching the insets animation progress. In this way, we don't need to clear mTmpRunningAnims after dispatching it. Also, the app might use the animation list AFTER the 'onProgress' callback. This change can make the list stay the same. Fix: 183684434 Test: Use Android Memory Profiler to check if there is InsetsAnimationControlImpl or WindowInsetsAnimation instances after GCing after playing insets animation in Launcher. Change-Id: I781233abb2c9c8400c6f76b537bef161745e67f7
* | Bugfix: Make InsetsController dump() respect prefixMark Hansen2021-04-181-1/+1
|/ | | | | | | | Before, the prefix was printed on a blank line above InsetsController, this wasn't intended. BUG=140002885 Change-Id: Ife14e60400dc73232302a797b6b9b8f4d201535f
* Merge "Revert "Clear controls and animations in temp arrays after using ↵Riddle Hsu2021-04-131-2/+2
|\ | | | | | | them"" into sc-dev
| * Revert "Clear controls and animations in temp arrays after using them"Tiger Huang2021-04-121-2/+2
| | | | | | | | | | | | | | | | | | | | This reverts commit fa17d6ca37b3f434e05e286fb5f828b28bbca93b. Reason for revert: b/185097067 The original CL makes WindowInsetsAnimationImeTests fail Change-Id: I5ffffd613e6efcd805730825318d7a83bc9babaf
* | Merge "Clear controls and animations in temp arrays after using them" into ↵Tiger Huang2021-04-091-2/+2
|\| | | | | | | sc-dev
| * Clear controls and animations in temp arrays after using themTiger Huang2021-04-071-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | The arrays would be cleared while next time we use them, so they could constantly occupy the memory. This CL clears the temp arrays right after we use them. So they won't occupy the memory while they are not being used. Fix: 183684434 Test: Use Android Memory Profiler to check if there is InsetsAnimationControlImpl or WindowInsetsAnimation instances after GCing after playing insets animation in Launcher. Change-Id: Iaae1e11d1c0cc1a9ac345beb3d7e8b596ea1b4ba
* | Set mIsAnimationPending when the leash is not readyTiger Huang2021-03-311-1/+1
|/ | | | | | | | | | | | | | | | The server might return a control without a leash to a client while the setup-transaction of the leash has not been applied yet. If the client tries to play the animation with the control, the animation won't take effect. This CL sets mIsAnimationPending while changing the requested visibility while the leash of the real control (not the fake one in transient mode) is not ready. So when the client receives the leash later, the animation will be played. Fix: 183362710 Test: steps in the bug Change-Id: I53108bacf98ac76c3f1e46cdae0a98581bef77f5
* Don't skip IME animation when backed to Task has no editor focusMing-Shin Lu2021-03-221-4/+5
| | | | | | | | | | | | | | | | | | | | | | | | When the dialer app previously shows IME, if the user swipe out the dialer task to launcher or switching task and then navigating back to dialer task, will see IME surface will fade-out because the editor view has been cleared the focus. The issue happens when user taping editText to show keyboard and the IME show animaion will be skipped. It could be related the CL[1] that we skip the animation once when the task snapshot has the IME surface, but we should not skip IME show animation if the launching task has been cleared the editor focus. [1]: I83ffc03119e01da71ad12f8ad8043cf0730dfd50 Fix: 183347520 Bug: 166736352 Test: manual as steps in commit message Test: atest ImeInsetsSourceConsumerTest#\ testImeGetAndClearSkipAnimationOnce_expectNoSkip Change-Id: Ib140801f1ce03b5566e756914f96dacba3ad8892
* Merge "IME Insets: Remove obsolete applyImeVisibility call" into sc-devAdrian Roos2021-03-221-14/+2
|\
| * IME Insets: Remove obsolete applyImeVisibility callAdrian Roos2021-03-191-14/+2
| | | | | | | | | | | | Test: atest InsetsControllerTest ImeInsetsSourceConsumerTest Bug: 167947407 Change-Id: I8abb210eb20a17f5dfd6d071c57838afb9deb263
* | Animations for visual immersive modeTiger Huang2021-03-221-15/+53
| | | | | | | | | | | | | | | | | | The CL applies fade-in/fade-out animations for BEHAVIOR_DEFAULT while changing the system bar visibility. Fix: 168913586 Test: WindowInsetsTests Change-Id: I6e9887baf2ba40b51c01bf2239915d381ba891a6
* | Let insets can still be controlled if its window bounds is movedTiger Huang2021-03-161-5/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Insets source window can be moved by the display area policy so that the window would not on the edge of the display. This makes the window cannot provide insets to the display frame. The default animation uses the display frame to compute insets, so the moved types cannot be animated properly. This CL adds an insets hint to InsetsSourceControl. It is the insets computed from its owning window bounds. With the insets hint, the insets animation can be played regardless of the display frame. This CL also fixes an issue that the insets animation would be played in the wrong direction by the fixed-rotation window. Bug: 175775686 Fix: 181939099 Fix: 163018915 Test: atest ImeInsetsSourceConsumerTest InsetsAnimationControlImplTest InsetsControllerTest InsetsSourceConsumerTest DisplayImeControllerTest WindowInsetsTests (manual) Change-Id: Ic6a8a215bd9b3a3b1af18e425dabe803c9be323e
* | Provides apps the rounded corners infoshawnlin2021-02-021-0/+1
|/ | | | | | | | | | | | | | | | | - Created a new @hide class RoundedCorners - The class is used to create and manager all the rounded corners. - Created a new public class RoundedCorner - Represent each rounded corner. - Created a new public API in Display to get the original rounded corners. - Created a new public API in WindowInsets to get the rounded corners relative to the window bounds. Bug: 161808676 Test: atest RoundedCornerTest RoundedCornersTest DisplayPolicyLayoutTests DisplayPolicyTests WallpaperControllerTests Change-Id: I58c671b0e9a077cdf26764c6302537c72db0f667
* Merge "Ensure notifying when only caption insets changed"Yunfan Chen2021-01-181-6/+13
|\
| * Ensure notifying when only caption insets changedYunfan Chen2020-12-171-6/+13
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | There's a bug where we dispatch the insets state only compare to the previous dispatched state excluding the caption insets. Make the insets included to make sure the caption insets change can be dispatched if only the caption insets changed. Another issue is, when we dismiss the caption, it happens after the window lay out traversal but before the post layout. It is necessary to notify the insets change because there's no server insets change in the post layout process and the app won't be able to receive the insets change. Test: atest InsetsControllerTest Test: see reproduce steps in b/174718377 Test: Turn an app into freeform mode, the insets will be applied immidiately Test: go/wm-smoke Bug: 174718377 Change-Id: I5c40c406fcec40c9fe87ef6fa1b54e1a2592e3bc
* | Merge "Send display cutout to client via insetsChanged"Tiger Huang2021-01-061-10/+7
|\ \
| * | Send display cutout to client via insetsChangedTiger Huang2021-01-051-10/+7
| |/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Since the display cutout is a type of insets and the display cutout can be obtained from WindowInsets, it makes sense that InsetsState has the display cutout instance. In this way, we can send the display cutout to client via W#insetsChanged instead of W#resized. This can be a step to remove the class of ClientWindowFrames, and can also be a step to make client compute its window frame locally. Fix: 175858810 Bug: 161810301 Test: atest WindowAddRemovePerfTest ImeInsetsSourceConsumerTest InsetsControllerTest InsetsStateTest ViewRootImplTest WindowInsetsControllerTests ActivityRecordTests DisplayPolicyLayoutTests LaunchParamsControllerTests TaskSnapshotSurfaceTest WindowMetricsActivityTests WindowMetricsWindowContextTests WindowMetricsTest WindowFrameTests WindowStateTests WmDisplayCutoutTest Change-Id: I9a930b1d2f7df3cea2b29629b767a4a5f31bca17
* / Better IME transition while switching app with recents (3/N)Ming-Shin Lu2020-12-281-1/+18
|/ | | | | | | | | | | | | | | | | | | - Add hasImeWindowSurface in TaskSnapShot - Add InsetsSourceControl#getAndClearSkipAnimationOnce for skiping IME showing animation once when starting window with IME surface Bug: 166736352 Bug: 153145997 Test: manual as below steps 0) Enabling developer options -> Quick settings developer tiles -> Window animation scale to slow down transition animation. 1) Launch an app with focusing an editor to show soft-input 2) Swipe out app task to back to launcher 3) Using quick switch or taping shortcut to bring back the app task 4) Verify that should be no IME showing animation happens during task transition. Change-Id: I83ffc03119e01da71ad12f8ad8043cf0730dfd50
* Add extra methods to trigger IME tracing dumpsIoana Stefan2020-12-031-2/+17
| | | | | | | | | | | This change adds extra methods for triggering IME dumps, based on the places decided on go/ime-tracing-opt. Bug: 154348613 Test: record an IME trace through ADB Connect in Winscope and visualize dumps at the new places added Change-Id: Ic4be002d80c5e201a34860306bd7ab8b20560fd6
* Merge "Revert "Add extra methods to trigger IME tracing dumps""Adrian Roos2020-12-031-14/+2
|\
| * Revert "Add extra methods to trigger IME tracing dumps"Ioana Stefan2020-12-031-14/+2
| | | | | | | | | | | | | | | | This reverts commit 09bd8a6e386c19a0e6e6afa38074bf335eefea49. Reason for revert: Broke the build on git_master Change-Id: I8e77fbc5d6f6b0c51f1b7432d5ed014c871428b4
* | Merge "Add extra methods to trigger IME tracing dumps"Ioana Stefan2020-12-031-2/+14
|\|
| * Add extra methods to trigger IME tracing dumpsIoana Stefan2020-12-021-2/+14
| | | | | | | | | | | | | | | | | | | | | | This change adds extra methods for triggering IME dumps, based on the places decided on go/ime-tracing-opt. Bug: 154348613 Test: record an IME trace through ADB Connect in Winscope and visualize dumps at the new places added Change-Id: Idbe8d512c0f1b3d3aca525f160f6e45d657e3724
* | Add InputConnection app and service dumpIoana Stefan2020-12-021-7/+7
|/ | | | | | | | | | | | | | | | | | | This change dumps information through IME tracing for the getter methods exposed by the InputConnection interface. The dump is done through the ImeTracing interface and is triggered by events in the wrapper classes used to handle InputConnection implementations corresponding to: - different apps - InputMethodService The new data is available under inputConnectionCall in the clients output proto. Bug: 154348613 Test: flash a device start IME tracing by calling "adb shell ime tracing start" end IME tracing by calling "adb shell ime tracing stop" pull generated trace files and visualize in Winscope or start tracing directly through ADB Connect and visualize traces Change-Id: Iabd6af1b858803030848a0ef5e7dd9ecfc562716
* Log only current client data in IME tracingIoana Stefan2020-11-131-10/+19
| | | | | | | | | | | | | | This change moves from dumping information of all Input Method client instances to dumping only the current client, which is the one in which the triggering event happened. Bug: 154348613 Test: flash a device start IME tracing by calling "adb shell ime tracing start" end IME tracing by calling "adb shell ime tracing stop" pull generated trace files and visualize in Winscope or start tracing directly through ADB Connect and visualize traces Change-Id: I46460d3d08947c7d37a8969a2fed6539f35aaf91
* Optimized workflow for IME tracing on clients sideIoana Stefan2020-11-131-6/+8
| | | | | | | | | | | | | | | | | Optimized the tracing logic for the IME clients information. The clients trigger a tracing dump through the new method triggerClientDump exposed by the ImeTracing interface. This change was done to be able to support custom dump for clients information and custom dump from IMS. This change only covers the clients information. The IMS and IMMS information will be dumped in next changes. Bug: 154348613 Test: start IME tracing by calling "adb shell ime tracing start" end IME tracing by calling "adb shell ime tracing stop" pull trace using "adb pull /data/misc/wmtrace/ime_trace_clients.pb ime_trace_clients.pb" Change-Id: I499cb5f45a3e78912b09b9c6cedf1ce5443e797a