package Ġcom . content . mer cy . camera Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . os . Handler Ċ import Ġandroid . os . Handler Thread Ċ import Ġandroid . util . Log Ċ import Ġandroid . util . Size Ċ import Ġandroidx . camera . core .* Ċ import Ġcom . content . mer cy . camera . util . Auto Fit Preview Builder Ċ import Ġcom . content . mer cy . camera . util . Vision Analyzer Ċ import Ġcom . content . mer cy . tensorflow . Classifier Ċ import Ġjava . io . File Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġr apse alk Ġon Ġ 2 0 1 9 - 1 1 - 0 2 .. Ċ Ġ*/ Ċ class ĠCamera Presenter ( private Ġval Ġview : ĠCamera Contract . View ) Ġ: ĠCamera Contract . Presenter , ĊĠĠĠ ĠVision Analyzer . On Image Process Listener Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġm Res o ult ion Ġ= ĠSize ( 0 , Ġ 0 ) ĊĊĠĠĠ Ġ// private Ġvar Ġm Seconds Ġ= Ġ 0 ĊĠĠĠ Ġ// private Ġvar Ġm Timer Handler Ġ= ĠHandler () ĊĠĠĠ Ġ// private Ġlateinit Ġvar Ġm Ticker : ĠRunnable ĊĊĠĠĠ Ġprivate Ġvar Ġm Image Capture : ĠImage Capture ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Video Capture : ĠVideo Capture ? Ġ= Ġnull ĊĊĠĠĠ Ġinit Ġ{ Ġstart () Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstart () Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠ Ġm Ticker Ġ= ĠRunnable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . update Timer ( m Seconds ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Seconds Ġ+= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Timer Handler . post Delayed ( m Ticker , Ġ 1 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Resolution (): ĠSize Ġ= Ġm Res o ult ion ĊĊĠĠĠ Ġoverride Ġfun Ġset Resolution ( resolution : ĠSize ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Res o ult ion Ġ= Ġresolution ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbuild Preview UseCase (): ĠPreview Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconfig Ġ= ĠPreview Config . Builder (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Lens Facing ( Camera X . Lens Facing . FRONT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Target Rotation ( view . getView Finder (). display . rotation ) ĊĠĠĠĠĠĠĠ Ġ}. build () ĊĠĠĠĠĠĠĠ Ġreturn ĠPreview ( config ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset On Preview Output Update Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . getView Finder (). surface Texture Ġ= Ġit . surface Texture ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . update Transform () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbuild Auto Fit Preview UseCase (): ĠPreview Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconfig Ġ= ĠPreview Config . Builder (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Lens Facing ( Camera X . Lens Facing . FRONT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Target Rotation ( view . getView Finder (). display . rotation ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Target Resolution ( m Res o ult ion ) ĊĠĠĠĠĠĠĠ Ġ}. build () ĊĠĠĠĠĠĠĠ Ġreturn ĠAuto Fit Preview Builder . build ( config , Ġview . getView Finder ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbuild Image Analysis UseCase (): ĠImage Analysis Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconfig Ġ= ĠImage Analysis Config . Builder (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Lens Facing ( Camera X . Lens Facing . FRONT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Target Rotation ( view . getView Finder (). display . rotation ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Target Resolution ( m Res o ult ion ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanalyzer Thread Ġ= ĠHandler Thread (" Vision Analysis "). apply Ġ{ Ġstart () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Callback Handler ( Handler ( analyzer Thread . lo oper )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġë§¤ ĠíĶĦ ëłĪ ìŀĦ ĠëĮĢ ìĭł Ġë§¤ ìĪ ľ ê°Ħ Ġê°Ģ ìŀ¥ Ġìµľ ê·¼ ĠíĶĦ ëłĪ ìŀĦ ë§Į ìĿĦ Ġê°Ģ ìł¸ ìĻĢ Ġë¶Ħ ìĦĿ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Image Reader Mode ( Image Analysis . Image Reader Mode . AC Q UIRE _ LATE ST _ IMAGE ) ĊĠĠĠĠĠĠĠ Ġ}. build () ĊĠĠĠĠĠĠĠ Ġreturn ĠImage Analysis ( config ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanalyzer Ġ= ĠVision Analyzer ( view . getActivity ()). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Image Process Listener Ġ= Ġthis @ Camera Presenter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbuild Image Capture UseCase (): ĠImage Capture Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconfig Ġ= ĠImage Capture Config . Builder (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Lens Facing ( Camera X . Lens Facing . FRONT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Target Rotation ( view . getView Finder (). display . rotation ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Target Resolution ( m Res o ult ion ) ĊĠĠĠĠĠĠĠ Ġ}. build () ĊĠĠĠĠĠĠĠ Ġreturn ĠImage Capture ( config ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Image Capture Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠFIXME : Ġì¢ Į ìļ° ëĮĢ ì¹ Ń ĊĠĠĠ Ġ@ Suppress Lint (" Restricted Api ") ĊĠĠĠ Ġoverride Ġfun Ġbuild Video Capture UseCase (): ĠVideo Capture Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconfig Ġ= ĠVideo Capture Config . Builder (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Lens Facing ( Camera X . Lens Facing . FRONT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Target Rotation ( view . getView Finder (). display . rotation ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Target Resolution ( m Res o ult ion ) ĊĠĠĠĠĠĠĠ Ġ}. build () ĊĠĠĠĠĠĠĠ Ġreturn ĠVideo Capture ( config ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Video Capture Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Restricted Api ") ĊĠĠĠ Ġoverride Ġfun Ġstart Record () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ( view . getActivity Context (). external Media Dirs . first (), Ġ" m ${ System . currentTimeMillis ()}. mp 4 ") ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" File : Ġ$ file , ĠPath : Ġ${ file . path }") ĊĠĠĠĠĠĠĠ Ġm Video Capture ?. start Recording ( file , Ġobject Ġ: ĠVideo Capture . On Video Saved Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Video Saved ( file : ĠFile ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" File Ġis Ġsaved : Ġ${ file . absolute Path }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError ( video Capture Error : ĠVideo Capture . Video Capture Error , Ġmessage : ĠString , Ġcause : ĠThrowable ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġvideo Capture Error . toString (), Ġcause ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" Message : Ġ$ message ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ// m Seconds Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġ// m Ticker . run () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Restricted Api ") ĊĠĠĠ Ġoverride Ġfun Ġstop Record () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// m Timer Handler . remove Callbacks And Messages ( null ) ĊĠĠĠĠĠĠĠ Ġm Video Capture ?. stop Recording () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Image Process ( results : ĠList < Classifier . Companion . Recognition >) Ġ{ ĊĠĠĠĠĠĠĠ Ġview . update Graph ( results ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠTAG Ġ= ĠCamera Presenter :: class . java . simple Name ĊĠĠĠ Ġ} Ċ }