package Ġcom . dew . ai h ua . report Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Build Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Handler Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Ċ import Ġandroidx . appcompat . widget . Toolbar Ċ import Ġandroidx . core . app . Nav Utils Ċ import Ġandroidx . preference . Preference Manager Ċ import Ġcom . dew . ai h ua . Build Config Ċ import Ġcom . dew . ai h ua . R Ċ import Ġcom . dew . ai h ua . ui . activity . MainActivity Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġkotlinx . android . synt hetic . main . activity _ error .* Ċ import Ġorg . ac ra . Report Field Ċ import Ġorg . ac ra . collector . Crash Report Data Ċ import Ġorg . json . JSONArray Ċ import Ġorg . json . JSONObject Ċ import Ġjava . io . PrintWriter Ċ import Ġjava . io . String Writer Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . util .* Ċ Ċ class ĠError Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġerror List : ĠArray < String >? Ġ= Ġnull ĠĠ Ġ// Ġget Ġfrom Ġintent ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġerror Info : ĠError Info ĊĠĠĠ Ġprivate Ġvar Ġreturn Activity : ĠClass < *> ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġcurrent TimeStamp : ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġcontent Lang String : ĠString ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠPreference Manager . getDefault SharedPreferences ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. getString ( this . getString ( R . string . content _ country _ key ), Ġ" none ") ĊĊĠĠĠ Ġprivate Ġval Ġos String : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġos Base Ġ= Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= Ġ 2 3 ) ĠBuild . VERSION . BASE _ OS Ġelse Ġ" Android " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ(" ${ System . getProperty (" os . name ")} Ġ${ if Ġ( os Base . isEmpty ()) Ġ" Android " Ġelse Ġos Base } Ġ${ Build . VERSION . RELEASE } Ġ- Ġ${ Integer . toString ( Build . VERSION . SDK _ INT )} ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ error ) ĊĊĠĠĠĠĠĠĠ Ġset Support ActionBar ( error Activity Toolbar ) ĊĊĠĠĠĠĠĠĠ Ġval Ġaction Bar Ġ= Ġsupport ActionBar ĊĠĠĠĠĠĠĠ Ġaction Bar ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . set Display Home As Up Enabled ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . setTitle ( R . string . error _ report _ title ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . set Display Show Title Enabled ( true ) ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġac Ġ= ĠActivity Com municator . com municator ĊĠĠĠĠĠĠĠ Ġreturn Activity Ġ= Ġac . return Activity ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" return Activity Ġ= Ġ$ return Activity ") ĊĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= Ġintent ĊĠĠĠĠĠĠĠ Ġerror Info Ġ= Ġintent . get Parcelable Extra ( ERROR _ INFO ) ĊĠĠĠĠĠĠĠ Ġerror List Ġ= Ġintent . getString Array Extra ( ERROR _ LIST ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġimportant Ġadd Ġg uru Ġmed itation ĊĠĠĠĠĠĠĠ Ġadd G uru M edit a ion () ĊĠĠĠĠĠĠĠ Ġcurrent TimeStamp Ġ= ĠgetCurrent TimeStamp () ĊĊĠĠĠĠĠĠĠ Ġerror Report Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtarget Ġ= ĠIntent ( Intent . ACTION _ SEND TO ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget . setData ( Uri . parse (" mailto :$ ERROR _ EMAIL _ ADDRESS ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. putExtra ( Intent . EXTRA _ SUBJECT , ĠERROR _ EMAIL _ SUBJECT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. putExtra ( Intent . EXTRA _ TEXT , Ġbuild Json ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( Intent . create Chooser ( target , Ġ" Send ĠEmail ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġnormal Ġbug Ġreport ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" error Info Ġ= Ġ${ error Info . message }") Ċ // ĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" error Info Ġ= Ġ${ resources . getString ( error Info . message )} ") ĊĠĠĠĠĠĠĠ Ġif Ġ( error Info . message Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠerrorMessage View . text Ġ= Ġresources . getString ( error Info . message ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠerrorMessage View . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage What H app ened View . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġerror View . text Ġ= Ġform Error Text ( error List ) ĊĊĠĠĠĠĠĠĠ Ġ// print Ġstack Ġtrace Ġonce Ġagain Ġfor Ġdebugging : ĊĠĠĠĠĠĠĠ Ġfor Ġ( e Ġin Ġerror List !! ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġe ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinflater Ġ= Ġmenu Inflater ĊĠĠĠĠĠĠĠ Ġinflater . inflate ( R . menu . error _ menu , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġitem . itemId ĊĠĠĠĠĠĠĠ Ġwhen Ġ( id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . R . id . home Ġ-> Ġgo To Return Activity () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . menu _ item _ share _ error Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . action Ġ= ĠIntent . ACTION _ SEND ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Intent . EXTRA _ TEXT , Ġbuild Json ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . type Ġ= Ġ" text / plain " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( Intent . create Chooser ( intent , ĠgetString ( R . string . share _ dialog _ title ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Back Pressed () Ġ{ ĊĠĠĠĠĠĠĠ Ġgo To Return Activity () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgo To Return Activity () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchecked Return Activity Ġ= Ġget Return Activity ( return Activity ) ĊĠĠĠĠĠĠĠ Ġif Ġ( checked Return Activity Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Back Pressed () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , Ġchecked Return Activity ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . add Flags ( Intent . FLAG _ ACTIVITY _ CLEAR _ TOP ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNav Utils . navigate Up To ( this , Ġintent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġform Error Text ( error List : ĠArray < String >? ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġif Ġ( error List Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( e Ġin Ġerror List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext . append (" -------------------------------- ----- \ n "). append ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtext . append (" -------------------------------- ----- ") ĊĠĠĠĠĠĠĠ Ġreturn Ġtext . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbuild Json (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġerror Object Ġ= ĠJSONObject () ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror Object . put (" user _ action ", ĠgetUser Action String ( error Info . user Action )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put (" request ", Ġerror Info . request ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put (" content _ language ", Ġcontent Lang String ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put (" service ", Ġerror Info . serviceName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put (" package ", ĠpackageName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put (" version ", ĠBuild Config . VERSION _ NAME ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put (" os ", Ġos String ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put (" time ", Ġcurrent TimeStamp ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexception Array Ġ= ĠJSONArray () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( error List Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( e Ġin Ġerror List !! ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexception Array . put ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror Object . put (" exceptions ", Ġexception Array ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror Object . put (" user _ comment ", Ġerror Comment Box !!. text . toString ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġerror Object . toString ( 3 ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" Error Ġwhile Ġerror ing : ĠCould Ġnot Ġbuild Ġjson ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ"" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetUser Action String ( user Action : ĠUser Action ?): ĠString Ġ= ĊĠĠĠĠĠĠĠ Ġuser Action ?. message Ġ?: Ġ" Your Ġdescription Ġis Ġin Ġanother Ġcast le ." ĊĊĠĠĠ Ġprivate Ġfun Ġadd G uru M edit a ion () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġtext Ġ= Ġerror Sorry View . text . toString () ĊĠĠĠĠĠĠĠ Ġtext Ġ+= Ġ"\ n ${ getString ( R . string . guru _ med itation )}" ĊĠĠĠĠĠĠĠ Ġerror Sorry View . text Ġ= Ġtext ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetCurrent TimeStamp (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdf Ġ= ĠSimpleDateFormat (" dd - MM - yyyy ĠHH : mm ", ĠLocale . getDefault ()) ĊĠĠĠĠĠĠĠ Ġdf . time Zone Ġ= ĠTime Zone . getTime Zone (" GMT ") ĊĠĠĠĠĠĠĠ Ġreturn Ġdf . format ( Date ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠTAG Ġ= ĠError Activity :: class . java . toString () ĊĠĠĠĠĠĠĠ Ġ// ĠB UNDLE ĠTAG S ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠERROR _ INFO Ġ= Ġ" error _ info " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠERROR _ LIST Ġ= Ġ" error _ list " ĊĊĠĠĠĠĠĠĠ Ġconst Ġval ĠERROR _ EMAIL _ ADDRESS Ġ= Ġ" ed 8 2 8 a @ gmail . com " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠERROR _ EMAIL _ SUBJECT Ġ= Ġ" Exception Ġin ĠA ih ua Ġ" Ġ+ ĠBuild Config . VERSION _ NAME ĊĊĠĠĠĠĠĠĠ Ġfun Ġreport Ui Error ( activity : ĠAppCompatActivity , Ġel : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreport Error ( activity , Ġel , Ġactivity . java Class , Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠError Info . make ( User Action . UI _ ERROR , Ġ" none ", Ġ"", ĠR . string . app _ ui _ crash )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġwill Ġbe Ġcalled Ġat Ġmultiple Ġplaces ĊĠĠĠĠĠĠĠ Ġfun Ġreport Error ( context : ĠContext , Ġel : ĠList < Throwable > ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Activity : ĠClass < *> ?, Ġroot View : ĠView ?, Ġerror Info : ĠError Info ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( root View Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( root View , ĠR . string . error _ sn ackbar _ message , Ġ 3 Ġ* Ġ 1 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAction TextColor ( Color . YELLOW ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAction ( R . string . error _ sn ackbar _ action ) Ġ{ Ġstart Error Activity ( return Activity , Ġcontext , Ġerror Info , Ġel ) Ġ}. show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Error Activity ( return Activity , Ġcontext , Ġerror Info , Ġel ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġstart Error Activity ( return Activity : ĠClass < *> ?, Ġcontext : ĠContext , Ġerror Info : ĠError Info , Ġel : ĠList < Throwable > ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġac Ġ= ĠActivity Com municator . com municator ĊĠĠĠĠĠĠĠĠĠĠĠ Ġac . return Activity Ġ= Ġreturn Activity ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( context , ĠError Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( ERROR _ INFO , Ġerror Info ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( el Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( ERROR _ LIST , Ġerror List ToString List ( el )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . add Flags ( Intent . FLAG _ ACTIVITY _ NEW _ TASK ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . startActivity ( intent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġwill Ġbe Ġcalled Ġat Ġmultiple Ġplaces ĊĠĠĠĠĠĠĠ Ġfun Ġreport Error ( context : ĠContext , Ġe : ĠThrowable ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Activity : ĠClass < *> ?, Ġroot View : ĠView ?, Ġerror Info : ĠError Info ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġel : ĠMutable List < Throwable >? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( e Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġel Ġ= ĠVector () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġel . add ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreport Error ( context , Ġel , Ġreturn Activity , Ġroot View , Ġerror Info ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġasync Ġcall , Ġlike Ġextractor Ġcall Ġit . ĊĠĠĠĠĠĠĠ Ġfun Ġreport Error ( handler : ĠHandler , Ġcontext : ĠContext , Ġe : ĠThrowable ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Activity : ĠClass < *> ?, Ġroot View : ĠView ?, Ġerror Info : ĠError Info ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġel : ĠMutable List < Throwable >? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( e Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġel Ġ= ĠVector () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġel . add ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . post Ġ{ Ġreport Error ( context , Ġel , Ġreturn Activity , Ġroot View , Ġerror Info ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġasync Ġcall ĊĠĠĠĠĠĠĠ Ġfun Ġreport Error ( handler : ĠHandler , Ġcontext : ĠContext , Ġel : ĠList < Throwable > ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Activity : ĠClass < *> ?, Ġroot View : ĠView ?, Ġerror Info : ĠError Info ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . post Ġ{ Ġreport Error ( context , Ġel , Ġreturn Activity , Ġroot View , Ġerror Info ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġreport Error ( context : ĠContext , Ġreport : ĠCrash Report Data , Ġerror Info : ĠError Info ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġget Ġkey Ġfirst Ġ( don 't Ġask Ġabout Ġthis Ġsolution ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġkey : ĠReport Field ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" report Error (): ĠCrash Report Data . keys Ġ= Ġ${ report . keys }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( k Ġin Ġreport . keys ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( k . toString () Ġ== Ġ" STACK _ TRACE ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Ġ= Ġk ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstack Trace Ġ= Ġreport [ key ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstack Trace ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġel Ġ= ĠarrayOf ( it . toString ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( context , ĠError Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( ERROR _ INFO , Ġerror Info ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( ERROR _ LIST , Ġel ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . add Flags ( Intent . FLAG _ ACTIVITY _ NEW _ TASK ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . startActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġget StackTrace ( throwable : ĠThrowable ): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsw Ġ= ĠString Writer () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpw Ġ= ĠPrintWriter ( sw , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrowable . printStackTrace ( pw ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsw . buffer . toString () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġerror List Ġto ĠString List ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġerror List ToString List ( stack Tr aces : ĠList < Throwable >): ĠArray < String ?> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġout Prod Ġ= ĠarrayOf Null s < String >( stack Tr aces . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( index Ġin Ġstack Tr aces . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout Prod [ index ] Ġ= Ġget StackTrace ( stack Tr aces [ index ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġout Prod ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠGet Ġthe Ġchecked Ġactivity . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġreturn Activity Ġthe Ġactivity Ġto Ġreturn Ġto ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġthe Ġcast ed Ġreturn Ġactivity Ġor Ġnull ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġget Return Activity ( return Activity : ĠClass < *> ?): ĠClass < out ĠActivity >? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġchecked Return Activity : ĠClass < out ĠActivity >? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( return Activity Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchecked Return Activity Ġ= Ġif Ġ( Activity :: class . java . isAssignableFrom ( return Activity )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Activity . as Subclass ( Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMainActivity :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġchecked Return Activity ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ