From d498d2f451647e77a791530b9e704badc32f3b7d Mon Sep 17 00:00:00 2001 From: Chris Li Date: Tue, 28 Jun 2022 11:29:40 +0800 Subject: [PATCH] Add flicker test for ActivityEmbedding (1/n) Add base and helper classes for ActivityEmbedding flicker tests. Bug: 238043427 Test: atest FlickerTests:OpenActivityEmbeddingPlaceholderSplit Change-Id: I60dae000fbb22e70aebea1f7c42ddce490c10bab --- tests/FlickerTests/Android.bp | 17 +++ tests/FlickerTests/AndroidManifest.xml | 1 + .../libs/window-extensions-release.aar | Bin 0 -> 19218 bytes .../ActivityEmbeddingTestBase.kt | 33 +++++ .../OpenActivityEmbeddingPlaceholderSplit.kt | 114 ++++++++++++++++++ .../helpers/ActivityEmbeddingAppHelper.kt | 97 +++++++++++++++ .../test-apps/flickerapp/Android.bp | 5 + .../test-apps/flickerapp/AndroidManifest.xml | 32 ++++- .../layout/activity_embedding_base_layout.xml | 24 ++++ .../layout/activity_embedding_main_layout.xml | 32 +++++ .../ActivityEmbeddingBaseActivity.java | 34 ++++++ .../ActivityEmbeddingMainActivity.java | 85 +++++++++++++ ...tyEmbeddingPlaceholderPrimaryActivity.java | 30 +++++ ...EmbeddingPlaceholderSecondaryActivity.java | 30 +++++ .../wm/flicker/testapp/ActivityOptions.java | 13 ++ 15 files changed, 546 insertions(+), 1 deletion(-) create mode 100644 tests/FlickerTests/libs/window-extensions-release.aar create mode 100644 tests/FlickerTests/src/com/android/server/wm/flicker/activityembedding/ActivityEmbeddingTestBase.kt create mode 100644 tests/FlickerTests/src/com/android/server/wm/flicker/activityembedding/OpenActivityEmbeddingPlaceholderSplit.kt create mode 100644 tests/FlickerTests/src/com/android/server/wm/flicker/helpers/ActivityEmbeddingAppHelper.kt create mode 100644 tests/FlickerTests/test-apps/flickerapp/res/layout/activity_embedding_base_layout.xml create mode 100644 tests/FlickerTests/test-apps/flickerapp/res/layout/activity_embedding_main_layout.xml create mode 100644 tests/FlickerTests/test-apps/flickerapp/src/com/android/server/wm/flicker/testapp/ActivityEmbeddingBaseActivity.java create mode 100644 tests/FlickerTests/test-apps/flickerapp/src/com/android/server/wm/flicker/testapp/ActivityEmbeddingMainActivity.java create mode 100644 tests/FlickerTests/test-apps/flickerapp/src/com/android/server/wm/flicker/testapp/ActivityEmbeddingPlaceholderPrimaryActivity.java create mode 100644 tests/FlickerTests/test-apps/flickerapp/src/com/android/server/wm/flicker/testapp/ActivityEmbeddingPlaceholderSecondaryActivity.java diff --git a/tests/FlickerTests/Android.bp b/tests/FlickerTests/Android.bp index 7731e098d9f5f..855d3c1f4ea7d 100644 --- a/tests/FlickerTests/Android.bp +++ b/tests/FlickerTests/Android.bp @@ -46,6 +46,7 @@ android_test { "launcher-helper-lib", "launcher-aosp-tapl", "platform-test-annotations", + "wm-flicker-window-extensions", ], } @@ -83,5 +84,21 @@ java_library { "flickertestapplib", "truth-prebuilt", "app-helpers-core", + "wm-flicker-window-extensions", ], } + +android_library_import { + name: "wm-flicker-window-extensions_nodeps", + aars: ["libs/window-extensions-release.aar"], + sdk_version: "current", +} + +java_library { + name: "wm-flicker-window-extensions", + sdk_version: "current", + static_libs: [ + "wm-flicker-window-extensions_nodeps", + ], + installable: false, +} diff --git a/tests/FlickerTests/AndroidManifest.xml b/tests/FlickerTests/AndroidManifest.xml index fda6091964569..e173eba0a3934 100644 --- a/tests/FlickerTests/AndroidManifest.xml +++ b/tests/FlickerTests/AndroidManifest.xml @@ -43,6 +43,7 @@ + 4pNhS4Mj^uI{vg zGzcg(000RI000F48vp?C|DFK=u>V#idKV8D5P-t}C5p>$Bm(zC zw=|J8w6iobb#|fmu(dHw*0s-OL=C%rq?z$)kpx<>!B9>sHnJ=&R5gLNtkUCp6X*`O zUN0s6^@9*9RXYZE{QBUXeK+v)uB7o0yew9OaYK>AESP9XsMM(+!RS|a>%yJp2knP6 zD4AZLc-S-K%9Jy37l=r$*MeTdR7p4=If49F^Ap@bFdyrk`PYfEKoOYk?IvuWvnMQ> ziAOJKkTs`oRIV?KmjhpPXB)_=eO99)fTERFwve0j`Q1?zzV0Q~Nm>2<;Yd@e z08AFs)eUcvrcyu2yqY9DU3SnnXW27y{(qd>WHS3<*imIseNEzh)h;u zUutx|j@5;>$H8Q*a2;&8p9hP^C;kk}^u+IiH>)7oxa{qa8o^CHZ-&pMg&x!!({$Uh?^&VGl)J~dr^wIuNuYNED_1W4tWh$R{)3i#~*{GHtJEq=zbL(^U9xk;( z^R=>Vt(8uT%juqZTc)2cY94`x?(dA;Pp<7j_gN%)u z7!rRso9$I!fphh_(#~gp+f85P^qfY^_jgmd%!c1qTdd8K6?>{R_t)0lML+f0c>8vF z?>rW$KN?3WTc#@4=k$)|CDh)m0Z94N!a}hiaeBOsuXw$2gq@md>JtA!4F5x+wPN!Yz zTd^$KZGWe{OB~jg?WUkSN1?pCPo>GTzuxY3ZRJ*M_%I%-jOJ0m?fSf#hp0)(zggTd zNdG3T$5?s;*#98 zbJU}cGU#+1Po~4h>2{5VSwdKXS6`O=^s&hl@N+R!IKJbJj(HyQ3ACx{wR7by+?TgL z&W~ce2jGk9bk%ef_4!Y0uZz>g`J8Hay+iH?lY*I*<#bfsm27iQ&Odo2S|yr z@ZSDPTt%U*_1q6B@8YP&+!g`z?{?_?wuWJ$BGtOZ5ugV4yXNDeBE`rM!$y<~#E~jw z20>HO8_v}TyFpW)AnlQ&=v_h<2LtTY*bt{dLskP_5Md%9{vTHd_lxko$PWP6NdW*b z|Cu6V8$)MjQ)hZBL#LWq7~O12gjj14CP*Llc9N7yExvU!U>7Zs^ToYT$8k z{Y))vz7LGV%bt))76=X;WI1hAjpSh+QD8|2Pfy#BbC{ugpf{kivJQFx4{F-Kj(?(| zRwzc3;xGAnRRP)TlphkCu)LB_I5iSSY~z<`Fm6$c)K7{PxT+h};Jjt@joic)a2?g!yw=eOyvaMK^FjybDH@&w?NPV~ zg0HGubKwkr`bgx5u9wMCJxfp3rXb7-|AaC^I`Y;O{1 z(2#(D{eP=-w_5LAQb{PKrk`&}VV%i^#AAcVy@ijUeqLK41yBnp8gn$D_+XoBlGO=1 ztj`X-!FxXo6PR7-z}3J?VT)Uzq3Yi&@7td{yfz3hWDqaC+Y)dDLP)AguD=PL5JbcU z3W=p;C|y%vE)sm25BGhqHjq5-Tt34PWw;J_I^%A-KZZB=^|>8AOm8Dy2hxVa!w!|i z^T_vg88&%pbinO=jZF!#@wo*5~=b(~omlZx| zf>5wVsR)4eX2{j#&whv)Z3^1x$B)@xT&k}xl^Ju!c+E*UQQvfZw9yEk{oyBC)G7?hN>t56+k!kxF|rhX(4^u^ zX13BV;K#9%i?v{QO7BKm?{Zvr)CC`nt67?wPxK8R8x1D~N#B%-M~^R(T*3I+!` ziY5YPBWehNd~mBKlX*Kh7o*lH$Y>(dRxfmHzQTLo6x3Lk3+n(a>+z;laE(FvL1s-7 zONFh~t!r>?{K&+kf;%ZJl2=_>!0(ZrWi*y{slw_%W|9lg(($_WKIUWw8yMQV~%a`PK45^r6P8 zzVivy$6)-fDFIiDO2fX6r+ z;JwnN*llz>jxm<&td|MCcim>{Js)|Z`ZZauWdH#9{8k#G<<`hVfaTIv|M=dcQ)^EU z!4%w0mCey(o&br4jMKG4mWvqGPB-Go z?0msiD|jF%duQjR*O<|Vi!ZnO0JcB^De>>k1N-r+Wve6gqfq0$Jqu3%8H8(ao)X1s z8tbS9J(2xA5DHB}Sa6XwOQbOUEmja&FQx7sW8z$q8j6Bc-Mfvog~%4Obp@d!*tpqNXoM=})=i*jdQq!|2GJ~=nX>O*LO+QjdjtTsrDb+Oto6@yT za1?HuR0s;aHfTj})cy{v7gFteDFyEGx(l(PDU9g`5f^^sYExW822SfGW z3aZwVNa%T|GN-xLU?=9VI@^vH^^GR}Tki#p#Wa5#E;`|>quJ1VPJFfczN(Qq$xf=& zmggjj>SM%9X4{ytLdxr!PVC1BZ!#y3OcBOq$4`a`E!86%5I>Ws}JoywF#&LO7m^$J$R1kuSb_D;jM zCmd{jbyoFnl4Ai7VC`oD`z`!XY1vUkP4G2QmNC~nSC9+bUZ{|?O#$|i1l6Cd?dngN z#!CDyTCy~3t0pIb7dv}j@6h|xsw;y@Qi(G%9*tqty3crD@BUbZ30*z-rH0?r1<%9G z&${CX`v)PYI@Bay84(sqExej}u1NTHh~%B+dT#Az&Pi4DaLa=H2odlr(n zwbsi5^m0N5&a`&PwBUj?tZq@DCvil}!%b^gf2iUfad_eOoRwdita5*Tg~ds)G#9dS zn00=%DV4w?Hp?FYE=9C)Rdk>!_0_q=61u~$Hl{~1&`6}oskCgGUWf2#&O4`K%2+K~ za?`>zFvjew&_H#D5fugIHkzqvr|m;3j_zdT#cUe15mz2a38mIF7TF;p?ePLt zwWWKBRGvCaM8t@zJiWSMT8NbyHN9QJWdsbu_ zMFoYLEUm?G`0?u%raSe#q8o)0;*5}rReFJbh@EayiC_~brQ+x29cg|DEuuuoW$ZcWqxij&6!uL{+t3unBhEAlv`#4w#lpMo0x!P9* zp}aq*7gCc9OW*Y4YTBsgR`um-UU9GM6WIb|7-j3RNiD})o>Q%R$1+Xt&QtRdm(1P( z24_2BOYk-4Rpbm#pvmD*h9Y$NrTJQ3I;$ttCl>sU(HoAH>{kefW#izf?m?)SC`*W` z>|jM+3XAut$I+5e0dX&ewZV}0g^X5dx9j5)_~mPqlh!osCu=-bTYT2Wk!iEqJYS&; z{dZ>9>dp>seJs)Z$h1+C#32!cUdAoXq9>4mnuHfC*(N{rp_&le>T*%7pAT}YS317Z z6QpOnacDn&ZHHeqctf5n`GC!5Oyo#}t!wYWPsf`h+Qp|8gwIF8u}8y5_$exg-V9xr z5N=&!haqm=x8o#P@4GjL7JT!i|93}ce0%ra(t*R8J)<567>-1pSYr&_p&Xjg-LLg}&f_(olHN(a9 z`#n1U(y?#qCt(iVII4q}+bDGg;1H^R&;dPj*dhiLpB`%QLY%)fbsVA(h4|<1fa}s0Z6t*(tVKN0v2eWZXyljHVePr zRRdvZ?sKG6u9`{lMb5S3BL*vwFl%^gET|?_6((RfD6c4&EpyU)_e%B3&8~nFY%Jf* z{voPXpY!JVUeNB|m^~A>`1mUinnM&)kK5bvoqDXtZjno8b43d>eb0WFQun3CqK> z9FOqIo~UoNytcI-*X*-mwj>jw){PU)6kD$8n^puF||fHYfu(7rwR?u>YTN=;b-M(0LeFkAm)4jg|L6#eas;D zv>Gvcf%=M{HCmf)%a}7Mc3732Bis4vNUZx>N^ceTtmPfNwq@OrV7pB1)-uWx5ut+Y zbc$$-)?9_$UlB3HjQlHB67zOwqPp0;MBaG6%;jS>nA1)BZDl_ORok5yQBylM{_;9x zq3hdN>_~wL^MX{eqDYFX_PL0VdCydhnL~$W=R=tQNY1N;OAcfhIvkfj%0|_l+PSxN zyrpFZ=iPuZ^%6SWP>FLsCaH=*ui=Dh*K`ktp^E8hfr*-bM3?T*5oTr%n^WP%G9IzU!Q5d{-1L%b8iE)-uxsdq8J`0>h2Z%aW*YCm| zcbZ*u3=H~?3lc7r*qY6h%PZU%4F#Xd zk}&%)1XHA0)R8m_N{ZIPj64zQXRvyNr)!HS%dA$QcXXs}PP#@iv+~n2sg&a8nCqdI z`C~*9SY@D%&ezq{VlU}wt9@g;dFnS8%8+h)NKFN!fj&1hkeOqr1P3KT`TNuKq8?&Ep%3mvWzVv8; z6G6t+&1j_QIJHvPA&~h2&Bzr>PwSlRF;pViwIwFmb6*ys5pI120#V{iMw2)vPC2(E z6+X=pxLNjxj%sVGuCmyD|B2Oy3=!a%$; z)llCC$W3w~T|6r=0pC998F6QzUKj+SLLi~sY%)@}+zzx5$A(Lj1RbQBWadGk_thS+ zSH;WpPr%}+FR2g)?Ep(bYZVSws$dUtEmR{gmiq3xyrc(2a(w&{LIm{w$tKs@X&_i= zkCP7|Eq1J$QdwT4y!Jsww|npp)~yw*S6u4V!W-h%W0q^tRI7?(W_TIZ&T(q(>iE6` zzB^xw!ZxE^9LFB|?T%brnSFN4BQ-&AR+OTpS&N+Gh@R17FX{FB4}Sx$ z={6jy6GE&gR_&V337K22BkF(iB1Ufid}l%rh2-((<*?Jf1mw0o1x4aC0>b~)3Bx<) znN#O8Zicu`KHYe3cCRE8rC9@W5bvt@&GOkGD`CM03 zrtlgE0GsgYvalT^nAb6Cs37OO+c&`$+9aSTS5j$Eae=Q3w#b@W@p#p}GwH}1j#a7O zQ?!V5a)&SnYFHyGZ0BX_p?RmMA{)}b550Ae1?~~yVZg({xN4l8ECj#JOy{ z38rEn!w!dl7dOq5+x%x~V>seDTdiT^7fsp*v8bHsFf$HL$vVnyRa)u-qk`$BdT%?<3QXgvS5aRGY| z!~7y-@s6Ye^b(AftUYcLp)}$ph6xLAh;YPonesw8B&0|1@COq?IcShJYtZu-o*Y;6 z{sU)1-pW%Ef^m61l!)T*L+lDF;g^35rh;|`QoiF1Zk|ROhC3U#|A%B-oFik9qDNH8 zNBQwzLKCNbaXa`mb@uO2bkCsIDD#t3;zWwTjx$_)9b!B*HTmIjoCol_i8t6Zm|d8d zM%cBM^+)cu?bF;54p8DKd!JO_^66;f;!M+c)EQxxLMm@P9yLTs=kN|5_=+J9H$6r_ zr&)-#$J_$BM)oyNDZ?#t!^~TqJu_u1&LOL`TlH_T&CIm zwD1_}E9AvoZC)Z>JmH5-dGLo{p3cu0%@YJB{I^?kse<}Af-J}Z%U-6$YU&vZjYCM%ab%BT!!8c$e&7?#fq_d3L?d+2%^^Y%`xUwlDD4mG?>64is{gdw5S_&-QvCjD3UTKmA`I3WAhHO`>QWm5i8%)f3=(~_Iw(NND zdLW0ArR*7VXqt-hJpLx+$)uyv}{>DeYpX{_L*6&n}Rr=XQ&BCh-jpo{U5N^#E-GYOWzQE z(WSYdBuL*9l-^GPkuP*_13`v~PZotrPacKDpsI*3nEHfVd^e;6gnEKD9(p~kUB;@< zwMhmexhQtU*{=)fZiH> z%w1RSlUvDt6*M1H&V0Kj97*phJFn@J3 z&%iTGj4=s&nnI>x1T>XxN0x5;fk!(59ieRXdV#GW&zwH&LK_jKftK$iPKN+WFh~TC zK|0WnmP6OBP(+;;JGZ*e>+xE`5mir7pa#6r^vu+uoStPwdI@=mN%*)9w%fe=C^q}N zlEk`7gFU>9?lzH&o&gcA;9s!kM2|1lr2reUX$DlMU zz%Fr0Sm?U#iMpf?0OrGmPP({(=07gV8eN@rQk@rNMoV6sP(6R%Up{b@GhM0KD*}K3 z7KC3gfhYMH7x}O)2T|2QKU9y10}N!tE8qnZgdnjJcsJ z2}05y@Bdw1S>TlS(Be4rXzaTY2hm&d75S3Qp(Rs{js&#+k?!$*;rXIxa?w3{@t!)o z7RQ1dm2b|c9tkDH5ZP&#gETQCCdi)P_j*$dAl~2QGntDqfE+G*hdF9g%_?*VJ2yr* zcxS=dhXSoEsQ^bd;CQ(_2iixArVoVtGUp!c8S-pXacn(2)%3_oS=AA<+Exck?f=)50 z$+|pw!xF;O^=$C5jEKT9|5!VJiSJ|?;`5xEamvai^}8D~X|6ybJ$@Sv^3G_66+dHV zqF8~^2eJ*CvVzPPD0%OctdT$z9%px1^P0c>R&Qd&5M6W7g4PK!PuHx#u!u`o82%K) z8~qGdC!wOqv8&`Y(>&prgU}z7YR0N|W{m}+n8`i1gxQE>Ldk~8Y23PythbA;vNJnK z=uOdGX;M8_m+CATW3j_>KI;R9MfMh<_2VI_4Xv~7*kTK zqT)0{t_x;{N^xJ8&%hftz+bX|{2sW>w|>+&4CrpW`bwXf5b3-DV{p5CY4d}8bwm?Z z2XsSbd_uD+X~?{7l2QTZ!FZR&sQ)}Xc9^8xqie&Gl$w~Fic9v$%jOz$B8sK7dGLu9 zEOHXAFZ4f-1$Y*GSQ~1s2Ks4dIHHQK+9#493ZWi2ML?GUCy1fW77Ikg#>sKulFmF6 zu5vx5-lh85KQN1?bA>V!QetyWeXF5sB!^zpexq|QJwn4rPNy+%RMT~)ld}i&@!c_+ zC6waAe>5Lbc0KWYWSaDWzsqH}rqysHI1(dUTM{HoT<&E!qTU1PWMJrfagj=_l;VP9 zG{7h)Oi5P|Yc4r_E^!Byh?;p4_b8!JY{#QV)_1Sl>D@0X(hnjWpgeI@PPDRq1}^9s zP)lc#Ku=MXlCvz-q%ofIuvlq==XIiXxl;C<;G2YnWn!)$UjmjPf{vQtTY_0d{M-vB zQiI>pc4dgCyt*|VaRx%?M~~C8-aL5nZ!fZ{TZ!(8rS@+BAo;vyorlhaE0N9oxY$_L z#gR^KhpvLRkR7l8Ye!R_^dozg61BnX7U21~Yk31F#Zqgmniiz^DcO7Q)^##gLcE(H z6{QJBg-7Wa(fXY}&ss40FPSCII{TuQNU*`%HX}!1>t!t)1_QunYD++xeX`51-GHW- zWceV$P$cqZoy@(1Wy}_TqhYqQ#oNX`dC<&|_THp-a)}x8Y5(?YH4x zO2fJzM>OzT$pz510s=JXt{mX*7?03g=J>`&v}_Cpt+UyUdvS0FxPaIyluOOo>@Hp= z8+f0{KoRU1;3Wg?7-n8!>j1Tr&np_)$-wfQAvZ0Wc8a#!jZR;poWtZSj9npxm;sQz zf1s*SqT&wIKvG+6y5U01uPR@xdnQrv8f?!()3Aj!Z*19Ro)~1S4l)#Et2d_%g8BNC zA;l$H&_!PiD+`yuV%+pG-O3>Bk-xGqRQtw^lq$TgmWA;6AFf=y#eG0Bh%p};Op`@? zm6Y1HM*uB}0MP8OfOn|n{5$Xr~bMo^#lS+`cJShl{N`RBL5IrMK|-|%%NrNhlE)J4{~v2K@*g1QWg)eKNJurFrk^Er!t>h|8v zRz-%0tz<5@l1(R|loX1M5e}`rGWyt15rJD-3VRT)9Cpg9)*pU$or9x2oFowb!Iu0? z4WnnNBp>L@og!~OQ*C=;pw^gY`Y(L6$)~6jWWg6rZTeFX;`>B6c@JadR@a2AZ$^!Pqz7tKFqgV28fdfp_Qi&j*x`EbGicNp6vwf7Q*) zXLi8}4X{8W_Q5i3Yq8*N&gc^1uhxw>j?ySuvYAAWsyiynpuUIsXH z;nxOD=&f_G2MUbTZgX%!G}st?^WsA{MbUF&%`_UC5!QK;XH*cEv2E^%;xf2~_*_F) zq{eTHlDAlA6dyQ-n*YQ@%3&N%mQ>5NvTRgolvQfb72E)_L{7~KwN-Iv?H z%Y%}*3jdGh#NLss5qluWR1TbVTFbp4z zW2n&J`6Nd7_ZJLdREx3K4u3Xdq;8E<5cyE+h67_RddC@Cd>wk zwLmc8=D$pAxgM0A?>ri9<7owLG$mSa*T<^070|fS`FzP%2OgABWB5Jsf;+M;KYdw` z#zWQvAh%8r#nd!)*G=HJ|0_$D{)s(C{jVHG_K9p5dkuP?6ucvTl&V|X<=E?a3?^+c zN#!lU^z0RaZN<%7D@hPzQs!t*t;#h-cb|y$ZkKHSM`vt$cC|#<9w5yEr=ZWpH-mWk zWwWl8Ddo)ElUOR^eUu`<#lVVU#>1&^*>7S!%VI?P+hET;YT7E^xfx*q{;o$Hc&V8b zvdpBolFlC8n;8>tsZ1J<*}Gd0XM|#pZqiaP^}1~m3dTbAB2_G{MDU6<4u=faK~|1t zGM2YWP$S@Dju_%*61G%4Zp6%HA+JI~#jGDM2z7kLV_^ihpJc z(8ODvIF)Bkx$tDFqug;Pc9f(HBb1O^TStMHEy}dMk&0BLp=(VYc**RJS>yx*f24C~ zJGl2*Zls)EsISWfQ+8%+uZZv!&?M-n1JAN>H#u__suy&3>jU2@`2oMx4@BA}3q~x;*f{yEgta?t+U)vJdaYs$tR^W8jT}t7`&4Rf= z-k8KGkY>kZ_&A&Pwa&c^<#bp!&7zJLn-B}9gE%`Z$U>!cD`IBItFDKYbna&M|xzttmy%S zdB1!j+noCVoh9|U0adp~>#Kpg832APpe^iU@HH!cfNfHch0X4H;XfL63UDXtvxJH~ z@_Tbny0n#i`f_e@N0_TpyiiY`wB6Ed95$D|4IN8Kx6r791rK!s{|)0b^xsUYzEv}v zbAQoc>bqZ|no)nzKfmSA3d>Ha$b#<)JiifB%9+hOK3M9!H)kD=V^lF?2?oqiKV{*TV5oEE%`GtIp%2<_Q^V2xnpvN_g5D_ zHh#FvpFaOY&--sH5&IA5Py#IQ+iOMJB2fjd+XfU-A#UM53T2%+I8cz$MkyU?I_fE4 z_PI2W*F!f@tW7_200~tn5Vbgx*u*q!W!}Iciyx{izDCpi4PI z;MqRhFu$*_4zxn_i@#&wu)*)oYjq3}UKdkoj7dj9rgLB)uNS zEb2K;sEPb4S^G}Hv@S5ceE;F2SikT!F&>~57i~}H6_sDNu<<0T8-{h*9%fJ7r@u=T z9~-4J9vq3V{Uz_a6N0Z@P>M>Kclb(GFJCTo1L{Lshzt@WTUAkUD)psWp)$u&R$8-3 zJp-A1W-^L_8-E9wkx~}?0Dse_Vqc|F(b$CzA#a_k#6{yS+g6VYL3?VD*s>h$Ia`%h zGNZO>>tCo0i$xFH4#HHWLuVLSVp|V(-wafnZJHi&g>$-_2R79PD5G?CY6tXs*&U zM>|gbhU+zPb_~_pTnpV5o3V7WH%PLna|s?^>=L$fiBq2`XfJ|b3g#1|WTFm|lhNnp zM@m^ThIz@ilJ_VRmKZ;^u$nJ?LwHGwvrbs&`qZHW8O@5PI5#hrIyyZbs^qT(vFe-b zr~)Io!GVD=-bplG_oM-nC2(p)DT@F~3LsUh{(<#bUynXIuf?j64b?;HZ{TMci=$|h ziPo15wc++uVXBm zl8H@kIymD^@vwRyimOCdOF9MEN)>l41F7C@KxLvECt?^6XT6J@@6^!#L%5DuK2&yK zm{jcdUVFy_PU)VlR&L8NJydW;k|cL)A5ELf#Cniz+}ei&cBz-1z1NL5gPP_WyX18u z&lKM%GRqeKD6-4)zWD2w>Ag|thx@7kd_Rm<7@1i&dLWJ)Dsf}8rD zFnvGM;Ivz3PMB{!F&=hY`qWMTSkzWz6fWD~Bc6T9Gz}NF2-}wZHFrb|>u3J9KWGmFD&^!gxXoa9y^daq{!1%=D z!b6m7zOoA8wm-`$feTU^^*ee=!u90d6-vjc=0T9$M9@sjri@6BBRo~Hd20)VmOhS( z2!tE6JY$x7+aWfS;@Xc7at1S;MydX8k7h^?Nepy)=-uJSJJ;Yho6k#Zo2Kiw67s9hQO3hNNK`3Me;S+1yb(9n)te9~N=s-q^Mnkp^ZQW~4ge|J3xtIR zAVNRa;VXXc2NtQe;HIi5@ab5}*y z1#T;7e#M?lWc-W5AH!$ED)+H9rpG(C$0=C)v+kY&n#{4oAo&xOWzj4Z~ z$b4QI@7eQ8^5-}q1_tFhM+xj}>4Z{M79kDlT&rz)S_#*=+7d~<2@ z@)b!PwiSP*(j4YRB-)PAQwypxO+75-Q1XR8>&{lcVPbj!HLoQ_Ee|8%D|AU%_-y7xc)UePP3%p%KnNA zYB*ts9+R0vETJX6Qd8>EiO%dO0j;rWCAH>^K_wd0REcIg#GdUaCeJerol%O@6ysX+ zyi7v%sum_uy?q1)`S1gQW20bIFBR3yyvwz3-o14AY69ge5r=bSU6##;b_ly>i5Kk~ z<7mJAOSP9f+KVR^r@2>NU;0vZ+Bwy>6$aD>;T%En@z0DT&a6HM_GxXIOC?QkB_iGH z9hDGP+a&L)QGPq<592Vh0i1QiEVz)=t`qUyiqqX1I1;y>B{|O&mih@w?c96Qq8$aV zOT?sFik6=!z1knv@5Eh{CPI4A8ur?q-isI=(}GGFRN~>s8jRK5UqrLTM%RM&Ts>(0 zzgd+zb8#JshvUs4zk+z&&*V6EUa?e`Q>n|+2+|m?>){^9gB*5!SQPeQe;HDmcuN}M{ktsp67JtQdUgvX3s+}+iiZTDJu6~TYiy3Do0;!_LoFrgNvN03 zH~^>{s^D!O5}`nK$8yTXx{PuK8{g_&9Vfxl@$$X6wlmRQJTQfxof#uHplWA2#$OXi znbyp^8f%Cmt!;jfapzV63G!jlNin1j*s$SeWyLX%N*imw7$-9bx$ zDKa#VUU$*nU#4*vI}$-FWaNc&fP3aVogSBxOE3H|+eHal-kZBhj-0voo)Yt@Vj=|_ z@}Xg2K<0Fu?d+3$D(>f#PGJqcE_Aji699(V&{KYFpp$Y*yOZt`XwwM`yj;)P@TMv5bP{)U& z2x_TM`&jt&d4RU9tHBy~J054N3{UXG-JO<7m)nxCII}w`YcC&Gj8kb*T4kGE5NpS` z5^i2=@EYZuNY8ArWh9cx6X$*MBjA zZ9<^#y)MTB<;1^|XkOoPjzRy40*uMakh$v0Fk>|maIzxhxOXAC4HwEN`^V_r_!E@>u(kV>TntP-rDg; zRd9e%ys7HF-}?sz^sS(B-1RP7I}iGtKXIsUf+epRsjwJ_^?Gm|L5&>}Mj`XyNM8QE z<7)l88%Sb7qD9*{PrPmO%SHET_#_KcU6ZT_pF37S9E6OXThH^AOK)$$KfWevn;S}f z$f&10FTpuW&h2mthw?bRr0t8KylpP~Hce+!ePXWmsimOwGT0v%XMZioiA8k>1QwEJ zqozE243v5vqew27IUsSg6RU6<Wk|L6YRk^w>T#VILO`zY zso4H)H%>;U)?aRqx?V1auo4|cX&wmaOkh3?IMZ@&tvUI}ugraBb>kV_kmto{XZCf5 zPD+3CLlBkOfFC8mv;iZ#B)9=1y7hzQ@l7 z;V7sm=XciF3y-m3UwAeYss^wluR6wdzhL3R+TmA3<=WElAUwH9S0s+w{CXLo^+UwG zz@b-BHxpTzoWrwW?L5Kf>PscKbs5ihmr3=9RmWD&JKBn$CMI%1U6Mj`blc$@QXy}V zvh^rRKXtYB|ohI+0q9Tf3lBtg9-hY5;EP}#1( zn6qjc)vA5qmbw->wGH3%W1a(1k3@R%dHq-t2Zg2=79_KPu;#76o&pV;&Smk?^`qe) zNn9r5rs9hnojk-=Fw5>FOatfZH->MS+Q?hxuW{Db-XIWHqu z)RoI^CVhc0Y~ZWfYknF#3TUNoTWLlJ_?v<&vg}}zWDj8P(gna`NK=kKgt-6X?l^46_{&=e{j9f6=o?gM z-GJP~?B0xZpP;3skIvSDcA;7u8x?Z+CcZA31(o<;Oo4WObx7V@aSyfVLG<=8bk@h8T5iWZ73dj4*Z=|S#WC@1OB0d(zYG{3WAk_Bgm>8UNvm%u)tXdt zD$(TV4crBll(oRFCCm!{_|eD=i3Nb1q6d{f!U7M@NcFCF4zFN?DI|$xU>UM%=ls#h zMMCW1dyPFlnF*%tf%`bS>H+P6xc!bdP)JS8V4bGKX=sQ-h}r6=@X?4UBv5@2IKrXfeG?EJz!XuF zOd#$N3G0PUR7L&8mZo}bQR-0*_E@bqxO5+C{Fr!ngv`RU$puj<7}Au`DkrBH%cm)m zl1GvU+qj~3Piw7^5z;QO5`K@0?o8**fF?_zW>4>d8e{J3xwB1(&${(O$alC6lZneRt|L9NBPQCvtm@svQKS8@w8s*46S4N z|DMN`P&r0fz8^;$L-qVb9gA; zB_uMiu?p4l|JBKvheO$~aeQo9Qls86V~Z%Vjj=BwVJu^vtWjZN45BRAX$Gax$dV-~ z%2racWQ-0fiLz8UjmVlkUfCIA=AAj^Rdc=P{BiE*dYiv~12nrTNBCr(xpr*756eBxv(Ie#`EWf{esohxdEao;*xQ7JO-D0JSN1e!JiQx zZfk)?rgwQPfvHgZH~c*Rv4}cCqW5IFT37)QKYnii8OwrRke;Rw4X&em$c0z=ZoD#^ z`5e`$GI2yTL|!YMD7ks1ejk{3;!)HUPX}0UY-mCJ;&oT+PNSn?-KR#5zCWGf^VGgH z3|JHp(B-_6=a;G#iiue^{}i*1br7LIYSw}FS+dT_OQl?5N>a{BJPu7G39+#yiP;Wz ztogCWH-jj#iNj5O-}W0x<(i4O8cSLjr(?Yr6;>6fhh;LJn+TaJcetr#RJi`R`~+da z-!H2Q<xGB5;=2=4#$m*+&mF)T+w{ll1>wHh z?0l=<8n$bFxTIG|1H4P%9Q-u*9KL0YRaDKPKj#bxBLpHPB`2fX$gFlPQRA$Ju;6GuKp^_3?ZGx*C@2j0S^ou zO5Xs>;fohn&$Lr-zc_tkLDufuB0A!hdhTo-?1_m0%))761*2FmF&DcSnXfJocOUOC ztJQ*FVHZ;K?My!U1gbJ2!^;6k6_McQAuzr9 zoO@xBA2uD2mEe!BHH?=AleA|fu71vB?MIe_5gzHQ5-&5c_K~j=bh+JP#Lx8$Re0}i zAmx_byR2_jmEd2hw`}+%I>j-hZLvs+Kh;=RKq>D1x_}~Apa!{1Je~j;^|R^oU4J|x zzF-c-Ndz=1i7M?9H%XDB?j;&6NsCg=;*Z!Rrj<{r->Ut>Mco@AX=nhfBb4Xj04K35 z@^W{MwJPS%!Gz#L^0T0_su!*QMlD*cv3XE7Y#&mJj}8gXiz@&GaPC z96xO(`37H+iCebt;uxs`fz%At@_JXIl-OrtD}*V2Tq?r%BnZe4ds(V@v_3BL1_I9? z1BYc%S@fx-{-szpUi2oAhow-27zTve@I4RKG&P;E$y=gj}kCPsS<2O&Qf zaOkiibtF|ol#e6o;1u^^qUamG(2Jf2;@)1HjQ} z7fRMAyT^dvvHp(D^InZZ%ilSL#D`sL*GAT+v5i^7H>M|Js1O2(vUe#mjv}V`>>$l# zZn4pjI#{>G>A~Jht4rMseL58BK?5YkP}&YuHO5f}9alL`HNLpcD{mecUsJfLhZIev zMp(a_mu@7uQDW}jSR@H4Uou&*7uf_}mRhDo2dvV!&a$IkrNu3gcFSW;HtK~YfFQ3? zT2){6kUmxqLSyT>LcvCxQMG&LCq=P1mhP=*wkb5YQKKJuE5@yp;z$5sTh^odXZ8Gn zZLS0G%>!T8mM4I`C;p_NE0?r;=09$VA%k?Vx|uX#9FL z4B82Unpr`2Rj%w4VJiGl^`{(5`VJ`itwp~rjqLQH2rFZl`vpH3>IbX`b~f1C*8_$L zM0xn4VJK7})DL|T<$=10Qt%JF;ExWx=#36Cw~!BPgT1qq=l)rcT93-GnT7nKB@|(S zkVnA5ogM8#o$sNo?T9^AZ)?=l*|{|*ia_I-;#!Dg@mS%mv75!132|>0A6BLs>1F-h zTu%D?FHK`%1+o2iA`!#Lh{71g^FMqdr1|d_W#312eXlRhPSQs#{6#FnP}z|%)_~pqM4rJ{~lH5Z5U~{o5H!h2Y}HO ZZ_~f04QbA?i?PN-zkKQH6#5bX@D~@y0vG@Q literal 0 HcmV?d00001 diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/activityembedding/ActivityEmbeddingTestBase.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/activityembedding/ActivityEmbeddingTestBase.kt new file mode 100644 index 0000000000000..ed411b5eaf024 --- /dev/null +++ b/tests/FlickerTests/src/com/android/server/wm/flicker/activityembedding/ActivityEmbeddingTestBase.kt @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.server.wm.flicker.activityembedding + +import android.app.Instrumentation +import androidx.test.platform.app.InstrumentationRegistry +import com.android.server.wm.flicker.helpers.ActivityEmbeddingAppHelper +import org.junit.Before + +abstract class ActivityEmbeddingTestBase { + val instrumentation: Instrumentation = InstrumentationRegistry.getInstrumentation() + val testApp = ActivityEmbeddingAppHelper(instrumentation) + + @Before + fun assumeActivityEmbeddingSupported() { + // The test should only be run on devices that support ActivityEmbedding. + ActivityEmbeddingAppHelper.assumeActivityEmbeddingSupportedDevice() + } +} diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/activityembedding/OpenActivityEmbeddingPlaceholderSplit.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/activityembedding/OpenActivityEmbeddingPlaceholderSplit.kt new file mode 100644 index 0000000000000..28a72f4da592b --- /dev/null +++ b/tests/FlickerTests/src/com/android/server/wm/flicker/activityembedding/OpenActivityEmbeddingPlaceholderSplit.kt @@ -0,0 +1,114 @@ +/* + * Copyright (C) 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.server.wm.flicker.activityembedding + +import android.platform.test.annotations.Presubmit +import android.view.Surface +import android.view.WindowManagerPolicyConstants +import androidx.test.filters.RequiresDevice +import com.android.server.wm.flicker.FlickerBuilderProvider +import com.android.server.wm.flicker.FlickerParametersRunnerFactory +import com.android.server.wm.flicker.FlickerTestParameter +import com.android.server.wm.flicker.FlickerTestParameterFactory +import com.android.server.wm.flicker.dsl.FlickerBuilder +import com.android.server.wm.flicker.helpers.ActivityEmbeddingAppHelper +import org.junit.FixMethodOrder +import org.junit.Test +import org.junit.runner.RunWith +import org.junit.runners.MethodSorters +import org.junit.runners.Parameterized + +/** + * Test opening an activity that will launch another activity as ActivityEmbedding placeholder in + * split. + * + * To run this test: `atest FlickerTests:OpenActivityEmbeddingPlaceholderSplit` + */ +@RequiresDevice +@RunWith(Parameterized::class) +@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class) +@FixMethodOrder(MethodSorters.NAME_ASCENDING) +class OpenActivityEmbeddingPlaceholderSplit(private val testSpec: FlickerTestParameter) : + ActivityEmbeddingTestBase() { + + @FlickerBuilderProvider + fun buildFlicker(): FlickerBuilder { + return FlickerBuilder(instrumentation).apply { + setup { + eachRun { + testApp.launchViaIntent(wmHelper) + } + } + transitions { + testApp.launchPlaceholderSplit(wmHelper) + } + teardown { + test { + device.pressHome() + testApp.exit(wmHelper) + } + } + } + } + + @Presubmit + @Test + fun mainActivityBecomesInvisible() { + testSpec.assertLayers { + isVisible(ActivityEmbeddingAppHelper.MAIN_ACTIVITY_COMPONENT) + .then() + .isInvisible(ActivityEmbeddingAppHelper.MAIN_ACTIVITY_COMPONENT) + } + } + + @Presubmit + @Test + fun placeholderSplitBecomesVisible() { + testSpec.assertLayers { + isInvisible(ActivityEmbeddingAppHelper.PLACEHOLDER_PRIMARY_COMPONENT) + .then() + .isVisible(ActivityEmbeddingAppHelper.PLACEHOLDER_PRIMARY_COMPONENT) + } + testSpec.assertLayers { + isInvisible(ActivityEmbeddingAppHelper.PLACEHOLDER_SECONDARY_COMPONENT) + .then() + .isVisible(ActivityEmbeddingAppHelper.PLACEHOLDER_SECONDARY_COMPONENT) + } + } + + companion object { + /** + * Creates the test configurations. + * + * See [FlickerTestParameterFactory.getConfigNonRotationTests] for configuring + * repetitions, screen orientation and navigation modes. + */ + @Parameterized.Parameters(name = "{0}") + @JvmStatic + fun getParams(): Collection { + return FlickerTestParameterFactory.getInstance() + .getConfigNonRotationTests( + repetitions = 1, + supportedRotations = listOf(Surface.ROTATION_0, Surface.ROTATION_90), + supportedNavigationModes = listOf( + WindowManagerPolicyConstants.NAV_BAR_MODE_3BUTTON_OVERLAY, + WindowManagerPolicyConstants.NAV_BAR_MODE_GESTURAL_OVERLAY + ) + ) + } + } +} diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/helpers/ActivityEmbeddingAppHelper.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/helpers/ActivityEmbeddingAppHelper.kt new file mode 100644 index 0000000000000..a01f633cbae47 --- /dev/null +++ b/tests/FlickerTests/src/com/android/server/wm/flicker/helpers/ActivityEmbeddingAppHelper.kt @@ -0,0 +1,97 @@ +/* + * Copyright (C) 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.server.wm.flicker.helpers + +import android.app.Instrumentation +import android.support.test.launcherhelper.ILauncherStrategy +import android.support.test.launcherhelper.LauncherStrategyFactory +import android.util.Log +import androidx.test.uiautomator.By +import androidx.test.uiautomator.Until +import androidx.window.extensions.WindowExtensions +import androidx.window.extensions.WindowExtensionsProvider +import androidx.window.extensions.embedding.ActivityEmbeddingComponent +import com.android.server.wm.flicker.testapp.ActivityOptions +import com.android.server.wm.traces.common.FlickerComponentName +import com.android.server.wm.traces.common.windowmanager.WindowManagerState.Companion.STATE_RESUMED +import com.android.server.wm.traces.parser.toFlickerComponent +import com.android.server.wm.traces.parser.windowmanager.WindowManagerStateHelper +import org.junit.Assume.assumeNotNull + +class ActivityEmbeddingAppHelper @JvmOverloads constructor( + instr: Instrumentation, + launcherName: String = ActivityOptions.ACTIVITY_EMBEDDING_LAUNCHER_NAME, + component: FlickerComponentName = MAIN_ACTIVITY_COMPONENT, + launcherStrategy: ILauncherStrategy = LauncherStrategyFactory + .getInstance(instr) + .launcherStrategy +) : StandardAppHelper(instr, launcherName, component, launcherStrategy) { + + /** + * Clicks the button to launch the placeholder primary activity, which should launch the + * placeholder secondary activity based on the placeholder rule. + */ + fun launchPlaceholderSplit(wmHelper: WindowManagerStateHelper) { + val launchButton = uiDevice.wait( + Until.findObject(By.res(getPackage(), "launch_placeholder_split_button")), + FIND_TIMEOUT) + require(launchButton != null) { + "Can't find launch placeholder split button on screen." + } + launchButton.click() + wmHelper.StateSyncBuilder() + .withActivityState(PLACEHOLDER_PRIMARY_COMPONENT, STATE_RESUMED) + .withActivityState(PLACEHOLDER_SECONDARY_COMPONENT, STATE_RESUMED) + .waitForAndVerify() + } + + companion object { + private const val TAG = "ActivityEmbeddingAppHelper" + + val MAIN_ACTIVITY_COMPONENT = ActivityOptions + .ACTIVITY_EMBEDDING_MAIN_ACTIVITY_COMPONENT_NAME.toFlickerComponent() + + val PLACEHOLDER_PRIMARY_COMPONENT = ActivityOptions + .ACTIVITY_EMBEDDING_PLACEHOLDER_PRIMARY_ACTIVITY_COMPONENT_NAME.toFlickerComponent() + + val PLACEHOLDER_SECONDARY_COMPONENT = ActivityOptions + .ACTIVITY_EMBEDDING_PLACEHOLDER_SECONDARY_ACTIVITY_COMPONENT_NAME + .toFlickerComponent() + + @JvmStatic + fun getWindowExtensions(): WindowExtensions? { + try { + return WindowExtensionsProvider.getWindowExtensions() + } catch (e: NoClassDefFoundError) { + Log.d(TAG, "Extension implementation not found") + } catch (e: UnsupportedOperationException) { + Log.d(TAG, "Stub Extension") + } + return null + } + + @JvmStatic + fun getActivityEmbeddingComponent(): ActivityEmbeddingComponent? { + return getWindowExtensions()?.activityEmbeddingComponent + } + + @JvmStatic + fun assumeActivityEmbeddingSupportedDevice() { + assumeNotNull(getActivityEmbeddingComponent()) + } + } +} diff --git a/tests/FlickerTests/test-apps/flickerapp/Android.bp b/tests/FlickerTests/test-apps/flickerapp/Android.bp index 78660c04d8d4f..0c698abeceeb4 100644 --- a/tests/FlickerTests/test-apps/flickerapp/Android.bp +++ b/tests/FlickerTests/test-apps/flickerapp/Android.bp @@ -26,6 +26,11 @@ android_test { srcs: ["**/*.java"], sdk_version: "current", test_suites: ["device-tests"], + static_libs: [ + "androidx.test.ext.junit", + "wm-flicker-common-app-helpers", + "wm-flicker-window-extensions", + ], } java_library { diff --git a/tests/FlickerTests/test-apps/flickerapp/AndroidManifest.xml b/tests/FlickerTests/test-apps/flickerapp/AndroidManifest.xml index 3e2130dc480fd..387f19b2396fc 100644 --- a/tests/FlickerTests/test-apps/flickerapp/AndroidManifest.xml +++ b/tests/FlickerTests/test-apps/flickerapp/AndroidManifest.xml @@ -15,12 +15,14 @@ --> + package="com.android.server.wm.flicker.testapp"> + + + + + + + + + + + + diff --git a/tests/FlickerTests/test-apps/flickerapp/res/layout/activity_embedding_base_layout.xml b/tests/FlickerTests/test-apps/flickerapp/res/layout/activity_embedding_base_layout.xml new file mode 100644 index 0000000000000..3a02cadc90dd9 --- /dev/null +++ b/tests/FlickerTests/test-apps/flickerapp/res/layout/activity_embedding_base_layout.xml @@ -0,0 +1,24 @@ + + + + + diff --git a/tests/FlickerTests/test-apps/flickerapp/res/layout/activity_embedding_main_layout.xml b/tests/FlickerTests/test-apps/flickerapp/res/layout/activity_embedding_main_layout.xml new file mode 100644 index 0000000000000..19c81a8ba0f51 --- /dev/null +++ b/tests/FlickerTests/test-apps/flickerapp/res/layout/activity_embedding_main_layout.xml @@ -0,0 +1,32 @@ + + + + +