package Ġcom . med av ox . library . mut ime Ċ Ċ import Ġandroid . content . Broadcast Receiver Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . System Clock Ċ import Ġandroid . util . Log Ċ import Ġcom . med av ox . library . mut ime . Disk Cache . Companion . SHARED _ PRE FS _ KEY Ċ Ċ /** Ċ Ġ* ĠA Ġ{@ link ĠBroadcast Receiver } Ġwhich Ġlist ens Ġfor Ġdevice Ġreboot s Ġand Ġclock Ġchanges Ġby Ġthe Ġuser . Ċ Ġ* ĠRegister Ġthis Ġclass Ġas Ġa Ġbroadcast Ġreceiver Ġfor Ġ{@ link ĠIntent # ACTION _ BOOT _ COMPLETED ĠBO OT _ COMPLETED } Ċ Ġ* Ġand Ġ{@ link ĠIntent # ACTION _ TIME _ CHANGED ĠTIME _ CHANGED }, Ċ Ġ* Ġto Ġallow ĠMu Time Ġto Ġcorrect Ġits Ġoffsets Ġagainst Ġthese Ġevents . Ċ Ġ*/ Ċ class ĠRe boot Watcher Ġ: ĠBroadcast Receiver () Ġ{ ĊĠĠĠ Ġprivate Ġval ĠTAG : String Ġ Ġ= Ġ" Time Data Pre server " ĊĠĠĠ Ġ/** Detect s Ġwhen Ġone Ġof Ġthe Ġstored Ġtime Ġstamp s Ġhave Ġbeen Ġinvalid ated Ġby Ġuser Ġactions , ĊĠĠĠĠ Ġ* Ġand Ġre pairs Ġit Ġusing Ġthe Ġint act Ġtimestamp ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ< p > ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠFor Ġinstance , Ġif Ġthe Ġuser Ġchanges Ġthe Ġsystem Ġclock Ġmanually , ĊĠĠĠĠ Ġ* Ġthen Ġthe Ġu ptime Ġtimestamp Ġis Ġused Ġto Ġcalculate Ġa Ġnew Ġvalue Ġfor Ġthe Ġsystem Ġclock Ġtime Ġstamp . ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Receive ( context : Context , Ġintent : Intent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdisk Cache Ġ= ĠDisk Cache ( context . get SharedPreferences ( SHARED _ PRE FS _ KEY , ĠContext . MODE _ PRIVATE )) ĊĠĠĠĠĠĠĠ Ġval Ġold Ġ= Ġdisk Cache . getTime Data () ĊĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" action Ġ\"" + intent . action +" \" Ġdetected . ĠRe pair ing ĠTime Data ...") ĊĠĠĠĠĠĠĠ Ġval Ġclock Now Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠ Ġval Ġu ptime Now Ġ= ĠSystem Clock . elapsed Realtime () ĊĠĠĠĠĠĠĠ Ġval Ġtrue Time : Long ĊĠĠĠĠĠĠĠ Ġwhen ( intent . action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIntent . ACTION _ BOOT _ COMPLETED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// uptime Ġclock Ġcan Ġno Ġlonger Ġbe Ġtrusted ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Time Ġ= Ġclock Now Ġ+ Ġold . system Clock Offset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew U ptime Offset Ġ= Ġtrue Time Ġ- uptime Now ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfixed U ptime Ġ= Ġold . copy ( uptime Offset = new U ptime Offset ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisk Cache . on Sn tp Time Data ( fixed U ptime ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠIntent . ACTION _ TIME _ CHANGED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// system Ġclock Ġcan Ġno Ġlonger Ġbe Ġtrusted ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Time Ġ= Ġu ptime Now Ġ+ Ġold . uptime Offset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Clock Offset Ġ= Ġtrue Time Ġ- clock Now ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfixed System Clock Time Ġ= Ġold . copy ( system Clock Offset Ġ= Ġnew Clock Offset ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisk Cache . on Sn tp Time Data ( fixed System Clock Time ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ