package Ġio . github . ga om jun . test cam er ag l preview Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . hardware . Camera Ċ import Ġandroid . media . Audio Manager Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Environment Ċ import Ġandroid . os . Handler Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . KeyEvent Ċ import Ġandroid . view . View Ċ import Ġandroid . view . WindowManager Ċ import Ġandroid . widget . Image Button Ċ import Ġandroid . widget . Toast Ċ import Ġio . github . ga om jun . camera engine . Camera Engine Ċ import Ġio . github . ga om jun . extensions . post Delayed R Ċ import Ġio . github . ga om jun . gl . Camera GL Surface View Ċ import Ġio . github . ga om jun . gl . GL Texture View Ċ import Ġio . github . ga om jun . gl . Off Screen Renderer Ċ import Ġio . github . ga om jun . motion orientation . Motion Orientation Ċ import Ġio . github . ga om jun . motion orientation . Motion Orientation . DEVICE _ OR IENTATION _ LAND SC APE LEFT Ċ import Ġio . github . ga om jun . motion orientation . Motion Orientation . DEVICE _ OR IENTATION _ LAND SC AP ER IGHT Ċ import Ġio . github . ga om jun . motion orientation . Motion Orientation . DEVICE _ OR IENTATION _ POR TRA IT Ċ import Ġio . github . ga om jun . motion orientation . Motion Orientation . DEVICE _ OR IENTATION _ UP SID ED OWN Ċ import Ġjava . io . File Ċ import Ġjava . io . FileNotFoundException Ċ import Ġjava . io . File OutputStream Ċ import Ġjava . io . IOException Ċ Ċ class ĠMainActivity Ġ: ĠActivity (), ĠMotion Orientation . Device Orientation Listener Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġcamera GL Surface View : ĠCamera GL Surface View ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġgl Texture View : ĠGL Texture View ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġcamera Engine : ĠCamera Engine ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġmotion Orientation : ĠMotion Orientation ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĊĠĠĠĠĠĠĠ Ġwindow . add Flags ( WindowManager . LayoutParams . FLAG _ KEEP _ SCREEN _ ON ) ĊĊĠĠĠĠĠĠĠ Ġvolume Control Stream Ġ= ĠAudio Manager . STREAM _ M US IC ĊĊĠĠĠĠĠĠĠ Ġgl Texture View Ġ= ĠfindViewById ( R . id . gl Texture View ) ĊĊĠĠĠĠĠĠĠ Ġcamera Engine Ġ= ĠCamera Engine . getInstance () ĊĠĠĠĠĠĠĠ Ġcamera Engine !!. context Ġ= Ġthis ĊĊĠĠĠĠĠĠĠ ĠfindViewById < Image Button >( R . id . capture Button ). setOnClickListener Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġrecord Ġaction Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( gl Texture View ?. recording !! ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgl Texture View ?. stop Record ( record Finish Ġ= Ġ:: println ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( application Context , Ġ" stop Ġrecord ", ĠToast . LENGTH _ SHORT ). show () Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcamera Directory Ġ= ĠFile ( Environment . get External Storage Directory (). toString () Ġ+ Ġ"/" Ġ+ ĠEnvironment . DIRECTORY _ DC IM Ġ+ Ġ"/", Ġ" Camera ") Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠcurrentTime String Ġ= ĠSimpleDateFormat (" yyyy MM dd HH mm SS "). format ( Date ()) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmovie Path Ġ= Ġcamera Directory . absolute Path Ġ+ Ġ"/" Ġ+ ĠcurrentTime String Ġ+ Ġ". mp 4 " Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgl Texture View ?. start Record ( movie Path ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( application Context , Ġ" start Ġrecord ", ĠToast . LENGTH _ SHORT ). show () Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcapture Ġaction ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcamera Engine ?. take Picture Ġ{ Ġdata : ĠByteArray , Ġcamera : ĠCamera Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcamera . start Preview () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpicture Size Ġ= Ġcamera . parameters . picture Size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOff Screen Renderer . render ( application Context , Ġdata , Ġpicture Size . width , Ġpicture Size . height ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap : ĠBitmap Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" render Ġfinished ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmatrix Ġ= Ġandroid . graphics . Matrix () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( camera Engine ?. is Front Camera !! ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmatrix . post Scale (- 1 . 0 f , Ġ 1 . 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( Motion Orientation . DEVICE _ OR IENTATION ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDEVICE _ OR IENTATION _ POR TRA IT Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmatrix . post Rotate ( 2 7 0 . 0 F ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDEVICE _ OR IENTATION _ UP SID ED OWN Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmatrix . post Rotate ( 9 0 . 0 F ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDEVICE _ OR IENTATION _ LAND SC AP ER IGHT Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmatrix . post Rotate ( 1 8 0 . 0 F ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDEVICE _ OR IENTATION _ LAND SC APE LEFT Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmatrix . post Rotate ( 2 7 0 . 0 F ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbitmap Fix Ġ= ĠBitmap . create Bitmap ( bitmap , Ġ 0 , Ġ 0 , Ġbitmap . width , Ġbitmap . height , Ġmatrix , Ġtrue ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap . recycle () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġring o Directory Ġ= ĠFile ( Environment . get External Storage Directory (). toString () Ġ+ Ġ"/" Ġ+ ĠEnvironment . DIRECTORY _ DC IM Ġ+ Ġ"/", Ġ" Camera ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsave Bitmap To Album ( bitmap Fix , Ġring o Directory . absolute Path ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġpath ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( application Context , Ġ" save Ġto Ġ" Ġ+ Ġpath , ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĊĠĠĠĠĠĠĠ Ġcamera Engine ?. open Camera ( Camera Engine . CAMERA _ FRONT ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( gl Texture View ?. camera Texture Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcamera Engine ?. start Preview ( gl Texture View ?. camera Texture ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgl Texture View ?. surface Available Callback Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsurface Texture Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcamera Engine ?. start Preview ( surface Texture ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" surface Changed Callback ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġmotion Orientation Ġ= ĠMotion Orientation . init ( this ) ĊĠĠĠĠĠĠĠ Ġmotion Orientation ?. device Orientation Listener Ġ= Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( gl Texture View ?. recording !! ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgl Texture View ?. stop Record () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcamera Engine ?. release Camera () ĊĊĠĠĠĠĠĠĠ Ġmotion Orientation ?. release Sensor () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġpress Back Time Pre : ĠLong Ġ= Ġ 0 ĊĠĠĠ Ġoverride Ġfun Ġon KeyDown ( keyCode : ĠInt , Ġevent : ĠKeyEvent ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( keyCode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠKeyEvent . KEYCODE _ BACK Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" KEYCODE _ BACK ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnow Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( now Ġ- Ġpress Back Time Pre ) Ġ> Ġ 1 0 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpress Back Time Pre Ġ= Ġnow ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( application Context , Ġ" double Ġclick Ġback Ġto Ġexit ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( application Context , Ġ" app Ġexit ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHandler (). post Delayed R ( 1 0 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . finish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . exit ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsuper . on KeyDown ( keyCode , Ġevent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsuper . on KeyDown ( keyCode , Ġevent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Window Focus Changed ( has Focus : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Window Focus Changed ( has Focus ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( has Focus ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwindow . decor View . system Ui Visibility Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView . SYSTEM _ UI _ FLAG _ LAYOUT _ ST ABLE Ġor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView . SYSTEM _ UI _ FLAG _ LAYOUT _ HIDE _ NAV IG ATION Ġor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView . SYSTEM _ UI _ FLAG _ LAYOUT _ FULL SCREEN Ġor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView . SYSTEM _ UI _ FLAG _ HIDE _ NAV IG ATION Ġor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView . SYSTEM _ UI _ FLAG _ FULL SCREEN Ġor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView . SYSTEM _ UI _ FLAG _ IM MER SIVE _ STICK Y ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsave Bitmap To Album ( bitmap : ĠBitmap , Ġalbum Path : ĠString , Ġsuc ced : Ġ(( path : ĠString ) Ġ-> ĠUnit )? ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ( album Path Ġ+ Ġ"/", ĠSystem . currentTimeMillis (). toString () Ġ+ Ġ". jpg ") ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile OutputStream Ġ= ĠFileOutputStream ( file ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap . compress ( Bitmap . Compress Format . JPEG , Ġ 1 0 0 , Ġfile OutputStream ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile OutputStream . flush () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile OutputStream . close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap . recycle () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuc ced ?. invoke ( file . toString ()) ĊĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠFileNotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdevice Orientation Changed ( orient a ion : ĠInt ) Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġprintln ( orient a ion ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdevice Orientation Changed From To ( from : ĠInt , Ġto : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln ("$ from , Ġ$ to ") ĊĠĠĠĠĠĠĠ Ġif Ġ( to Ġ== ĠDEVICE _ OR IENTATION _ POR TRA IT Ġ|| Ġto Ġ== ĠDEVICE _ OR IENTATION _ UP SID ED OWN Ġ|| Ġto Ġ== ĠDEVICE _ OR IENTATION _ LAND SC AP ER IGHT Ġ|| Ġto Ġ== ĠDEVICE _ OR IENTATION _ LAND SC APE LEFT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgl Texture View ?. orientation Ġ= Ġto ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠTAG Ġ= Ġ" MainActivity " ĊĠĠĠ Ġ} Ċ } ĊĊ