package Ġcom . back base . deferred resources . internal Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . res . Resources Ċ import Ġandroid . util . Typed Value Ċ import Ġandroidx . annotation . Attr Res Ċ import Ġandroidx . core . os . Configuration Compat Ċ import Ġjava . util . Locale Ċ Ċ /** Ċ Ġ* ĠA ĠContext 's Ġprimary Ġ[ Locale ]. Ċ Ġ*/ Ċ internal Ġval ĠContext . primary Locale : ĠLocale ĊĠĠĠ Ġget () Ġ= ĠConfiguration Compat . get Locales ( resources . configuration )[ 0 ] Ċ Ċ /** Ċ Ġ* ĠUse Ġa Ġ[ Context ] Ġto Ġresolve Ġa Ġ[ res Id ] Ġattribute . Ġ[ to Type Safe Result ] Ġcan Ġassume Ġthe Ġ[ Typed Value ] Ġhas Ġbeen Ġfilled Ġand Ċ Ġ* Ġhas Ġbeen Ġvalidated Ġas Ġhaving Ġone Ġof Ġthe Ġ[ expected Types ]. Ċ Ġ* Ċ Ġ* Ġ[ re used Typed Value ] Ġis Ġfilled Ġwith Ġthe Ġresolved Ġattribute Ġinformation Ġand Ġis Ġcleared Ġafter Ġ[ to Type Safe Result ] Ġreturns . Ċ Ġ* ĠAs Ġthe Ġname Ġsuggests , Ġthe Ġsame Ġ[ Typed Value ] Ġinstance Ġcan Ġthen Ġbe Ġreused Ġfor Ġmultiple Ġcalls Ġto Ġthis Ġfunction . Ċ Ġ* Ċ Ġ* ĠThrows Ġ[ IllegalArgumentException ] Ġif Ġthe Ġattribute Ġcannot Ġbe Ġresolved Ġor Ġif Ġit Ġis Ġresolved Ġas Ġa Ġtype Ġother Ġthan Ċ Ġ* Ġ[ expected Types ]. Ġ[ attribute TypeName ] Ġis Ġused Ġto Ġcreate Ġa Ġhelpful Ġerror Ġmessage . Ċ Ġ*/ Ċ internal Ġinline Ġfun Ġ< T > ĠContext . resolve Attribute ( ĊĠĠĠ Ġ@ Attr Res Ġres Id : ĠInt , ĊĠĠĠ Ġattribute TypeName : ĠString , ĊĠĠĠ Ġreused Typed Value : ĠTyped Value , ĊĠĠĠ Ġvar arg Ġexpected Types : ĠInt , ĊĠĠĠ Ġresolve Refs : ĠBoolean Ġ= Ġtrue , ĊĠĠĠ Ġto Type Safe Result : ĠTyped Value . () Ġ-> ĠT Ċ ): ĠT Ġ{ ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġis Resolved Ġ= Ġtheme . resolve Attribute ( res Id , Ġreused Typed Value , Ġresolve Refs ) ĊĠĠĠĠĠĠĠ Ġif Ġ( is Resolved Ġ&& Ġexpected Types . contains ( re used Typed Value . type )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġreused Typed Value . to Type Safe Result () ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException ( create ErrorMessage ( res Id , Ġattribute TypeName , Ġis Resolved )) ĊĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠClear Ġfor Ġre - use : ĊĠĠĠĠĠĠĠ Ġreused Typed Value . set To ( EMPTY _ TYPE D _ VALUE ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠCreate Ġan Ġerror Ġmessage Ġafter Ġfailing Ġto Ġresolve Ġa Ġ[ res Id ] Ġattribute . ĠIncludes Ġ[ attribute TypeName ] Ġif Ġ[ is Resolved ] Ġis Ċ Ġ* Ġtrue Ġto Ġindicate Ġthat Ġ[ res Id ] Ġwas Ġresolved Ġbut Ġwas Ġthe Ġwrong Ġtype . Ċ Ġ*/ Ċ private Ġfun ĠContext . create ErrorMessage ( ĊĠĠĠ Ġ@ Attr Res Ġres Id : ĠInt , ĊĠĠĠ Ġattribute TypeName : ĠString , ĊĠĠĠ Ġis Resolved : ĠBoolean Ċ ) Ġ= Ġtry Ġ{ ĊĠĠĠ Ġval Ġname Ġ= Ġresources . getResource Entry Name ( res Id ) ĊĠĠĠ Ġval Ġcould Not Resolve Ġ= Ġ" Could Ġnot Ġresolve Ġattribute Ġ<$ name >" ĊĠĠĠ Ġval Ġwith Context Ġ= Ġ" with Ġcontext Ġ<$ this >" ĊĠĠĠ Ġif Ġ( is Resolved ) ĊĠĠĠĠĠĠĠ Ġ"$ could Not Resolve Ġto Ġa Ġ$ attribute TypeName Ġ$ with Context " ĊĠĠĠ Ġelse ĊĠĠĠĠĠĠĠ Ġ"$ could Not Resolve Ġ$ with Context " Ċ } Ġcatch Ġ( not Found Exception : ĠResources . NotFoundException ) Ġ{ ĊĠĠĠ Ġ" Attribute Ġ<$ res Id > Ġcould Ġnot Ġbe Ġfound Ġwith Ġcontext Ġ<$ this >" Ċ } Ċ Ċ /** Ċ Ġ* ĠAn Ġempty Ġ[ Typed Value ] Ġused Ġto Ġreset Ġ" Attribute " Ġimplementations ' Ġinternal Ġ[ Typed Value ] s Ġafter Ġresolution . Ċ Ġ* Ċ Ġ* ĠMut ating Ġthis Ġvalue Ġis Ġincorrect Ġbehavior Ġand Ġmay Ġcause Ġunexpected Ġbugs . Ċ Ġ*/ Ċ private Ġval ĠEMPTY _ TYPE D _ VALUE : ĠTyped Value Ġ= ĠTyped Value () Ċ