package Ġcom . github . snow dream . util Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . tele phony . Tele phony Manager Ċ import Ġandroid . text . TextUtils Ċ import Ġjava . lang . ref . Soft Reference Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġyang h ui . yang h Ġon Ġ 2 0 1 6 - 0 7 - 1 4 . Ċ Ġ*/ Ċ class ĠSim Util Ġprivate Ġconstructor () Ġ{ ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠAssertionError (" No Ġconstructor Ġallowed Ġhere !") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġreference : ĠSoft Reference < Dual Sim Info >? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠWhether Ġthe Ġphone Ġuse ĠDual Sim ĊĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġcontext ĊĠĠĠĠĠĠĠĠ Ġ* Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġfun Ġis Dual Sim ( context : ĠContext ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġget M tk Dual Sim Info ( context , Ġtrue ) Ġ!= Ġnull Ġ|| Ġget Qual comm Dual Sim Info ( context , Ġtrue ) Ġ!= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠGet ĠDual Sim Info , if Ġany . ĊĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġcontext ĊĠĠĠĠĠĠĠĠ Ġ* Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġfun Ġget Dual Sim Info ( context : ĠContext ): ĠDual Sim Info ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Dual Sim ( context )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdual Sim Info From Cache ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠWhether Ġthe Ġphone Ġuse ĠM TK ĠDual Sim ĊĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġcontext ĊĠĠĠĠĠĠĠĠ Ġ* Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġis Cache ĊĠĠĠĠĠĠĠĠ Ġ* Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġfun Ġget M tk Dual Sim Info ( context : ĠContext , Ġis Cache : ĠBoolean ): ĠDual Sim Info ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Cache Ġ&& Ġdual Sim Info From Cache Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdual Sim Info From Cache ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdual Sim Info : ĠDual Sim Info ? Ġ= ĠDual Sim Info () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtm Ġ= Ġcontext . getSystem Service ( Context . TELE PHONY _ SERVICE ) Ġas ĠTele phony Manager ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġc Ġ= ĠClass . forName (" com . android . internal . tele phony . Phone ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfields 1 Ġ= Ġc . getField (" GE MIN I _ SIM _ 1 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfields 1 . is Accessible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdual Sim Info !!. sim Id _ 1 Ġ= Ġfields 1 . get ( null ) Ġas ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfields 2 Ġ= Ġc . getField (" GE MIN I _ SIM _ 2 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfields 2 . is Accessible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdual Sim Info . sim Id _ 2 Ġ= Ġfields 2 . get ( null ) Ġas ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm Ġ= ĠTele phony Manager :: class . java . getDeclared Method ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" get Subscriber Id Gem ini ", ĠInteger . TYPE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdual Sim Info . im si _ 1 Ġ= Ġm . invoke ( tm , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdual Sim Info . sim Id _ 1 ) Ġas ĠString ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdual Sim Info . im si _ 2 Ġ= Ġm . invoke ( tm , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdual Sim Info . sim Id _ 2 ) Ġas ĠString ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm 1 Ġ= ĠTele phony Manager :: class . java . getDeclared Method ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" get DeviceId Gem ini ", ĠInteger . TYPE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdual Sim Info . ime i _ 1 Ġ= Ġm 1 . invoke ( tm , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdual Sim Info . sim Id _ 1 ) Ġas ĠString ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdual Sim Info . ime i _ 2 Ġ= Ġm 1 . invoke ( tm , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdual Sim Info . sim Id _ 2 ) Ġas ĠString ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmx Ġ= ĠTele phony Manager :: class . java . getDeclared Method ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" get Phone Type Gem ini ", ĠInteger . TYPE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdual Sim Info . phone Type _ 1 Ġ= Ġmx . invoke ( tm , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdual Sim Info . sim Id _ 1 ) Ġas ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdual Sim Info . phone Type _ 2 Ġ= Ġmx . invoke ( tm , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdual Sim Info . sim Id _ 2 ) Ġas ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdual Sim Info . platform Type Ġ= ĠDual Sim Info . PL AT ORM _ MT K ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( TextUtils . isEmpty ( dual Sim Info . im si _ 1 ) Ġ&& Ġ! TextUtils . isEmpty ( dual Sim Info . im si _ 2 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdual Sim Info . default I msi Ġ= Ġdual Sim Info . im si _ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( TextUtils . isEmpty ( dual Sim Info . im si _ 2 ) Ġ&& Ġ! TextUtils . isEmpty ( dual Sim Info . im si _ 1 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdual Sim Info . default I msi Ġ= Ġdual Sim Info . im si _ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Cache ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreference Ġ= ĠSoft Reference < Dual Sim Info >( dual Sim Info ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdual Sim Info Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdual Sim Info ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠWhether Ġthe Ġphone Ġuse ĠQual comm ĠDual Sim ĊĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġcontext ĊĠĠĠĠĠĠĠĠ Ġ* Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġis Cache ĊĠĠĠĠĠĠĠĠ Ġ* Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġfun Ġget Qual comm Dual Sim Info ( context : ĠContext , Ġis Cache : ĠBoolean ): ĠDual Sim Info ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Cache Ġ&& Ġdual Sim Info From Cache Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdual Sim Info From Cache ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdual Sim Info : ĠDual Sim Info ? Ġ= ĠDual Sim Info () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdual Sim Info !!. sim Id _ 1 Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdual Sim Info . sim Id _ 2 Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcx Ġ= ĠClass . forName (" android . tele phony . MS im Tele phony Manager ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġobj Ġ= Ġcontext . getSystem Service (" phone _ ms im ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmd Ġ= Ġcx . getMethod (" get DeviceId ", ĠInteger . TYPE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġms Ġ= Ġcx . getMethod (" get Subscriber Id ", ĠInteger . TYPE ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdual Sim Info . ime i _ 1 Ġ= Ġmd . invoke ( obj , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdual Sim Info . sim Id _ 1 ) Ġas ĠString ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdual Sim Info . ime i _ 2 Ġ= Ġmd . invoke ( obj , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdual Sim Info . sim Id _ 2 ) Ġas ĠString ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdual Sim Info . im si _ 1 Ġ= Ġms . invoke ( obj , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdual Sim Info . sim Id _ 1 ) Ġas ĠString ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdual Sim Info . im si _ 2 Ġ= Ġms . invoke ( obj , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdual Sim Info . sim Id _ 2 ) Ġas ĠString ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdual Sim Info . platform Type Ġ= ĠDual Sim Info . PL AT ORM _ QUAL COMM ĊĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( TextUtils . isEmpty ( dual Sim Info . im si _ 1 ) Ġ&& Ġ! TextUtils . isEmpty ( dual Sim Info . im si _ 2 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdual Sim Info . default I msi Ġ= Ġdual Sim Info . im si _ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( TextUtils . isEmpty ( dual Sim Info . im si _ 2 ) Ġ&& Ġ! TextUtils . isEmpty ( dual Sim Info . im si _ 1 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdual Sim Info . default I msi Ġ= Ġdual Sim Info . im si _ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Cache ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreference Ġ= ĠSoft Reference < Dual Sim Info >( dual Sim Info ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdual Sim Info Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdual Sim Info ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġdual Sim Info From Cache : ĠDual Sim Info ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( reference Ġ!= Ġnull Ġ&& Ġreference !!. get () Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġreference !!. get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ