/* Ċ MIT ĠLicense Ċ Ċ Copyright Ġ( c ) Ġ 2 0 1 7 Ġ- Ġ 2 0 2 1 ĠPo ĠCh eng Ċ Ċ Permission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ of Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ in Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ to Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ copies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ furnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ċ The Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ċ copies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ċ THE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ IMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ FITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ AUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ LIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ OUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE Ċ SOFTWARE . Ċ Ġ*/ Ċ Ċ package Ġcom . monkey app . numbers . oc rc apt ure Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroidx . core . app . Activity Compat Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . Surface Holder Ċ import Ġandroid . view . Surface View Ċ import Ġandroid . view . ViewGroup Ċ import Ġcom . google . android . gms . common . images . Size Ċ import Ġcom . monkey app . numbers . app helpers . is Por trait Mode Ċ import Ġjava . io . IOException Ċ Ċ private Ġconst Ġval ĠTAG Ġ= Ġ" Camera Source Preview " Ċ private Ġconst Ġval ĠDEFAULT _ VIEW _ WIDTH Ġ= Ġ 3 2 0 Ċ private Ġconst Ġval ĠDEFAULT _ VIEW _ HEIGHT Ġ= Ġ 2 4 0 Ċ @ Jvm Field Ġval ĠDEFAULT _ VIEW _ SIZE Ġ= ĠSize ( DEFAULT _ VIEW _ WIDTH , ĠDEFAULT _ VIEW _ HEIGHT ) Ċ Ċ class ĠCamera Source Preview Ġ@ Jvm Over loads Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ? Ġ= Ġnull , Ġdef Style Attr : ĠInt Ġ= Ġ 0 ) ĊĠĠĠ Ġ: ĠViewGroup ( context , Ġattrs , Ġdef Style Attr ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġsurface View Ġ= ĠSurface View ( context ) ĊĊĠĠĠ Ġprivate Ġvar Ġcamera Source : ĠCamera Source ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġis Surface Available : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġis Start Requested : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġsurface View . holder . add Callback ( object : ĠSurface Holder . Callback Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġsurface Created ( holder : ĠSurface Holder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Surface Available Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart If Ready () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġsurface Destroyed ( holder : ĠSurface Holder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Surface Available Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġsurface Changed ( holder : ĠSurface Holder , Ġformat : ĠInt , Ġwidth : ĠInt , Ġheight : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġadd View ( surface View ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Camera Source (_ camera Source : ĠCamera Source ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(_ camera Source Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcamera Source Ġ= Ġ_ camera Source ĊĠĠĠĠĠĠĠ Ġis Start Requested Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġstart If Ready () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Missing Permission ") ĊĠĠĠ Ġfun Ġstart If Ready () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpermissions Ġ= ĠActivity Compat . check Self Permission ( context , ĠManifest . permission . CAMERA ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( permissions Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Start Requested Ġand Ġis Surface Available ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcamera Source !!. start ( surface View . holder ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Start Requested Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" Failed Ġto Ġset Camera Source Ġcamera Ġdue Ġto ĠIOException ") ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠSecurity Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" Failed Ġto Ġset Camera Source Ġcamera Ġdue Ġto ĠSecurity Exception ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Layout ( changed : ĠBoolean , Ġleft : ĠInt , Ġtop : ĠInt , Ġright : ĠInt , Ġbottom : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġcamera Source ?. preview Size Ġ?: ĠDEFAULT _ VIEW _ SIZE ĊĊĠĠĠĠĠĠĠ Ġvar Ġpreview Width Ġ= Ġsize . width ĊĠĠĠĠĠĠĠ Ġvar Ġpreview Height Ġ= Ġsize . height ĊĊĠĠĠĠĠĠĠ Ġif Ġ( is Por trait Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtmp Ġ= Ġpreview Width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreview Width Ġ= Ġpreview Height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreview Height Ġ= Ġtmp ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġview Width Ġ= Ġright Ġ- Ġleft ĊĠĠĠĠĠĠĠ Ġval Ġview Height Ġ= Ġbottom Ġ- Ġtop ĊĊĠĠĠĠĠĠĠ Ġval Ġwidth Ratio Ġ= Ġview Width . toFloat () Ġ/ Ġpreview Width . toFloat () ĊĠĠĠĠĠĠĠ Ġval Ġheight Ratio Ġ= Ġview Height . toFloat () Ġ/ Ġpreview Height . toFloat () ĊĊĠĠĠĠĠĠĠ Ġval Ġchild Width : ĠInt ĊĠĠĠĠĠĠĠ Ġval Ġchild Height : ĠInt ĊĠĠĠĠĠĠĠ Ġval Ġchild X Offset : ĠInt ĊĠĠĠĠĠĠĠ Ġval Ġchild Y Offset : ĠInt ĊĊĠĠĠĠĠĠĠ Ġif Ġ( width Ratio Ġ> Ġheight Ratio ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchild Width Ġ= Ġview Width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchild Height = Ġ( preview Height Ġ* Ġwidth Ratio ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchild X Offset Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchild Y Offset Ġ= Ġ( child Height Ġ- Ġview Height ) Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchild Width Ġ= Ġ( preview Width Ġ* Ġheight Ratio ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchild Height Ġ= Ġview Height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchild X Offset Ġ= Ġ( child Width Ġ- Ġview Width ) Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchild Y Offset Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġchild Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Child At ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. layout (- 1 Ġ* Ġchild X Offset , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- 1 Ġ* Ġchild Y Offset , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild Width Ġ- Ġchild X Offset , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild Height Ġ- Ġchild Y Offset ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġstart If Ready () ĊĠĠĠ Ġ} Ċ } Ċ