/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT Ġ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 Ġandroidx . activity Ċ Ċ import Ġandroid . content . Component Callbacks 2 Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . res . Configuration Ċ import Ġandroidx . core . app . Multi Window Mode Changed Info Ċ import Ġandroidx . core . app . Picture In Picture Mode Changed Info Ċ import Ġandroidx . core . util . Consumer Ċ import Ġandroidx . test . core . app . Activity Scenario Ċ import Ġandroidx . test . ext . junit . runners . Android JUnit 4 Ċ import Ġandroidx . test . filters . Large Test Ċ import Ġandroidx . test . filters . Sdk Suppress Ċ import Ġandroidx . test utils . with Activity Ċ import Ġcom . google . common . truth . Truth . assertThat Ċ import Ġcom . google . common . truth . Truth . assert With Message Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ Ċ @ Large Test Ċ @ RunWith ( Android JUnit 4 :: class ) Ċ class ĠComponent Activity Callbacks Test Ġ{ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġon Configuration Changed () Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( Activity Scenario . launch ( Component Activity :: class . java )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġreceived Font Scale Ġ= Ġwith Activity Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresources . configuration . font Scale ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpected Font Scale Ġ= Ġreceived Font Scale Ġ* Ġ 2 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlistener Ġ= ĠConsumer < Configuration > Ġ{ Ġnew Config Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreceived Font Scale Ġ= Ġnew Config . font Scale ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Activity Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd On Configuration Changed Listener ( listener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Config Ġ= ĠConfiguration ( resources . configuration ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Config . font Scale Ġ*= Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Configuration Changed ( new Config ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( received Font Scale ). isEqualTo ( expected Font Scale ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġon Configuration Changed Remove () Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( Activity Scenario . launch ( Component Activity :: class . java )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġreceived Font Scale Ġ= Ġwith Activity Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresources . configuration . font Scale ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpected Font Scale Ġ= Ġreceived Font Scale Ġ* Ġ 2 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlistener Ġ= ĠConsumer < Configuration > Ġ{ Ġnew Config Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreceived Font Scale Ġ= Ġnew Config . font Scale ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Activity Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd On Configuration Changed Listener ( listener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Config Ġ= ĠConfiguration ( resources . configuration ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Config . font Scale Ġ*= Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Configuration Changed ( new Config ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( received Font Scale ). isEqualTo ( expected Font Scale ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Activity Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove On Configuration Changed Listener ( listener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Config Ġ= ĠConfiguration ( resources . configuration ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Config . font Scale Ġ*= Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Configuration Changed ( new Config ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( received Font Scale ). isEqualTo ( expected Font Scale ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġon Configuration Changed Re entrant () Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( Activity Scenario . launch ( Component Activity :: class . java )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactivity Ġ= Ġwith Activity Ġ{ Ġthis Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġreceived Font Scale Ġ= Ġwith Activity Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresources . configuration . font Scale ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpected Font Scale Ġ= Ġreceived Font Scale Ġ* Ġ 2 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlistener Ġ= Ġobject Ġ: ĠConsumer < Configuration > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġaccept ( new Config : ĠConfiguration ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreceived Font Scale Ġ= Ġnew Config . font Scale ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . remove On Configuration Changed Listener ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Activity Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd On Configuration Changed Listener ( listener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdd Ġa Ġsecond Ġlistener Ġto Ġforce Ġa ĠConcurrent Modification Exception ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġif Ġnot Ġproperly Ġhandled Ġby ĠComponent Activity ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd On Configuration Changed Listener Ġ{ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Config Ġ= ĠConfiguration ( resources . configuration ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Config . font Scale Ġ*= Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Configuration Changed ( new Config ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsecond Config Ġ= ĠConfiguration ( new Config ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsecond Config . font Scale Ġ*= Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Configuration Changed ( second Config ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOnly Ġthe Ġfirst Ġtrim Ġlevel Ġshould Ġbe Ġreceived ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( received Font Scale ). isEqualTo ( expected Font Scale ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġon Trim Memory () Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( Activity Scenario . launch ( Component Activity :: class . java )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġreceived Level Ġ= Ġ- 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlistener Ġ= ĠConsumer < Int > Ġ{ Ġlevel Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreceived Level Ġ= Ġlevel ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Activity Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd On Trim Memory Listener ( listener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Trim Memory ( Component Callbacks 2 . TRIM _ MEMORY _ MO DER ATE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( received Level ). isEqualTo ( Component Callbacks 2 . TRIM _ MEMORY _ MO DER ATE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġon Trim Memory Remove () Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( Activity Scenario . launch ( Component Activity :: class . java )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġreceived Level Ġ= Ġ- 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlistener Ġ= ĠConsumer < Int > Ġ{ Ġlevel Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreceived Level Ġ= Ġlevel ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Activity Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd On Trim Memory Listener ( listener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Trim Memory ( Component Callbacks 2 . TRIM _ MEMORY _ MO DER ATE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( received Level ). isEqualTo ( Component Callbacks 2 . TRIM _ MEMORY _ MO DER ATE ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Activity Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove On Trim Memory Listener ( listener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Trim Memory ( Component Callbacks 2 . TRIM _ MEMORY _ COMPLETE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠShould Ġstill Ġbe ĠMO DER ATE Ġand Ġnot ĠTR IM _ MEMORY _ COMPLETE ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( received Level ). isEqualTo ( Component Callbacks 2 . TRIM _ MEMORY _ MO DER ATE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġon Trim Memory Remove Re entrant () Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( Activity Scenario . launch ( Component Activity :: class . java )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactivity Ġ= Ġwith Activity Ġ{ Ġthis Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġreceived Level Ġ= Ġ- 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlistener Ġ= Ġobject Ġ: ĠConsumer < Int > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġaccept ( level : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreceived Level Ġ= Ġlevel ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . remove On Trim Memory Listener ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Activity Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd On Trim Memory Listener ( listener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdd Ġa Ġsecond Ġlistener Ġto Ġforce Ġa ĠConcurrent Modification Exception ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġif Ġnot Ġproperly Ġhandled Ġby ĠComponent Activity ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd On Trim Memory Listener Ġ{ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Trim Memory ( Component Callbacks 2 . TRIM _ MEMORY _ MO DER ATE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Trim Memory ( Component Callbacks 2 . TRIM _ MEMORY _ COMPLETE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOnly Ġthe Ġfirst Ġtrim Ġlevel Ġshould Ġbe Ġreceived ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( received Level ). isEqualTo ( Component Callbacks 2 . TRIM _ MEMORY _ MO DER ATE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġon New Intent () Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( Activity Scenario . launch ( Single Top Activity :: class . java )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreceived Intent s Ġ= Ġmutable ListOf < Intent >() ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlistener Ġ= ĠConsumer < Intent > Ġ{ Ġintent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreceived Intent s Ġ+= Ġintent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Activity Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd On New Intent Listener ( listener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon New Intent ( Intent ( this , ĠSingle Top Activity :: class . java ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra (" new Extra ", Ġ 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert With Message (" Should Ġhave Ġreceived Ġone Ġintent ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. that ( received Intent s ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. has Size ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreceived Intent Ġ= Ġreceived Intent s . first () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( received Intent . getInt Extra (" new Extra ", Ġ- 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ( 5 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġon New Intent Remove () Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( Activity Scenario . launch ( Single Top Activity :: class . java )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreceived Intent s Ġ= Ġmutable ListOf < Intent >() ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlistener Ġ= ĠConsumer < Intent > Ġ{ Ġintent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreceived Intent s Ġ+= Ġintent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Activity Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd On New Intent Listener ( listener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon New Intent ( Intent ( this , ĠSingle Top Activity :: class . java ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra (" new Extra ", Ġ 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert With Message (" Should Ġhave Ġreceived Ġone Ġintent ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. that ( received Intent s ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. has Size ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreceived Intent Ġ= Ġreceived Intent s . first () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( received Intent . getInt Extra (" new Extra ", Ġ- 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ( 5 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Activity Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove On New Intent Listener ( listener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon New Intent ( Intent ( this , ĠSingle Top Activity :: class . java ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra (" new Extra ", Ġ 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert With Message (" Should Ġhave Ġreceived Ġonly Ġone Ġintent ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. that ( received Intent s ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. has Size ( 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġon New Intent Re entrant () Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( Activity Scenario . launch ( Single Top Activity :: class . java )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactivity Ġ= Ġwith Activity Ġ{ Ġthis Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreceived Intent s Ġ= Ġmutable ListOf < Intent >() ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlistener Ġ= Ġobject Ġ: ĠConsumer < Intent > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġaccept ( intent : ĠIntent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreceived Intent s Ġ+= Ġintent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . remove On New Intent Listener ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Activity Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd On New Intent Listener ( listener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdd Ġa Ġsecond Ġlistener Ġto Ġforce Ġa ĠConcurrent Modification Exception ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġif Ġnot Ġproperly Ġhandled Ġby ĠComponent Activity ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd On New Intent Listener Ġ{ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon New Intent ( Intent ( this , ĠSingle Top Activity :: class . java ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra (" new Extra ", Ġ 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon New Intent ( Intent ( this , ĠSingle Top Activity :: class . java ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra (" new Extra ", Ġ 1 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOnly Ġthe Ġfirst ĠIntent Ġshould Ġbe Ġreceived ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert With Message (" Should Ġhave Ġreceived Ġonly Ġone Ġintent ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. that ( received Intent s ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. has Size ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreceived Intent Ġ= Ġreceived Intent s . first () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( received Intent . getInt Extra (" new Extra ", Ġ- 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ( 5 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" DE PREC ATION ") ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġon Multi Window Mode Changed () Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( Activity Scenario . launch ( Component Activity :: class . java )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġreceived Info : ĠMulti Window Mode Changed Info ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlistener Ġ= ĠConsumer < Multi Window Mode Changed Info > Ġ{ Ġinfo Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreceived Info Ġ= Ġinfo ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Activity Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd On Multi Window Mode Changed Listener ( listener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Multi Window Mode Changed ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( received Info . isIn Multi Window Mode ). isTrue () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Sdk Suppress ( min Sdk Version Ġ= Ġ 2 6 ) ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġon Multi Window Mode Changed With Config () Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( Activity Scenario . launch ( Component Activity :: class . java )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġreceived Info : ĠMulti Window Mode Changed Info ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlistener Ġ= ĠConsumer < Multi Window Mode Changed Info > Ġ{ Ġinfo Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreceived Info Ġ= Ġinfo ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġnew Config : ĠConfiguration ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Activity Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd On Multi Window Mode Changed Listener ( listener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Config Ġ= ĠConfiguration ( resources . configuration ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Multi Window Mode Changed ( true , Ġnew Config ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( received Info . isIn Multi Window Mode ). isTrue () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( received Info . new Config ). is Same Instance As ( new Config ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" DE PREC ATION ") ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġon Multi Window Mode Changed Remove () Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( Activity Scenario . launch ( Component Activity :: class . java )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġreceived Info : ĠMulti Window Mode Changed Info ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlistener Ġ= ĠConsumer < Multi Window Mode Changed Info > Ġ{ Ġinfo Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreceived Info Ġ= Ġinfo ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Activity Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd On Multi Window Mode Changed Listener ( listener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Multi Window Mode Changed ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( received Info . isIn Multi Window Mode ). isTrue () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Activity Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove On Multi Window Mode Changed Listener ( listener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Multi Window Mode Changed ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠShould Ġstill Ġbe Ġtrue Ġand Ġnot Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( received Info . isIn Multi Window Mode ). isTrue () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" DE PREC ATION ") ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġon Multi Window Mode Changed Remove Re entrant () Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( Activity Scenario . launch ( Component Activity :: class . java )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactivity Ġ= Ġwith Activity Ġ{ Ġthis Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġreceived Info : ĠMulti Window Mode Changed Info ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlistener Ġ= Ġobject Ġ: ĠConsumer < Multi Window Mode Changed Info > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġaccept ( info : ĠMulti Window Mode Changed Info ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreceived Info Ġ= Ġinfo ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . remove On Multi Window Mode Changed Listener ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Activity Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd On Multi Window Mode Changed Listener ( listener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdd Ġa Ġsecond Ġlistener Ġto Ġforce Ġa ĠConcurrent Modification Exception ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġif Ġnot Ġproperly Ġhandled Ġby ĠComponent Activity ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd On Multi Window Mode Changed Listener Ġ{ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Multi Window Mode Changed ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Multi Window Mode Changed ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOnly Ġthe Ġfirst Ġmulti - window Ġmode Ġchange Ġshould Ġbe Ġreceived ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( received Info . isIn Multi Window Mode ). isTrue () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" DE PREC ATION ") ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġon Picture In Picture Mode Changed () Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( Activity Scenario . launch ( Component Activity :: class . java )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġreceived Info : ĠPicture In Picture Mode Changed Info ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlistener Ġ= ĠConsumer < Picture In Picture Mode Changed Info > Ġ{ Ġinfo Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreceived Info Ġ= Ġinfo ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Activity Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd On Picture In Picture Mode Changed Listener ( listener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Picture In Picture Mode Changed ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( received Info . isIn Picture In Picture Mode ). isTrue () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Sdk Suppress ( min Sdk Version Ġ= Ġ 2 6 ) ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġon Picture In Picture Mode Changed With Config () Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( Activity Scenario . launch ( Component Activity :: class . java )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġreceived Info : ĠPicture In Picture Mode Changed Info ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlistener Ġ= ĠConsumer < Picture In Picture Mode Changed Info > Ġ{ Ġinfo Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreceived Info Ġ= Ġinfo ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġnew Config : ĠConfiguration ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Activity Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd On Picture In Picture Mode Changed Listener ( listener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Config Ġ= ĠConfiguration ( resources . configuration ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Picture In Picture Mode Changed ( true , Ġnew Config ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( received Info . isIn Picture In Picture Mode ). isTrue () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( received Info . new Config ). is Same Instance As ( new Config ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" DE PREC ATION ") ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġon Picture In Picture Mode Changed Remove () Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( Activity Scenario . launch ( Component Activity :: class . java )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġreceived Info : ĠPicture In Picture Mode Changed Info ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlistener Ġ= ĠConsumer < Picture In Picture Mode Changed Info > Ġ{ Ġinfo Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreceived Info Ġ= Ġinfo ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Activity Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd On Picture In Picture Mode Changed Listener ( listener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Picture In Picture Mode Changed ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( received Info . isIn Picture In Picture Mode ). isTrue () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Activity Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove On Picture In Picture Mode Changed Listener ( listener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Picture In Picture Mode Changed ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠShould Ġstill Ġbe Ġtrue Ġand Ġnot Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( received Info . isIn Picture In Picture Mode ). isTrue () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" DE PREC ATION ") ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġon Picture In Picture Mode Changed Remove Re entrant () Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( Activity Scenario . launch ( Component Activity :: class . java )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactivity Ġ= Ġwith Activity Ġ{ Ġthis Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġreceived Info : ĠPicture In Picture Mode Changed Info ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlistener Ġ= Ġobject Ġ: ĠConsumer < Picture In Picture Mode Changed Info > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġaccept ( info : ĠPicture In Picture Mode Changed Info ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreceived Info Ġ= Ġinfo ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . remove On Picture In Picture Mode Changed Listener ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Activity Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd On Picture In Picture Mode Changed Listener ( listener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdd Ġa Ġsecond Ġlistener Ġto Ġforce Ġa ĠConcurrent Modification Exception ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġif Ġnot Ġproperly Ġhandled Ġby ĠComponent Activity ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd On Picture In Picture Mode Changed Listener Ġ{ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Picture In Picture Mode Changed ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Picture In Picture Mode Changed ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOnly Ġthe Ġfirst Ġpicture - in - picture Ġmode Ġchange Ġshould Ġbe Ġreceived ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( received Info . isIn Picture In Picture Mode ). isTrue () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠSingle Top Activity Ġ: ĠComponent Activity () Ġ{ ĊĠĠĠ Ġpublic Ġoverride Ġfun Ġon New Intent ( intent : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on New Intent ( intent ) ĊĠĠĠ Ġ} Ċ } Ċ