package Ġcom . example . sdk . presentation . face Ċ Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . example . core _ ui . presentation . Base ViewModel Ċ import Ġcom . example . sdk . data . model . face . Face Result Ċ import Ġcom . example . sdk . domain . face . inter actor . Detect Face Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġkotlinx . coroutines . flow . Mutable Shared Flow Ċ import Ġkotlinx . coroutines . flow . as Shared Flow Ċ import Ġkotlinx . coroutines . flow . catch Ċ import Ġkotlinx . coroutines . launch Ċ import Ġtim ber . log . Tim ber Ċ import Ġjava . io . File Ċ import Ġjavax . inject . Inject Ċ Ċ /** Ċ Ġ* ĠPerforms Ġphoto Ġanalysis Ġfor Ġface Ġdetection Ċ Ġ* Ċ Ġ* Ġ@ property Ġdetect Face Ġ[ Detect Face ] Ġimplementation Ċ Ġ*/ Ċ internal Ġclass ĠFace Recognition ViewModel Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġdetect Face : ĠDetect Face Ċ ) Ġ: ĠBase ViewModel () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġ_ face Result Ġ= ĠMutable Shared Flow < Face Result >() ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠEmit s Ġ[ Face Result ] Ġwhen Ġthe Ġanalysis Ġis Ġcomplete ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġface Result : ĠFlow < Face Result > Ġ= Ġ_ face Result . as Shared Flow () ĊĊĠĠĠ Ġfun Ġon Got Photo ( file : ĠFile ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdetect Face ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. exec ( file ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. catch Ġ{ Ġt Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( t ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : ĠBetter Ġerror Ġinfo ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ face Result . emit ( Face Result . Failure ( text Ġ= Ġt . message . or Empty ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. collect Ġ{ Ġface Data Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ face Result . emit ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFace Result . Success ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġphoto File Ġ= Ġfile , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġface Data Ġ= Ġface Data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ