/* Ċ Ġ* ĠTencent Ġis Ġplease d Ġto Ġsupport Ġthe Ġopen Ġsource Ġcommunity Ġby Ġmaking ĠTencent ĠShadow Ġavailable . Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 9 ĠTH L ĠA 2 9 ĠLimited , Ġa ĠTencent Ġcompany . Ġ ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠBSD Ġ 3 - Clause ĠLicense Ġ( the Ġ" License "); Ġyou Ġmay Ġnot Ġuse Ċ Ġ* Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ċ Ġ* Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttps :// opensource . org / licenses / BSD - 3 - Clause Ċ Ġ* Ċ Ġ* Ġ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 . Ċ Ġ* Ċ Ġ*/ Ċ Ċ package Ġcom . tencent . shadow . core . transform . specific Ċ Ċ import Ġcom . tencent . shadow . core . transform _ kit . Specific Transform Ċ import Ġcom . tencent . shadow . core . transform _ kit . Transform Step Ċ import Ġjav assist . Class Pool Ċ import Ġjav assist . Code Converter Ċ import Ġjav assist . Ct Class Ċ import Ġjav assist . byte code . Descriptor Ċ Ċ class ĠContent Provider Transform Ġ: ĠSpecific Transform () Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠShadow Uri Class name Ġ= Ġ" com . tencent . shadow . core . runtime . Uri Converter " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠAndroid Uri Class name Ġ= Ġ" android . net . Uri " ĊĠĠĠĠĠĠĠ Ġconst Ġval Ġuri Builder Name Ġ= Ġ" android . net . Uri \$ Builder " ĊĠĠĠĠĠĠĠ Ġconst Ġval Ġresolver Name Ġ= Ġ" android . content . Content Resolver " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprepare Uri Parse Code Converter ( class Pool : ĠClass Pool ): ĠCode Converter Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuri Method Ġ= Ġm Class Pool [ Android Uri Class name ]. methods !! ĊĠĠĠĠĠĠĠ Ġval Ġshadow Uri Method Ġ= Ġm Class Pool [ Shadow Uri Class name ]. methods !! ĊĊĠĠĠĠĠĠĠ Ġval Ġmethod _ parse Ġ= Ġuri Method . filter Ġ{ Ġit . name Ġ== Ġ" parse " Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġshadow _ method _ parse Ġ= Ġshadow Uri Method . filter Ġ{ Ġit . name Ġ== Ġ" parse " Ġ} !! ĊĠĠĠĠĠĠĠ Ġval Ġcode Converter Ġ= ĠCode Converter () ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( ct Android Method Ġin Ġmethod _ parse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( ct Shadow Med thod Ġin Ġshadow _ method _ parse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ct Android Method . method Info . descriptor Ġ== Ġct Shadow Med thod . method Info . descriptor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcode Converter . redirect MethodCall ( ct Android Method , Ġct Shadow Med thod ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġcode Converter ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprepare Uri Builder Code Converter ( class Pool : ĠClass Pool ): ĠCode Converter Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuri Class Ġ= Ġm Class Pool [ Android Uri Class name ] ĊĠĠĠĠĠĠĠ Ġval Ġuri Builder Class Ġ= Ġm Class Pool [ uri Builder Name ] ĊĠĠĠĠĠĠĠ Ġval Ġbuild Method Ġ= Ġuri Builder Class . getMethod (" build ", ĠDescriptor . of Method ( uri Class , Ġnull )) ĊĠĠĠĠĠĠĠ Ġval Ġnew Build Method Ġ= Ġm Class Pool [ Shadow Uri Class name ]. getMethod ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" build ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDescriptor . of Method ( uri Class , ĠarrayOf ( uri Builder Class )) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġcode Converter Ġ= ĠCode Converter () ĊĠĠĠĠĠĠĠ Ġcode Converter . redirect MethodCall To Static ( build Method , Ġnew Build Method ) ĊĠĠĠĠĠĠĠ Ġreturn Ġcode Converter ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprepare Content Resolver Code Converter ( class Pool : ĠClass Pool ): ĠCode Converter Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcode Converter Ġ= ĠCode Converter () ĊĠĠĠĠĠĠĠ Ġval Ġresolver Class Ġ= Ġclass Pool [ resolver Name ] ĊĠĠĠĠĠĠĠ Ġval Ġtarget Class Ġ= Ġclass Pool [ Shadow Uri Class name ] ĊĠĠĠĠĠĠĠ Ġval Ġuri Class Ġ= Ġclass Pool [" android . net . Uri "] ĊĠĠĠĠĠĠĠ Ġval Ġstring Class Ġ= Ġclass Pool [" java . lang . String "] ĊĠĠĠĠĠĠĠ Ġval Ġbundle Class Ġ= Ġclass Pool [" android . os . Bundle "] ĊĠĠĠĠĠĠĠ Ġval Ġobserver Class Ġ= Ġclass Pool [" android . database . Content Observer "] ĊĊĠĠĠĠĠĠĠ Ġval Ġcall Method Ġ= Ġresolver Class . getMethod (" call ", ĠDescriptor . of Method ( bundle Class , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( uri Class , Ġstring Class , Ġstring Class , Ġbundle Class ))) ĊĠĠĠĠĠĠĠ Ġval Ġnew Call Method Ġ= Ġtarget Class . getMethod (" call ", ĠDescriptor . of Method ( bundle Class , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( resolver Class , Ġuri Class , Ġstring Class , Ġstring Class , Ġbundle Class ))) ĊĠĠĠĠĠĠĠ Ġcode Converter . redirect MethodCall To Static ( call Method , Ġnew Call Method ) ĊĊĠĠĠĠĠĠĠ Ġval Ġnotify Method 1 Ġ= Ġresolver Class . getMethod (" notify Change ", ĠDescriptor . of Method ( Ct Class . void Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( uri Class , Ġobserver Class ))) ĊĠĠĠĠĠĠĠ Ġval Ġnew Notify Method 1 Ġ= Ġtarget Class . getMethod (" notify Change ", ĠDescriptor . of Method ( Ct Class . void Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( resolver Class , Ġuri Class , Ġobserver Class ))) ĊĠĠĠĠĠĠĠ Ġcode Converter . redirect MethodCall To Static ( notify Method 1 , Ġnew Notify Method 1 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġnotify Method 2 Ġ= Ġresolver Class . getMethod (" notify Change ", ĠDescriptor . of Method ( Ct Class . void Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( uri Class , Ġobserver Class , ĠC t Class . boolean Type ))) ĊĠĠĠĠĠĠĠ Ġval Ġnew Notify Method 2 Ġ= Ġtarget Class . getMethod (" notify Change ", ĠDescriptor . of Method ( Ct Class . void Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( resolver Class , Ġuri Class , Ġobserver Class , ĠC t Class . boolean Type ))) ĊĠĠĠĠĠĠĠ Ġcode Converter . redirect MethodCall To Static ( notify Method 2 , Ġnew Notify Method 2 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġnotify Method 3 Ġ= Ġresolver Class . getMethod (" notify Change ", ĠDescriptor . of Method ( Ct Class . void Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( uri Class , Ġobserver Class , ĠC t Class . int Type ))) ĊĠĠĠĠĠĠĠ Ġval Ġnew Notify Method 3 Ġ= Ġtarget Class . getMethod (" notify Change ", ĠDescriptor . of Method ( Ct Class . void Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( resolver Class , Ġuri Class , Ġobserver Class , ĠC t Class . int Type ))) ĊĠĠĠĠĠĠĠ Ġcode Converter . redirect MethodCall To Static ( notify Method 3 , Ġnew Notify Method 3 ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcode Converter ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsetup ( all Input Class : ĠSet < Ct Class >) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġuri Parse Code Converter Ġ= Ġprepare Uri Parse Code Converter ( m Class Pool ) ĊĠĠĠĠĠĠĠ Ġval Ġuri Builder Code Converter Ġ= Ġprepare Uri Builder Code Converter ( m Class Pool ) ĊĠĠĠĠĠĠĠ Ġval Ġcontent Resolver Code Converter Ġ= Ġprepare Content Resolver Code Converter ( m Class Pool ) ĊĊĠĠĠĠĠĠĠ Ġnew Step ( object Ġ: ĠTransform Step Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġfilter ( all Input Class : ĠSet < Ct Class >) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfilter Ref Classes ( all Input Class , ĠlistOf ( Android Uri Class name )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġtransform ( ct Class : ĠC t Class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġct Class . instrument ( uri Parse Code Converter ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . err . println (" å¤ĦçĲĨ " Ġ+ Ġct Class . name Ġ+ Ġ" æĹ¶ åĩº éĶĻ ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġnew Step ( object Ġ: ĠTransform Step Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġfilter ( all Input Class : ĠSet < Ct Class >) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfilter Ref Classes ( all Input Class , ĠlistOf ( uri Builder Name )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġtransform ( ct Class : ĠC t Class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġct Class . instrument ( uri Builder Code Converter ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . err . println (" å¤ĦçĲĨ " Ġ+ Ġct Class . name Ġ+ Ġ" æĹ¶ åĩº éĶĻ ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġnew Step ( object Ġ: ĠTransform Step Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġfilter ( all Input Class : ĠSet < Ct Class >) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfilter Ref Classes ( all Input Class , ĠlistOf ( resolver Name )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġtransform ( ct Class : ĠC t Class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġct Class . instrument ( content Resolver Code Converter ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . err . println (" å¤ĦçĲĨ " Ġ+ Ġct Class . name Ġ+ Ġ" æĹ¶ åĩº éĶĻ ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} Ċ }