package Ġcom . m ichael c arr ano . detect ived roid . domain Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroidx . annotation . Visible ForTesting Ċ import Ġcom . m ichael c arr ano . detect ived roid . data . Library Repository Ċ import Ġcom . m ichael c arr ano . detect ived roid . data . model . Library Entity Ċ import Ġcom . m ichael c arr ano . detect ived roid . data . model . Library NotFound Entity Ċ import Ġcom . m ichael c arr ano . detect ived roid . presentation . model . Library Mapper Ċ import Ġcom . m ichael c arr ano . detect ived roid . presentation . model . Library Ui Model Ċ import Ġio . reactivex . Observable . from Iterable Ċ import Ġio . reactivex . Single Ċ import Ġjavax . inject . Inject Ċ Ċ // ĠTODO : ĠCache Ġscan Ġresults Ċ class ĠScan App UseCase Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġcontext : ĠContext , ĊĠĠĠ Ġprivate Ġval Ġrepo : ĠLibrary Repository , ĊĠĠĠ Ġprivate Ġval Ġmapper : ĠLibrary Mapper Ċ ) Ġ{ ĊĊĠĠĠ Ġfun Ġscan App ( packageName : ĠString ): ĠSingle < List < Library Ui Model >> Ġ= ĊĠĠĠĠĠĠĠ Ġrepo . get Libraries () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Observable Ġ{ Ġfrom Iterable ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġlibrary Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdetect Library ( packageName , Ġlibrary ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit Ġ!= ĠLibrary NotFound Entity Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġmapper . map To Ui Model ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĊĠĠĠ Ġ@ Visible ForTesting ( otherwise Ġ= ĠVis ible ForTesting . PRIVATE ) ĊĠĠĠ Ġfun Ġdetect Library ( ĊĠĠĠĠĠĠĠ ĠpackageName : ĠString , ĊĠĠĠĠĠĠĠ Ġlibrary : ĠLibrary Entity ĊĠĠĠ Ġ): ĠLibrary Entity Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpackage Context Ġ= Ġcontext . create Package Context ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠpackageName , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContext . CONTEXT _ INCLUDE _ CODE Ġor ĠContext . CONTEXT _ IGNORE _ SECURITY ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġdoes Library Exist : ĠClass < *> ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdoes Library Exist Ġ= ĠClass . forName ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlibrary . class Path , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpackage Context . class Loader ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠLibrary Ġnot Ġfound Ġin Ġthe Ġapp . ĠNo Ġneed Ġto Ġlog Ġexception Ġto ĠTim ber . ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġdoes Library Exist ?. let Ġ{ Ġlibrary Ġ} Ġ?: Ġrun Ġ{ ĠLibrary NotFound Entity Ġ} ĊĠĠĠ Ġ} Ċ } Ċ