/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 8 Ġå¤§ åīį èī¯ ä»ĭ Ġ( OH MA E ĠR y os uke ) Ċ Ġ* Ċ Ġ* ĠThis Ġsoftware Ġis Ġreleased Ġunder Ġthe ĠMIT ĠLicense . Ċ Ġ* Ġhttp :// opensource . org / licenses / MIT Ċ Ġ*/ Ċ Ċ package Ġnet . mm 2 d . preference Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . res . Xml Resource Parser Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . util . Typed Value Ċ import Ġandroid . util . Xml Ċ import Ġandroidx . annotation . Xml Res Ċ import Ġandroidx . core . content . res . use Ċ import Ġnet . mm 2 d . preference . Preference Activity Compat Delegate . Companion . HEADER _ ID _ UNDEFINED Ċ import Ġorg . xml pull . v 1 . Xml Pull Parser Ċ import Ġorg . xml pull . v 1 . Xml Pull Parser Exception Ċ import Ġjava . io . IOException Ċ Ċ internal Ġobject ĠHeader Loader Ġ{ ĊĠĠĠ Ġfun Ġload From Resource ( ĊĠĠĠĠĠĠĠ Ġcontext : ĠContext , ĊĠĠĠĠĠĠĠ Ġ@ Xml Res Ġres Id : ĠInt , ĊĠĠĠĠĠĠĠ Ġtarget : ĠMutable List < Header > ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġparser : ĠXml Resource Parser ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparser Ġ= Ġcontext . resources . get Xml ( res Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload From Resource ( context , Ġparser , Ġtarget ) ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparser ?. close () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IOException :: class , ĠXml Pull Parser Exception :: class ) ĊĠĠĠ Ġprivate Ġfun Ġload From Resource ( ĊĠĠĠĠĠĠĠ Ġcontext : ĠContext , ĊĠĠĠĠĠĠĠ Ġparser : ĠXml Resource Parser , ĊĠĠĠĠĠĠĠ Ġtarget : ĠMutable List < Header > ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġattrs Ġ= ĠXml . as Attribute Set ( parser ) ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" Control Flow With Empty Body ") ĊĠĠĠĠĠĠĠ Ġwhile Ġ( parser . next (). let Ġ{ Ġit Ġ!= ĠXml Pull Parser . END _ DOCUMENT Ġ&& Ġit Ġ!= ĠXml Pull Parser . START _ TAG Ġ}); ĊĠĠĠĠĠĠĠ Ġif Ġ(" preference - headers " Ġ!= Ġparser . name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" XML Ġdocument Ġmust Ġstart Ġwith Ġ< preference - headers > Ġtag ; Ġfound " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġparser . name Ġ+ Ġ" Ġat Ġ" Ġ+ Ġparser . position Description ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġstart Depth Ġ= Ġparser . depth ĊĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġparser . next () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( reach ToEnd ( type , Ġparser . depth , Ġstart Depth )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Ġ== ĠXml Pull Parser . END _ TAG Ġ|| Ġtype Ġ== ĠXml Pull Parser . TEXT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(" header " Ġ== Ġparser . name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget . add ( parse Header Section ( context , Ġparser , Ġattrs )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġskip Current Tag ( parser ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Re cycle ") ĊĠĠĠ Ġ@ Throws ( IOException :: class , ĠXml Pull Parser Exception :: class ) ĊĠĠĠ Ġprivate Ġfun Ġparse Header Section ( ĊĠĠĠĠĠĠĠ Ġcontext : ĠContext , ĊĠĠĠĠĠĠĠ Ġparser : ĠXml Resource Parser , ĊĠĠĠĠĠĠĠ Ġattrs : ĠAttributeSet ĊĠĠĠ Ġ): ĠHeader Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġheader Ġ= ĠHeader () ĊĠĠĠĠĠĠĠ Ġcontext . obtain Styled Attributes ( attrs , ĠR . style able . Preference Header ). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheader . id Ġ= Ġit . getResource Id ( R . style able . Preference Header _ id , ĠHEADER _ ID _ UNDEFINED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheader . setTitle ( it . peek Value ( R . style able . Preference Header _ title )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheader . set Summary ( it . peek Value ( R . style able . Preference Header _ summary )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheader . set B read Cr umb Title ( it . peek Value ( R . style able . Preference Header _ bread Cr umb Title )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheader . icon Res Ġ= Ġit . getResource Id ( R . style able . Preference Header _ icon , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheader . fragment Ġ= Ġit . getString ( R . style able . Preference Header _ fragment ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġparse Intent Section ( context , Ġparser , Ġattrs , Ġheader ) ĊĠĠĠĠĠĠĠ Ġreturn Ġheader ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠHeader . setTitle ( tv : ĠTyped Value ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( tv ?. type Ġ!= ĠTyped Value . TYPE _ STRING ) Ġreturn ĊĠĠĠĠĠĠĠ Ġif Ġ( tv . resourceId Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Res Ġ= Ġtv . resourceId ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġtv . string ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠHeader . set Summary ( tv : ĠTyped Value ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( tv ?. type Ġ!= ĠTyped Value . TYPE _ STRING ) Ġreturn ĊĠĠĠĠĠĠĠ Ġif Ġ( tv . resourceId Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsummary Res Ġ= Ġtv . resourceId ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsummary Ġ= Ġtv . string ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠHeader . set B read Cr umb Title ( tv : ĠTyped Value ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( tv ?. type Ġ!= ĠTyped Value . TYPE _ STRING ) Ġreturn ĊĠĠĠĠĠĠĠ Ġif Ġ( tv . resourceId Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġb read Cr umb Title Res Ġ= Ġtv . resourceId ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġb read Cr umb Title Ġ= Ġtv . string ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IOException :: class , ĠXml Pull Parser Exception :: class ) ĊĠĠĠ Ġprivate Ġfun Ġparse Intent Section ( ĊĠĠĠĠĠĠĠ Ġcontext : ĠContext , ĊĠĠĠĠĠĠĠ Ġparser : ĠXml Resource Parser , ĊĠĠĠĠĠĠĠ Ġattrs : ĠAttributeSet , ĊĠĠĠĠĠĠĠ Ġheader : ĠHeader ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbundle Ġ= ĠBundle () ĊĠĠĠĠĠĠĠ Ġval Ġstart Depth Ġ= Ġparser . depth ĊĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġparser . next () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( reach ToEnd ( type , Ġparser . depth , Ġstart Depth )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Ġ== ĠXml Pull Parser . END _ TAG Ġ|| Ġtype Ġ== ĠXml Pull Parser . TEXT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( parser . name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" extra " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . resources . parse Bundle Extra (" extra ", Ġattrs , Ġbundle ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġskip Current Tag ( parser ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" intent " Ġ-> Ġheader . intent Ġ= ĠIntent . parse Intent ( context . resources , Ġparser , Ġattrs ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġskip Current Tag ( parser ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( bundle . size () Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheader . fragment Arguments Ġ= Ġbundle ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IOException :: class , ĠXml Pull Parser Exception :: class ) ĊĠĠĠ Ġprivate Ġfun Ġskip Current Tag ( parser : ĠXml Pull Parser ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstart Depth Ġ= Ġparser . depth ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" Control Flow With Empty Body ") ĊĠĠĠĠĠĠĠ Ġwhile Ġ(! reach ToEnd ( parser . next (), Ġparser . depth , Ġstart Depth )); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġreach ToEnd ( ĊĠĠĠĠĠĠĠ Ġtype : ĠInt , ĊĠĠĠĠĠĠĠ Ġcurrent Depth : ĠInt , ĊĠĠĠĠĠĠĠ Ġstart Depth : ĠInt ĊĠĠĠ Ġ): ĠBoolean Ġ= Ġtype Ġ== ĠXml Pull Parser . END _ DOCUMENT Ġ|| ĊĠĠĠĠĠĠĠ Ġtype Ġ== ĠXml Pull Parser . END _ TAG Ġ&& Ġcurrent Depth Ġ<= Ġstart Depth Ċ } Ċ