/* Ċ Ġ* Ġ ĠCopyright Ġ 2 0 1 9 ĠArc us ĠProject . Ċ Ġ* Ċ Ġ* Ġ ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġ Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* Ġ ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* Ġ ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġ Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* Ġ ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* Ġ ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġ Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġar cus . presentation . camera Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . res . Configuration Ċ import Ġandroid . graphics . Image Format Ċ import Ġandroid . graphics . Point Ċ import Ġandroid . hardware . Camera Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Environment Ċ import Ġandroid . view . Display Ċ import Ġandroid . view . Surface Ċ import Ġar cus . cor nea . presenter . K Base Presenter Ċ import Ġjava . io . File Ċ import Ġjava . io . FileNotFoundException Ċ import Ġjava . io . File OutputStream Ċ import Ġjava . io . IOException Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . util . Collections Ċ import Ġjava . util . Date Ċ import Ġorg . slf 4 j . LoggerFactory Ċ Ċ @ Suppress (" DE PREC ATION ") Ċ class ĠCamera 1 Presenter Impl ( ĊĠĠĠ Ġval Ġactivity : ĠActivity , ĊĠĠĠ Ġprivate Ġval Ġtexture View : ĠAuto Fit Texture View Ċ ) Ġ: ĠCamera Presenter , ĠK Base Presenter < Camera View >() Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġcamera Rotate Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġcamera Facing Ġ= ĠCAM ERA _ F ACING _ BACK ĊĠĠĠ Ġprivate Ġvar Ġflash State Ġ= ĠFL ASH _ OFF ĊĠĠĠ Ġprivate Ġvar Ġcamera : ĠCamera ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġparams : ĠCamera . Parameters ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġorientation : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġdefault Display : ĠDisplay ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġorientation Ġ= Ġactivity . resources . configuration . orientation ĊĠĠĠĠĠĠĠ Ġdefault Display Ġ= Ġactivity . window Manager . default Display ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġpicture Callback Ġ= ĠCamera . Picture Callback Ġ{ Ġdata , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġpicture File Ġ= Ġget Output Media File () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( picture File Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug (" Error Ġcreating Ġmedia Ġfile , Ġcheck Ġstorage Ġpermissions .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ Picture Callback ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFileOutputStream ( picture File ). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . write ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġonly If View Ġ{ Ġview Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . on Picture Save Success ( picture File ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠFileNotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug (" File Ġnot Ġfound : Ġ" Ġ+ Ġe . message Ġ+ Ġ"\ n \ n " Ġ+ Ġpicture File . toString ()) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug (" Error Ġaccessing Ġfile : Ġ" Ġ+ Ġe . message Ġ+ Ġ"\ n \ n " Ġ+ Ġpicture File . toString ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġopen Camera () Ġ{ ĊĠĠĠĠĠĠĠ Ġsynchronized ( CAMERA _ LOCK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcamera ?. let Ġ{ Ġcam Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcam . release () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcamera Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" Failed Ġto Ġrelease Ġcamera : Ġ{}", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcamera Facing Id Ġ= Ġget Camera Id () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcamera Ġ= ĠCamera . open ( camera Facing Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams Ġ= Ġcamera ?. parameters ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Flash State () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Camera Preview ( texture View . width , Ġtexture View . height ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Camera Orientation () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpicture Size Ġ= ĠCollections . max ( params ?. supported Picture Sizes , ĠCompare Sizes By Area ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams ?. set Picture Size ( picture Size . width , Ġpicture Size . height ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcamera ?. parameters Ġ= Ġparams ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġonly If View Ġ{ Ġview Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . on Camera Failed To Open () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcamera ?. set Preview Texture ( texture View . surface Texture ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcamera ?. start Preview () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error ( e . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġonly If View Ġ{ Ġview Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . on Failed To Start Preview () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrelease Camera () Ġ{ ĊĠĠĠĠĠĠĠ Ġsynchronized ( CAMERA _ LOCK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcamera ?. set Preview Callback ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcamera ?. stop Preview () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcamera ?. release () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error ( e . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġonly If View Ġ{ Ġview Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . on Camera Failed To Release () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġtoggle Camera () Ġ{ ĊĠĠĠĠĠĠĠ Ġsynchronized ( CAMERA _ LOCK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrelease Camera () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġopen Camera () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġflip Camera () Ġ{ ĊĠĠĠĠĠĠĠ Ġcamera Facing Ġ= Ġif Ġ( camera Facing Ġ== ĠCAM ERA _ F ACING _ BACK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCAM ERA _ F ACING _ FRONT ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCAM ERA _ F ACING _ BACK ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrelease Camera () ĊĠĠĠĠĠĠĠ Ġopen Camera () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġtake Picture () Ġ{ ĊĠĠĠĠĠĠĠ Ġparams ?. flash Mode Ġ= Ġset Flash State () ĊĠĠĠĠĠĠĠ Ġparams ?. picture Format Ġ= ĠImage Format . JPEG ĊĠĠĠĠĠĠĠ Ġparams ?. jpeg Quality Ġ= Ġ 8 5 ĊĠĠĠĠĠĠĠ Ġcamera ?. parameters Ġ= Ġparams ĊĠĠĠĠĠĠĠ Ġcamera ?. take Picture ( null , Ġnull , Ġpicture Callback ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġret ake Picture () Ġ{ ĊĠĠĠĠĠĠĠ Ġcamera ?. start Preview () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġtoggle Flash State () Ġ{ ĊĠĠĠĠĠĠĠ Ġflash State Ġ= Ġif Ġ( flash State Ġ== ĠFL ASH _ ON ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFL ASH _ OFF ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFL ASH _ ON ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġonly If View Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Flash Toggle d ( flash State ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Flash State (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( flash State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFL ASH _ ON Ġ-> ĠCamera . Parameters . FLASH _ MODE _ ON ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠCamera . Parameters . FLASH _ MODE _ OFF ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠCreate Ġa ĠFile Ġfor Ġsaving Ġan Ġimage Ġor Ġvideo Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġget Output Media File (): ĠFile ? Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠCheck Ġthat Ġthe ĠSD Card Ġis Ġmounted ĊĠĠĠĠĠĠĠ Ġif Ġ( Environment . MEDIA _ MOUNT ED Ġ== ĠEnvironment . get External Storage State ()) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSpecify Ġthe Ġdirectory ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmedia Storage Dir Ġ= ĠFile ( Environment . get External Storage Directory (), Ġ" Arc us ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCreate Ġthe Ġstorage Ġdirectory Ġif Ġit Ġdoes Ġnot Ġexist ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! media Storage Dir . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! media Storage Dir . mkdir s ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug (" Failed Ġto Ġcreate Ġdirectory Ġ{} Ġ: Ġ$ media Storage Dir ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCreate Ġa Ġmedia Ġfile Ġname ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtime Stamp Ġ= ĠSimpleDateFormat (" yyyy MM dd _ HH mm ss "). format ( Date ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠFile ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Storage Dir . path Ġ+ ĠFile . separator Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" IMG _" Ġ+ Ġtime Stamp Ġ+ Ġ". jpg " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Camera Id (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( camera Facing Ġ== ĠCAM ERA _ F ACING _ BACK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCamera . Camera Info . CAMERA _ F ACING _ BACK ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCamera . Camera Info . CAMERA _ F ACING _ FRONT ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Camera Preview ( width : ĠInt , Ġheight : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġset Ġauto Focus Ġautomatically ĊĠĠĠĠĠĠĠ Ġparams ?. let Ġ{ Ġparams Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( params . supported Focus Modes . contains ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCamera . Parameters . FOCUS _ MODE _ CONT IN UO US _ VIDEO ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . focus Mode Ġ= ĠCamera . Parameters . FOCUS _ MODE _ CONT IN UO US _ VIDEO ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( params . supported Focus Modes . contains ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCamera . Parameters . FOCUS _ MODE _ CONT IN UO US _ PI CTURE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . focus Mode Ġ= ĠCamera . Parameters . FOCUS _ MODE _ CONT IN UO US _ PI CTURE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdisplay Size Ġ= ĠPoint () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Display . getSize ( display Size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġrotated Preview Width Ġ= Ġwidth ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġrotated Preview Height Ġ= Ġheight ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmax Preview Width Ġ= Ġdisplay Size . x ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmax Preview Height Ġ= Ġdisplay Size . y ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( orientation Ġ== ĠConfiguration . OR IENTATION _ LAND SC APE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrotated Preview Width Ġ= Ġheight ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrotated Preview Height Ġ= Ġwidth ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Preview Width Ġ= Ġdisplay Size . y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Preview Height Ġ= Ġdisplay Size . x ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( max Preview Width Ġ> ĠMAX _ PRE VIEW _ WIDTH ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Preview Width Ġ= ĠMAX _ PRE VIEW _ WIDTH ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( max Preview Height Ġ> ĠMAX _ PRE VIEW _ HEIGHT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Preview Height Ġ= ĠMAX _ PRE VIEW _ HEIGHT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsize List Ġ= Ġparams . supported Picture Sizes ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpreview Size Ġ= Ġchoose Opt imal Size ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsize List , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrotated Preview Width , Ġrotated Preview Height , Ġmax Preview Width , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Preview Height , ĠCollections . max ( size List , ĠCompare Sizes By Area ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSet Ġthe Ġaspect Ġratio Ġof ĠTexture View Ġto Ġthe Ġsize Ġof Ġpreview . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( orientation Ġ== ĠConfiguration . OR IENTATION _ LAND SC APE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtexture View . set AspectRatio ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreview Size . width , Ġpreview Size . height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtexture View . set AspectRatio ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreview Size . height , Ġpreview Size . width ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . set Preview Size ( preview Size . width , preview Size . height ); ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Camera Orientation () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcamera Info Ġ= ĠCamera . Camera Info () ĊĠĠĠĠĠĠĠ Ġval Ġcamera Facing Id Ġ= Ġget Camera Id () ĊĠĠĠĠĠĠĠ ĠCamera . get Camera Info ( camera Facing Id , Ġcamera Info ) ĊĠĠĠĠĠĠĠ Ġval Ġrotation Ġ= Ġdefault Display . rotation ĊĊĠĠĠĠĠĠĠ Ġvar Ġdegrees Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhen Ġ( rotation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSurface . ROT ATION _ 0 Ġ-> Ġdegrees Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSurface . ROT ATION _ 9 0 Ġ-> Ġdegrees Ġ= Ġ 9 0 ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSurface . ROT ATION _ 1 8 0 Ġ-> Ġdegrees Ġ= Ġ 1 8 0 ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSurface . ROT ATION _ 2 7 0 Ġ-> Ġdegrees Ġ= Ġ 2 7 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( camera Facing Ġ== ĠCAM ERA _ F ACING _ FRONT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcamera Rotate Ġ= Ġ( camera Info . orientation Ġ+ Ġdegrees ) Ġ% Ġ 3 6 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcamera Rotate Ġ= Ġ( 3 6 0 Ġ- Ġcamera Rotate ) Ġ% Ġ 3 6 0 Ġ// Ġcomp ens ate Ġthe Ġmirror ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ġ// Ġback - facing ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcamera Rotate Ġ= Ġ( camera Info . orientation Ġ- Ġdegrees Ġ+ Ġ 3 6 0 ) Ġ% Ġ 3 6 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġparams ?. setRotation ( camera Rotate ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ(" N exus Ġ 5 X " Ġ== ĠBuild . MODEL ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams ?. setRotation ( 2 7 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcamera ?. set Display Orientation ( camera Rotate ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGiven Ġ` choices ` Ġof Ġ` Size ` s Ġsupported Ġby Ġa Ġcamera , Ġchoose Ġthe Ġsmallest Ġone Ġthat ĊĠĠĠĠ Ġ* Ġis Ġat Ġleast Ġas Ġlarge Ġas Ġthe Ġrespective Ġtexture Ġview Ġsize , Ġand Ġthat Ġis Ġat Ġmost Ġas Ġlarge Ġas Ġthe ĊĠĠĠĠ Ġ* Ġrespective Ġmax Ġsize , Ġand Ġwhose Ġaspect Ġratio Ġmatches Ġwith Ġthe Ġspecified Ġvalue . ĠIf Ġsuch Ġsize ĊĠĠĠĠ Ġ* Ġdoesn 't Ġexist , Ġchoose Ġthe Ġlargest Ġone Ġthat Ġis Ġat Ġmost Ġas Ġlarge Ġas Ġthe Ġrespective Ġmax Ġsize , ĊĠĠĠĠ Ġ* Ġand Ġwhose Ġaspect Ġratio Ġmatches Ġwith Ġthe Ġspecified Ġvalue . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġchoices ĠThe Ġlist Ġof Ġsizes Ġthat Ġthe Ġcamera Ġsupports Ġfor Ġthe Ġintended Ġoutput ĊĠĠĠĠ Ġ* Ġclass ĊĠĠĠĠ Ġ* Ġ@ param Ġtexture View Width ĠThe Ġwidth Ġof Ġthe Ġtexture Ġview Ġrelative Ġto Ġsensor Ġcoordinate ĊĠĠĠĠ Ġ* Ġ@ param Ġtexture View Height ĠThe Ġheight Ġof Ġthe Ġtexture Ġview Ġrelative Ġto Ġsensor Ġcoordinate ĊĠĠĠĠ Ġ* Ġ@ param ĠmaxWidth ĠThe Ġmaximum Ġwidth Ġthat Ġcan Ġbe Ġchosen ĊĠĠĠĠ Ġ* Ġ@ param ĠmaxHeight ĠThe Ġmaximum Ġheight Ġthat Ġcan Ġbe Ġchosen ĊĠĠĠĠ Ġ* Ġ@ param Ġaspect Ratio ĠThe Ġaspect Ġratio ĊĠĠĠĠ Ġ* Ġ@ return ĠThe Ġoptimal Ġ` Size `, Ġor Ġan Ġarbitrary Ġone Ġif Ġnone Ġwere Ġbig Ġenough ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġchoose Opt imal Size ( ĊĠĠĠĠĠĠĠ Ġchoices : ĠList < Camera . Size >, ĊĠĠĠĠĠĠĠ Ġtexture View Width : ĠInt , ĊĠĠĠĠĠĠĠ Ġtexture View Height : ĠInt , ĊĠĠĠĠĠĠĠ ĠmaxWidth : ĠInt , ĊĠĠĠĠĠĠĠ ĠmaxHeight : ĠInt , ĊĠĠĠĠĠĠĠ Ġaspect Ratio : ĠCamera . Size ĊĠĠĠ Ġ): ĠCamera . Size Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// ĠCollect Ġthe Ġsupported Ġresolution s Ġthat Ġare Ġat Ġleast Ġas Ġbig Ġas Ġthe Ġpreview ĠSurface ĊĠĠĠĠĠĠĠ Ġval Ġbig En ough Ġ= ĠArrayList < Camera . Size >() ĊĠĠĠĠĠĠĠ Ġ// ĠCollect Ġthe Ġsupported Ġresolution s Ġthat Ġare Ġsmaller Ġthan Ġthe Ġpreview ĠSurface ĊĠĠĠĠĠĠĠ Ġval Ġnot Big En ough Ġ= ĠArrayList < Camera . Size >() ĊĠĠĠĠĠĠĠ Ġval Ġw Ġ= Ġaspect Ratio . width ĊĠĠĠĠĠĠĠ Ġval Ġh Ġ= Ġaspect Ratio . height ĊĠĠĠĠĠĠĠ Ġfor Ġ( option Ġin Ġchoices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( option . width Ġ<= ĠmaxWidth Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoption . height Ġ<= ĠmaxHeight Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoption . height Ġ== Ġoption . width Ġ* Ġh Ġ/ Ġw ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( option . width Ġ>= Ġtexture View Width Ġ&& Ġoption . height Ġ>= Ġtexture View Height ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbig En ough . add ( option ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnot Big En ough . add ( option ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠPick Ġthe Ġsmallest Ġof Ġthose Ġbig Ġenough . ĠIf Ġthere Ġis Ġno Ġone Ġbig Ġenough , Ġpick Ġthe ĊĠĠĠĠĠĠĠ Ġ// Ġlargest Ġof Ġthose Ġnot Ġbig Ġenough . ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbig En ough . size Ġ> Ġ 0 Ġ-> ĠCollections . min ( big En ough , ĠCompare Sizes By Area ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnot Big En ough . size Ġ> Ġ 0 Ġ-> ĠCollections . max ( not Big En ough , ĠCompare Sizes By Area ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" Couldn 't Ġfind Ġany Ġsuitable Ġpreview Ġsize ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchoices [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠCAM ERA _ LOCK Ġ= ĠAny () ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlogger Ġ= ĠLoggerFactory . getLogger ( Camera 1 Presenter Impl :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠComp ares Ġtwo Ġ` Size ` s Ġbased Ġon Ġtheir Ġareas . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinternal Ġclass ĠCompare Sizes By Area Ġ: ĠComparator < Camera . Size > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcompare ( lhs : ĠCamera . Size , Ġrhs : ĠCamera . Size ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWe Ġcast Ġhere Ġto Ġensure Ġthe Ġmultip lications Ġwon 't Ġoverflow ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġjava . lang . Long . sign um ( lhs . width . to Long () Ġ* Ġlhs . height Ġ- Ġrhs . width . to Long () Ġ* Ġrhs . height ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ