package Ġcom . car ter chen 2 4 7 . alarm scheduler ĊĊ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Context . MODE _ PRIVATE Ċ import Ġandroidx . annotation . Visible ForTesting Ċ import Ġjava . util . concurrent . atomic . Atomic Integer Ċ Ċ /** Ċ Ġ* Ġresponsible Ġfor Ġcreating Ġunique Ġids Ġfor Ġal arms Ċ Ġ*/ Ċ internal Ġclass ĠAlarm Id Provider ( context : ĠContext ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġshared Preference Ġ= Ġcontext . get SharedPreferences ( PRE F _ NAME , ĠMODE _ PRIVATE ) ĊĠĠĠ Ġprivate Ġval Ġid Ġby Ġlazy Ġ{ ĠAtomicInteger ( shared Preference . getInt ( KEY _ ALARM _ ID , Ġ 0 )) Ġ} ĊĊĠĠĠ Ġfun Ġgenerate Id ( alarm Id : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( alarm Id Ġ!= ĠAUTO _ GENER ATE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshared Preference . edit (). put Int ( KEY _ ALARM _ ID , Ġalarm Id ). apply () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġalarm Id ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġgenerated Id Ġ= Ġid . increment AndGet () ĊĠĠĠĠĠĠĠ Ġshared Preference . edit (). put Int ( KEY _ ALARM _ ID , Ġgenerated Id ). apply () ĊĠĠĠĠĠĠĠ Ġreturn Ġgenerated Id ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Visible ForTesting ĊĠĠĠ Ġfun Ġclear () Ġ{ ĊĠĠĠĠĠĠĠ Ġshared Preference . edit (). clear (). apply () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠP REF _ NAME Ġ= Ġ" PRE F _ ALARM _ ID " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ ALARM _ ID Ġ= Ġ" KEY _ ALARM _ ID " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠAUTO _ GENER ATE Ġ= Ġ 0 ĊĠĠĠ Ġ} Ċ } Ċ