package Ġde . h ft _ le ip zig . hf app 2 . hf app _ kotlin Ċ Ċ import Ġandroid . app . Activity Manager Ċ import Ġandroid . content . Component Name Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . Service Connection Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . os .* Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . swiper ef resh layout . widget . Swipe Refresh Layout Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġcom . facebook . ste tho . St eth o Ċ import Ġandroid . view . View Ċ import Ġandroid . widget .* Ċ import Ġorg . tensorflow . contrib . android . Tensor Flow Inference Interface Ċ import Ġkotlin . collections . ArrayList Ċ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĠĠĠ Ġvar Ġmy Service : ĠMeasurement Service ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġis Bound Ġ= Ġfalse ĊĠĠĠ Ġlateinit Ġvar Ġtf Interface : ĠTensorFlow Inference Interface ĊĊĠĠĠ Ġprivate Ġval Ġmain Handler Ġ= ĠHandler () ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbackground Task : ĠRunnable ĊĊĠĠĠ Ġprivate Ġval Ġmy Connection Ġ= Ġobject Ġ: ĠService Connection Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Service Connected ( className : ĠComponent Name , Ġservice : ĠI Binder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbinder Ġ= Ġservice Ġas ĠMeasurement Service . My Local Binder ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmy Service Ġ= Ġbinder . getService () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Bound Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Service Disconnected ( name : ĠComponent Name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Bound Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpredict ( mp : ĠMeasurement Point ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġtf Interface . feed (" dense _ 9 _ input ", Ġfloat ArrayOf ( mp . rs rp . toFloat (), mp . rs rq . toFloat ()), Ġ 1 , Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġtf Interface . run ( array Of (" dense _ 1 0 / Soft max ")) ĊĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= Ġfloat ArrayOf (- 1 f , Ġ- 1 f , Ġ- 1 f , Ġ- 1 f , Ġ- 1 f ) ĊĠĠĠĠĠĠĠ Ġtf Interface . fetch (" dense _ 1 0 / Soft max ", Ġoutput ) ĊĠĠĠĠĠĠĠ Ġvar Ġmax Idx Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġvar Ġmax Val Ġ= Ġ- 1 f ĊĠĠĠĠĠĠĠ Ġvar Ġcur Idx Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġoutput ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ> Ġmax Val ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Val Ġ= Ġi ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Idx Ġ= Ġcur Idx ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcur Idx Ġ+= Ġ 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġmax Idx ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Sn r Index ( sin r Val : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrange : ĠArrayList < Int > Ġ= Ġarray ListOf (- 1 3 , Ġ Ġ- 1 , ĠĠ 1 1 , ĠĠ 2 3 , ĠĠ 3 5 ) ĊĠĠĠĠĠĠĠ Ġvar Ġidx Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġfor Ġ( r Ġin Ġrange ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sin r Val Ġ<= Ġr ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġidx ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġidx Ġ+= Ġ 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġidx ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Measure ments () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! has Permissions ( this , ĠALL _ PERMISSION S )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġtable : ĠTable Layout Ġ= ĠfindViewById ( R . id . table Results ) ĊĠĠĠĠĠĠĠ Ġtable . removeAll Views () ĊĠĠĠĠĠĠĠ Ġval Ġfactory : ĠLayoutInflater Ġ= Ġlayout Inflater ĊĠĠĠĠĠĠĠ Ġval Ġheader Row Ġ= Ġfactory . inflate ( R . layout . measurement _ row , Ġtable , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġtable . addView ( header Row ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( is Service Running ( Measurement Service :: class . java )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtv Elapsed : ĠTextView Ġ= ĠfindViewById ( R . id . tv Elapsed ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( my Service ?. is Recording !! ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Elapsed . text Ġ= Ġmy Service ?. elapsed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmeasurements Ġ= Ġmy Service ?. last Measure ments ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( mp Ġin Ġmeasurements !! ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( mp . m cc Ġ!= Ġ" 0 " Ġ&& Ġmp . m nc Ġ!= Ġ" 0 " Ġ&& Ġmp . m nc Ġ!= ĠN AN . toString () Ġ&& Ġmp . m nc Ġ!= ĠN AN . toString ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtv Network Ġ= ĠfindViewById < TextView >( R . id . tv Network ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtv Latitude Ġ= ĠfindViewById < TextView >( R . id . tv Latitude ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtv Longitude Ġ= ĠfindViewById < TextView >( R . id . tv Longitude ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtv Accuracy Ġ= ĠfindViewById < TextView >( R . id . tv Accuracy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtv Speed Ġ= ĠfindViewById < TextView >( R . id . tv Speed ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtv Time Ġ= ĠfindViewById < TextView >( R . id . tv Time ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Time . text Ġ= Ġmp . datetime ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Network . text Ġ= ĠgetString ( R . string . meas _ network _ value , Ġmp . str Or Nan ( mp . m cc ), Ġmp . str Or Nan ( mp . m nc )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( mp . location Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Latitude . text Ġ= ĠgetString ( R . string . meas _ latitude _ value , Ġmp . location ?. latitude ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Longitude . text Ġ= ĠgetString ( R . string . meas _ longitude _ value , Ġmp . location ?. longitude ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Accuracy . text Ġ= ĠgetString ( R . string . meas _ accuracy _ value , Ġmp . location ?. accuracy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Speed . text Ġ= ĠgetString ( R . string . meas _ accuracy _ value , Ġmp . location ?. speed ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtv C qi Ġ= ĠfindViewById < TextView >( R . id . tv C qi ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtv R ss nr Ġ= ĠfindViewById < TextView >( R . id . tv R ss nr ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtv Ta Ġ= ĠfindViewById < TextView >( R . id . tv Ta ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv C qi . text Ġ= Ġmp . str Or Nan ( mp . c qi ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv R ss nr . text Ġ= Ġmp . str Or Nan ( mp . rss nr ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Ta . text Ġ= Ġmp . str Or Nan ( mp . ta ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġidx Actual Ġ= Ġget Sn r Index ( mp . rss nr ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġidx Predict ed Ġ= Ġpredict ( mp ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( mp . rss nr Ġ< ĠN AN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtv Actual Class Ġ= ĠfindViewById < TextView >( R . id . tv Actual Class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtv Predict ed Class Ġ= ĠfindViewById < TextView >( R . id . tv Predict ed Class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Actual Class . text Ġ= Ġidx Actual . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Predict ed Class . text Ġ= Ġidx Predict ed . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlayout Factory : ĠLayoutInflater Ġ= Ġlayout Inflater ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrow View Ġ= Ġlayout Factory . inflate ( R . layout . measurement _ row , Ġtable , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtv Type Ġ= Ġrow View . findViewById ( R . id . tv Type ) Ġas ĠTextView ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtv Band Ġ= Ġrow View . findViewById ( R . id . tv Band ) Ġas ĠTextView ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtv P ci Ġ= Ġrow View . findViewById ( R . id . tv P ci ) Ġas ĠTextView ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtv R sr p Ġ= Ġrow View . findViewById ( R . id . tv R sr p ) Ġas ĠTextView ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtv R sr q Ġ= Ġrow View . findViewById ( R . id . tv R sr q ) Ġas ĠTextView ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtv As u Ġ= Ġrow View . findViewById ( R . id . tv As u ) Ġas ĠTextView ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Type . text Ġ= Ġmp . str Or Nan ( mp . type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Band . text Ġ= Ġmp . str Or Nan ( mp . band ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv P ci . text Ġ= Ġmp . str Or Nan ( mp . pci ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv R sr p . text Ġ= Ġmp . str Or Nan ( mp . rs rp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv R sr q . text Ġ= Ġmp . str Or Nan ( mp . rs rq ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv As u . text Ġ= Ġmp . str Or Nan ( mp . as u ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtable . addView ( row View ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Service Running ( service Class : ĠClass < *> ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġactivity Manager Ġ= Ġget System Service ( Context . ACTIVITY _ SERVICE ) Ġas ĠActivity Manager ĊĠĠĠĠĠĠĠ Ġfor Ġ( service Ġin Ġactivity Manager . get Running Services ( Integer . MAX _ VALUE )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( service Class . name Ġ== Ġservice . service . className ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Or Bind Measurement Service () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġservice Class Ġ= ĠMeasurement Service :: class . java ĊĠĠĠĠĠĠĠ Ġval Ġservice Intent Ġ= ĠIntent ( application Context , Ġservice Class ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Service Running ( service Class )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Service ( service Intent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbind Service ( service Intent , Ġmy Connection , ĠContext . BIND _ AUTO _ CREATE ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbind Service ( service Intent , Ġmy Connection , ĠContext . BIND _ AUTO _ CREATE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Recording Buttons () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Service Running ( Measurement Service :: class . java )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" Service Ġis Ġnot Ġrunning .", ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġrecord Button : ĠImage Button Ġ= ĠfindViewById ( R . id . ib tn Record ) ĊĠĠĠĠĠĠĠ Ġif Ġ( my Service ?. is Recording !! ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrecord Button . setImage Resource ( R . drawable . ic _ baseline _ pause _ 2 4 px ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrecord Button . setImage Resource ( R . drawable . ic _ baseline _ fiber _ manual _ record _ 2 4 px ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtoggle Recording (@ Suppress (" UNUSED _ PARAMETER ") Ġview : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Service Running ( Measurement Service :: class . java )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" Service Ġis Ġnot Ġrunning .", ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmy Service ?. toggle Recording () ĊĠĠĠĠĠĠĠ Ġupdate Recording Buttons () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstop Recording (@ Suppress (" UNUSED _ PARAMETER ") Ġview : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Service Running ( Measurement Service :: class . java )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" Service Ġis Ġnot Ġrunning .", ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmy Service ?. stop Measurement () ĊĠĠĠĠĠĠĠ Ġupdate Recording Buttons () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġopen Measurement List (@ Suppress (" UNUSED _ PARAMETER ") Ġview : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrandom Intent Ġ= ĠIntent ( this , ĠSecond Activity :: class . java ) ĊĠĠĠĠĠĠĠ ĠstartActivity ( random Intent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Request Permissions Result ( request Code : ĠInt , Ġpermissions : ĠArray < String >, Ġgrant Results : ĠInt Array ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( request Code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPER MISSION S _ REQUEST _ ALL Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( grant Results . isNotEmpty () Ġ&& Ġgrant Results [ 0 ] Ġ== ĠPackage Manager . PERMISSION _ GRAN TED )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Or Bind Measurement Service () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPER MISSION S _ REQUEST _ WRITE _ EXTERNAL Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" Try Ġto Ġsave Ġagain ", ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĠĠĠĠĠĠĠ ĠSte tho . initialize With Defaults ( this ) ĊĊĠĠĠĠĠĠĠ Ġtf Interface Ġ= ĠTensorFlow Inference Interface ( assets , Ġ" my _ model . pb ") ĊĊĠĠĠĠĠĠĠ Ġval Ġpull To Refresh Ġ= ĠfindViewById < Swipe Refresh Layout >( R . id . pull To Refresh ) ĊĠĠĠĠĠĠĠ Ġpull To Refresh . setOn Refresh Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Measure ments () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpull To Refresh . is Refresh ing Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbackground Task Ġ= ĠRunnable { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Measure ments () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmain Handler . post Delayed ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbackground Task , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( get Permissions ( this , ĠALL _ PERMISSION S , ĠPER MISSION S _ REQUEST _ ALL )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Or Bind Measurement Service () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġmain Handler . remove Callbacks ( background Task ) ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġmain Handler . post Delayed ( background Task , Ġ 1 0 0 0 ) ĊĠĠĠĠĠĠĠ ĠHandler (). post Delayed ({ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Recording Buttons () ĊĠĠĠĠĠĠĠ Ġ}, Ġ 2 0 0 0 ) ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġservice Class Ġ= ĠMeasurement Service :: class . java ĊĠĠĠĠĠĠĠ Ġval Ġservice Intent Ġ= ĠIntent ( application Context , Ġservice Class ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġun bind Service ( my Connection ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIllegalArgumentException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . w (" MainActivity ", Ġ" Error ĠU nb ind ing ĠService .") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( is Service Running ( Measurement Service :: class . java )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstop Service ( service Intent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( R . menu . menu , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem . itemId Ġ== ĠR . id . about Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( application Context , ĠAbout Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem . itemId Ġ== ĠR . id . settings Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , ĠPreference Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} Ċ } Ċ