package Ġcom . mal in sk iy . mar athon . android . executor . listeners . pull Ċ Ċ import Ġcom . mal in sk iy . mar athon . android . Android Component Info Ċ import Ġcom . mal in sk iy . mar athon . android . Android Device Ċ import Ġcom . mal in sk iy . mar athon . android . executor . listeners . Test Run Listener Ċ import Ġcom . mal in sk iy . mar athon . device . Device Pool Id Ċ import Ġcom . mal in sk iy . mar athon . device . to DeviceInfo Ċ import Ġcom . mal in sk iy . mar athon . execution . Filtering Configuration Ċ import Ġcom . mal in sk iy . mar athon . execution . matches Ċ import Ġcom . mal in sk iy . mar athon . log . Mar athon Logging Ċ import Ġcom . mal in sk iy . mar athon . test . Test Ċ import Ġcom . mal in sk iy . mar athon . test . Test Batch Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . Deferred Ċ import Ġkotlinx . coroutines . async Ċ import Ġjava . io . File Ċ import Ġjava . nio . file . Files . create Directories Ċ import Ġjava . nio . file . Paths Ċ import Ġkotlin . system . measure Time Millis Ċ Ċ class ĠPull Screenshot Test Run Listener ( ĊĠĠĠ Ġprivate Ġval Ġdevice : ĠAndroid Device , ĊĠĠĠ Ġprivate Ġval Ġdevice Pool Id : ĠDevice Pool Id , ĊĠĠĠ Ġprivate Ġval Ġoutput Dir : ĠFile , ĊĠĠĠ Ġprivate Ġval Ġtest Batch : ĠTest Batch , ĊĠĠĠ Ġprivate Ġval Ġpull Screenshot Filter Configuration : ĠFiltering Configuration , ĊĠĠĠ Ġprivate Ġval Ġcoroutine Scope : ĠCor outine Scope Ċ ) Ġ: ĠTest Run Listener Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġlogger Ġ= ĠMar athon Logging . logger (" Pull Screenshot ") ĊĊĠĠĠ Ġprivate Ġvar Ġscreenshot Deferred : ĠDeferred < Unit >? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġtest Run Ended ( elapsed Time : ĠLong , Ġrun Metrics : ĠMap < String , ĠString >) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . test Run Ended ( elapsed Time , Ġrun Metrics ) ĊĊĠĠĠĠĠĠĠ Ġscreenshot Deferred ?. cancel () ĊĠĠĠĠĠĠĠ Ġif Ġ( should Run Pull Screenshot ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscreenshot Deferred Ġ= Ġcoroutine Scope . async Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomponent Info Ġ= Ġtest Batch . component Info Ġas ĠAndroid Component Info ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġapplication Id Ġ= Ġcomponent Info . application Id Ġ?: Ġcomponent Info . test Application Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpull Screenshots ( application Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove Screenshots ( application Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshould Run Pull Screenshot (): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ Ġtest Batch . tests . any Ġ{ Ġtest From Batch Ġ-> Ġtest From Batch . match Whitelist () Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠTest . match Whitelist () Ġ= ĊĠĠĠĠĠĠĠ Ġpull Screenshot Filter Configuration . whitelist . any Ġ{ Ġfilter Ġ-> Ġfilter . matches ( this ) Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpull Screenshots ( application Id : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdevice Info Ġ= Ġdevice . to DeviceInfo () ĊĊĠĠĠĠĠĠĠ Ġval Ġoutput Directory Ġ= ĠPaths . get ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Dir . absolute Path , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOUTPUT _ FOLDER _ NAME , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdevice Pool Id . name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdevice Info . serial Number , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest Batch . id ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġremote FilePath Ġ= Ġdevice . file Manager . get Screenshots Dir ( application Id ) ĊĠĠĠĠĠĠĠ Ġval Ġoutput Path Ġ= Ġoutput Directory . to File () ĊĊĠĠĠĠĠĠĠ Ġval Ġmillis Ġ= Ġmeasure Time Millis Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Directories ( output Directory ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdevice . file Manager . pull From Files Dir ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapplication Id Ġ= Ġapplication Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremote FilePath Ġ= Ġremote FilePath , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocal Dir Ġ= Ġoutput Path , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile Match Ġ= ĠlistOf (" metadata . json ", Ġ" metadata . xml ", Ġ"*. png ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlogger . trace Ġ{ Ġ" Pull ing Ġscreenshots Ġfinished Ġin Ġ${ millis } ms Ġfrom Ġ$ remote FilePath Ġto Ġ$ output Path " Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġremove Screenshots ( application Id : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġremote FilePath Ġ= Ġdevice . file Manager . get Screenshots Dir ( application Id ) ĊĠĠĠĠĠĠĠ Ġval Ġmillis Ġ= Ġmeasure Time Millis Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdevice . file Manager . remove From Files Dir ( application Id , Ġremote FilePath ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlogger . trace Ġ{ Ġ" Removed Ġfiles Ġin Ġ${ millis } ms Ġfrom Ġ$ remote FilePath " Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠOUTPUT _ FOLDER _ NAME Ġ= Ġ" ui - screenshot " ĊĠĠĠ Ġ} Ċ } Ċ