/* Ċ Ġ* ĠCopyright Ġ 2 0 1 8 Ġ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 . recyclerview . widget Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Frame Layout Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . test . ext . junit . runners . Android JUnit 4 Ċ import Ġandroidx . test . filters . Small Test Ċ import Ġandroidx . test . rule . Activity Test Rule Ċ import Ġorg . junit . Assert . assertEquals Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ Ċ @ RunWith ( Android JUnit 4 :: class ) Ċ @ Small Test Ċ class ĠRecyclerView With Transitions Test Ġ{ ĊĊĠĠĠ Ġ@ Rule ĊĠĠĠ Ġ@ Jvm Field ĊĠĠĠ Ġval Ġactivity Rule Ġ= ĠActivity Test Rule ( Test Activity :: class . java ) ĊĠĠĠ Ġval Ġactivity : ĠTest Activity Ġget () Ġ= Ġ( activity Rule . activity Ġas ĠTest Activity ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġignore Cached View While It Is Attached To Overlay () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtest Adapter Ġ= ĠTest Adapter () ĊĠĠĠĠĠĠĠ Ġval Ġre cyclerView Ġ= ĠWr apped RecyclerView ( activity ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager Ġ= ĠLinearLayoutManager ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= Ġtest Adapter ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġactivity Rule . run On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . container . addView ( re cyclerView ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġhelper Ġfun Ġto Ġchange Ġitem Count , Ġwait Ġfor Ġit Ġto Ġbe Ġapplied Ġand Ġvalidate Ġchild Count ĊĠĠĠĠĠĠĠ Ġval Ġchange ItemCount Ġ= Ġ{ Ġitems Count : ĠInt Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Rule . run On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest Adapter . item Count Ġ= Ġitems Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest Adapter . notify DataSet Changed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView . wait Until Layout () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( test Adapter . item Count , Ġre cyclerView . child Count ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġchange ItemCount ( 2 ) ĊĠĠĠĠĠĠĠ Ġ// Ġsave Ġcurrent Ġchildren Ġof ĠR V . Ġthere Ġare Ġ 2 Ġitems ĊĠĠĠĠĠĠĠ Ġval Ġsaved Children Ġ= ĠList ( re cyclerView . child Count ) Ġ{ Ġre cyclerView . getChild At ( it ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġchange ItemCount ( 1 ) ĊĠĠĠĠĠĠĠ Ġ// Ġnow Ġthere Ġis Ġonly Ġone Ġitem . Ġso Ġone Ġof Ġsaved Ġviews Ġis Ġfree Ġ( without Ġparent ) ĊĠĠĠĠĠĠĠ Ġval Ġview For Overlay Ġ= Ġsaved Children . first Ġ{ Ġit . parent Ġ== Ġnull Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġlet 's Ġadd Ġit Ġto Ġanother Ġlayout Ġ( overlay ) ĊĠĠĠĠĠĠĠ Ġval Ġoverlay Ġ= ĠFrame Layout ( activity ). apply Ġ{ Ġadd View ( view For Overlay ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġchange ItemCount ( 2 ) ĊĠĠĠĠĠĠĠ Ġ// Ġit Ġwill Ġcrash Ġif Ġtry Ġto Ġreuse Ġview For Overlay . Ġso Ġit Ġwon 't Ġand Ġcreate Ġa Ġnew Ġview Ġinstead ĊĊĠĠĠĠĠĠĠ Ġ// Ġlets Ġfree Ġour Ġview For Overlay Ġ( like Ġwhen Ġtransition Ġfinished ) ĊĠĠĠĠĠĠĠ Ġoverlay . remove View ( view For Overlay ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġrequest Ġthird Ġview Ġand Ġvalidate Ġview For Overlay Ġis Ġused Ġinstead Ġof Ġcreating Ġa Ġnew Ġone ĊĠĠĠĠĠĠĠ Ġchange ItemCount ( 3 ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( re cyclerView , Ġview For Overlay . parent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠTransition Holder ( context : ĠContext ) Ġ: ĠRecyclerView . ViewHolder ( TextView ( context )) ĊĊĠĠĠ Ġprivate Ġclass ĠTest Adapter Ġ: ĠRecyclerView . Adapter < Transition Holder >() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġinternal Ġvar Ġitem Count Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠTransition Holder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠTransition Holder ( parent . context ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠTransition Holder , Ġposition : ĠInt ) Ġ{} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetItem Count () Ġ= Ġitem Count ĊĠĠĠ Ġ} Ċ } Ċ