package Ġcom . useful ness . th reet en bp Ċ Ċ import Ġandroid . content . Context Ċ import Ġorg . th reet en . bp . jdk 8 . J dk 8 Methods Ċ import Ġorg . th reet en . bp . zone . Zone Rules Ċ import Ġorg . th reet en . bp . zone . Zone Rules Compat Ċ import Ġorg . th reet en . bp . zone . Zone Rules Exception Ċ import Ġorg . th reet en . bp . zone . Zone Rules Provider Ċ import Ġjava . io . Data InputStream Ċ import Ġjava . io . InputStream Ċ import Ġjava . io . Stream Cor ruptedException Ċ import Ġjava . util . Navig able Map Ċ import Ġjava . util . TreeMap Ċ import Ġjava . util . concurrent . Concurrent Skip List Map Ċ Ċ internal Ġclass ĠLazy Zone Rules Provider ( private Ġval Ġcontext : ĠContext ) Ġ: ĠZone Rules Provider () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġmap Ġ= ĠConcurrent Skip List Map < String , ĠZone Rules ?> () ĊĊĠĠĠ Ġoverride Ġfun Ġprovide Zone Ids () Ġ= ĊĠĠĠĠĠĠĠ ĠHashSet ( Generated Zone Ids Provider . get Zone Ids ()) ĊĊĠĠĠ Ġoverride Ġfun Ġprovide Rules ( zone Id : ĠString , Ġfor Caching : ĠBoolean ): ĠZone Rules Ġ{ ĊĠĠĠĠĠĠĠ ĠJ dk 8 Methods . requireNonNull ( zone Id , Ġ" zone Id ") ĊĠĠĠĠĠĠĠ Ġvar Ġrules Ġ= Ġmap [ zone Id ] ĊĠĠĠĠĠĠĠ Ġif Ġ( rules Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrules Ġ= Ġload Data ( zone Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap [ zone Id ] Ġ= Ġrules ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġrules ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġprovide Versions ( zone Id : ĠString ): ĠNavig able Map < String , ĠZone Rules > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġversion Id Ġ= ĠGenerated Zone Ids Provider . getVersion Id () ĊĠĠĠĠĠĠĠ Ġval Ġrules Ġ= Ġprovide Rules ( zone Id , Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠTreeMap ( map Of ( version Id Ġto Ġrules )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Data ( zone Id : ĠString ): ĠZone Rules Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠfileName Ġ= Ġ" tz db /$ zone Id . dat " ĊĊĠĠĠĠĠĠĠ Ġreturn Ġrun Catch ing Ġ{ Ġcontext . assets . open ( fileName ). use (:: load Data ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. getOrElse Ġ{ Ġthrow ĠZone Rules Exception (" Invalid Ġbinary Ġtime - zone Ġdata : Ġ$ fileName ", Ġit ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Data ( inputStream : ĠInputStream ): ĠZone Rules Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdis Ġ= ĠData InputStream ( inputStream ) ĊĠĠĠĠĠĠĠ Ġif Ġ( dis . read Byte (). toInt () Ġ!= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠStream Cor ruptedException (" File Ġformat Ġnot Ġrecogn ised ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval ĠgroupId Ġ= Ġdis . read UTF () ĊĠĠĠĠĠĠĠ Ġif Ġ(" TZ DB - ZONE " Ġ!= ĠgroupId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠStream Cor ruptedException (" File Ġformat Ġnot Ġrecogn ised ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠZone Rules Compat . read Zone Rules ( dis ) ĊĠĠĠ Ġ} Ċ } Ċ