/* Ċ Ġ* Ġ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 (" Layout File Pull Parser ") Ċ Ċ package Ġcom . android . tools . idea . rendering . parsers Ċ Ċ import Ġcom . android . ide . common . rendering . api . ILayout Pull Parser Ċ import Ġcom . android . ide . common . rendering . api . Resource Namespace Ċ import Ġcom . android . ide . common . resources . Value Xml Helper Ċ import Ġcom . android . ide . common . util . Path String Ċ import Ġcom . android . tools . idea . rendering . Layout Metadata Ċ import Ġcom . android . tools . idea . res . File Resource Reader Ċ import Ġorg . xml pull . v 1 . Xml Pull Parser Ċ Ċ import Ġcom . android . Sdk Constants .* Ċ import Ġcom . android . support . Fragment Tag Util . is Fragment Tag Ċ Ċ /** Ċ Ġ* ĠCreates Ġa Ġnew Ġ[ ILayout Pull Parser ] Ġfor Ġthe Ġgiven ĠXML Ġfile . Ċ Ġ*/ Ċ fun Ġcreate ( xml : ĠPath String , Ġnamespace : ĠResource Namespace ): ĠI Layout Pull Parser ? Ġ{ ĊĠ Ġval Ġparser Ġ= ĠFile Resource Reader . create Xml Pull Parser ( xml ) Ġ?: Ġreturn Ġnull ĊĠ Ġreturn ĠLayout Pull Parser Impl ( parser , Ġnamespace ) Ċ } Ċ Ċ /** Ċ Ġ* ĠModified Ġ[ Xml Pull Parser ] Ġthat Ġadds Ġthe Ġmethods Ġof Ġ[ ILayout Pull Parser ], Ġand Ġperforms Ċ Ġ* Ġother Ġlayout - specific Ġparser Ġbehavior Ġlike Ġtrans lating Ġfragment Ġtags Ġinto Ġinclude Ġtags . Ċ Ġ*/ Ċ private Ġclass ĠLayout Pull Parser Impl Ġconstructor ( ĊĠ Ġprivate Ġval Ġdelegate : ĠXml Pull Parser , ĊĠ Ġprivate Ġval Ġlayout Namespace : ĠResource Namespace Ċ ) Ġ: ĠI Layout Pull Parser , ĠXml Pull Parser Ġby Ġdelegate Ġ{ ĊĠ Ġ/** ĠThe Ġlayout Ġto Ġbe Ġshown Ġfor Ġthe Ġcurrent Ġ`< fragment >` Ġtag . ĠUsually Ġnull . Ġ Ġ*/ ĊĠ Ġprivate Ġvar Ġfragment Layout : ĠString ? Ġ= Ġnull ĊĊĠ Ġ// Ġ--- ĠLayout lib ĠAPI Ġmethods . ĊĊĠ Ġoverride Ġfun Ġget Layout Namespace (): ĠResource Namespace Ġ{ ĊĠĠĠ Ġreturn Ġlayout Namespace ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġget View Cookie (): ĠAny ? Ġ{ ĊĠĠĠ Ġval Ġname Ġ= Ġdelegate . name Ġ?: Ġreturn Ġnull ĊĊĠĠĠ Ġ// ĠStore Ġtools Ġattributes Ġif Ġthis Ġlooks Ġlike Ġa Ġlayout Ġwe 'll Ġneed Ġadapter Ġview ĊĠĠĠ Ġ// Ġbindings Ġfor Ġin Ġthe ĠLayout lib Callback . ĊĠĠĠ Ġif Ġ( LIST _ VIEW Ġ!= Ġname Ġ&& ĠEXP AND ABLE _ LIST _ VIEW Ġ!= Ġname Ġ&& ĠGR ID _ VIEW Ġ!= Ġname Ġ&& ĠSP INNER Ġ!= Ġname ) Ġ{ ĊĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġmap : ĠMutable Map < String , ĠString >? Ġ= Ġnull ĊĠĠĠ Ġval Ġcount Ġ= Ġdelegate . attribute Count ĊĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġcount ) Ġ{ ĊĠĠĠĠĠ Ġval Ġnamespace Ġ= Ġdelegate . getAttribute Namespace ( i ) ĊĠĠĠĠĠ Ġif Ġ( namespace Ġ!= Ġnull Ġ&& Ġnamespace Ġ== ĠTO OL S _ URI ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġattribute Ġ= Ġdelegate . getAttribute Name ( i ) ĊĠĠĠĠĠĠĠ Ġif Ġ( attribute Ġ== ĠATTR _ IGNORE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( map Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġmap Ġ= ĠHashMap ( 7 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmap [ attribute ] Ġ= Ġdelegate . getAttribute Value ( i ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġmap ĊĠ Ġ} ĊĊĠ Ġ// Ġ--- ĠXml Pull Parser Ġoverrides . ĊĊĠ Ġoverride Ġfun ĠgetName (): ĠString ? Ġ{ ĊĠĠĠ Ġval Ġname Ġ= Ġdelegate . name ĊĊĠĠĠ Ġ// ĠAt Ġdesign Ġtime , Ġreplace Ġfragments Ġwith Ġincludes . ĊĠĠĠ Ġif Ġ( is Fragment Tag ( name )) Ġ{ ĊĠĠĠĠĠ Ġfragment Layout Ġ= ĠLayout Metadata . getProperty ( delegate , ĠLayout Metadata . KEY _ FRAGMENT _ LAYOUT ) ĊĠĠĠĠĠ Ġif Ġ( fragment Layout Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠVIEW _ INCLUDE ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠ Ġfragment Layout Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġname ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġget AttributeValue ( namespace : ĠString ?, Ġlocal Name : ĠString ): ĠString ? Ġ{ ĊĠĠĠ Ġif Ġ( ATTR _ LAYOUT Ġ== Ġlocal Name Ġ&& Ġfragment Layout Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġreturn Ġfragment Layout ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġvalue : ĠString ? Ġ= Ġdelegate . getAttribute Value ( namespace , Ġlocal Name ) ĊĊĠĠĠ Ġ// ĠOn Ġthe Ġfly Ġconvert Ġmatch _ parent Ġto Ġfill _ parent Ġfor Ġcompatibility Ġwith Ġolder Ġplatforms . ĊĠĠĠ Ġif Ġ( VALUE _ MATCH _ PARENT Ġ== Ġvalue Ġ&& ĊĠĠĠĠĠĠĠ Ġ( ATTR _ LAYOUT _ WIDTH Ġ== Ġlocal Name Ġ|| ĠATTR _ LAYOUT _ HEIGHT Ġ== Ġlocal Name ) Ġ&& ĊĠĠĠĠĠĠĠ ĠAND ROID _ URI Ġ== Ġnamespace ) Ġ{ ĊĠĠĠĠĠ Ġreturn ĠVALUE _ FILL _ PARENT ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( namespace Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( namespace Ġ== ĠAND ROID _ URI ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠAllow Ġthe Ġtools Ġnamespace Ġto Ġoverride Ġthe Ġframework Ġattributes Ġat Ġdesign Ġtime . ĊĠĠĠĠĠĠĠ Ġval Ġdesign Value Ġ= Ġdelegate . getAttribute Value ( TOOLS _ URI , Ġlocal Name ) ĊĠĠĠĠĠĠĠ Ġif Ġ( design Value Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġif Ġ( value Ġ== Ġnull Ġ|| Ġ! design Value . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdesign Value ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ// ĠAn Ġempty Ġvalue Ġof Ġthe Ġdesign Ġtime Ġattribute Ġer ases Ġthe Ġvalue Ġof Ġthe Ġruntime Ġattribute Ġif Ġit Ġwas Ġset . ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġelse Ġif Ġ( value Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠAuto - convert Ġhttp :// schemas . android . com / apk / res - auto Ġresources . ĠThe Ġlookup ĊĠĠĠĠĠĠĠ Ġ// Ġwill Ġbe Ġfor Ġthe Ġcurrent Ġapplication 's Ġresource Ġpackage , Ġe . g . ĊĠĠĠĠĠĠĠ Ġ// Ġhttp :// schemas . android . com / apk / res / foo . bar , Ġbut Ġthe ĠXML Ġdocument Ġwill ĊĠĠĠĠĠĠĠ Ġ// Ġbe Ġusing Ġhttp :// schemas . android . com / apk / res - auto Ġin Ġlibrary Ġprojects : ĊĠĠĠĠĠĠĠ Ġvalue Ġ= Ġdelegate . getAttribute Value ( AUTO _ URI , Ġlocal Name ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠHandle Ġunicode Ġand ĠXML Ġescap es . ĊĠĠĠ Ġif Ġ( value Ġ!= Ġnull Ġ&& Ġvalue . any Ġ{ Ġit Ġ== Ġ'& ' Ġ|| Ġit Ġ== Ġ'\\ ' Ġ}) Ġ{ ĊĠĠĠĠĠ Ġreturn ĠValue Xml Helper . un escape Resource String ( value , Ġtrue , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġvalue ĊĠ Ġ} Ċ } Ċ