package Ġfr . c ph . ch icago . util Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Intent Ċ import Ġandroid . net . Uri Ċ import Ġandroid . view . View Ċ import Ġandroidx . appcompat . app . AlertDialog Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġfr . c ph . ch icago . R Ċ import Ġfr . c ph . ch icago . core . App Ċ import Ġfr . c ph . ch icago . service . Preference Service Ċ import Ġio . reactivex . rx java 3 . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . rx java 3 . core . Observable Ċ import Ġio . reactivex . rx java 3 . schedul ers . Schedulers Ċ import Ġtim ber . log . Tim ber Ċ import Ġjava . util . Date Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ object ĠRate Util Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġutil Ġ= ĠUtil ĊĠĠĠ Ġprivate Ġval Ġpreference Service Ġ= ĠPreference Service ĊĊĠĠĠ Ġfun Ġrate This App ( activity : ĠActivity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Intent . ACTION _ VIEW ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . data Ġ= ĠUri . parse (" market :// details ? id = fr . c ph . ch icago ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . startActivity ( intent ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAlertDialog . Builder ( activity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage (" Play ĠStore Ġnot Ġfound Ġon Ġyour Ġdevice ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( android . R . string . ok ) Ġ{ Ġ_, Ġ_ Ġ-> Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Check Result ") ĊĠĠĠ Ġfun Ġdisplay Rate Sn ackBar IfNeeded ( view : ĠView , Ġactivity : ĠActivity ) Ġ{ ĊĠĠĠĠĠĠĠ ĠObservable . from Callable Ġ{ Ġpreference Service . get Rate Last Seen () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. delay ( 2 L , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . computation ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġlast Seen Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnow Ġ= ĠDate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġif Ġit Ġhas Ġbeen Ġmore Ġthan Ġ 3 0 Ġdays Ġor Ġif Ġit 's Ġthe Ġfirst Ġtime ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( now . time Ġ- Ġlast Seen . time Ġ> Ġ 2 5 9 2 0 0 0 0 0 0 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Rate Sn ackBar ( view , Ġactivity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreference Service . set Rate Last Seen () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġerror Ġ-> ĠTim ber . e ( error ) Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Rate Sn ackBar ( view : ĠView , Ġactivity : ĠActivity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbackground Ġ= Ġutil . getAttribute ( view . context , ĠR . attr . color Accent ) ĊĠĠĠĠĠĠĠ Ġval ĠtextColor Ġ= ĠContext Compat . getColor ( App . instance , ĠR . color . green Line Dark ) ĊĠĠĠĠĠĠĠ Ġval Ġsn ackBar 1 Ġ= ĠSn ackbar . make ( view , Ġ" Do Ġyou Ġlike Ġthis Ġapp ?", ĠSn ackbar . LENGTH _ LONG ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAction (" YES ") Ġ{ Ġview 1 Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsn ackBar 2 Ġ= ĠSn ackbar . make ( view 1 , Ġ" Rate Ġthis Ġapp Ġon Ġthe Ġmarket ", ĠSn ackbar . LENGTH _ LONG ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAction (" OK ") Ġ{ Ġrate This App ( activity ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAction TextColor ( textColor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Duration ( 1 0 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsn ackBar 2 . view . set BackgroundColor ( background ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsn ackBar 2 . show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAction TextColor ( textColor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Duration ( 1 0 0 0 0 ) ĊĠĠĠĠĠĠĠ Ġsn ackBar 1 . view . set BackgroundColor ( background ) ĊĠĠĠĠĠĠĠ Ġsn ackBar 1 . show () ĊĠĠĠ Ġ} Ċ } Ċ