package Ġcom . push er . push notifications . reporting Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Intent Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Bundle Ċ import Ġcom . firebase . job dispatcher .* Ċ import Ġcom . google . gson . Gson Ċ import Ġcom . google . gson . Json Syntax Exception Ċ import Ġcom . push er . push notifications . internal . Device State Store Ċ import Ġcom . push er . push notifications . internal . Instance Device State Store Ċ import Ġcom . push er . push notifications . logging . Logger Ċ import Ġcom . push er . push notifications . reporting . api . Open Event Ċ Ċ /* Ċ Ġ* ĠThis Ġactivity Ġwill Ġbe Ġopened Ġwhen Ġa Ġuser Ġt aps Ġa Ġnotification Ġsent Ġby Ġthe ĠPush er Ġpush Ġnotifications Ċ Ġ* Ġservice . ĠIt Ġreports Ġback Ġto ĠPush er Ġthat Ġthe Ġnotification Ġhas Ġbeen Ġopened Ġand Ġthen Ċ Ġ* Ġopens Ġthe Ġcustomer Ġapplication Ġactivity Ġthat Ġwould Ġhave Ġbeen Ġopened Ġhad Ġit Ġnot Ġbeen Ċ Ġ* Ġintercept ed . Ċ Ġ*/ Ċ class ĠOpen Notification Activity : ĠActivity () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġlog Ġ= ĠLogger . get ( this :: class ) ĊĊĠĠĠ Ġprivate Ġfun Ġstart Intent ( bundle : ĠBundle , Ġclick Action : ĠString ? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlog . i (" Open Notification Activity Ġ$ click Action ") ĊĠĠĠĠĠĠĠ Ġval Ġi : ĠIntent ĊĠĠĠĠĠĠĠ Ġif Ġ( click Action Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi Ġ= ĠIntent () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi . action Ġ= Ġclick Action ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi Ġ= Ġpackage Manager . get Launch Intent For Package ( packageName ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġi . replace Extras ( bundle ) ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġval Ġlink : ĠString ? ĊĊĠĠĠĠĠĠĠ Ġlink Ġ= Ġi . getString Extra (" link ") ĊĊĠĠĠĠĠĠĠ Ġif ( link Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġlog . i (" Got ĠURI Ġfor Ġaction Ġ$ link ") ĊĠĠĠĠĠĠĠĠĠ Ġi . setData ( Uri . parse ( link )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠWe Ġneed Ġto Ġclear Ġthe Ġactivity Ġstack Ġso Ġthat Ġthis Ġactivity Ġdoesn 't Ġshow Ġup Ġwhen Ġcustomers ĊĠĠĠĠĠĠĠ Ġ// Ġare Ġdebugging . ĊĠĠĠĠĠĠĠ Ġi . flags Ġ= ĠIntent . FLAG _ ACTIVITY _ NEW _ TASK Ġor ĠIntent . FLAG _ ACTIVITY _ CLEAR _ TOP ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapplication Context . startActivity ( i ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ(_ : ĠRuntimeException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . e (" Failed Ġto Ġstart Ġactivity Ġusing Ġclick Action Ġ$ click Action ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe Ġdefault ĠFirebase Ġbehaviour Ġin Ġthis Ġsituation Ġis Ġto Ġkill Ġthe Ġapp , Ġso Ġwe Ġshould ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdo Ġthe Ġsame . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinish Affinity () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġintent ?. getString Extra (" push er ") ?. let Ġ{ Ġpush er Data Json Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgson Ġ= ĠGson () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpush er Data Ġ= Ġgson . fromJson ( push er Data Json , ĠPush er Metadata :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . i (" Got Ġa Ġvalid Ġpush er Ġmessage .") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdevice State Store Ġ= ĠInstance Device State Store ( application Context , Ġpush er Data . instanceId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠdeviceId Ġ= Ġdevice State Store . deviceId ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( deviceId Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . e (" Failed Ġto Ġget Ġdevice ĠID Ġ( device ĠID Ġnot Ġstored ) Ġ- ĠSk ipping Ġopen Ġtracking .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Intent ( intent . extras ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreport Event Ġ= ĠOpen Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstance Id Ġ= Ġpush er Data . instanceId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublish Id Ġ= Ġpush er Data . publish Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠdeviceId Ġ= ĠdeviceId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserId Ġ= Ġdevice State Store . userId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimestamp Secs Ġ= ĠSystem . currentTimeMillis () Ġ/ Ġ 1 0 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdispatcher Ġ= ĠFirebase Job Dispatcher ( Google Play Driver ( application Context )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjob Ġ= Ġdispatcher . new Job Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Service ( Reporting JobService :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTag (" push er . open . publish Id =${ push er Data . publish Id }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Constraints ( Constraint . ON _ ANY _ NETWORK ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Retry Strategy ( Retry Strategy . DEFAULT _ EXP ON ENTIAL ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Lifetime ( Lifetime . UNT IL _ NEXT _ BOOT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Extras ( Reporting JobService . to Bundle ( report Event )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdispatcher . must Schedule ( job ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Intent ( intent . extras , Ġpush er Data . click Action ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ(_ : ĠJson Syntax Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : ĠAdd Ġclient - side Ġreporting ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThis Ġmeans Ġthat Ġsomething Ġwent Ġhor rib ly Ġwrong . ĠJust Ġstarting Ġthe Ġmain ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġactivity Ġseems Ġlike Ġa Ġde cent Ġbest - eff ort Ġresponse . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Intent ( intent . extras ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠSome how Ġthis Ġactivity Ġwas Ġstarted Ġwithout Ġa Ġpush er Ġpayload . ĠWe Ġshould Ġstart Ġthe Ġmain ĊĠĠĠĠĠĠĠ Ġ// Ġactivity Ġas Ġa Ġbest - eff ort Ġresponse . ĊĠĠĠĠĠĠĠ Ġstart Intent ( intent . extras ) ĊĠĠĠ Ġ} Ċ } Ċ