/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠGoogle ĠLLC Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . google . ar . core . examples . java . ml Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . lifecycle . Default Lifecycle Observer Ċ import Ġandroidx . lifecycle . Lifecycle Owner Ċ import Ġcom . google . ar . core . Ar Core A pk Ċ import Ġcom . google . ar . core . Session Ċ import Ġcom . google . ar . core . examples . java . common . helpers . Camera Permission Helper Ċ import Ġcom . google . ar . core . exceptions . Camera Not Available Exception Ċ Ċ /** Ċ Ġ* ĠMan ages Ġan ĠAR Core ĠSession Ġusing Ġthe ĠAndroid ĠLifecycle ĠAPI . Ċ Ġ* ĠBefore Ġstarting Ġa ĠSession , Ġthis Ġclass Ġrequests Ġan Ġinstall Ġof ĠAR Core , Ġif Ġnecessary , Ċ Ġ* Ġand Ġasks Ġthe Ġuser Ġfor Ġpermissions , Ġif Ġnecessary . Ċ Ġ*/ Ċ class ĠAR Core Session Lifecycle Helper ( ĊĠ Ġval Ġactivity : ĠActivity , ĊĠ Ġval Ġfeatures : ĠSet < Session . Feature > Ġ= Ġset Of () Ċ ) Ġ: ĠDefault Lifecycle Observer Ġ{ ĊĠ Ġvar Ġinstall Requested Ġ= Ġfalse ĊĠ Ġvar Ġsession Cache : ĠSession ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġset ĊĊĠ Ġ// ĠCreating Ġa ĠSession Ġmay Ġfail . ĠIn Ġthis Ġcase , Ġsession Cache Ġwill Ġremain Ġnull , Ġand Ġthis Ġfunction Ġwill Ġbe Ġcalled Ġwith Ġan Ġexception . ĊĠ Ġ// ĠSee Ġhttps :// developers . google . com / ar / reference / java / com / google / ar / core / Session # Session ( android . content . Context ) ĊĠ Ġ// Ġfor Ġmore Ġinformation . ĊĠ Ġvar Ġexception Callback : Ġ(( Exception ) Ġ-> ĠUnit )? Ġ= Ġnull ĊĊĠ Ġ// ĠAfter Ġcreating Ġa Ġsession , Ġbut Ġbefore ĠSession . resume Ġis Ġcalled Ġis Ġthe Ġperfect Ġtime Ġto Ġsetup Ġa Ġsession . ĊĠ Ġ// ĠGener ally , Ġyou Ġwould Ġuse ĠSession . configure Ġor Ġset Camera Config Ġhere . ĊĠ Ġ// Ġhttps :// developers . google . com / ar / reference / java / com / google / ar / core / Session # public - void - configure - config - config ĊĠ Ġ// Ġhttps :// developers . google . com / ar / reference / java / com / google / ar / core / Session # set Camera Config ( com . google . ar . core . Camera Config ) ĊĠ Ġvar Ġbefore Session Resume : Ġ(( Session ) Ġ-> ĠUnit )? Ġ= Ġnull ĊĊĠ Ġ// ĠCreates Ġa Ġsession . ĠIf ĠAR Core Ġis Ġnot Ġinstalled , Ġan Ġinstallation Ġwill Ġbe Ġrequested . ĊĠ Ġfun Ġtry Create Session (): ĠSession ? Ġ{ ĊĠĠĠ Ġ// ĠRequest Ġan Ġinstallation Ġif Ġnecessary . ĊĠĠĠ Ġwhen Ġ( Ar Core A pk . getInstance (). request Install ( activity , Ġ! install Requested ) !! ) Ġ{ ĊĠĠĠĠĠ ĠAr Core A pk . Install Status . INSTALL _ REQUEST ED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġinstall Requested Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ// Ġtry Create Session Ġwill Ġbe Ġcalled Ġagain , Ġso Ġwe Ġreturn Ġnull Ġfor Ġnow . ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ ĠAr Core A pk . Install Status . INST ALLED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠLeft Ġempty ; Ġnothing Ġneeds Ġto Ġbe Ġdone ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠCreate Ġa Ġsession Ġif ĠAR Core Ġis Ġinstalled . ĊĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠ ĠSession ( activity , Ġfeatures ) ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠ Ġexception Callback ?. invoke ( e ) ĊĠĠĠĠĠ Ġnull ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Resume ( owner : ĠLifecycle Owner ) Ġ{ ĊĠĠĠ Ġif Ġ(! Camera Permission Helper . has Camera Permission ( activity )) Ġ{ ĊĠĠĠĠĠ ĠCamera Permission Helper . request Camera Permission ( activity ) ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġsession Ġ= Ġtry Create Session () Ġ?: Ġreturn ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ Ġbefore Session Resume ?. invoke ( session ) ĊĠĠĠĠĠ Ġsession . resume () ĊĠĠĠĠĠ Ġsession Cache Ġ= Ġsession ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠCamera Not Available Exception ) Ġ{ ĊĠĠĠĠĠ Ġexception Callback ?. invoke ( e ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Pause ( owner : ĠLifecycle Owner ) Ġ{ ĊĠĠĠ Ġsession Cache ?. pause () ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Destroy ( owner : ĠLifecycle Owner ) Ġ{ ĊĠĠĠ Ġ// ĠExplicit ly Ġclose ĠAR Core ĠSession Ġto Ġrelease Ġnative Ġresources . ĊĠĠĠ Ġ// ĠReview Ġthe ĠAPI Ġreference Ġfor Ġimportant Ġconsider ations Ġbefore Ġcalling Ġclose () Ġin Ġapps Ġwith ĊĠĠĠ Ġ// Ġmore Ġcomplicated Ġlifecycle Ġrequirements : ĊĠĠĠ Ġ// Ġhttps :// developers . google . com / ar / reference / java / ar core / reference / com / google / ar / core / Session # close () ĊĠĠĠ Ġsession Cache ?. close () ĊĠĠĠ Ġsession Cache Ġ= Ġnull ĊĠ Ġ} ĊĊĠ Ġfun Ġon Request Permissions Result ( ĊĠĠĠ Ġrequest Code : ĠInt , ĊĠĠĠ Ġpermissions : ĠArray < out ĠString >, ĊĠĠĠ Ġgrant Results : ĠInt Array ĊĠ Ġ) Ġ{ ĊĠĠĠ Ġif Ġ(! Camera Permission Helper . has Camera Permission ( activity )) Ġ{ ĊĠĠĠĠĠ ĠToast . makeText ( activity , Ġ" Camera Ġpermission Ġis Ġneeded Ġto Ġrun Ġthis Ġapplication ", ĠToast . LENGTH _ LONG ) ĊĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠ Ġif Ġ(! Camera Permission Helper . should Show Request Permission R ationale ( activity )) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠPermission Ġdenied Ġwith Ġchecking Ġ" Do Ġnot Ġask Ġagain ". ĊĠĠĠĠĠĠĠ ĠCamera Permission Helper . launch Permission Settings ( activity ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġactivity . finish () ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ