package Ġcom . app . mood track _ android . messaging Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . util . Log Ċ import Ġandroidx . core . app . Job Intent Service Ċ import Ġandroidx . work .* Ċ import Ġcom . app . mood track _ android . R Ċ import Ġcom . app . mood track _ android . model . notification question naire . NQ Node Ċ import Ġcom . app . mood track _ android . model . notification question naire . NQ Response Ċ import Ġcom . app . mood track _ android . model . notification question naire . NQ ResponseData Ċ import Ġcom . app . mood track _ android . model . notification question naire . query _ objects . Notification Questionnaire By Time OfDay Ċ import Ġcom . app . mood track _ android . model . notification question naire . question . NQ Question Choice Ċ import Ġcom . app . mood track _ android . repository . Auth Repository Ċ import Ġcom . app . mood track _ android . tasks . Submit Questionnaire Response Worker Ċ import Ġcom . app . mood track _ android . util . Notification Questionnaire Util Ċ import Ġcom . google . firebase . auth . Firebase Auth Ċ import Ġcom . google . gson . Gson Ċ import Ġdagger . h ilt . android . Android EntryPoint Ċ import Ġjava . util .* Ċ import Ġjavax . inject . Inject Ċ Ċ @ Deprecated (" Service Ġis Ġno Ġlonger Ġneeded Ġand Ġuses Ġdeprecated Ġfeatures .") Ċ @ Android EntryPoint Ċ class ĠMessage Result Receiver Job Intent Service Ġ: ĠJob Intent Service () Ġ{ ĊĠĠĠ Ġval ĠTAG Ġ= Ġ" M RR Job Intent Service " ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġgson : ĠGson ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġauth Repository : ĠAuth Repository ĊĊĠĠĠ Ġoverride Ġfun Ġon Handle Work ( intent : ĠIntent ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" on Handle Work Ġinvoked .") ĊĠĠĠĠĠĠĠ Ġval ĠmessageId Ġ= Ġintent . extras ?. get ( getString ( R . string . notification _ message _ id )) Ġas ĠString ĊĠĠĠĠĠĠĠ Ġval Ġchoice Icon Ġ= Ġintent . extras ?. get ( getString ( R . string . choice _ icon )) Ġas ĠString ĊĠĠĠĠĠĠĠ Ġval Ġchoice Icon Id Ġ= Ġintent . extras ?. get ( getString ( R . string . choice _ icon _ id )) Ġas ĠString ĊĠĠĠĠĠĠĠ Ġval Ġchoice Icon Md 5 Ġ= Ġintent . extras ?. get ( getString ( R . string . choice _ icon _ md 5 )) Ġas ĠString ? ĊĠĠĠĠĠĠĠ Ġval Ġchoice Value Ġ= Ġintent . extras ?. get ( getString ( R . string . choice _ value )) Ġas ĠString ĊĠĠĠĠĠĠĠ Ġval Ġchoice Type Ġ= Ġintent . extras ?. get ( getString ( R . string . choice _ type )) Ġas ĠString ĊĠĠĠĠĠĠĠ Ġval Ġnotification Node Ġ= Ġintent . extras ?. get ( getString ( R . string . notification _ node )) Ġas ĠN Q Node ? ĊĠĠĠĠĠĠĠ Ġval Ġnotification Questionnaire Ġ= Ġintent . extras ?. get ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . notification _ question naire ) ĊĠĠĠĠĠĠĠ Ġ) Ġas ĠNotification Questionnaire By Time OfDay ĊĊĠĠĠĠĠĠĠ Ġnotification Node ?. let Ġ{ ĠcurrentNode Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchoice Ġ= ĠN Q Question Choice ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchoice Icon Ġ= Ġchoice Icon , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchoice Value Ġ= Ġchoice Value , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchoice ValueType Ġ= Ġchoice Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchoice Icon Id Ġ= Ġchoice Icon Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchoice Icon Md 5 Ġ= Ġchoice Icon Md 5 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoutgoing Edges From Current Node Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNotification Questionnaire Util . get Outgoing Edges For Node ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠcurrentNode , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Questionnaire ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġedge To Next Node Ġ= ĠNotification Questionnaire Util . evaluate Edge Conditions ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreceived Choice Ġ= Ġchoice , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġedges Ġ= Ġoutgoing Edges From Current Node ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Data Ġ= ĠN Q ResponseData ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquestion Text Ġ= ĠcurrentNode . data . question . question Text , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchoices Ġ= ĠcurrentNode . data . question . question Choices , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Choice Ġ= ĠN Q Question Choice ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchoice Icon Ġ= Ġchoice Icon , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchoice ValueType Ġ= Ġchoice Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchoice Value Ġ= Ġchoice Value , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchoice Icon Md 5 Ġ= Ġchoice Icon Md 5 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchoice Icon Id Ġ= Ġchoice Icon Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġedge To Next Node ?. let Ġ{ Ġnext Node Edge Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Node Ġ= ĠNotification Questionnaire Util . getNext Node ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Node Edge , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Questionnaire ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubmit Notification Questionnaire Response ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Questionnaire Id Ġ= Ġnotification Questionnaire . nq Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠnodeId Ġ= ĠcurrentNode ._ id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext NodeId Ġ= Ġnext Node ? ._ id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Data Ġ= Ġresponse Data , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠmessageId Ġ= ĠmessageId ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Intent Ġ= ĠIntent () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Intent . putExtra ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapplication Context . getString ( R . string . notification _ node ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Node ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Intent . putExtra ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapplication Context . getString ( R . string . notification _ question naire ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Questionnaire ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Intent . putExtra ( getString ( R . string . notification _ message _ id ), ĠmessageId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" En que uing Ġnext Ġjob .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenqueue Work ( this , ĠMessage Job Intent Service :: class . java , Ġ 1 , Ġnext Intent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" No Ġedge Ġto Ġnext Ġnode Ġfound . ĠAss uming Ġleaf Ġnode Ġand Ġsending Ġresponse Ġwith Ġnext Ġas Ġnull ." ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubmit Notification Questionnaire Response ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Questionnaire Id Ġ= Ġnotification Questionnaire . nq Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠnodeId Ġ= ĠcurrentNode ._ id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext NodeId Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Data Ġ= Ġresponse Data , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠmessageId Ġ= ĠmessageId ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġ?: ĠLog . d ( TAG , Ġ" Service Ġinvariant Ġvo ided : ĠReceived Ġextra Ġ' notification Node ' Ġwas Ġnull .") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsubmit Notification Questionnaire Response ( ĊĠĠĠĠĠĠĠ Ġnotification Questionnaire Id : ĠString , ĊĠĠĠĠĠĠĠ ĠnodeId : ĠString , ĊĠĠĠĠĠĠĠ Ġnext NodeId : ĠString ?, ĊĠĠĠĠĠĠĠ Ġprevious NodeId : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġresponse Data : ĠN Q ResponseData , ĊĠĠĠĠĠĠĠ ĠmessageId : ĠString ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= ĠN Q Response ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmessageId , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFirebase Auth . getInstance (). currentUser ?. uid , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Questionnaire Id , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠnodeId , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext NodeId , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprevious NodeId , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDate (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Data ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġresponse String Ġ= Ġgson . toJson ( response ) ĊĠĠĠĠĠĠĠ Ġval Ġwork Data Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwork Data Of ( getString ( R . string . notification _ question naire _ response ) Ġto Ġresponse String ) ĊĠĠĠĠĠĠĠ Ġval Ġconstraints Ġ= ĠConstraints ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Required Network Type ( Network Type . CONNECTED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġval Ġwork Request Ġ= ĠOne Time Work RequestBuilder < Submit Questionnaire Response Worker >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Constraints ( constraints ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set InputData ( work Data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ ĠWork Manager . getInstance ( application Context ). enqueue ( work Request ) ĊĠĠĠ Ġ} Ċ }