package Ġcom . k yle cor ry . trail _ sense . tools . in clin ometer . ui Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . EditText Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . constraint layout . widget . Constraint Layout Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġcom . k yle cor ry . trail _ sense . R Ċ import Ġcom . k yle cor ry . trail _ sense . navigation . domain . Location Math Ċ import Ġcom . k yle cor ry . trail _ sense . shared .* Ċ import Ġcom . k yle cor ry . trail _ sense . shared . sensors . Device Orientation Ċ import Ġcom . k yle cor ry . trail _ sense . shared . sensors . Sensor Service Ċ import Ġcom . k yle cor ry . tr ails ense core . domain . in clin ometer . A val an che Risk Ċ import Ġcom . k yle cor ry . tr ails ense core . domain . in clin ometer . In cl ination Service Ċ import Ġcom . k yle cor ry . tr ails ense core . infrastructure . time . Throttle Ċ Ċ class ĠIn clin ometer Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġincl ine Container : ĠConstraint Layout ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġheight Txt : ĠTextView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġdistance Edit : ĠEditText ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġphone Height Edit : ĠEditText ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġincl ine Txt : ĠTextView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġaval an che Risk Txt : ĠTextView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġlock Img : ĠImageView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġaval an che Img : ĠImageView ĊĊĠĠĠ Ġprivate Ġval Ġsensor Service Ġby Ġlazy Ġ{ ĠSensor Service ( require Context ()) Ġ} ĊĠĠĠ Ġprivate Ġval Ġincl in ometer Ġby Ġlazy Ġ{ Ġsensor Service . getIn clin ometer () Ġ} ĊĠĠĠ Ġprivate Ġval Ġdevice Orientation Ġby Ġlazy Ġ{ Ġsensor Service . getDevice Orientation () Ġ} ĊĠĠĠ Ġprivate Ġval Ġprefs Ġby Ġlazy Ġ{ ĠUser Preferences ( require Context ()) Ġ} ĊĠĠĠ Ġprivate Ġval Ġincl ination Service Ġ= ĠIn cl ination Service () ĊĠĠĠ Ġprivate Ġval Ġformat Service Ġby Ġlazy Ġ{ ĠFormat Service ( require Context ()) Ġ} ĊĠĠĠ Ġprivate Ġval Ġthrottle Ġ= ĠTh rottle ( 2 0 ) ĊĊĠĠĠ Ġprivate Ġvar Ġslope Angle : ĠFloat ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġinflater . inflate ( R . layout . fragment _ in clin ometer , Ġcontainer , Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġheight Txt Ġ= Ġview . findViewById ( R . id . estimated _ height ) ĊĠĠĠĠĠĠĠ Ġdistance Edit Ġ= Ġview . findViewById ( R . id . object _ distance ) ĊĠĠĠĠĠĠĠ Ġphone Height Edit Ġ= Ġview . findViewById ( R . id . phone _ height ) ĊĠĠĠĠĠĠĠ Ġaval an che Img Ġ= Ġview . findViewById ( R . id . av alan che _ alert ) ĊĠĠĠĠĠĠĠ Ġincl ine Txt Ġ= Ġview . findViewById ( R . id . in cline ) ĊĠĠĠĠĠĠĠ Ġaval an che Risk Txt Ġ= Ġview . findViewById ( R . id . av alan che _ risk ) ĊĠĠĠĠĠĠĠ Ġincl ine Container Ġ= Ġview . findViewById ( R . id . in cline _ container ) ĊĠĠĠĠĠĠĠ Ġlock Img Ġ= Ġview . findViewById ( R . id . in cline _ lock ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( prefs . distance Units Ġ== ĠUser Preferences . Distance Units . Fe et ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdistance Edit . hint Ġ= ĠgetString ( R . string . object _ distance _ ft ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġphone Height Edit . hint Ġ= ĠgetString ( R . string . your _ height _ ft ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġincl ine Container . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġslope Angle Ġ= Ġif Ġ( slope Angle Ġ== Ġnull Ġ&& Ġis Orientation Valid ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġincl in ometer . angle ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlock Img . visibility Ġ= Ġif Ġ( slope Angle Ġ!= Ġnull ) ĠView . VISIBLE Ġelse ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġview ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġincl in ometer . start ( this :: on In clin ometer Update ) ĊĠĠĠĠĠĠĠ Ġdevice Orientation . start ( this :: on Device Orientation Update ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠĠĠĠĠ Ġincl in ometer . stop ( this :: on In clin ometer Update ) ĊĠĠĠĠĠĠĠ Ġdevice Orientation . stop ( this :: on Device Orientation Update ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate UI () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif Ġ( throttle . is Th rott led ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! is Orientation Valid () Ġ&& Ġslope Angle Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDisplay Ġrotate Ġicon Ġ/ Ġmessage ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaval an che Img . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġincl ine Txt . text Ġ= ĠgetString ( R . string . dash ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaval an che Risk Txt . text Ġ= ĠgetString ( R . string . in clin ometer _ rotate _ device ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġaval an che Risk Ġ= Ġincl ination Service . get A val an che Risk ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġslope Angle Ġ?: Ġincl in ometer . angle ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġaval an che Img . visibility Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( av alan che Risk Ġ== ĠAval an che Risk . Low ) ĠView . IN VISIBLE Ġelse ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġlock Img . visibility Ġ= Ġif Ġ( slope Angle Ġ!= Ġnull ) ĠView . VISIBLE Ġelse ĠView . IN VISIBLE ĊĊĠĠĠĠĠĠĠ Ġincl ine Txt . text Ġ= ĠgetString ( R . string . degree _ format , Ġslope Angle Ġ?: Ġincl in ometer . angle ) ĊĠĠĠĠĠĠĠ Ġaval an che Risk Txt . text Ġ= Ġget A val an che Risk String ( av alan che Risk ) ĊĊĠĠĠĠĠĠĠ Ġupdate Object Height () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Object Height () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġincl ine Ġ= Ġslope Angle Ġ?: Ġincl in ometer . angle ĊĊĠĠĠĠĠĠĠ Ġval Ġunits Ġ= Ġprefs . distance Units ĊĊĠĠĠĠĠĠĠ Ġval Ġdistance Ġ= Ġdistance Edit . text . toString (). toFloat OrNull () ĊĠĠĠĠĠĠĠ Ġval Ġphone Height Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġphone Height Edit . text . toString (). toFloat OrNull () Ġ?: ĠLocation Math . convertTo Base Unit ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 . 5 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunits ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( distance Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheight Txt . text Ġ= ĠgetString ( R . string . dash ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdist Met ers Ġ= ĠLocation Math . convertTo Met ers ( distance , Ġunits ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheight Met ers Ġ= ĠLocation Math . convertTo Met ers ( phone Height , Ġunits ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheight Txt . text Ġ= Ġformat Service . format Small Distance ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġincl ination Service . estimate Height ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdist Met ers , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġincl ine , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Met ers ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget A val an che Risk String ( risk : ĠAval an che Risk ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( risk ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAval an che Risk . Low Ġ-> ĠgetString ( R . string . av alan che _ risk _ low ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAval an che Risk . Mod erate Ġ-> ĠgetString ( R . string . av alan che _ risk _ med ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAval an che Risk . High Ġ-> ĠgetString ( R . string . av alan che _ risk _ high ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Orientation Valid (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdevice Orientation . orientation Ġ!= ĠDevice Orientation . Orientation . Flat Ġ&& Ġdevice Orientation . orientation Ġ!= ĠDevice Orientation . Orientation . Flat Inverse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon In clin ometer Update (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġupdate UI () ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Device Orientation Update (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġupdate UI () ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} Ċ Ċ } Ċ