/** Ċ Ġ* ĠThis Ġis Ġsample Ġcode Ġprovided Ġby ĠW ow za ĠMedia ĠSystems , ĠLLC . Ġ ĠAll Ġsample Ġcode Ġis Ġintended Ġto Ġbe Ġa Ġreference Ġfor Ġthe Ċ Ġ* Ġpurpose Ġof Ġeduc ating Ġdevelopers , Ġand Ġis Ġnot Ġintended Ġto Ġbe Ġused Ġin Ġany Ġproduction Ġenvironment . Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠIN ĠNO ĠEVENT ĠSHALL ĠW OW ZA ĠMED IA ĠSY STEMS , ĠLLC ĠBE ĠLIABLE ĠTO ĠYOU ĠOR ĠANY ĠPAR TY ĠFOR ĠDIRECT , ĠINDIRECT , ĠSPECIAL , ĠINCIDENTAL , Ċ Ġ* ĠOR ĠCONSEQUENTIAL ĠDAMAGES , ĠINCLUDING ĠLO ST ĠPROFITS , ĠARISING ĠOUT ĠOF ĠTHE ĠUSE ĠOF ĠTHIS ĠSOFTWARE ĠAND ĠI TS ĠDOCUMENT ATION , Ċ Ġ* ĠEVEN ĠIF ĠW OW ZA ĠMED IA ĠSY STEMS , ĠLLC ĠHAS ĠBE EN ĠADVISED ĠOF ĠTHE ĠPOSSIBILITY ĠOF ĠSUCH ĠDAMAGE . Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠW OW ZA ĠMED IA ĠSY STEMS , ĠLLC ĠSPEC IFIC ALLY ĠDISCLAIM S ĠANY ĠWARRANTIES , ĠINCLUDING , ĠBUT ĠNOT ĠLIMITED ĠTO , ĠTHE ĠIMPLIED ĠWARRANTIES Ċ Ġ* ĠOF ĠMERCHANTABILITY ĠAND ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE . ĠALL ĠCODE ĠPROVIDED ĠHERE UNDER ĠIS ĠPROVIDED Ġ" AS ĠIS ". Ċ Ġ* ĠW OW ZA ĠMED IA ĠSY STEMS , ĠLLC ĠHAS ĠNO ĠO BL IG ATION ĠTO ĠPRO VID E ĠM AINT EN ANCE , ĠSUPPORT , ĠUP DAT ES , ĠEN H ANCE MENTS , ĠOR ĠMO DIF ICATION S . Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠÂ© Ġ 2 0 1 5 ĠâĢĵ Ġ 2 0 1 9 ĠW ow za ĠMedia ĠSystems , ĠLLC . ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠThis Ġis Ġsample Ġcode Ġprovided Ġby ĠW ow za ĠMedia ĠSystems , ĠLLC . Ġ ĠAll Ġsample Ġcode Ġis Ġintended Ġto Ġbe Ġa Ġreference Ġfor Ġthe Ċ Ġ* Ġpurpose Ġof Ġeduc ating Ġdevelopers , Ġand Ġis Ġnot Ġintended Ġto Ġbe Ġused Ġin Ġany Ġproduction Ġenvironment . Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠIN ĠNO ĠEVENT ĠSHALL ĠW OW ZA ĠMED IA ĠSY STEMS , ĠLLC ĠBE ĠLIABLE ĠTO ĠYOU ĠOR ĠANY ĠPAR TY ĠFOR ĠDIRECT , ĠINDIRECT , ĠSPECIAL , ĠINCIDENTAL , Ċ Ġ* ĠOR ĠCONSEQUENTIAL ĠDAMAGES , ĠINCLUDING ĠLO ST ĠPROFITS , ĠARISING ĠOUT ĠOF ĠTHE ĠUSE ĠOF ĠTHIS ĠSOFTWARE ĠAND ĠI TS ĠDOCUMENT ATION , Ċ Ġ* ĠEVEN ĠIF ĠW OW ZA ĠMED IA ĠSY STEMS , ĠLLC ĠHAS ĠBE EN ĠADVISED ĠOF ĠTHE ĠPOSSIBILITY ĠOF ĠSUCH ĠDAMAGE . Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠW OW ZA ĠMED IA ĠSY STEMS , ĠLLC ĠSPEC IFIC ALLY ĠDISCLAIM S ĠANY ĠWARRANTIES , ĠINCLUDING , ĠBUT ĠNOT ĠLIMITED ĠTO , ĠTHE ĠIMPLIED ĠWARRANTIES Ċ Ġ* ĠOF ĠMERCHANTABILITY ĠAND ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE . ĠALL ĠCODE ĠPROVIDED ĠHERE UNDER ĠIS ĠPROVIDED Ġ" AS ĠIS ". Ċ Ġ* ĠW OW ZA ĠMED IA ĠSY STEMS , ĠLLC ĠHAS ĠNO ĠO BL IG ATION ĠTO ĠPRO VID E ĠM AINT EN ANCE , ĠSUPPORT , ĠUP DAT ES , ĠEN H ANCE MENTS , ĠOR ĠMO DIF ICATION S . Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠÂ© Ġ 2 0 1 5 ĠâĢĵ Ġ 2 0 1 9 ĠW ow za ĠMedia ĠSystems , ĠLLC . ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠThis Ġis Ġsample Ġcode Ġprovided Ġby ĠW ow za ĠMedia ĠSystems , ĠLLC . Ġ ĠAll Ġsample Ġcode Ġis Ġintended Ġto Ġbe Ġa Ġreference Ġfor Ġthe Ċ Ġ* Ġpurpose Ġof Ġeduc ating Ġdevelopers , Ġand Ġis Ġnot Ġintended Ġto Ġbe Ġused Ġin Ġany Ġproduction Ġenvironment . Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠIN ĠNO ĠEVENT ĠSHALL ĠW OW ZA ĠMED IA ĠSY STEMS , ĠLLC ĠBE ĠLIABLE ĠTO ĠYOU ĠOR ĠANY ĠPAR TY ĠFOR ĠDIRECT , ĠINDIRECT , ĠSPECIAL , ĠINCIDENTAL , Ċ Ġ* ĠOR ĠCONSEQUENTIAL ĠDAMAGES , ĠINCLUDING ĠLO ST ĠPROFITS , ĠARISING ĠOUT ĠOF ĠTHE ĠUSE ĠOF ĠTHIS ĠSOFTWARE ĠAND ĠI TS ĠDOCUMENT ATION , Ċ Ġ* ĠEVEN ĠIF ĠW OW ZA ĠMED IA ĠSY STEMS , ĠLLC ĠHAS ĠBE EN ĠADVISED ĠOF ĠTHE ĠPOSSIBILITY ĠOF ĠSUCH ĠDAMAGE . Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠW OW ZA ĠMED IA ĠSY STEMS , ĠLLC ĠSPEC IFIC ALLY ĠDISCLAIM S ĠANY ĠWARRANTIES , ĠINCLUDING , ĠBUT ĠNOT ĠLIMITED ĠTO , ĠTHE ĠIMPLIED ĠWARRANTIES Ċ Ġ* ĠOF ĠMERCHANTABILITY ĠAND ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE . ĠALL ĠCODE ĠPROVIDED ĠHERE UNDER ĠIS ĠPROVIDED Ġ" AS ĠIS ". Ċ Ġ* ĠW OW ZA ĠMED IA ĠSY STEMS , ĠLLC ĠHAS ĠNO ĠO BL IG ATION ĠTO ĠPRO VID E ĠM AINT EN ANCE , ĠSUPPORT , ĠUP DAT ES , ĠEN H ANCE MENTS , ĠOR ĠMO DIF ICATION S . Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠÂ© Ġ 2 0 1 5 ĠâĢĵ Ġ 2 0 1 9 ĠW ow za ĠMedia ĠSystems , ĠLLC . ĠAll Ġrights Ġreserved . Ċ Ġ*/ ĊĊ Ċ /** Ċ Ġ* ĠThis Ġis Ġsample Ġcode Ġprovided Ġby ĠW ow za ĠMedia ĠSystems , ĠLLC . Ġ ĠAll Ġsample Ġcode Ġis Ġintended Ġto Ġbe Ġa Ġreference Ġfor Ġthe Ċ Ġ* Ġpurpose Ġof Ġeduc ating Ġdevelopers , Ġand Ġis Ġnot Ġintended Ġto Ġbe Ġused Ġin Ġany Ġproduction Ġenvironment . Ċ Ġ* Ċ Ġ* ĠIN ĠNO ĠEVENT ĠSHALL ĠW OW ZA ĠMED IA ĠSY STEMS , ĠLLC ĠBE ĠLIABLE ĠTO ĠYOU ĠOR ĠANY ĠPAR TY ĠFOR ĠDIRECT , ĠINDIRECT , ĠSPECIAL , ĠINCIDENTAL , Ċ Ġ* ĠOR ĠCONSEQUENTIAL ĠDAMAGES , ĠINCLUDING ĠLO ST ĠPROFITS , ĠARISING ĠOUT ĠOF ĠTHE ĠUSE ĠOF ĠTHIS ĠSOFTWARE ĠAND ĠI TS ĠDOCUMENT ATION , Ċ Ġ* ĠEVEN ĠIF ĠW OW ZA ĠMED IA ĠSY STEMS , ĠLLC ĠHAS ĠBE EN ĠADVISED ĠOF ĠTHE ĠPOSSIBILITY ĠOF ĠSUCH ĠDAMAGE . Ċ Ġ* Ċ Ġ* ĠW OW ZA ĠMED IA ĠSY STEMS , ĠLLC ĠSPEC IFIC ALLY ĠDISCLAIM S ĠANY ĠWARRANTIES , ĠINCLUDING , ĠBUT ĠNOT ĠLIMITED ĠTO , ĠTHE ĠIMPLIED ĠWARRANTIES Ċ Ġ* ĠOF ĠMERCHANTABILITY ĠAND ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE . ĠALL ĠCODE ĠPROVIDED ĠHERE UNDER ĠIS ĠPROVIDED Ġ" AS ĠIS ". Ċ Ġ* ĠW OW ZA ĠMED IA ĠSY STEMS , ĠLLC ĠHAS ĠNO ĠO BL IG ATION ĠTO ĠPRO VID E ĠM AINT EN ANCE , ĠSUPPORT , ĠUP DAT ES , ĠEN H ANCE MENTS , ĠOR ĠMO DIF ICATION S . Ċ Ġ* Ċ Ġ* ĠÂ© Ġ 2 0 1 5 ĠâĢĵ Ġ 2 0 1 9 ĠW ow za ĠMedia ĠSystems , ĠLLC . ĠAll Ġrights Ġreserved . Ċ Ġ*/ Ċ Ċ package Ġcom . wow za . go coder . sdk . sample app . graphics Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . annotation . Target Api Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . Bitmap Factory Ċ import Ġandroid . opengl . EGL 1 4 Ċ import Ġandroid . opengl . GLES 2 0 Ċ import Ġandroid . opengl . GL Surface View Ċ import Ġandroid . os .* Ċ import Ġandroid . preference . Preference Manager Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . View Ċ import Ġandroid . view . WindowManager Ċ import Ġandroid . widget . Button Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . annotation . Requires Api Ċ import Ġcom . google . ar . core .* Ċ import Ġcom . google . ar . core . exceptions .* Ċ import Ġcom . google . firebase . firestore . Firebase Fire store Ċ import Ġcom . google . firebase . firestore . Listener Registration Ċ import Ġcom . google . firebase . storage . Firebase Storage Ċ import Ġcom . wow za . go coder . sdk . api . android . opengl . WO W ZG LES Ċ import Ġcom . wow za . go coder . sdk . api . broadcast . WO WZ GL Broad caster Ċ import Ġcom . wow za . go coder . sdk . api . devices . WO WZ Audio Device Ċ import Ġcom . wow za . go coder . sdk . api . devices . WO WZ Camera View Ċ import Ġcom . wow za . go coder . sdk . api . geometry . WO WZ Size Ċ import Ġcom . wow za . go coder . sdk . api . logging . WO WZ Log Ċ import Ġcom . wow za . go coder . sdk . api . render . WO WZ Render API Ċ import Ġcom . wow za . go coder . sdk . sample app . Go Coder SDK Activity Base Ċ import Ġcom . wow za . go coder . sdk . sample app . R Ċ import Ġcom . wow za . go coder . sdk . sample app . common . helpers .* Ċ import Ġcom . wow za . go coder . sdk . sample app . common . rendering . Background Renderer Ċ import Ġcom . wow za . go coder . sdk . sample app . common . rendering . Object Renderer Ċ import Ġcom . wow za . go coder . sdk . sample app . common . rendering . Plane Renderer Ċ import Ġcom . wow za . go coder . sdk . sample app . common . rendering . PointCloud Renderer Ċ import Ġcom . wow za . go coder . sdk . sample app . config . Go Coder SDK Prefs Ċ import Ġcom . wow za . go coder . sdk . sample app . graphics . models . Image Model Ċ import Ġcom . wow za . go coder . sdk . sample app . ui . Multi State Button Ċ import Ġcom . wow za . go coder . sdk . sample app . ui . Status View Ċ import Ġcom . wow za . go coder . sdk . support . status . WO WZ Status Ċ import Ġjava . io . ByteArray OutputStream Ċ import Ġjava . io . File Ċ import Ġjava . io . File OutputStream Ċ import Ġjava . io . IOException Ċ import Ġjava . nio . Int Buffer Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent . atomic . Atomic Boolean Ċ import Ġjavax . micro edition . kh ronos . e gl . EGL Config Ċ import Ġjavax . micro edition . kh ronos . openg les . GL 1 0 Ċ Ċ class ĠOpenGL Activity Ġ: ĠGo Coder SDK Activity Base (), ĠGL Surface View . Renderer , ĠW OW Z Render API . Video Frame Renderer Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġm First Frame Timestamp Ns Ġ= Ġ- 1 L ĊĠĠĠ Ġprivate Ġvar Ġview Height Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġrect Renderer : ĠRectangle Polygon Renderer ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġview Width Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġstreaming Ġ= Ġfalse ĊĠĠĠ Ġvar Ġimage List Ġ= Ġmutable ListOf < Image Model >() ĊĠĠĠ Ġvar Ġimage Lists Ġ= Ġmutable ListOf < Image Model >() ĊĠĠĠ Ġvar Ġimage : ĠImage Model ? Ġ= Ġnull Ċ // ĠĠĠ Ġprivate Ġvar Ġfire store Listener : ĠListener Registration ? Ġ= Ġnull ĊĊĠĠĠ Ġprotected Ġvar Ġm WZ Audio Device : ĠW OW Z Audio Device ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġm Grab Frame Ġ= ĠAtomic Boolean ( false ) ĊĠĠĠ Ġprivate Ġval Ġm Saving Frame Ġ= ĠAtomic Boolean ( false ) ĊĠĠĠ Ġprivate Ġvar Ġm WZ Camera View : ĠW OW Z Camera View ? Ġ= Ġnull ĊĠĠĠ Ġval Ġoutput J peg File : ĠFile ? ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmedia Storage Dir Ġ= ĠFile ( Environment . get External Storage Public Directory ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEnvironment . DIRECTORY _ PI CTURE S ), Ġ" Go Coder SDK ĠScreenshots ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! media Storage Dir . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! media Storage Dir . mkdir s ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress Lint (" SimpleDateFormat ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtime Stamp Ġ= ĠSimpleDateFormat (" yyyy - MM - dd - HH mm ss "). format ( Date ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠFile ( media Storage Dir . path Ġ+ ĠFile . separator Ġ+ Ġtime Stamp Ġ+ Ġ". jpg ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ// ĠRendering . ĠThe ĠRender ers Ġare Ġcreated Ġhere , Ġand Ġinitialized Ġwhen Ġthe ĠGL Ġsurface Ġis Ġcreated . ĊĊĠĠĠ Ġvar Ġhandler : ĠHandler ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġfire store DB : ĠFirebase Fire store ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġmy Bitmap : ĠBitmap ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġm Width : ĠInt ? Ġ= Ġnull ; ĊĠĠĠ Ġvar Ġm Height : ĠInt ? Ġ= Ġnull ; ĊĠĠĠ Ġvar Ġcapture Picture Ġ= Ġfalse ; ĊĠĠĠ Ġinternal Ġlateinit Ġvar Ġframe 1 : ĠFrame ĊĠĠĠ Ġinternal Ġlateinit Ġvar Ġcamera 1 : ĠCamera ĊĠĠĠ Ġinternal Ġlateinit Ġvar Ġcp : ĠCollection < Plane > ĊĠĠĠ Ġvar Ġscreenshot Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġinstall Requested : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġm Devices Initialized Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġvar Ġsession : ĠSession ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġdisplay Rotation Helper : ĠDisplay Rotation Helper ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġtracking State Helper Ġ= ĠTracking State Helper ( this ) ĊĠĠĠ Ġprivate Ġvar Ġtap Helper : ĠT ap Helper ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġm Rendering Lock Ġ= ĠAny () ĊĠĠĠ Ġprivate Ġvar Ġm Rendering Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġval Ġbackground Renderer Ġ= ĠBackground Renderer () ĊĠĠĠ Ġprivate Ġval Ġvirtual Object Ġ= ĠObject Renderer () ĊĠĠĠ Ġprivate Ġval Ġvirtual Object Shadow Ġ= ĠObject Renderer () ĊĠĠĠ Ġprivate Ġval Ġplane Renderer Ġ= ĠPlane Renderer () ĊĠĠĠ Ġprivate Ġval Ġpoint Cloud Renderer Ġ= ĠPoint Cloud Renderer () ĊĠĠĠ Ġvar Ġcurrent Date Ġ= Ġ"" ĊĠĠĠ Ġ// ĠTemporary Ġmatrix Ġallocated Ġhere Ġto Ġreduce Ġnumber Ġof Ġallocations Ġfor Ġeach Ġframe . ĊĠĠĠ Ġprivate Ġval Ġanchor Matrix Ġ= ĠFloat Array ( 1 6 ) ĊĠĠĠ Ġvar Ġgl Broad caster : ĠW OW Z GL Broad caster ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġvar Ġsurface Size : ĠW OW Z Size ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġprivate Ġval Ġis Streaming : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġgl Broad caster Ġ!= Ġnull Ġ&& Ġ! gl Broad caster !!. broad caster Status . is Idle ĊĊĠĠĠ Ġprivate Ġval Ġanchors Ġ= ĠArrayList < Colo red Anchor >() ĊĠĠĠ Ġprotected Ġvar Ġm Btn Broadcast : ĠMulti State Button ? Ġ= Ġnull ĊĠĠĠ Ġprotected Ġvar Ġm Btn Settings : ĠMulti State Button ? Ġ= Ġnull ĊĠĠĠ Ġprotected Ġvar Ġm Status View : ĠStatus View ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġsurface View : ĠGL Surface View ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġm OpenGL Renderer : ĠOpenGL Renderer ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġon Window Focus Changed ( has Focus : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Window Focus Changed ( has Focus ) ĊĠĠĠĠĠĠĠ ĠFull Screen Helper . set FullScreen On Window Focus Changed ( this , Ġhas Focus ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Surface Created ( gl 1 0 : ĠGL 1 0 , Ġe gl Config : ĠE GL Config ) Ġ{ ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Clear Color ( 0 . 1 f , Ġ 0 . 1 f , Ġ 0 . 1 f , Ġ 1 . 0 f ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠPrepare Ġthe Ġrendering Ġobjects . ĠThis Ġinvolves Ġreading Ġshaders , Ġso Ġmay Ġthrow Ġan ĠIOException . ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCreate Ġthe Ġtexture Ġand Ġpass Ġit Ġto ĠAR Core Ġsession Ġto Ġbe Ġfilled Ġduring Ġupdate (). ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbackground Renderer . create On Gl Thread (/* context =*/ this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplane Renderer . create On Gl Thread (/* context =*/ this , Ġ" models / tri grid . png ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpoint Cloud Renderer . create On Gl Thread (/* context =*/ this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrect Renderer Ġ= ĠRectangle Polygon Renderer () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvirtual Object . create On Gl Thread (/* context =*/ this , Ġ" models / andy . obj ", Ġ" models / andy . png ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvirtual Object . set Material Properties ( 0 . 0 f , Ġ 2 . 0 f , Ġ 0 . 5 f , Ġ 6 . 0 f ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvirtual Object Shadow . create On Gl Thread ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* context =*/ Ġthis , Ġ" models / andy _ shadow . obj ", Ġ" models / andy _ shadow . png ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvirtual Object Shadow . set Blend Mode ( Object Renderer . Blend Mode . Shadow ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvirtual Object Shadow . set Material Properties ( 1 . 0 f , Ġ 0 . 0 f , Ġ 0 . 0 f , Ġ 1 . 0 f ) ĊĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" Failed Ġto Ġread Ġan Ġasset Ġfile ", Ġe ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Stream Start () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( gl Broad caster Ġ== Ġnull Ġ|| Ġis Streaming ) Ġreturn ĊĠĠĠĠĠĠĠ Ġ// ĠInitialize Ġthe Ġtimestamp Ġtracker ĊĠĠĠĠĠĠĠ Ġm First Frame Timestamp Ns Ġ= Ġ- 1 L ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġencode Frame () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( gl Broad caster Ġ!= Ġnull Ġ&& Ġgl Broad caster !!. broad caster Status . isRunning ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠcurrentTime Ns Ġ= ĠSystem . nano Time () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m First Frame Timestamp Ns Ġ== Ġ- 1 L ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm First Frame Timestamp Ns Ġ= ĠcurrentTime Ns ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġframe Timestamp Ns Ġ= ĠcurrentTime Ns Ġ- Ġm First Frame Timestamp Ns ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" check as ", frame Timestamp Ns ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgl Broad caster !!. on Frame Available ( frame Timestamp Ns ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalled Ġto Ġindicate Ġstreaming Ġhas Ġstopped ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġon Stream End () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( gl Broad caster Ġ== Ġnull ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġgl Broad caster !!. video Source Config . video Frame Size Ġ= Ġsurface Size ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* ĠW OW Z Render API . Video Frame Renderer Ġmethods Ġ-------------------------------------------------------------------------------- --------- Ġ*/ ĊĊĊĠĠĠ Ġoverride Ġfun Ġon Surface Changed ( gl : ĠGL 1 0 , Ġwidth : ĠInt , Ġheight : ĠInt ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġdisplay Rotation Helper !!. on Surface Changed ( width , Ġheight ) ĊĠĠĠĠĠĠĠ Ġ// ĠSet Ġthe ĠOpenGL Ġviewport Ġto Ġthe Ġsame Ġsize Ġas Ġthe Ġsurface . ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Viewport ( 0 , Ġ 0 , Ġwidth , Ġheight ) ĊĠĠĠĠĠĠĠ Ġview Width Ġ= Ġwidth ĊĠĠĠĠĠĠĠ Ġview Height Ġ= Ġheight ĊĠĠĠĠĠĠĠ Ġ// ĠCreate Ġa Ġnew Ġperspective Ġprojection Ġmatrix . ĠThe Ġheight Ġwill Ġstay Ġthe Ġsame ĊĠĠĠĠĠĠĠ Ġ// Ġwhile Ġthe Ġwidth Ġwill Ġvary Ġas Ġper Ġaspect Ġratio . ĊĠĠĠĠĠĠĠ Ġval Ġratio Ġ= Ġwidth . toFloat () Ġ/ Ġheight ĊĠĠĠĠĠĠĠ Ġval Ġleft Ġ= Ġ- ratio ĊĠĠĠĠĠĠĠ Ġval Ġright Ġ= Ġratio ĊĠĠĠĠĠĠĠ Ġval Ġbottom Ġ= Ġ- 1 . 0 f ĊĠĠĠĠĠĠĠ Ġval Ġtop Ġ= Ġ 1 . 0 f ĊĠĠĠĠĠĠĠ Ġval Ġnear Ġ= Ġ 1 . 0 f ĊĠĠĠĠĠĠĠ Ġval Ġfar Ġ= Ġ 1 0 . 0 f ĊĊĊĠĠĠĠĠĠĠ Ġif Ġ( gl Broad caster Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgl Broad caster Ġ= ĠW OW Z GL Broad caster ( EGL 1 4 . e gl GetCurrent Context ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgl Broad caster !!. video Frame Renderer Ġ= Ġthis ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠInitialize Ġthe Ġsurface Ġin Ġthe Ġbroad caster 's Ġvideo Ġsource Ġconfig ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsurface Size Ġ= ĠW OW Z Size ( width , Ġheight ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgl Broad caster !!. video Source Config . video Frame Size Ġ= Ġsurface Size ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsurface Size !!. set ( width , Ġheight ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Streaming ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdon 't Ġchange Ġthe Ġframe Ġsize Ġin Ġthe Ġvideo Ġsource Ġconfig Ġwhile Ġstreaming ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgl Broad caster !!. video Source Config . video Frame Size Ġ= Ġsurface Size ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Target Api ( Build . VERSION _ CODES . O ) ĊĠĠĠ Ġ@ Requires Api ( Build . VERSION _ CODES . O ) ĊĠĠĠ Ġoverride Ġfun Ġon Draw Frame ( gl 1 0 : ĠGL 1 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠClear Ġscreen Ġto Ġnotify Ġdriver Ġit Ġshould Ġnot Ġload Ġany Ġpixels Ġfrom Ġprevious Ġframe . ĊĊĠĠĠĠĠĠĠ Ġif Ġ( view Width Ġ== Ġ 0 Ġ|| Ġview Width Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( session Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdisplay Rotation Helper !!. update Session IfNeeded ( session ) ĊĠĠĠĠĠĠĠ Ġsession !!. set Camera Texture Name ( background Renderer . texture Id ) ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Clear ( GLES 2 0 . GL _ COLOR _ BUFFER _ BIT Ġor ĠGLES 2 0 . GL _ DEPTH _ BUFFER _ BIT ) ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Clear Color ( 0 . 0 f , Ġ 0 . 0 f , Ġ 1 . 0 f , Ġ 1 . 0 f ); ĊĠĠĠĠĠĠĠ Ġ// ĠStart Ġby Ġclearing Ġthe Ġalpha Ġchannel Ġof Ġthe Ġcolor Ġbuffer Ġto Ġ 1 . 0 . ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Clear Color ( 1 f , Ġ 1 f , Ġ 1 f , Ġ 1 f ) ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Color Mask ( false , Ġfalse , Ġfalse , Ġtrue ); ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Clear ( GLES 2 0 . GL _ COLOR _ BUFFER _ BIT ); ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Color Mask ( true , Ġtrue , Ġtrue , Ġtrue ); ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġ// ĠDisable Ġdepth Ġwrite . ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Depth Mask ( false ); ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġ// ĠAdd itive Ġbl ending , Ġmasked Ġby Ġalpha Ġchannel , Ġclearing Ġalpha Ġchannel . ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Enable ( GLES 2 0 . GL _ BLEND ); ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Blend Func Separ ate ( ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGLES 2 0 . GL _ DST _ ALPHA , ĠGLES 2 0 . GL _ ONE , Ġ// ĠRGB Ġ( src , Ġdest ) ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGLES 2 0 . GL _ ZERO , ĠGLES 2 0 . GL _ ONE _ MINUS _ SRC _ ALPHA ); Ġ// ĠAL PH A Ġ( src , Ġdest ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠNotify ĠAR Core Ġsession Ġthat Ġthe Ġview Ġsize Ġchanged Ġso Ġthat Ġthe Ġperspective Ġmatrix Ġand ĊĠĠĠĠĠĠĠ Ġ// Ġthe Ġvideo Ġbackground Ġcan Ġbe Ġproperly Ġadjusted . ĊĊĊĠĠĠĠĠĠĠ Ġ// render Frame (); ĊĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠ Ġgain Rendering Lock (); ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠObtain Ġthe Ġcurrent Ġframe Ġfrom ĠAR Session . ĠWhen Ġthe Ġconfiguration Ġis Ġset Ġto ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUpdate Mode . BLOCK ING Ġ( it Ġis Ġby Ġdefault ), Ġthis Ġwill Ġthrottle Ġthe Ġrendering Ġto Ġthe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcamera Ġfram erate . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġframe Ġ= Ġsession !!. update () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġframe 1 Ġ= Ġframe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcamera Ġ= Ġframe . camera ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcamera 1 Ġ= Ġcamera ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠHandle Ġone Ġtap Ġper Ġframe . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Tap ( frame , Ġcamera ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġframe Ġis Ġready , Ġrender Ġcamera Ġpreview Ġimage Ġto Ġthe ĠGL Ġsurface . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbackground Renderer . draw ( frame ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠKeep Ġthe Ġscreen Ġun locked Ġwhile Ġtracking , Ġbut Ġallow Ġit Ġto Ġlock Ġwhen Ġtracking Ġstops . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtracking State Helper . update Keep Screen On Flag ( camera . tracking State ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġnot Ġtracking , Ġdon 't Ġdraw Ġ 3 D Ġobjects , Ġshow Ġtracking Ġfailure Ġreason Ġinstead . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( camera . tracking State Ġ== ĠTracking State . PA USED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Tracking State Helper . get Tracking Failure Reason String ( camera ), Toast . LENGTH _ SHORT ). show (); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" value ", ĠTracking State Helper . get Tracking Failure Reason String ( camera )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" values ", Ġ" come ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGet Ġprojection Ġmatrix . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproj mtx Ġ= ĠFloat Array ( 1 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcamera . get Projection Matrix ( proj mtx , Ġ 0 , Ġ 0 . 1 f , Ġ 1 0 0 . 0 f ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGet Ġcamera Ġmatrix Ġand Ġdraw . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview mtx Ġ= ĠFloat Array ( 1 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcamera . getView Matrix ( view mtx , Ġ 0 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCompute Ġlight ing Ġfrom Ġaverage Ġintensity Ġof Ġthe Ġimage . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe Ġfirst Ġthree Ġcomponents Ġare Ġcolor Ġscaling Ġfactors . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe Ġlast Ġone Ġis Ġthe Ġaverage Ġpixel Ġintensity Ġin Ġgamma Ġspace . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolor Correction Rg ba Ġ= ĠFloat Array ( 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġframe . light Estimate . getColor Correction ( color Correction Rg ba , Ġ 0 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠVisual ize Ġtracked Ġpoints . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUse Ġtry - with - resources Ġto Ġautomatically Ġrelease Ġthe Ġpoint Ġcloud . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġframe . acquire PointCloud (). use Ġ{ Ġpoint Cloud Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpoint Cloud Renderer . update ( point Cloud ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpoint Cloud Renderer . draw ( view mtx , Ġproj mtx ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNo Ġtracking Ġerror Ġat Ġthis Ġpoint . ĠIf Ġwe Ġdetected Ġany Ġplane , Ġthen Ġhide Ġthe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġmessage ĠUI , Ġotherwise Ġshow Ġsearching Plane Ġmessage . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( has Tracking Plane ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Snackbar Helper . hide ( this ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , SEARCH ING _ PL ANE _ MESSAGE , Toast . LENGTH _ SHORT ). show (); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" test ", ĠSEARCH ING _ PL ANE _ MESSAGE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠVisual ize Ġplanes . ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcp Ġ= Ġsession !!. getAll Track ables ( Plane :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplane Renderer . draw Planes ( cp , Ġcamera . display Oriented Pose , Ġproj mtx ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠ Ġgain Rendering Lock (); ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠVisual ize Ġanchors Ġcreated Ġby Ġtouch . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscale Factor Ġ= Ġ 1 . 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( colored Anchor Ġin Ġanchors ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( colored Anchor . anchor . tracking State Ġ!= ĠTracking State . TRACK ING ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGet Ġthe Ġcurrent Ġpose Ġof Ġan ĠAnchor Ġin Ġworld Ġspace . ĠThe ĠAnchor Ġpose Ġis Ġupdated ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġduring Ġcalls Ġto Ġsession . update () Ġas ĠAR Core Ġref ines Ġits Ġestimate Ġof Ġthe Ġworld . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolored Anchor . anchor . pose . to Matrix ( anchor Matrix , Ġ 0 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUpdate Ġand Ġdraw Ġthe Ġmodel Ġand Ġits Ġshadow . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvirtual Object . update Model Matrix ( anchor Matrix , Ġscale Factor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvirtual Object Shadow . update Model Matrix ( anchor Matrix , Ġscale Factor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvirtual Object . draw ( view mtx , Ġproj mtx , Ġcolor Correction Rg ba , Ġcolored Anchor . color ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvirtual Object Shadow . draw ( view mtx , Ġproj mtx , Ġcolor Correction Rg ba , Ġcolored Anchor . color ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġanchors . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ== Ġ 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġpoint 0 Ġ= Ġget Pose ( anchors [ 0 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpoint 1 : ĠP ose Ġ= Ġget Pose ( anchors [ 3 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Line ( point 0 , Ġpoint 1 , Ġview mtx , Ġproj mtx ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġpoint 0 Ġ= Ġget Pose ( anchors [ i ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpoint 1 : ĠP ose Ġ= Ġget Pose ( anchors [ i Ġ+ Ġ 1 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġs Ġ= Ġ( point 0 . xAxis Ġ+ Ġpoint 1 . xAxis ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" value Ġcheck ", Ġs . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Line ( point 0 , Ġpoint 1 , Ġview mtx , Ġproj mtx ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog (" on Draw Frame ()", Ġ" before Ġdraw Obj () ") Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Obj ( point 1 , Ġcube , Ġview mtx , Ġproj mtx , Ġlight Intensity ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck If Hit ( cube , Ġi ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog (" on Draw Frame ()", Ġ" before Ġdraw Line () ") Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpoint 0 Ġ= Ġpoint 1 Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġss Ġ= Ġpoint 0 Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdistance Cm Ġ= Ġ( get Distance ( point 0 , Ġpoint 1 ) Ġ* Ġ 1 0 0 0 ). toInt () Ġ/ Ġ 1 0 . 0 f Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Ġ+= Ġdistance Cm . toDouble () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append (" Ġ+ Ġ"). append ( distance Cm ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠ Ġlong Ġtime Ġ= ĠSystem Clock . uptime Millis () Ġ% Ġ 1 0 0 0 0 L ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠ Ġfloat Ġangle In Degrees Ġ= Ġ( 3 6 0 . 0 f Ġ/ Ġ 1 0 0 0 0 . 0 f ) Ġ* Ġ(( int ) Ġtime ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠ ĠsetCurrent Angle ( angle In Degrees ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġstreaming , Ġrender Ġa Ġ 2 nd Ġpass Ġto Ġthe Ġvideo Ġencoder ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠ Ġrelease Rendering Lock (); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( screenshot ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscreenshot Size Ġ= Ġwidth Ġ* Ġheight Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġbb Ġ= ĠByteBuffer . allocate Direct ( screenshot Size Ġ* Ġ 4 ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbb . order ( Byte Order . native Order ()) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgl . gl Read Pixels ( 0 , Ġ 0 , Ġwidth , Ġheight , ĠGL 1 0 . GL _ RGBA , ĠGL 1 0 . GL _ UNSIGNED _ BYTE , Ġbb ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġpixels Buffer Ġ= ĠInt Array ( screenshot Size ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbb . as Int Buffer (). get ( pixels Buffer ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbb Ġ= Ġnull Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbitmap Ġ= ĠBitmap . create Bitmap ( width , Ġheight , ĠBitmap . Config . RGB _ 5 6 5 ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap . set Pixels ( pixels Buffer , Ġscreenshot Size Ġ- Ġwidth , Ġ- width , Ġ 0 , Ġ 0 , Ġwidth , Ġheight ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpixels Buffer Ġ= Ġnull Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġs Buffer Ġ= ĠShort Array ( screenshot Size ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsb Ġ= ĠShort Buffer . wrap ( s Buffer ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap . copy Pixels To Buffer ( sb ) Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// M aking Ġcreated Ġbitmap Ġ( from ĠOpenGL Ġpoints ) Ġcompatible Ġwith ĠAndroid Ġbitmap Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġscreenshot Size ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġv Ġ= Ġs Buffer [ i ] Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs Buffer [ i ] Ġ= Ġ( v Ġ&& Ġ 0 x 1 f Ġshl Ġ 1 1 Ġor Ġ( v Ġ& Ġ 0 x 7 e 0 ) Ġor Ġ( v Ġ& Ġ 0 xf 8 0 0 Ġshr Ġ 1 1 )). to Short () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . rewind () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap . copy Pixels From Buffer ( sb ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Screenshot Ġ= Ġbitmap Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscreenshot Ġ= Ġfalse Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( t : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAvoid Ġcrash ing Ġthe Ġapplication Ġdue Ġto Ġunhandled Ġexceptions . ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġset Ġthese Ġflags Ġso Ġthat Ġthis Ġdoesn 't Ġget Ġcalled Ġnumero us Ġtimes Ġin Ġparallel ĊĠĠĠĠĠĠĠ Ġm Saving Frame . set ( true ) ĊĠĠĠĠĠĠĠ Ġm Grab Frame . set ( false ) ĊĠĠĠĠĠĠĠ Ġif Ġ( streaming ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstreaming Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSave Picture () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( is Streaming ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġencode Frame () ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġm Pose Translation Ġ= ĠFloat Array ( 3 ) ĊĠĠĠ Ġprivate Ġval Ġm Pose Rotation Ġ= ĠFloat Array ( 4 ) ĊĠĠĠ Ġprivate Ġfun Ġget Pose ( anchor : ĠCo lo red Anchor ): ĠP ose Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpose Ġ= Ġanchor . anchor . pose ĊĠĠĠĠĠĠĠ Ġpose . get Translation ( m Pose Translation , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġpose . get Rotation Quaternion ( m Pose Rotation , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġreturn ĠP ose ( m Pose Translation , Ġm Pose Rotation ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdraw Line ( pose 0 : ĠP ose , Ġpose 1 : ĠP ose , Ġview mtx : ĠFloat Array , Ġproj mtx : ĠFloat Array ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠlineWidth Ġ= Ġ 0 . 0 0 2 f ĊĠĠĠĠĠĠĠ Ġval ĠlineWidth H Ġ= ĠlineWidth Ġ/ Ġview Height Ġ* Ġview Width ĊĠĠĠĠĠĠĠ Ġrect Renderer !!. set Vert s ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpose 0 . tx () Ġ- ĠlineWidth , Ġpose 0 . ty () Ġ+ ĠlineWidth H , Ġpose 0 . tz () Ġ- ĠlineWidth , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpose 0 . tx () Ġ+ ĠlineWidth , Ġpose 0 . ty () Ġ+ ĠlineWidth H , Ġpose 0 . tz () Ġ+ ĠlineWidth , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpose 1 . tx () Ġ+ ĠlineWidth , Ġpose 1 . ty () Ġ+ ĠlineWidth H , Ġpose 1 . tz () Ġ+ ĠlineWidth , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpose 1 . tx () Ġ- ĠlineWidth , Ġpose 1 . ty () Ġ+ ĠlineWidth H , Ġpose 1 . tz () Ġ- ĠlineWidth , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpose 0 . tx () Ġ- ĠlineWidth , Ġpose 0 . ty () Ġ- ĠlineWidth H , Ġpose 0 . tz () Ġ- ĠlineWidth , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpose 0 . tx () Ġ+ ĠlineWidth , Ġpose 0 . ty () Ġ- ĠlineWidth H , Ġpose 0 . tz () Ġ+ ĠlineWidth , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpose 1 . tx () Ġ+ ĠlineWidth , Ġpose 1 . ty () Ġ- ĠlineWidth H , Ġpose 1 . tz () Ġ+ ĠlineWidth , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpose 1 . tx () Ġ- ĠlineWidth , Ġpose 1 . ty () Ġ- ĠlineWidth H , Ġpose 1 . tz () Ġ- ĠlineWidth ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġrect Renderer !!. draw ( view mtx , Ġproj mtx ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Requires Api ( Build . VERSION _ CODES . O ) ĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun ĠSave Picture () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpixel Data Ġ= ĠInt Array ( view Width Ġ* Ġview Height ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠRead Ġthe Ġpixels Ġfrom Ġthe Ġcurrent ĠGL Ġframe . ĊĠĠĠĠĠĠĠ Ġval Ġbuf Ġ= ĠInt Buffer . wrap ( pixel Data ) ĊĠĠĠĠĠĠĠ Ġbuf . position ( 0 ) ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Read Pixels ( 0 , Ġ 0 , Ġview Width , Ġview Height , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGLES 2 0 . GL _ RGBA , ĠGLES 2 0 . GL _ UNSIGNED _ BYTE , Ġbuf ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠCreate Ġa Ġfile Ġin Ġthe ĠP ictures / Hello AR Ġalbum . ĊĠĠĠĠĠĠĠ Ġval Ġout Ġ= ĠFile ( Environment . get External Storage Public Directory ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEnvironment . DIRECTORY _ PI CTURE S ), Ġ" Go Coder SDK ĠScreenshots " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjava . lang . Long . to HexString ( System . currentTimeMillis ()) Ġ+ Ġ". png ") ĊĊĠĠĠĠĠĠĠ Ġ// ĠMake Ġsure Ġthe Ġdirectory Ġexists ĊĠĠĠĠĠĠĠ Ġif Ġ(! out . getParent File (). exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout . getParent File (). mkdir s () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠConvert Ġthe Ġpixel Ġdata Ġfrom ĠRGBA Ġto Ġwhat ĠAndroid Ġwants , ĠAR GB . ĊĠĠĠĠĠĠĠ Ġval Ġbitmap Data Ġ= ĠInt Array ( pixel Data . size ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġview Height ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 Ġuntil Ġview Width ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġp Ġ= Ġpixel Data [ i Ġ* Ġview Width Ġ+ Ġj ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġb Ġ= Ġp Ġand Ġ 0 x 0 0 ff 0 0 0 0 Ġshr Ġ 1 6 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġr Ġ= Ġp Ġand Ġ 0 x 0 0 0 0 0 0 ff Ġshl Ġ 1 6 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġga Ġ= Ġp Ġand Ġ- 0 xff 0 1 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap Data [( view Height Ġ- Ġi Ġ- Ġ 1 ) Ġ* Ġview Width Ġ+ Ġj ] Ġ= Ġga Ġor Ġr Ġor Ġb ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠCreate Ġa Ġbitmap . Ċ // ĠĠĠĠĠĠĠ Ġval Ġbmp Ġ= ĠBitmap . create Bitmap ( bitmap Data , Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Width , Ġview Height , ĠBitmap . Config . HARD WARE ) Ċ // Ċ // ĠĠĠĠĠĠĠ Ġ// ĠWrite Ġit Ġto Ġdisk . Ċ // ĠĠĠĠĠĠĠ Ġval Ġf os Ġ= ĠFileOutputStream ( out ) Ċ // ĠĠĠĠĠĠĠ Ġbmp . compress ( Bitmap . Compress Format . PNG , Ġ 1 0 0 , Ġf os ) Ċ // ĠĠĠĠĠĠĠ Ġf os . flush () Ċ // ĠĠĠĠĠĠĠ Ġf os . close () Ċ // ĠĠĠĠĠĠĠ Ġupload File ( bmp ) Ċ // ĠĠĠĠĠĠĠ Ġrun On Ui Thread ( Runnable Ġ{ Ġshow Snackbar Message (" W rote Ġ" Ġ+ Ġout . getName (), Ġfalse ) Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Request Permissions Result ( request Code : ĠInt , Ġpermissions : ĠArray < String >, Ġresults : ĠInt Array ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! Camera Permission Helper . has Camera Permission ( this )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" Camera Ġpermission Ġis Ġneeded Ġto Ġrun Ġthis Ġapplication ", ĠToast . LENGTH _ LONG ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! Camera Permission Helper . should Show Request Permission R ationale ( this )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠPermission Ġdenied Ġwith Ġchecking Ġ" Do Ġnot Ġask Ġagain ". ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCamera Permission Helper . launch Permission Settings ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis WZ Video Frame Renderer Active (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġshould Ġalways Ġbe Ġtrue Ġfor Ġbroadcast ers ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalled Ġat Ġthe Ġbeginning Ġof Ġa Ġbroadcast ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon WZ Video Frame Renderer Init ( e gl Env : ĠW OW ZG LES . E gl Env ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠInitialize Ġthe Ġencoder Ġthread 's ĠOpenGL ĠES Ġcontext Ġenvironment ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Clear ( GLES 2 0 . GL _ COLOR _ BUFFER _ BIT Ġor ĠGLES 2 0 . GL _ DEPTH _ BUFFER _ BIT ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġ// ĠSet Ġthe Ġbackground Ġclear Ġcolor Ġto Ġblack . ĊĠĠĠĠĠĠĠ Ġ//// ĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Clear Color ( 0 . 0 f , Ġ 0 . 0 f , Ġ 1 . 0 f , Ġ 1 . 0 f ); ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġ// ĠStart Ġby Ġclearing Ġthe Ġalpha Ġchannel Ġof Ġthe Ġcolor Ġbuffer Ġto Ġ 1 . 0 . ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Clear Color ( 1 , Ġ 1 , Ġ 1 , Ġ 1 ); ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Color Mask ( false , Ġfalse , Ġfalse , Ġtrue ); ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Clear ( GLES 2 0 . GL _ COLOR _ BUFFER _ BIT ); ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Color Mask ( true , Ġtrue , Ġtrue , Ġtrue ); ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġ// ĠDisable Ġdepth Ġwrite . ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Depth Mask ( false ); ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġ// ĠAdd itive Ġbl ending , Ġmasked Ġby Ġalpha Ġchannel , Ġclearing Ġalpha Ġchannel . ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Enable ( GLES 2 0 . GL _ BLEND ); ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Blend Func Separ ate ( ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGLES 2 0 . GL _ DST _ ALPHA , ĠGLES 2 0 . GL _ ONE , Ġ// ĠRGB Ġ( src , Ġdest ) ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGLES 2 0 . GL _ ZERO , ĠGLES 2 0 . GL _ ONE _ MINUS _ SRC _ ALPHA ); Ġ// ĠAL PH A Ġ( src , Ġdest ) ĊĠĠĠĠĠĠĠ Ġ// ĠUse Ġc ull ing Ġto Ġremove Ġback Ġfaces . ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Enable ( GLES 2 0 . GL _ C ULL _ FACE ); ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġ// ĠEnable Ġdepth Ġtesting ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Enable ( GLES 2 0 . GL _ DEPTH _ TEST ); ĊĊĠĠĠĠĠĠĠ Ġ// ĠSet Ġthe ĠGL Ġviewport Ġto Ġthe Ġsurface Ġsize ĊĠĠĠĠĠĠĠ Ġval Ġsurface Size Ġ= Ġe gl Env . e gl Surface Size ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġcallback Ġinvoked Ġin Ġresponse Ġto Ġan Ġcall Ġto Ġ[ WO WZ GL Broad caster . on Frame Available ] Ġto Ġrender ĊĠĠĠĠ Ġ* Ġthe Ġframe Ġto Ġbe Ġencoded ĊĠĠĠĠ Ġ* Ġ@ param Ġe gl Env ĠThe Ġ[ WO W ZG LES . E gl Env ] Ġinstance Ġdescribing Ġthe ĠOpenGL ĠES Ġenvironment Ġused ĊĠĠĠĠ Ġ* Ġto Ġencode Ġthe Ġvideo Ġframes Ġfor Ġstreaming ĊĠĠĠĠ Ġ* Ġ@ param Ġframe Size ĠThe Ġbroadcast Ġvideo Ġframe Ġsize Ġwhich Ġwill Ġremain Ġconstant Ġthroughout Ġa Ġstreaming Ġsession ĊĠĠĠĠ Ġ* Ġ@ param Ġframe Rotation ĠThe Ġvideo Ġsource 's Ġcurrent Ġorientation Ġas Ġset Ġby Ġa Ġcall Ġto Ġ[ WO WZ GL Broad caster . set Frame Rotation ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon WZ Video Frame Renderer Draw ( e gl Env : ĠW OW ZG LES . E gl Env , Ġframe Size : ĠW OW Z Size , Ġframe Rotation : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Viewport ( 0 , Ġ 0 , Ġframe Size . getWidth (), Ġframe Size . getHeight ()) ĊĊĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Clear ( GLES 2 0 . GL _ COLOR _ BUFFER _ BIT Ġor ĠGLES 2 0 . GL _ DEPTH _ BUFFER _ BIT ) ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Clear Color ( 0 . 0 f , Ġ 0 . 0 f , Ġ 1 . 0 f , Ġ 1 . 0 f ); ĊĠĠĠĠĠĠĠ Ġ// ĠStart Ġby Ġclearing Ġthe Ġalpha Ġchannel Ġof Ġthe Ġcolor Ġbuffer Ġto Ġ 1 . 0 . ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Clear Color ( 1 f , Ġ 1 f , Ġ 1 f , Ġ 1 f ) ĊĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġ// ĠStart Ġby Ġclearing Ġthe Ġalpha Ġchannel Ġof Ġthe Ġcolor Ġbuffer Ġto Ġ 1 . 0 . ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Clear Color ( 1 , Ġ 1 , Ġ 1 , Ġ 1 ); ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Color Mask ( false , Ġfalse , Ġfalse , Ġtrue ); ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Clear ( GLES 2 0 . GL _ COLOR _ BUFFER _ BIT ); ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Color Mask ( true , Ġtrue , Ġtrue , Ġtrue ); ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġ// ĠDisable Ġdepth Ġwrite . ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Depth Mask ( false ); ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġ// ĠAdd itive Ġbl ending , Ġmasked Ġby Ġalpha Ġchannel , Ġclearing Ġalpha Ġchannel . ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Enable ( GLES 2 0 . GL _ BLEND ); ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Blend Func Separ ate ( ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGLES 2 0 . GL _ DST _ ALPHA , ĠGLES 2 0 . GL _ ONE , Ġ// ĠRGB Ġ( src , Ġdest ) ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGLES 2 0 . GL _ ZERO , ĠGLES 2 0 . GL _ ONE _ MINUS _ SRC _ ALPHA ); Ġ// ĠAL PH A Ġ( src , Ġdest ) ĊĊĠĠĠĠĠĠĠ Ġrender Frame () ĊĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalled Ġat Ġthe Ġend Ġof Ġa Ġbroadcast ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon WZ Video Frame Renderer Release ( e gl Env : ĠW OW ZG LES . E gl Env ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġnothing Ġto Ġdo Ġhere ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ// ĠAn chors Ġcreated Ġfrom Ġt aps Ġused Ġfor Ġobject Ġpl acing Ġwith Ġa Ġgiven Ġcolor . ĊĠĠĠ Ġprivate Ġclass ĠCo lo red Anchor ( val Ġanchor : ĠAnchor , Ġval Ġcolor : ĠFloat Array ) ĊĊĠĠĠ Ġpublic Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ opengl ) ĊĠĠĠĠĠĠĠ Ġhandler Ġ= ĠHandler () ĊĠĠĠĠĠĠĠ Ġfire store DB Ġ= ĠFirebase Fire store . getInstance () ĊĊĠĠĠĠĠĠĠ Ġ// ĠInitialize Ġthe ĠUI Ġcontrols ĊĠĠĠĠĠĠĠ Ġm Btn Broadcast Ġ= ĠfindViewById < View >( R . id . ic _ broadcast ) Ġas ĠMulti State Button ĊĠĠĠĠĠĠĠ Ġm Btn Settings Ġ= ĠfindViewById < View >( R . id . ic _ settings ) Ġas ĠMulti State Button ĊĠĠĠĠĠĠĠ Ġvar Ġbutton Ġ= ĠfindViewById < View >( R . id . button ) Ġas ĠButton ĊĠĠĠĠĠĠĠ Ġm Status View Ġ= ĠfindViewById < View >( R . id . status View ) Ġas ĠStatus View ĊĊĠĠĠĠĠĠĠ Ġ// ĠInitialize Ġthe ĠOpenGL ĠES Ġsurface Ġview ĊĠĠĠĠĠĠĠ Ġsurface View Ġ= ĠfindViewById < View >( R . id . gl _ surface _ view ) Ġas ĠGL Surface View ĊĠĠĠĠĠĠĠ Ġdisplay Rotation Helper Ġ= ĠDisplay Rotation Helper (/* context =*/ this ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠSet Ġup Ġtap Ġlistener . ĊĠĠĠĠĠĠĠ Ġtap Helper Ġ= ĠT ap Helper (/* context =*/ this ) ĊĠĠĠĠĠĠĠ Ġsurface View !!. setOn Touch Listener ( tap Helper ) Ċ Ċ // ĠĠĠĠĠĠĠ Ġfire store DB !!. collection (" Image Size "). get () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Success Listener Ġ{ Ġdocument Ġ-> Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( doc Ġin Ġdocument ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġs Ġ= Ġdoc . data [" image Height "] Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage Lists . add ( Image Model ( s . toString (), Ġs . toString ())) Ċ //// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdoc . to Objects ( Image Model :: class . java ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ //// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage List Ġ= Ġdocument . to Objects ( Image Model :: class . java ) Ċ //// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage Lists . clear () Ċ //// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġimage List ) Ġ{ Ċ //// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage Lists . add ( i ) Ċ //// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ //// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. image List !!. size !! ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" uy ty ", Ġimage List . size . toString ()) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" u yt uy ", Ġimage List . toString ()) Ċ //// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Failure Listener Ġ{ Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ Ċ // Ċ // ĠĠĠĠĠĠĠ Ġval Ġquery Ġ= Ġfire store DB !!. collection (" Check ") Ċ // ĠĠĠĠĠĠĠ Ġfire store Listener Ġ= Ġquery . add Snapshot Listener Ġ{ Ġsnapshots , Ġe Ġ-> Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" ca ", Ġsnapshots !!. document Changes . toString ()) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( doc Ġin Ġsnapshots !!. document Changes ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" sad sd ", Ġdoc . document . data . toString ()) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ //// ĠĠĠĠĠĠĠĠĠĠĠĠ Ġsnapshots !!. document Changes . Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġbutton . setOnClickListener Ġ{ Ċ Ċ // ĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( Go Coder SDK Activity Base . s Go Coder SDK Ġ!= Ġnull ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġm WZ Camera View Ġ= ĠfindViewById < View >( R . id . camera _ preview ) Ġas ĠW OW Z Camera View ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCreate Ġan Ġregister Ġa Ġvideo Ġframe Ġlistener Ġwith ĠW Z Camera Preview ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvideo Frame Listener Ġ= Ġobject Ġ: ĠW OW Z Render API . Video Frame Listener Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride // Ġon WZ Video Frame Listener Frame Available () Ġwill Ġonly Ġbe Ġcalled Ġn ce Ġis WZ Video Frame Listener Active () Ġreturns Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġis WZ Video Frame Listener Active (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOnly Ġindicate Ġthe Ġframe Ġlistener Ġonce Ġthe Ġscreenshot Ġbutton Ġhas Ġbeen Ġpressed ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġand Ġwhen Ġwe 're Ġnot Ġin Ġthe Ġprocess Ġof Ġsaving Ġa Ġprevious Ġscreenshot ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġm Grab Frame . get () Ġ&& Ġ! m Saving Frame . get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon WZ Video Frame Listener Init ( e gl Env : ĠW OW ZG LES . E gl Env ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġnothing Ġneeded Ġfor Ġthis Ġexample ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride // Ġon WZ Video Frame Listener Frame Available () Ġis Ġcalled Ġwhen Ġis WZ Video Frame Listener Active () Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġand Ġa Ġnew Ġframe Ġhas Ġbeen Ġrendered Ġon Ġthe Ġcamera Ġpreview Ġdisplay Ġsurface ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġon WZ Video Frame Listener Frame Available ( e gl Env : ĠW OW ZG LES . E gl Env , Ġframe Size : ĠW OW Z Size , Ġframe Rotation : ĠInt , Ġtime code Nan os : ĠLong ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon WZ Video Frame Listener Release ( e gl Env : ĠW OW ZG LES . E gl Env ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġnothing Ġneeded Ġfor Ġthis Ġexample ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġregister Ġour Ġnewly Ġcreated Ġvideo Ġframe Ġlistener Ġw th Ġthe Ġcamera Ġpreview Ġdisplay Ġview Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġm WZ Camera View !!. register Frame Listener ( video Frame Listener ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Permissions Granted ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġstart Ġthe Ġcamera Ġpreview Ġdisplay Ġand Ġenable Ġthe Ġscreenshot Ġbutton Ġwhen Ġit Ġis Ġready Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm WZ Camera View !!. start Preview ( object Ġ: ĠW OW Z Camera View . Preview Status Listener Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon WZ Camera Preview Started ( camera : ĠW OW Z Camera , Ġframe Size : ĠW OW Z Size , Ġframe Rate : ĠInt ) Ġ{ Ċ //// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Btn Screenshot !!. isEnabled Ġ= Ġtrue Ċ //// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Btn Screenshot !!. is Clickable Ġ= Ġtrue Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon WZ Camera Preview Stopped ( camera Id : ĠInt ) Ġ{ Ċ //// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Btn Screenshot !!. isEnabled Ġ= Ġfalse Ċ //// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Btn Screenshot !!. is Clickable Ġ= Ġfalse Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon WZ Camera Preview Error ( camera : ĠW OW Z Camera , Ġerror : ĠW OW Z Error ) Ġ{ Ċ //// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Btn Screenshot !!. isEnabled Ġ= Ġfalse Ċ //// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Btn Screenshot !!. is Clickable Ġ= Ġfalse Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay Error Dialog ( error ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġbutton . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. 3 ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġm disp Ġ= Ġget WindowManager (). getDefault Display (); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġm disp Size Ġ= Ġandroid . graphics . Point () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm disp . getSize ( md isp Size ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmax X Ġ= Ġm disp Size . x ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmax Y Ġ= Ġm disp Size . y ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġarray List Ġ= Ġarray ListOf < model >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarray List . add ( model ( 0 F , Ġ 0 F )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarray List . add ( model ( max X . toFloat (), Ġ 0 F )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarray List . add ( model ( max X . toFloat (), Ġmax Y . toFloat ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarray List . add ( model ( 0 F , Ġmax Y . toFloat ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġarray List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandler !!. post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" checks ", Ġmessage ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdown Time Ġ= ĠSystem Clock . uptime Millis () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġevent Time Ġ= ĠSystem Clock . uptime Millis () Ġ+ Ġ 1 0 0 Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġss = s [ 0 ]. remove Prefix (" Client Ġ: Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġi . x ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġi . y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmeta State Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmotion Event Ġ= ĠMotion Event . obtain ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdown Time , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent Time , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ DOWN , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmeta State ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ċ Ċ // ĠDispatch Ġtouch Ġevent Ġto Ġview ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsurface View !!. dispatch Touch Event ( motion Event ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmotion Events Ġ= ĠMotion Event . obtain ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdown Time , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent Time , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ UP , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmeta State ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsurface View !!. dispatch Touch Event ( motion Events ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" check ss ", Ġe . toString ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Take Screen sh ost () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠSet Ġup Ġrenderer . ĊĠĠĠĠĠĠĠ Ġsurface View !!. preserve EGL Context On Pause Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġsurface View !!. set EGL Context Client Version ( 2 ) ĊĠĠĠĠĠĠĠ Ġsurface View !!. set EGL Config Chooser ( 8 , Ġ 8 , Ġ 8 , Ġ 8 , Ġ 1 6 , Ġ 0 ) Ġ// ĠAlpha Ġused Ġfor Ġplane Ġbl ending . ĊĠĠĠĠĠĠĠ Ġsurface View !!. set Renderer ( this ) ĊĠĠĠĠĠĠĠ Ġsurface View !!. render Mode Ġ= ĠGL Surface View . RENDER MODE _ CONT IN UO US LY ĊĠĠĠĠĠĠĠ Ġsurface View !!. set Will Not Draw ( false ) ĊĊĠĠĠĠĠĠĠ Ġinstall Requested Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġsurface View . set EGL Context Client Version ( 2 ); ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġm OpenGL Renderer Ġ= Ġnew ĠOpenGL Renderer (); ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġsurface View . set Renderer ( m OpenGL Renderer ); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠĠĠ Ġprotected Ġfun Ġhas Device Permission To Access ( callback : ĠCamera Activity Base . Permission Callback Interface ) Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġthis . callback Function Ġ= Ġcallback Ċ // ĠĠĠĠĠĠĠ Ġif Ġ( m WZ Broadcast Ġ!= Ġnull ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġtrue Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . M ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġif Ġ( m Required Permissions . size Ġ> Ġ 0 ) ĠW ow za Go Coder . has Permissions ( this , Ġm Required Permissions ) Ġelse Ġtrue Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! result Ġ&& Ġ! has Requested Permissions ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Compat . request Permissions ( this , Ġm Required Permissions , ĠPER MISSION S _ REQUEST _ CODE ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Requested Permissions Ġ= Ġtrue Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . callback Function . on Permission Result ( result ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . callback Function . on Permission Result ( result ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġon Take Screen sh ost () Ġ{ ĊĠĠĠĠĠĠĠ Ġstreaming Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ// ĠSetting Ġm Grab Frame Ġto Ġtrue Ġwill Ġtrigger Ġthe Ġvideo Ġframe Ġlistener Ġto Ġbecome Ġactive ĊĠĠĠĠĠĠĠ Ġif Ġ(! m Grab Frame . get () Ġ&& Ġ! m Saving Frame . get ()) Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġm Btn Screenshot !!. isEnabled Ġ= Ġfalse Ċ // ĠĠĠĠĠĠĠ Ġm Btn Screenshot !!. is Clickable Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Grab Frame . set ( true ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsync UI Control State () ĊĊĠĠĠĠĠĠĠ Ġ// ĠThe Ġactivity Ġmust Ġcall Ġthe ĠGL Ġsurface Ġview 's Ġon Resume () Ġon Ġactivity Ġon Resume (). ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġif Ġ(! m Devices Initialized ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit Go Coder Devices () ĊĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġthis . has Device Permission To Access ( object Ġ: ĠPermission Callback Interface Ġ{ Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Permission Result ( result : ĠBoolean ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! m Devices Initialized Ġ|| Ġresult ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit Go Coder Devices () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( session Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġexception : ĠException ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmessage : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( Ar Core A pk . getInstance (). request Install ( this , Ġ! install Requested )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAr Core A pk . Install Status . INSTALL _ REQUEST ED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstall Requested Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAr Core A pk . Install Status . INST ALLED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAR Core Ġrequires Ġcamera Ġpermissions Ġto Ġoperate . ĠIf Ġwe Ġdid Ġnot Ġyet Ġobtain Ġruntime ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġpermission Ġon ĠAndroid ĠM Ġand Ġabove , Ġnow Ġis Ġa Ġgood Ġtime Ġto Ġask Ġthe Ġuser Ġfor Ġit . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! Camera Permission Helper . has Camera Permission ( this )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCamera Permission Helper . request Camera Permission ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCreate Ġthe Ġsession . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsession Ġ= ĠSession (/* Ġcontext = Ġ*/ this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠUn available Ar core Not Installed Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġ" Please Ġinstall ĠAR Core " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexception Ġ= Ġe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠUn available User Decl ined Installation Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġ" Please Ġinstall ĠAR Core " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexception Ġ= Ġe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠUn available A pk Too Old Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġ" Please Ġupdate ĠAR Core " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexception Ġ= Ġe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠUn available Sdk Too Old Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġ" Please Ġupdate Ġthis Ġapp " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexception Ġ= Ġe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠUn available Device Not Compatible Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġ" This Ġdevice Ġdoes Ġnot Ġsupport ĠAR " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexception Ġ= Ġe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġ" Failed Ġto Ġcreate ĠAR Ġsession " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexception Ġ= Ġe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( message Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Snackbar Helper . show Error ( this , Ġmessage ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" Exception Ġcreating Ġsession ", Ġexception ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠNote Ġthat Ġorder Ġmatters Ġ- Ġsee Ġthe Ġnote Ġin Ġon Pause (), Ġthe Ġreverse Ġapplies Ġhere . ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsession !!. resume () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠCamera Not Available Exception ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsession Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsurface View !!. on Resume () ĊĠĠĠĠĠĠĠ Ġdisplay Rotation Helper !!. on Resume () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠThe Ġactivity Ġmust Ġcall Ġthe ĠGL Ġsurface Ġview 's Ġon Pause () Ġon Ġactivity Ġon Pause (). ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġsurface View . on Pause (); ĊĠĠĠĠĠĠĠ Ġif Ġ( session Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNote Ġthat Ġthe Ġorder Ġmatters Ġ- ĠGL Surface View Ġis Ġpaused Ġfirst Ġso Ġthat Ġit Ġdoes Ġnot Ġtry ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġto Ġquery Ġthe Ġsession . ĠIf ĠSession Ġis Ġpaused Ġbefore ĠGL Surface View , ĠGL Surface View Ġmay ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġstill Ġcall Ġsession . update () Ġand Ġget Ġa ĠSession Paused Exception . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay Rotation Helper !!. on Pause () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsurface View !!. on Pause () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsession !!. pause () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠClick Ġhandler Ġfor Ġthe Ġbroadcast Ġbutton ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġon Toggle Broadcast ( v : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( broadcast Ġ== Ġnull ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġif Ġ( broadcast . status . is Idle ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! m WZ Broadcast Config . is Video Enabled Ġ&& Ġ! m WZ Broadcast Config . is Audio Enabled ) Ġrun Ġ{ ĠToast . makeText ( this , Ġ" Unable Ġto Ġpublish Ġif Ġboth Ġaudio Ġand Ġvideo Ġare Ġdisabled ", ĠToast . LENGTH _ LONG ). show () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSet Ġthe Ġvideo Ġstream Ġbroadcast ing Ġsource Ġto Ġthe ĠW OW Z GL Broad caster Ġcreated Ġby Ġthe ĠOpenGL Renderer ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm WZ Broadcast Config . video Broad caster Ġ= Ġgl Broad caster ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGet Ġthe Ġcurrent Ġsurface Ġsize Ġto Ġuse Ġas Ġthe Ġvideo Ġstream Ġframe Ġsize ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġopen GL Surface Size Ġ= Ġsurface Size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm WZ Broadcast Config . video Frame Size Ġ= Ġopen GL Surface Size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm WZ Broadcast Config . video Source Config . video Frame Size Ġ= Ġopen GL Surface Size ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDisable Ġaudio Ġstreaming ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm WZ Broadcast Config . is Audio Enabled Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconfig Error Ġ= Ġstart Broadcast () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( config Error Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Status View Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Status View !!. set ErrorMessage ( config Error . error Description ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġend Broadcast () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠClick Ġhandler Ġfor Ġthe Ġsettings Ġbutton ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġfun Ġinit Go Coder Devices () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Go Coder SDK Activity Base . s Go Coder SDK Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġvideo IsInitialized Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġaudio IsInitialized Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠInitialize Ġthe Ġcamera Ġpreview Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this . has Device Permission To Access ( Manifest . permission . CAMERA )) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m WZ Camera View Ġ!= Ġnull ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġavailable Cam eras Ġ= Ġm WZ Camera View . getC am eras () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠEnsure Ġwe Ġcan Ġaccess Ġto Ġat Ġleast Ġone Ġcamera Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( available Cam eras . size Ġ> Ġ 0 ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSet Ġthe Ġvideo Ġbroad caster Ġin Ġthe Ġbroadcast Ġconfig Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbroadcast Config . video Broad caster Ġ= Ġm WZ Camera View Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvideo IsInitialized Ġ= Ġtrue Ċ // Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠThread () Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠW OW Z Log . debug (" *** Ġget Original Frame Sizes Ġ- ĠGet Ġoriginal Ġframe Ġsize Ġ: Ġ") Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprefs Fragment . setActive Camera ( if Ġ( m WZ Camera View Ġ!= Ġnull ) Ġm WZ Camera View . get Camera () Ġelse Ġnull ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Manager . beginTransaction (). replace ( android . R . id . content , Ġprefs Fragment ). hide ( prefs Fragment ). commit () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. start () Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Status View . set ErrorMessage (" Could Ġnot Ġdetect Ġor Ġgain Ġaccess Ġto Ġany Ġcameras Ġon Ġthis Ġdevice ") Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbroadcast Config . is Video Enabled Ġ= Ġfalse Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this . has Device Permission To Access ( Manifest . permission . RECORD _ AUDIO )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠInitialize Ġthe Ġaudio Ġinput Ġdevice Ġinterface ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm WZ Audio Device Ġ= ĠW OW Z Audio Device () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSet Ġthe Ġaudio Ġbroad caster Ġin Ġthe Ġbroadcast Ġconfig ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbroadcast Config . audio Broad caster Ġ= Ġm WZ Audio Device ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaudio IsInitialized Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( video IsInitialized Ġ&& Ġaudio IsInitialized ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Devices Initialized Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Settings ( v : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠDisplay Ġthe Ġprefs Ġfragment ĊĠĠĠĠĠĠĠ Ġval Ġprefs Fragment Ġ= ĠGo Coder SDK Prefs . Prefs Fragment () ĊĠĠĠĠĠĠĠ Ġif Ġ( this . has Device Permission To Access ( Manifest . permission . CAMERA ) Ġ&& Ġthis . has Device Permission To Access ( Manifest . permission . RECORD _ AUDIO )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠW OW Z Log . debug (" *** Ġget Original Frame Sizes ĠDo Ġwe Ġhave Ġpermission Ġ= Ġyes ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Manager . beginTransaction () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ( android . R . id . content , Ġprefs Fragment ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. addTo Back Stack ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show ( prefs Fragment ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. commit () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" You Ġmust Ġenable Ġaudio Ġ/ Ġvideo Ġaccess Ġto Ġupdate Ġthe Ġsettings ", ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġprefs Fragment . setActive Camera ( if Ġ( m WZ Camera View Ġ!= Ġnull ) Ġm WZ Camera View . get Camera () Ġelse Ġnull ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġprefs Fragment . set Fixed Video Source ( true ); ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġprefs Fragment . set Show Audio Prefs ( false ); ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġprefs Fragment . setActive Camera ( m WZ Camera View Ġ!= Ġnull Ġ? Ġm WZ Camera View . get Camera () Ġ: Ġnull ); ĊĊĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠ Ġ// ĠDisplay Ġthe Ġprefs Ġfragment ĊĊĠĠĠĠĠĠĠ ĠW OW Z Log . debug (" *** Ġget Original Frame Sizes Ġshow Settings 1 "); ĊĠĠĠĠĠĠĠ Ġprefs Fragment . setActive Camera ( m WZ Camera View Ġ!= Ġnull Ġ? Ġm WZ Camera View . get Camera () Ġ: Ġnull ); ĊĊĠĠĠĠĠĠĠ ĠW OW Z Log . debug (" *** Ġget Original Frame Sizes Ġshow Settings 2 "); ĊĠĠĠĠĠĠĠ Ġget FragmentManager (). add On Back Stack Changed Listener ( back Stack Listener ); ĊĠĠĠĠĠĠĠ Ġget FragmentManager (). beginTransaction () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ( android . R . id . content , Ġprefs Fragment ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. addTo Back Stack ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show ( prefs Fragment ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. commit (); ĊĠĠĠĠĠĠĠ ĠW OW Z Log . debug (" *** Ġget Original Frame Sizes Ġshow Settings 3 "); */ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠW OW Z Status Callback Ġinterface Ġmethods ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon WZ Status ( go Coder Status : ĠW OW Z Status ) Ġ{ ĊĠĠĠĠĠĠĠ ĠHandler ( Looper . get Main Looper ()). post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( go Coder Status . isRunning ) Ġ{ Ġ Ġ// ĠThe Ġstream Ġhas Ġstarted ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠKeep Ġthe Ġscreen Ġon Ġwhile Ġwe Ġare Ġbroadcast ing ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwindow . add Flags ( WindowManager . LayoutParams . FLAG _ KEEP _ SCREEN _ ON ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSince Ġwe Ġhave Ġsuccessfully Ġopened Ġup Ġthe Ġserver Ġconnection , Ġstore Ġthe Ġconnection Ġinfo Ġfor Ġauto Ġcomplete ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGo Coder SDK Prefs . store Host Config ( Preference Manager . getDefault SharedPreferences ( this @ OpenGL Activity ), Ġm WZ Broadcast Config ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTell Ġthe Ġrenderer Ġthat Ġstreaming Ġhas Ġstarted ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Stream Start () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( go Coder Status . is Idle ) Ġ{ Ġ// ĠThe Ġstream Ġhas Ġstopped ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠClear Ġthe Ġ" keep Ġscreen Ġon " Ġflag ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwindow . clear Flags ( WindowManager . LayoutParams . FLAG _ KEEP _ SCREEN _ ON ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTell Ġthe Ġrenderer Ġthat Ġstreaming Ġhas Ġstopped ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Stream End () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Status View Ġ!= Ġnull ) Ġm Status View !!. setStatus ( go Coder Status ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsync UI Control State () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon WZ Error ( go Coder Status : ĠW OW Z Status ) Ġ{ ĊĠĠĠĠĠĠĠ ĠHandler ( Looper . get Main Looper ()). post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Status View Ġ!= Ġnull ) Ġm Status View !!. setStatus ( go Coder Status ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsync UI Control State () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupload File ( bitmap : ĠBitmap ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsdf Ġ= ĠSimpleDateFormat (" dd - M - yyyy Ġhh : mm : ss ") ĊĠĠĠĠĠĠĠ Ġcurrent Date Ġ= Ġsdf . format ( Date ()) ĊĠĠĠĠĠĠĠ Ġval Ġstorage Ġ= ĠFirebase Storage . getInstance () ĊĠĠĠĠĠĠĠ Ġval Ġstorage Ref Ġ= Ġstorage . reference . child (" sc n Image ") ĊĠĠĠĠĠĠĠ Ġval Ġmount ain Images Ref Ġ= Ġstorage Ref . child (" images /" Ġ+ Ġcurrent Date Ġ+ Ġ" sc n Image " Ġ+ Ġ". jpg ") ĊĠĠĠĠĠĠĠ Ġval Ġba os Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠ Ġbitmap . compress ( Bitmap . Compress Format . JPEG , Ġ 2 0 , Ġba os ) ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġba os . toByteArray () ĊĠĠĠĠĠĠĠ Ġval Ġupload Task Ġ= Ġmount ain Images Ref . put Bytes ( data ) ĊĠĠĠĠĠĠĠ Ġupload Task . add On Failure Listener Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠHandle Ġun successful Ġuploads ĊĠĠĠĠĠĠĠ Ġ}. add On Success Listener Ġ{ Ġtask Snapshot Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġtask Snapshot . metadata !!. reference !!. download Url ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . add On Success Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimage Link Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" image ", Ġimage Link . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcity Ġ= Ġhash Map Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" imageUrl " Ġto Ġimage Link . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfire store DB !!. collection (" Check "). document (" image ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set ( city ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Success Listener Ġ{ ĠLog . d ( TAG , Ġ" Document Snapshot Ġsuccessfully Ġwritten !") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Failure Listener Ġ{ Ġe Ġ-> ĠLog . w ( TAG , Ġ" Error Ġwriting Ġdocument ", Ġe ) Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Ġ== Ġ" quick ") Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Credits (" user ", ĠSession Maint ain ence . instance !!. Uid , Ġ" 4 ", Ġ" quick ", Ġimage Link ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( type Ġ== Ġ" post ") Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Credits (" user ", ĠSession Maint ain ence . instance !!. Uid , Ġ" 2 ", Ġ" normal ", Ġimage Link ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprotected Ġfun Ġsync UI Control State (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdisable Controls Ġ= Ġbroadcast Ġ== Ġnull Ġ|| Ġ!( broadcast . status . is Idle Ġ|| Ġbroadcast . status . is Broadcast ing ) ĊĠĠĠĠĠĠĠ Ġval Ġis Streaming Ġ= Ġbroadcast Ġ!= Ġnull Ġ&& Ġbroadcast . status . is Broadcast ing ĊĊĠĠĠĠĠĠĠ Ġif Ġ( disable Controls ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Btn Broadcast Ġ!= Ġnull ) Ġm Btn Broadcast !!. isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Btn Settings Ġ!= Ġnull ) Ġm Btn Settings !!. isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Btn Broadcast Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Btn Broadcast !!. setState ( is Streaming ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Btn Broadcast !!. isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Btn Settings Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Btn Settings !!. isEnabled Ġ= Ġ! is Streaming ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġdisable Controls ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠHandle Ġonly Ġone Ġtap Ġper Ġframe , Ġas Ġt aps Ġare Ġusually Ġlow Ġfrequency Ġcompared Ġto Ġframe Ġrate . ĊĠĠĠ Ġprivate Ġfun Ġhandle Tap ( frame : ĠFrame , Ġcamera : ĠCamera ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtap Ġ= Ġtap Helper !!. poll () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( tap Ġ!= Ġnull Ġ&& Ġcamera . tracking State Ġ== ĠTracking State . TRACK ING ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpoint : Ġandroid . graphics . Point ? Ġ= Ġget Screen Center () Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhits Ġ= Ġframe . hit Test ( point . x . toFloat (), Ġpoint . y . toFloat ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( hit Ġin Ġframe . hit Test ( point !!. x . toFloat (), Ġpoint . y . toFloat ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCheck Ġif Ġany Ġplane Ġwas Ġhit , Ġand Ġif Ġit Ġwas Ġhit Ġinside Ġthe Ġplane Ġpolygon ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhit . track able . create Anchor ( hit . hit Pose ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtrack able Ġ= Ġhit . track able ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCreates Ġan Ġanchor Ġif Ġa Ġplane Ġor Ġan Ġorient ed Ġpoint Ġwas Ġhit . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( track able Ġis ĠPlane ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġtrack able . is Pose In Polygon ( hit . hit Pose ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& ĠPlane Renderer . calculate Distance To Plane ( hit . hit Pose , Ġcamera . pose ) Ġ> Ġ 0 ) Ġ|| Ġtrack able Ġis ĠPoint Ġ&& Ġtrack able . orientation Mode Ġ== ĠPoint . Orientation Mode . EST IM ATED _ SURFACE _ NORMAL ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠH its Ġare Ġsorted Ġby Ġdepth . ĠConsider Ġonly Ġclosest Ġhit Ġon Ġa Ġplane Ġor Ġorient ed Ġpoint . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCap Ġthe Ġnumber Ġof Ġobjects Ġcreated . ĠThis Ġavoids Ġover loading Ġboth Ġthe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġrendering Ġsystem Ġand ĠAR Core . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( anchors . size Ġ>= Ġ 2 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanchors [ 0 ]. anchor . detach () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanchors . remove At ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAssign Ġa Ġcolor Ġto Ġthe Ġobject Ġfor Ġrendering Ġbased Ġon Ġthe Ġtrack able Ġtype ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthis Ġanchor Ġattached Ġto . ĠFor ĠAR _ TRACK ABLE _ POINT , Ġit 's Ġblue Ġcolor , Ġand ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġfor ĠAR _ TRACK ABLE _ PL ANE , Ġit 's Ġgreen Ġcolor . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġobj Color : ĠFloat Array ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobj Color Ġ= Ġif Ġ( track able Ġis ĠPoint ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfloat ArrayOf ( 6 6 . 0 f , Ġ 1 3 3 . 0 f , Ġ 2 4 4 . 0 f , Ġ 2 5 5 . 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( track able Ġis ĠPlane ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfloat ArrayOf ( 1 3 9 . 0 f , Ġ 1 9 5 . 0 f , Ġ 7 4 . 0 f , Ġ 2 5 5 . 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDEFAULT _ COLOR ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdding Ġan ĠAnchor Ġtells ĠAR Core Ġthat Ġit Ġshould Ġtrack Ġthis Ġposition Ġin ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġspace . ĠThis Ġanchor Ġis Ġcreated Ġon Ġthe ĠPlane Ġto Ġplace Ġthe Ġ 3 D Ġmodel ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġin Ġthe Ġcorrect Ġposition Ġrelative Ġboth Ġto Ġthe Ġworld Ġand Ġto Ġthe Ġplane . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanchors . add ( Colo red Anchor ( hit . create Anchor (), Ġobj Color )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġelse Ġ{ Ġhandle Move Event ( now Touch ing Point Index ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠChecks Ġif Ġwe Ġdetected Ġat Ġleast Ġone Ġplane . Ġ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġhas Tracking Plane (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( plane Ġin Ġsession !!. getAll Track ables ( Plane :: class . java )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( plane . tracking State Ġ== ĠTracking State . TRACK ING ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} Ċ // ĠĠĠ Ġprivate Ġfun Ġhandle Move Event ( now SelectedIndex : ĠInt ) Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġtry Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( show ing Tap Point X . size Ġ< Ġ 1 Ġ|| Ġqueued Scroll Dx . size Ġ< Ġ 2 ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġno Ġaction , Ġdon 't Ġmove Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( now Touch ing Point Index Ġ== ĠDEFAULT _ VALUE ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġno Ġselected Ġcube , Ġdon 't Ġmove Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( now SelectedIndex Ġ>= Ġshowing Tap Point X . size ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwrong Ġindex , Ġdon 't Ġmove . Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġscroll Dx Ġ= Ġ 0 f Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġscroll Dy Ġ= Ġ 0 f Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscroll Queue Size Ġ= Ġqueued Scroll Dx . size Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġscroll Queue Size ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscroll Dx Ġ+= Ġqueued Scroll Dx . poll () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscroll Dy Ġ+= Ġqueued Scroll Dy . poll () Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Vertical Mode ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanchor Ġ= Ġanchors . remove At ( now SelectedIndex ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanchor . detach () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Pose DataTo Temp Array ( get Pose ( anchor )) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog ( TAG , Ġ" point [" Ġ+ Ġnow SelectedIndex Ġ+ Ġ"] Ġmove Ġvertical Ġ"+ Ġ( scroll Dy Ġ/ Ġview Height ) Ġ+ Ġ", Ġt Y =" Ġ+ Ġtemp Translation [ 1 ] Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ", Ġnew Ġt Y =" Ġ+ Ġ( temp Translation [ 1 ] Ġ+= Ġ( scroll Dy Ġ/ Ġview Height ))); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Translation [ 1 ] Ġ+= Ġscroll Dy Ġ/ Ġview Height Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanchors . add ( now SelectedIndex , Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsession . create Anchor ( Pose ( temp Translation , Ġtemp Rotation ))) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġto X Ġ= Ġshowing Tap Point X . get ( now SelectedIndex ) Ġ- Ġscroll Dx Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshowing Tap Point X . remove At ( now SelectedIndex ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshowing Tap Point X . add ( now SelectedIndex , Ġto X ) Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġto Y Ġ= Ġshowing Tap Point Y . get ( now SelectedIndex ) Ġ- Ġscroll Dy Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshowing Tap Point Y . remove At ( now SelectedIndex ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshowing Tap Point Y . add ( now SelectedIndex , Ġto Y ) Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( anchors . size Ġ> Ġnow SelectedIndex ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanchor Ġ= Ġanchors . remove At ( now SelectedIndex ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanchor . detach () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġremove Ġduplicated Ġanchor Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Pose DataTo Temp Array ( get Pose ( anchor )) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Translation [ 0 ] Ġ-= Ġscroll Dx Ġ/ Ġview Width Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Translation [ 2 ] Ġ-= Ġscroll Dy Ġ/ Ġview Height Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanchors . add ( now SelectedIndex , Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsession . create Anchor ( Pose ( temp Translation , Ġtemp Rotation ))) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠNot Tracking Exception ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgain Rendering Lock (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġsynchronized ( m Rendering Lock ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( m Rendering ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Rendering Lock . wait () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠInterruptedException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Rendering Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUsed Ġto Ġrelease Ġthe Ġlock Ġobtained Ġin Ġa Ġcall Ġto Ġ[. gain Rendering Lock ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġrelease Rendering Lock () Ġ{ ĊĠĠĠĠĠĠĠ Ġsynchronized ( m Rendering Lock ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Rendering Ġ= Ġfalse Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġm Rendering Lock . notify All () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrender Frame () Ġ{ ĊĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠ Ġgain Rendering Lock (); ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠObtain Ġthe Ġcurrent Ġframe Ġfrom ĠAR Session . ĠWhen Ġthe Ġconfiguration Ġis Ġset Ġto ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUpdate Mode . BLOCK ING Ġ( it Ġis Ġby Ġdefault ), Ġthis Ġwill Ġthrottle Ġthe Ġrendering Ġto Ġthe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcamera Ġfram erate . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġframe Ġ= Ġframe 1 // session . update (); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcamera Ġ= Ġcamera 1 // frame . get Camera (); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠHandle Ġone Ġtap Ġper Ġframe . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Tap ( frame , Ġcamera ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġframe Ġis Ġready , Ġrender Ġcamera Ġpreview Ġimage Ġto Ġthe ĠGL Ġsurface . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbackground Renderer . draw ( frame ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠKeep Ġthe Ġscreen Ġun locked Ġwhile Ġtracking , Ġbut Ġallow Ġit Ġto Ġlock Ġwhen Ġtracking Ġstops . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtracking State Helper . update Keep Screen On Flag ( camera . tracking State ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġnot Ġtracking , Ġdon 't Ġdraw Ġ 3 D Ġobjects , Ġshow Ġtracking Ġfailure Ġreason Ġinstead . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( camera . tracking State Ġ== ĠTracking State . PA USED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Tracking State Helper . get Tracking Failure Reason String ( camera ), Toast . LENGTH _ SHORT ). show (); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" value ", ĠTracking State Helper . get Tracking Failure Reason String ( camera )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGet Ġprojection Ġmatrix . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproj mtx Ġ= ĠFloat Array ( 1 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcamera . get Projection Matrix ( proj mtx , Ġ 0 , Ġ 0 . 1 f , Ġ 1 0 0 . 0 f ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGet Ġcamera Ġmatrix Ġand Ġdraw . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview mtx Ġ= ĠFloat Array ( 1 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcamera . getView Matrix ( view mtx , Ġ 0 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCompute Ġlight ing Ġfrom Ġaverage Ġintensity Ġof Ġthe Ġimage . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe Ġfirst Ġthree Ġcomponents Ġare Ġcolor Ġscaling Ġfactors . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe Ġlast Ġone Ġis Ġthe Ġaverage Ġpixel Ġintensity Ġin Ġgamma Ġspace . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolor Correction Rg ba Ġ= ĠFloat Array ( 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġframe . light Estimate . getColor Correction ( color Correction Rg ba , Ġ 0 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠVisual ize Ġtracked Ġpoints . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUse Ġtry - with - resources Ġto Ġautomatically Ġrelease Ġthe Ġpoint Ġcloud . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠĠ Ġtry Ġ( PointCloud Ġpoint Cloud Ġ= Ġframe . acquire PointCloud ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpoint Cloud Renderer . update ( point Cloud ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpoint Cloud Renderer . draw ( view mtx , Ġproj mtx ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}*/ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNo Ġtracking Ġerror Ġat Ġthis Ġpoint . ĠIf Ġwe Ġdetected Ġany Ġplane , Ġthen Ġhide Ġthe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġmessage ĠUI , Ġotherwise Ġshow Ġsearching Plane Ġmessage . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( has Tracking Plane ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Snackbar Helper . hide ( this ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , SEARCH ING _ PL ANE _ MESSAGE , Toast . LENGTH _ SHORT ). show (); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" test ", ĠSEARCH ING _ PL ANE _ MESSAGE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠVisual ize Ġplanes . ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/// ĠĠĠĠĠĠĠĠĠĠĠ Ġplane Renderer . draw Planes ( cp , Ġcamera . getDisplay Oriented Pose (), Ġproj mtx ); ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠ Ġgain Rendering Lock (); ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠVisual ize Ġanchors Ġcreated Ġby Ġtouch . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscale Factor Ġ= Ġ 1 . 0 f ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( colored Anchor Ġin Ġanchors ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( colored Anchor . anchor . tracking State Ġ!= ĠTracking State . TRACK ING ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGet Ġthe Ġcurrent Ġpose Ġof Ġan ĠAnchor Ġin Ġworld Ġspace . ĠThe ĠAnchor Ġpose Ġis Ġupdated ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġduring Ġcalls Ġto Ġsession . update () Ġas ĠAR Core Ġref ines Ġits Ġestimate Ġof Ġthe Ġworld . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolored Anchor . anchor . pose . to Matrix ( anchor Matrix , Ġ 0 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUpdate Ġand Ġdraw Ġthe Ġmodel Ġand Ġits Ġshadow . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvirtual Object . update Model Matrix ( anchor Matrix , Ġscale Factor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvirtual Object Shadow . update Model Matrix ( anchor Matrix , Ġscale Factor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvirtual Object . draw ( view mtx , Ġproj mtx , Ġcolor Correction Rg ba , Ġcolored Anchor . color ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvirtual Object Shadow . draw ( view mtx , Ġproj mtx , Ġcolor Correction Rg ba , Ġcolored Anchor . color ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠ Ġlong Ġtime Ġ= ĠSystem Clock . uptime Millis () Ġ% Ġ 1 0 0 0 0 L ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠ Ġfloat Ġangle In Degrees Ġ= Ġ( 3 6 0 . 0 f Ġ/ Ġ 1 0 0 0 0 . 0 f ) Ġ* Ġ(( int ) Ġtime ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠ ĠsetCurrent Angle ( angle In Degrees ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġstreaming , Ġrender Ġa Ġ 2 nd Ġpass Ġto Ġthe Ġvideo Ġencoder ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠ Ġrelease Rendering Lock (); ĊĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( t : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAvoid Ġcrash ing Ġthe Ġapplication Ġdue Ġto Ġunhandled Ġexceptions . ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtake Screenshot () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnow Ġ= ĠDate () ĊĠĠĠĠĠĠĠ Ġandroid . text . format . DateFormat . format (" yyyy - MM - dd _ hh : mm : ss ", Ġnow ) ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġimage Ġnaming Ġand Ġpath Ġ Ġto Ġinclude Ġsd Ġcard Ġ Ġapp ending Ġname Ġyou Ġchoose Ġfor Ġfile ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm Path Ġ= ĠEnvironment . get External Storage Directory (). toString () Ġ+ Ġ"/" Ġ+ Ġnow Ġ+ Ġ". jpg " ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcreate Ġbitmap Ġscreen Ġcapture ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġv 1 Ġ= Ġget Window (). get Decor View (). getRoot View () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv 1 . set Drawing Cache Enabled ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbitmap Ġ= ĠBitmap . create Bitmap ( v 1 . get Drawing Cache ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv 1 . set Drawing Cache Enabled ( false ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimage File Ġ= ĠFile ( m Path ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠoutputStream Ġ= ĠFileOutputStream ( image File ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġquality Ġ= Ġ 1 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġs Ġ= Ġbitmap . compress ( Bitmap . Compress Format . JPEG , Ġquality , ĠoutputStream ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( image File . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy Bitmap Ġ= ĠBitmap Factory . decode File ( image File . absolute Path ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠoutputStream . flush () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠoutputStream . close () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġupload File ( my Bitmap !! ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSe veral Ġerror Ġmay Ġcome Ġout Ġwith Ġfile Ġhandling Ġor ĠDOM ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġopen Screenshot ( s : ĠBitmap ) Ġ{ ĊĠĠĠĠĠĠĠ ĠTODO (" not Ġimplemented ") Ġ// To Ġchange Ġbody Ġof Ġcreated Ġfunctions Ġuse ĠFile Ġ| ĠSettings Ġ| ĠFile ĠTemplates . ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Screen Center (): Ġandroid . graphics . Point Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġandroid . graphics . Point ( 5 0 , Ġ 5 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () Ċ // ĠĠĠĠĠĠĠ Ġfire store Listener !!. remove () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠTAG Ġ= ĠOpenGL Activity :: class . java . simple Name ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠDEFAULT _ COLOR Ġ= Ġfloat ArrayOf ( 2 5 5 f , Ġ 0 f , Ġ 0 f , Ġ 0 f ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠSEARCH ING _ PL ANE _ MESSAGE Ġ= Ġ" Searching Ġfor Ġsurfaces ..." ĊĠĠĠ Ġ} Ċ } Ċ