/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 Ġ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 Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttps :// 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 . dev rel . android . fit actions Ċ Ċ import Ġandroid . app . Search Manager Ċ import Ġandroid . app . assist . Ass ist Content Ċ import Ġandroid . content . Intent Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġcom . dev rel . android . fit actions . home . Fit Stats Fragment Ċ import Ġcom . dev rel . android . fit actions . model . Fit Activity Ċ import Ġcom . dev rel . android . fit actions . model . Fit Repository Ċ import Ġcom . dev rel . android . fit actions . tracking . Fit Tracking Fragment Ċ import Ġcom . dev rel . android . fit actions . tracking . Fit Tracking Service Ċ import Ġorg . json . JSONObject Ċ Ċ /** Ċ Ġ* ĠMain Ġactivity Ġresponsible Ġfor Ġthe Ġapp Ġnavigation Ġand Ġhandling Ġdeep - links . Ċ Ġ*/ Ċ class ĠFit MainActivity Ġ: ĠAppCompatActivity (), ĠFit Stats Fragment . Fit Stats Actions , ĠFit Tracking Fragment . Fit Tracking Actions Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠHandle Ġthe Ġintent Ġthis Ġactivity Ġwas Ġlaunched Ġwith . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . fit _ activity ) ĊĊĠĠĠĠĠĠĠ Ġintent ?. handle Intent () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠHandle Ġnew Ġintent s Ġthat Ġare Ġcoming Ġwhile Ġthe Ġactivity Ġis Ġon Ġforeground Ġsince Ġwe Ġset Ġthe ĊĠĠĠĠ Ġ* Ġlaunch Mode Ġto Ġbe Ġsingle Task , Ġavoid ing Ġmultiple Ġinstances Ġof Ġthis Ġactivity Ġto Ġbe Ġcreated . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠSee Ġ[ launch Mode ]( https :// developer . android . com / guide / topics / manifest / activity - element # l mode ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon New Intent ( intent : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on New Intent ( intent ) ĊĊĠĠĠĠĠĠĠ Ġintent ?. handle Intent () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠHandles Ġthe Ġaction Ġfrom Ġthe Ġintent Ġbase Ġon Ġthe Ġtype . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ receiver Ġthe Ġintent Ġto Ġhandle ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun ĠIntent . handle Intent () Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWhen Ġthe Ġaction Ġis Ġtriggered Ġby Ġa Ġdeep - link , ĠIntent . Action _ VIEW Ġwill Ġbe Ġused ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIntent . ACTION _ VIEW Ġ-> Ġhandle Deep Link ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOtherwise Ġstart Ġthe Ġapp Ġas Ġyou Ġwould Ġnormally Ġdo . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġshow Default View () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUse Ġthe ĠURI Ġprovided Ġby Ġthe Ġintent Ġto Ġhandle Ġthe Ġdifferent Ġdeep - links ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġhandle Deep Link ( data : ĠUri ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġpath Ġis Ġnormally Ġused Ġto Ġindicate Ġwhich Ġview Ġshould Ġbe Ġdisplayed ĊĠĠĠĠĠĠĠ Ġ// Ġi . e Ġhttps :// fit - actions . firebase app . com / start ? exercise Type =" Running " Ġ-> Ġpath Ġ= Ġ" start " ĊĠĠĠĠĠĠĠ Ġwhen Ġ( data ?. path ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDeep Link . START Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGet Ġthe Ġparameter Ġdefined Ġas Ġ" exercise Type " Ġand Ġadd Ġit Ġto Ġthe Ġfragment Ġarguments ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexercise Type Ġ= Ġdata . getQuery Parameter ( Deep Link . Params . ACTIVITY _ TYPE ). or Empty () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= ĠFit Activity . Type . find ( exercise Type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġarguments Ġ= ĠBundle (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Serializable ( Fit Tracking Fragment . PARAM _ TYPE , Ġtype ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate View ( Fit Tracking Fragment :: class . java , Ġarguments ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDeep Link . STOP Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠStop Ġthe Ġtracking Ġservice Ġif Ġany Ġand Ġreturn Ġto Ġhome Ġscreen . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstop Service ( Intent ( this , ĠFit Tracking Service :: class . java )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate View ( Fit Stats Fragment :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġpath Ġis Ġnot Ġsupported Ġor Ġinvalid , Ġstart Ġnormal Ġflow . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Default View () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠWhen Ġa Ġfragment Ġis Ġattached Ġadd Ġthe Ġrequired Ġcallback Ġmethods . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Attach Fragment ( fragment : ĠFragment ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( fragment ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠFit Stats Fragment Ġ-> Ġfragment . actions Callback Ġ= Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠFit Tracking Fragment Ġ-> Ġfragment . actions Callback Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCallback Ġmethod Ġfrom Ġthe ĠFit Stats Fragment Ġto Ġindicate Ġthat Ġthe Ġtracking Ġactivity Ġflow Ġshould Ġbe Ġshown . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun ĠonStart Activity () Ġ{ ĊĠĠĠĠĠĠĠ Ġupdate View ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Fragment Class Ġ= ĠFit Tracking Fragment :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarguments Ġ= ĠBundle (). apply Ġ{ Ġput Serializable ( Fit Tracking Fragment . PARAM _ TYPE , ĠFit Activity . Type . RUNNING ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġto Back Stack Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCallback Ġmethod Ġwhen Ġan Ġactivity Ġstops . ĊĠĠĠĠ Ġ* ĠWe Ġcould Ġshow Ġa Ġdetails Ġscreen , Ġfor Ġnow Ġjust Ġgo Ġback Ġto Ġhome Ġscreen . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Activity Stopped ( activity Id : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( support FragmentManager . back Stack Entry Count Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsupport FragmentManager . pop Back Stack () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate View ( Fit Stats Fragment :: class . java ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠShow Ġongoing Ġactivity Ġor Ġstats Ġif Ġnone ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġshow Default View () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfragment Class Ġ= Ġif Ġ( Fit Repository . getInstance ( this ). get On Go ing Activity (). value Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFit Tracking Fragment :: class . java ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFit Stats Fragment :: class . java ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġupdate View ( fragment Class ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUtility Ġmethod Ġto Ġupdate Ġthe ĠFragment Ġwith Ġthe Ġgiven Ġarguments . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġupdate View ( ĊĠĠĠĠĠĠĠ Ġnew Fragment Class : ĠClass < out ĠFragment >, ĊĠĠĠĠĠĠĠ Ġarguments : ĠBundle ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġto Back Stack : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Fragment Ġ= Ġsupport FragmentManager . fragments . first OrNull () ĊĠĠĠĠĠĠĠ Ġif Ġ( current Fragment Ġ!= Ġnull Ġ&& Ġcurrent Fragment :: class . java Ġ== Ġnew Fragment Class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġfragment Ġ= Ġsupport FragmentManager . fragment Factory . instantiate ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Fragment Class . class Loader !! , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Fragment Class . name ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġfragment . arguments Ġ= Ġarguments ĊĊĠĠĠĠĠĠĠ Ġsupport FragmentManager . beginTransaction (). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( R . id . fit Activity Container , Ġfragment ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( to Back Stack ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠaddTo Back Stack ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommit () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ