package Ġorg . end my op ia . calc . measure Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . View . GONE Ċ import Ġandroid . view . View . VISIBLE Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . view . WindowManager Ċ import Ġandroid . widget . Frame Layout Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . preference . Preference Manager Ċ import Ġcom . google . ar . core . Aug ment ed Face Ċ import Ġcom . google . ar . core . Config Ċ import Ġcom . google . ar . core . Config . Aug ment ed Face Mode Ċ import Ġcom . google . ar . core . Session Ċ import Ġcom . google . ar . scene form . Frame Time Ċ import Ġcom . google . ar . scene form . rendering . Render able Ċ import Ġcom . google . ar . scene form . ux . Ar Fragment Ċ import Ġorg . end my op ia . calc . util . debug Ċ import Ġorg . end my op ia . calc . util . is Em ulator Ċ import Ġjava . util .* Ċ import Ġkotlin . random . Random Ċ Ċ class ĠFace Ar Fragment Ġ: ĠAr Fragment () Ġ{ ĊĊĊĠĠĠ Ġprivate Ġvar Ġlast Update Ġ= Ġ- 1 L ĊĊĠĠĠ Ġprivate Ġvar Ġface Found Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġcon sequent Empty Frames Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġval ĠCON SEQU ENT _ FR AMES _ COUNT _ LIMIT Ġ= Ġ 3 ĊĊĠĠĠ Ġprivate Ġval ĠUPDATE _ INTERVAL Ġ= Ġ 5 0 0 L Ġ// ms ĊĊĠĠĠ Ġval ĠonUpdate Listener : Ġ( Frame Time ) Ġ-> ĠUnit Ġ= Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnow Ġ= ĠSystem . currentTimeMillis () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( now Ġ- ĠUPDATE _ INTERVAL Ġ< Ġlast Update ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ run ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġface List Ġ= Ġar Scene View . session !!. getAll Track ables ( Aug ment ed Face :: class . java ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( face List . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġface Found Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcon sequent Empty Frames ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Preference Manager . getDefault SharedPreferences ( require Context ()). getBoolean ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" measure _ with _ gesture ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ&& Ġface Found Ġ&& Ġcon sequent Empty Frames Ġ>= ĠCON SEQU ENT _ FR AMES _ COUNT _ LIMIT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġface Found Ġ= Ġfalse ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcon sequent Empty Frames Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( parent Fragment Ġas ĠMeasure Fragment ). take Measurement () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMake Ġnew ĠAug ment ed Face Nodes Ġfor Ġany Ġnew Ġfaces . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( face Ġin Ġface List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnose Pose Ġ= Ġface . get Region Pose ( Aug ment ed Face . Region Type . NO SE _ TIP ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnose Translation Ġ= Ġnose Pose . translation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdist Met ers Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMath . sqrt (( nose Translation [ 0 ] Ġ* Ġnose Translation [ 0 ] Ġ+ Ġnose Translation [ 1 ] Ġ* Ġnose Translation [ 1 ] Ġ+ Ġnose Translation [ 2 ] Ġ* Ġnose Translation [ 2 ]). toDouble ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( parent Fragment Ġas ĠMeasure Fragment ). update ( dist Met ers ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Em ulator ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( parent Fragment Ġas ĠMeasure Fragment ). update ( Random . next Double ( 0 . 1 , Ġ 1 . 5 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Update Ġ= Ġnow ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġval Ġholder : ĠMeasure State Holder Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠViewModel Provider ( require Activity ()). get ( Measure State Holder :: class . java ) ĊĠĠĠĠĠĠĠ Ġif Ġ( holder . has Taken Measurement . value Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġar Scene View . pause () ĊĠĠĠĠĠĠĠ Ġ} Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġar Scene View . resume () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Session Configuration ( session : ĠSession ): ĠConfig Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconfig Ġ= ĠConfig ( session ) ĊĠĠĠĠĠĠĠ Ġconfig . augment ed Face Mode Ġ= ĠAug ment ed Face Mode . MESH 3 D ĊĠĠĠĠĠĠĠ Ġreturn Ġconfig ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Session Features (): ĠSet < Session . Feature > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠEnum Set . of < Session . Feature >( Session . Feature . FRONT _ CAMERA ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠOverride Ġto Ġturn Ġoff Ġplane Discovery Controller . ĠPlane Ġtrack ables Ġare Ġnot Ġsupported Ġwith Ġthe ĊĠĠĠĠ Ġ* Ġfront Ġcamera . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġframe Layout Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . onCreate View ( in flater , Ġcontainer , ĠsavedInstanceState ) Ġas ĠFrame Layout ? ĊĊĠĠĠĠĠĠĠ Ġplane Discovery Controller . hide () ĊĠĠĠĠĠĠĠ Ġplane Discovery Controller . set Instruction View ( null ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġframe Layout ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Window Focus Changed ( has Focus : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// this Ġprevents Ġfullscreen , Ġsee Ġhttps :// github . com / google - ar / scene form - android - sdk / issues / 8 8 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onStart () ĊĠĠĠĠĠĠĠ Ġdebug (" onStart == =") ĊĠĠĠĠĠĠĠ Ġ// ĠThis Ġis Ġimportant Ġto Ġmake Ġsure Ġthat Ġthe Ġcamera Ġstream Ġrenders Ġfirst Ġso Ġthat ĊĠĠĠĠĠĠĠ Ġ// Ġthe Ġface Ġmesh Ġoc clusion Ġworks Ġcorrectly . ĊĠĠĠĠĠĠĠ Ġar Scene View . camera Stream Render Priority Ġ= ĠRender able . RENDER _ PRIORITY _ FIRST ĊĊĠĠĠĠĠĠĠ Ġval Ġholder : ĠMeasure State Holder Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠViewModel Provider ( require Activity ()). get ( Measure State Holder :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġholder . has Taken Measurement . observe ( require Activity (), Ġandroidx . lifecycle . Observer Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Taken Measurement ( it ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġar Scene View . scene . add On Update Listener ( on Update Listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Stop () Ġ{ ĊĠĠĠĠĠĠĠ Ġar Scene View . scene . remove On Update Listener ( on Update Listener ) ĊĠĠĠĠĠĠĠ Ġsuper . on Stop () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Taken Measurement ( has Taken It : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdebug (" handle Taken Measurement , Ġ$ has Taken It ") ĊĠĠĠĠĠĠĠ Ġif Ġ( has Taken It ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġar Scene View . pause () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġar Scene View . visibility Ġ= ĠG ONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. window ?. clear Flags ( WindowManager . LayoutParams . FLAG _ KEEP _ SCREEN _ ON ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcon sequent Empty Frames Ġ= Ġ 0 ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġar Scene View . resume () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġar Scene View . visibility Ġ= ĠVIS IBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. window ?. add Flags ( WindowManager . LayoutParams . FLAG _ KEEP _ SCREEN _ ON ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }