package Ġcom . example . an atom y viewer . ar Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . Bitmap Factory Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġcom . example . an atom y viewer . ar . di . Ar Module Ċ import Ġcom . example . an atom y viewer . ar . di . D agger Ar Component Ċ import Ġcom . example . an atom y viewer . ar . helpers . Ui Event Ċ import Ġcom . example . an atom y viewer . ar . ui . Ar Overlay View Ċ import Ġcom . example . an atom y viewer . ar . ui . Ar ViewModel Ċ import Ġcom . google . ar . core .* Ċ import Ġcom . google . ar . scene form . Frame Time Ċ import Ġcom . google . ar . scene form . ux . Ar Fragment Ċ import Ġjava . io . IOException Ċ import Ġjava . lang . IllegalArgumentException Ċ import Ġjavax . inject . Inject Ċ Ċ open Ġclass ĠAn atom y Viewer Fragment Ġ: ĠAr Fragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠTAG Ġ= ĠAn atom y Viewer Fragment :: class . java . toString () ĊĊĠĠĠ Ġ// ĠViewModel Ġcontaining Ġcommon Ġdata Ġand ĠLive Data Ġfor Ġui - updates ĊĠĠĠ Ġlateinit Ġvar Ġar ViewModel : ĠAr ViewModel ĊĊĠĠĠ Ġ// ĠObject Ġwrapping Ġthe Ġlogic Ġof Ġthe ĠAR Ġsession . ĊĠĠĠ Ġ@ Inject Ġlateinit Ġvar Ġar Director : ĠAr Director ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġ Ġsuper . onCreate View ( in flater , Ġcontainer , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġ// Inst antiate Ġthe ĠViewModel ĊĠĠĠĠĠĠĠ Ġar ViewModel Ġ= ĠViewModel Provider ( this ). get ( Ar ViewModel :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġinject Ar Organ izer () ĊĠĠĠĠĠĠĠ Ġar Director . start () ĊĠĠĠĠĠĠĠ Ġreturn Ġview ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġsetup Ui () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Session Configuration ( session : ĠSession ): ĠConfig Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconfig Ġ= Ġsuper . getSession Configuration ( session ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠLight ning Ġsettings ĊĠĠĠĠĠĠĠ Ġconfig . light Estimation Mode Ġ= ĠConfig . Light Estimation Mode . AM BI ENT _ INT ENS ITY ĊĠĠĠĠĠĠĠ Ġconfig . focus Mode Ġ= ĠConfig . Focus Mode . AUTO ĊĊĠĠĠĠĠĠĠ Ġ// ĠSetup ĠAug ment ed Image Database ĊĠĠĠĠĠĠĠ Ġif Ġ(! setup Aug ment ed Image Database ( require Context (), Ġconfig , Ġsession )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( require Context (), Ġ" Could Ġnot Ġsetup Ġimage Ġdatabase ", ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġconfig ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun ĠonUpdate ( frame Time : ĠFrame Time ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Update ( frame Time ) ĊĠĠĠĠĠĠĠ Ġval Ġframe Ġ= Ġthis . ar Scene View . ar Frame Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġar Director . on Update ( frame ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinject Ar Organ izer () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠThis Ġmakes Ġdagger Ġinject Ġthe ĠAr Organ izer , Ġand Ġall Ġits Ġdependencies . ĊĠĠĠĠĠĠĠ Ġ// Make Ġdagger Ġinject Ġar Organ izer Ġand Ġall Ġof Ġits Ġdependencies ĊĠĠĠĠĠĠĠ ĠD agger Ar Component . builder (). ar Module ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAr Module ( ar ViewModel , Ġar Scene View , transformation System , Ġrequire Context (), Ġview Lifecycle Owner ) ĊĠĠĠĠĠĠĠ Ġ). build (). inject ( this ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġsetup Ui (){ ĊĠĠĠĠĠĠĠ Ġthis . plane Discovery Controller . hide () ĊĠĠĠĠĠĠĠ Ġthis . plane Discovery Controller . set Instruction View ( null ) ĊĠĠĠĠĠĠĠ Ġthis . ar Scene View . plane Renderer . isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġsetup Ar Overlay () ĊĠĠĠĠĠĠĠ Ġsetup Reset Observer () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Ar Overlay () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠDisable Ġthe Ġdefault Ġscan Ġinstruction ĊĠĠĠĠĠĠĠ Ġplane Discovery Controller . hide () ĊĠĠĠĠĠĠĠ Ġplane Discovery Controller . set Instruction View ( null ) ĊĊĠĠĠĠĠĠĠ Ġ( view Ġas ? ĠViewGroup )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġar Overlay View Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAr Overlay View ( it . context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . addView ( ar Overlay View ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġar Overlay View . set ViewModel ( ar ViewModel , Ġview Lifecycle Owner ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Reset Observer () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠSetup Ġa Ġlistener Ġfor Ġreset - requests Ġin Ġthe ĠAR - World Ġin Ġwhich Ġcase Ġthis Ġfragment Ġneeds Ġto Ġbe Ġre - initialized ĊĠĠĠĠĠĠĠ Ġar ViewModel . ui Events . observe ( view Lifecycle Owner , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ== ĠUi Event . RESET _ BUTTON _ CLICK ED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . ar Scene View . pause () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( An atom y Viewer Fragment Directions . action An atom y Viewer Fragment Self ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Aug ment ed Image Database ( context : ĠContext , Ġconfig : ĠConfig , Ġsession : ĠSession ): ĠBoolean Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun Ġload Aug ment ed Image Bitmap ( image Name : ĠString ): ĠBitmap Ġ= Ġcontext . assets . open ( image Name ). use Ġ{ Ġreturn ĠBitmap Factory . decode Stream ( it ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfig . augment ed Image Database Ġ= ĠAug ment ed Image Database ( session ). also Ġ{ Ġdatabase Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase . add Image ( ar ViewModel . IMAGE _ 1 _ NAME , load Aug ment ed Image Bitmap ( ar ViewModel . IMAGE _ 1 _ NAME )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase . add Image ( ar ViewModel . IMAGE _ 2 _ NAME , load Aug ment ed Image Bitmap ( ar ViewModel . IMAGE _ 2 _ NAME )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIllegalArgumentException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG ," Could Ġnot Ġadd Ġbitmap Ġto Ġaugment ed Ġimage Ġdatabase ", Ġe ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" IO Ġexception Ġloading Ġaugment ed Ġimage Ġbitmap ", Ġe ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} Ċ Ċ }