/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 8 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ @ file : Jvm Name (" Resource Repository Util ") Ċ Ċ package Ġcom . android . ide . common . resources Ċ Ċ import Ġcom . android . ide . common . rendering . api . Resource Namespace Ċ import Ġcom . android . ide . common . rendering . api . Resource Value Ċ import Ġcom . android . ide . common . resources . configuration . Folder Configuration Ċ import Ġcom . android . ide . common . resources . configuration . Locale Qualifier Ċ import Ġcom . android . resources . ResourceType Ċ import Ġcom . google . common . collect . Table Ċ import Ġcom . google . common . collect . Tables Ċ import Ġjava . util . Enum Map Ċ import Ġjava . util . HashMap Ċ import Ġjava . util . Sorted Set Ċ import Ġjava . util . Tree Set Ċ Ċ /** Ċ Ġ* ĠReturns Ġthe Ġresources Ġvalues Ġmatching Ġa Ġgiven Ġ[ Folder Configuration ]. Ċ Ġ* Ċ Ġ* Ġ@ param Ġreference Config Ġthe Ġconfiguration Ġthat Ġeach Ġvalue Ġmust Ġmatch Ċ Ġ* Ġ@ return Ġa Ġ[ Table ] Ġwith Ġone Ġrow Ġfor Ġevery Ġnamespace Ġpresent Ġin Ġthis Ġrepository , Ġwhere Ċ Ġ* ĠĠĠĠĠĠĠĠ Ġevery Ġrow Ġcontains Ġan Ġentry Ġfor Ġall Ġresource Ġtypes Ċ Ġ*/ Ċ fun ĠResource Repository . getConfig ured Resources ( ĊĠĠĠ Ġreference Config : ĠFolder Configuration Ċ ): ĠTable < Resource Namespace , ĠResource Type , ĠResource Value Map > Ġ{ ĊĠĠĠ Ġval Ġbacking Map : ĠMap < Resource Namespace , ĠMap < ResourceType , ĠResource Value Map >> Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( Known Namespaces Map . can Contain All ( namespaces )) Ġ{ ĠKnown Namespaces Map () Ġ} Ġelse Ġ{ ĠHashMap () Ġ} ĊĠĠĠ Ġval Ġresult Ġ= ĠTables . new Custom Table ( back ing Map ) Ġ{ ĠEnum Map ( ResourceType :: class . java ) Ġ} ĊĊĠĠĠ Ġfor Ġ( namespace Ġin Ġnamespaces ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠTODO ( namespaces ): ĠMove Ġthis Ġmethod Ġto ĠResource Resolver Cache . ĊĠĠĠĠĠĠĠ Ġ// ĠFor Ġperformance Ġreasons Ġdon 't Ġmix Ġframework Ġand Ġnon - framework Ġresources Ġsince ĊĠĠĠĠĠĠĠ Ġ// Ġthey Ġhave Ġdifferent Ġlife Ġspans . ĊĠĠĠĠĠĠĠ Ġassert ( namespaces . size Ġ== Ġ 1 Ġ|| Ġnamespace Ġ!== ĠResource Namespace . ANDROID ) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( type Ġin ĠResource Type . values ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġget Ġthe Ġlocal Ġresults Ġand Ġput Ġthem Ġin Ġthe Ġmap ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . put ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnamespace , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Configured Resources ( namespace , Ġtype , Ġreference Config ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġresult Ċ } Ċ Ċ /** Ċ Ġ* ĠReturns Ġa Ġmap Ġof Ġ( resource Ġname , Ġresource Ġvalue ) Ġfor Ġthe Ġgiven Ġ[ ResourceType ]. Ċ Ġ* Ċ Ġ* ĠThe Ġvalues Ġreturned Ġare Ġtaken Ġfrom Ġthe Ġresource Ġfiles Ġbest Ġmatching Ġa Ġgiven Ġ[ Folder Configuration ]. Ċ Ġ* Ċ Ġ* Ġ@ param Ġnamespace Ġnamespaces Ġof Ġthe Ġresources Ċ Ġ* Ġ@ param Ġtype Ġthe Ġtype Ġof Ġthe Ġresources . Ċ Ġ* Ġ@ param Ġreference Config Ġthe Ġconfiguration Ġto Ġbest Ġmatch Ċ Ġ*/ Ċ fun ĠResource Repository . getConfig ured Resources ( ĊĠĠĠ Ġnamespace : ĠResource Namespace , ĊĠĠĠ Ġtype : ĠResource Type , ĊĠĠĠ Ġreference Config : ĠFolder Configuration Ċ ): ĠResource Value Map Ġ{ ĊĠĠĠ Ġval Ġitems ByName Ġ= Ġget Resources ( namespace , Ġtype ). as Map () ĊĠĠĠ Ġval Ġresult Ġ= ĠResource Value Map . create With Expected Size ( items ByName . size ) ĊĊĠĠĠ Ġfor Ġ( item Group Ġin Ġitems ByName . values ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠLook Ġfor Ġthe Ġbest Ġmatch Ġfor Ġthe Ġgiven Ġconfiguration . ĊĠĠĠĠĠĠĠ Ġval Ġmatch Ġ= Ġreference Config . find Matching Configurable < Resource Item >( item Group ) ĊĠĠĠĠĠĠĠ Ġif Ġ( match Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġmatch . resource Value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult [ match . name ] Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġresult Ċ } Ċ Ċ // ĠTODO : Ġnamespaces Ċ fun ĠResource Repository . getConfig ured Value ( ĊĠĠĠ Ġtype : ĠResource Type , ĊĠĠĠ Ġname : ĠString , ĊĠĠĠ Ġreference Config : ĠFolder Configuration Ċ ): ĠResource Value ? Ġ{ ĊĠĠĠ Ġval Ġitems Ġ= Ġget Resources ( Resource Namespace . TODO (), Ġtype , Ġname ) ĊĠĠĠ Ġ// ĠLook Ġfor Ġthe Ġbest Ġmatch Ġfor Ġthe Ġgiven Ġconfiguration . ĊĠĠĠ Ġ// ĠThe Ġmatch Ġhas Ġto Ġbe Ġof Ġtype ĠResource File Ġsince Ġthat 's Ġwhat Ġthe Ġinput Ġlist Ġcontains . ĊĠĠĠ Ġval Ġmatch Ġ= Ġreference Config . find Matching Configurable < Resource Item >( items ) ĊĠĠĠ Ġreturn Ġmatch ?. resource Value Ċ } Ċ Ċ /** ĠReturns Ġthe Ġsorted Ġlist Ġof Ġlocales Ġused Ġin Ġthe Ġresources . Ġ*/ Ċ fun ĠResource Repository . get Locales (): ĠSorted Set < Locale Qualifier > Ġ{ ĊĠĠĠ Ġ// ĠAs Ġan Ġoptimization Ġwe Ġcould Ġjust Ġlook Ġfor Ġvalues Ġsince Ġthat 's Ġtypically Ġwhere ĊĠĠĠ Ġ// Ġthe Ġlanguages Ġare Ġdefined Ġ-- Ġnot Ġon Ġlayouts , Ġmenus , Ġetc Ġ-- Ġespecially Ġif Ġthere ĊĠĠĠ Ġ// Ġare Ġno Ġtranslations Ġfor Ġit . ĊĠĠĠ Ġval Ġlocales Ġ= ĠTree Set < Locale Qualifier >() ĊĊĠĠĠ Ġfor Ġ( repository Ġin Ġleaf Resource Repositories ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrepository . accept Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlocale Ġ= Ġit . configuration . locale Qualifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( locale Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocales . add ( locale ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠResource Visitor . Visit Result . CONTINUE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġlocales Ċ } Ċ