package Ġcom . k yle cor ry . trail _ sense . navigation . ui Ċ Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Seek Bar Ċ import Ġandroidx . camera . view . Preview View Ċ import Ġandroidx . core . view . isVisible Ċ import Ġandroidx . lifecycle . Lifecycle Owner Ċ import Ġcom . k yle cor ry . and rome da . alerts . Alerts Ċ import Ġcom . k yle cor ry . and rome da . camera . Camera Ċ import Ġcom . k yle cor ry . and rome da . preferences . Preferences Ċ import Ġcom . k yle cor ry . trail _ sense . R Ċ import Ġcom . k yle cor ry . trail _ sense . tools . flash light . infrastructure . Flash light Handler Ċ import Ġkotlin . math . round ToInt Ċ Ċ class ĠS ight ing Comp ass View ( ĊĠĠĠ Ġprivate Ġval Ġlifecycle Owner : ĠLifecycle Owner , ĊĠĠĠ Ġprivate Ġval Ġpreview : ĠPreview View , ĊĠĠĠ Ġprivate Ġval Ġret icle : ĠView , ĊĠĠĠ Ġprivate Ġval Ġzoom : ĠSeek Bar Ċ ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġcamera Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠCamera ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreview . context , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlifecycle Owner , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreview View Ġ= Ġpreview , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanalyze Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġprefs Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠPreferences ( preview . context ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġzoom Listener Ġ= Ġobject Ġ: ĠSeek Bar . On Seek Bar ChangeListener Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Progress Changed ( seek Bar : ĠSeek Bar ?, Ġprogress : ĠInt , Ġfrom User : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġzoom Ġ= Ġ( progress Ġ/ Ġ 1 0 0 f ). coerce In ( 0 f , Ġ 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcamera . set Zoom ( zoom ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprefs . put Float ( Navigator Fragment . CACHE _ CAMERA _ ZO OM , Ġzoom ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonStart Tracking Touch ( seek Bar : ĠSeek Bar ?) Ġ{} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Stop Tracking Touch ( seek Bar : ĠSeek Bar ?) Ġ{} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġ_ isRunning Ġ= Ġfalse ĊĊĠĠĠ Ġfun Ġstart () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! Camera . is Available ( preview . context )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcamera . start ( this :: on Camera Update ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAlert s . toast ( preview . context , Ġpreview . context . getString ( R . string . no _ camera _ access )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstop () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ_ isRunning Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġzoom . setOn Seek Bar ChangeListener ( zoom Listener ) ĊĊĠĠĠĠĠĠĠ Ġpreview . isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġret icle . isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġzoom . isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġzoom . progress Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( 1 0 0 Ġ* Ġ( prefs . get Float ( Navigator Fragment . CACHE _ CAMERA _ ZO OM ) Ġ?: Ġ 0 . 5 f )). round ToInt () ĊĠĠĠĠĠĠĠ Ġval Ġhandler Ġ= ĠFlash light Handler . getInstance ( preview . context ) ĊĠĠĠĠĠĠĠ Ġhandler . off () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstop () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ isRunning Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcamera . stop ( this :: on Camera Update ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġzoom . setOn Seek Bar ChangeListener ( null ) ĊĠĠĠĠĠĠĠ Ġpreview . isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġret icle . isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġzoom . isVisible Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġis Running (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ_ isRunning ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Camera Update (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġzoom Ġ= Ġprefs . get Float ( Navigator Fragment . CACHE _ CAMERA _ ZO OM ) Ġ?: Ġ 0 . 5 f ĊĠĠĠĠĠĠĠ Ġcamera . set Zoom ( zoom ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} Ċ Ċ }