package Ġcom . applic aster . plugin . x ray . storage s . helpers Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroidx . appcompat . app . AlertDialog Ċ import Ġcom . applic aster . plugin . x ray . R Ċ import Ġcom . applic aster . storage . api . Storage s Ċ import Ġcom . applic aster . util . AP Logger Ċ import Ġcom . applic aster . util . OS Util Ċ import Ġorg . json . JSONObject Ċ Ċ object ĠImport er Ġ{ ĊĊĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" Importer " ĊĊĠĠĠ Ġ// Ġtodo : Ġtype Ġthe Ġstorage Ġhierarchy Ġinstead Ġof ĠJSONObject ĊĠĠĠ Ġfun Ġimport ( data : ĠJSONObject , Ġpatch : ĠBoolean Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstorage s Ġ= Ġdata . opt JSONObject (" storage s ") ĊĠĠĠĠĠĠĠ Ġif Ġ( null Ġ== Ġstorage s ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAP Logger . error ( TAG , Ġ" Storage s Ġdata Ġis Ġmissing ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ// Ġtodo : Ġuse Ġexceptions ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġstorage s . keys (). forEach Ġ{ Ġimport Storage ( data , Ġit , Ġpatch ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġimport Storage ( data : ĠJSONObject , Ġstorage : ĠString , Ġpatch : ĠBoolean Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstore Ġ= ĠStorage s . storage s [ storage ] ĊĠĠĠĠĠĠĠ Ġif Ġ( null Ġ== Ġstore ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAP Logger . error ( TAG , Ġ" Storage Ġ$ storage Ġnot Ġregistered ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġget Storage Values ( data , Ġstorage )?. let Ġ{ Ġstorage Values Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnamespaces Ġ= Ġstorage Values . keys () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnamespaces . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! patch ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstore . remove Namespace ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠjsonObject Ġ= Ġstorage Values . getJSONObject ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠjsonObject . keys (). forEach Ġ{ Ġkey Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstore . set ( key , ĠjsonObject . getString ( key ), Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġimport Namespace ( data : ĠJSONObject , Ġstorage : ĠString , Ġnamespace : ĠString , Ġpatch : ĠBoolean Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstore Ġ= ĠStorage s . storage s [ storage ] ĊĠĠĠĠĠĠĠ Ġif Ġ( null Ġ== Ġstore ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAP Logger . error ( TAG , Ġ" Storage Ġ$ storage Ġnot Ġregistered ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġget Storage Values ( data , Ġstorage )?. let Ġ{ Ġstorage Values Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalues Ġ= Ġstorage Values . opt JSONObject ( namespace ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( null Ġ== Ġvalues ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAP Logger . error ( TAG , Ġ" Namespace Ġ$ namespace Ġis Ġnot Ġpresent Ġin Ġimported Ġfile Ġin Ġstorage Ġ$ storage ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! patch ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstore . remove Namespace ( namespace ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalues . keys (). forEach Ġ{ Ġkey Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstore . set ( key , Ġvalues . getString ( key ), Ġnamespace ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Storage Values ( data : ĠJSONObject , Ġstorage : ĠString ): ĠJSONObject ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstorage s Ġ= Ġdata . opt JSONObject (" storage s ") ĊĠĠĠĠĠĠĠ Ġif Ġ( null Ġ== Ġstorage s ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAP Logger . error ( TAG , Ġ" Storage s Ġdata Ġis Ġmissing ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull Ġ// Ġtodo : Ġuse Ġexceptions ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġst Ġ= Ġstorage s . opt JSONObject ( storage ) ĊĠĠĠĠĠĠĠ Ġif Ġ( null Ġ!= Ġst ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġst ĊĠĠĠĠĠĠĠ ĠAP Logger . error ( TAG , Ġ" Storage Ġ$ storage Ġdata Ġis Ġmissing ") ĊĠĠĠĠĠĠĠ Ġreturn Ġnull Ġ// Ġtodo : Ġuse Ġexceptions ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġverify Source ( activity : ĠActivity , Ġjson : ĠJSONObject , Ġfunction : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġtodo : Ġerror Ġhandling ĊĠĠĠĠĠĠĠ Ġval Ġsource Ġ= Ġjson . opt JSONObject (" source ") ĊĠĠĠĠĠĠĠ Ġif Ġ( null Ġ!= Ġsource ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbundle Id Ġ= Ġsource . getString (" bundle Identifier ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( bundle Id Ġ!= ĠOS Util . get PackageName ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAlertDialog . Builder ( activity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle (" Application Ġmismatch ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" You Ġare Ġimporting Ġdata Ġfor Ġbundle Ġ$ bundle Id Ġwhile Ġapp Ġbundle Ġid Ġis Ġ${ OS Util . get PackageName ()} ." Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠPlease Ġmake Ġsure Ġif Ġits Ġa Ġcorrect Ġfile Ġbefore Ġproceed ing ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( R . string . x ray _ btn _ share _ target _ file ) Ġ{ Ġ_, Ġ_ Ġ-> Ġfunction () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button ( android . R . string . cancel , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfunction () ĊĠĠĠ Ġ} Ċ } Ċ