package Ġcom . flip per devices . analytics . shake 2 report . impl . activity Ċ Ċ import Ġandroid . app . Application Ċ import Ġandroid . content . Clip Data Ċ import Ġandroid . content . Clipboard Manager Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . View Ċ import Ġandroidx . annotation . String Res Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . lifecycle . lifecycle Scope Ċ import Ġcom . flip per devices . analytics . shake 2 report . impl . R Ċ import Ġcom . flip per devices . analytics . shake 2 report . impl . Sh ake 2 Report Ċ import Ġcom . flip per devices . analytics . shake 2 report . impl . Sh ake 2 Report Api Impl Ċ import Ġcom . flip per devices . analytics . shake 2 report . impl . databinding . Activity Sh ake 2 report Binding Ċ import Ġcom . flip per devices . analytics . shake 2 report . impl . helper . Sh ake 2 Report Dialog Ċ import Ġcom . flip per devices . core . k tx . android . toast Ċ import Ġio . sentry . Attachment Ċ import Ġio . sentry . S entry Ċ import Ġio . sentry . S entry Event Ċ import Ġio . sentry . S entry Level Ċ import Ġio . sentry . protocol . Message Ċ import Ġio . sentry . protocol . S entry Id Ċ import Ġjava . io . File Ċ import Ġjava . util . concurrent . TimeUnit Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġnet . ling ala . zip 4 j . Zip File Ċ import Ġnet . ling ala . zip 4 j . model . Zip Parameters Ċ import Ġnet . ling ala . zip 4 j . model . enums . Compression Level Ċ import Ġnet . ling ala . zip 4 j . model . enums . Compression Method Ċ Ċ private Ġconst Ġval ĠFILE _ SCREEN SHOT Ġ= Ġ" screenshot . png " Ċ private Ġconst Ġval ĠQ UAL ITY _ SCREEN SHOT Ġ= Ġ 9 5 Ċ private Ġval ĠS ENTRY _ TIMEOUT _ MS Ġ= ĠTimeUnit . MILLISECONDS . convert ( 1 , ĠTimeUnit . MIN UTES ) Ċ Ċ class ĠSh ake 2 Report Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠActivity Sh ake 2 report Binding ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsh ake 2 Report : ĠSh ake 2 Report ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠActivity Sh ake 2 report Binding . inflate ( layout Inflater ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( binding . root ) ĊĠĠĠĠĠĠĠ Ġsh ake 2 Report Ġ= ĠSh ake 2 Report Api Impl . instance ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: ĠSh ake 2 Report Api Impl . init AndGet ( application Context Ġas ĠApplication ) ĊĊĠĠĠĠĠĠĠ Ġbinding . close Btn . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . report Id Area . setOnClickListener Ġ{ Ġview Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcopy To Clipboard ( binding . report Id . text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoast ( R . string . shake 2 report _ copy _ sentry _ copy _ toast ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠSh ake 2 Report Dialog . show ( this , Ġon Cancel Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠ Ġ}, ĠonSuccess Ġ= Ġ{ Ġmessage Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Report Error ( message ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Report Error ( message : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlifecycle Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreport Status ( R . string . shake 2 report _ activity _ status _ screenshot ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsave Screenshot To Log Folder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreport Status ( R . string . shake 2 report _ activity _ status _ z ipping ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Ġ= Ġcompress Log Folder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreport Status ( R . string . shake 2 report _ activity _ status _ sending ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġsending Report ( message , Ġfile ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinish Internal ( id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" Blocking Method In Non Blocking Context ") ĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġcompress Log Folder (): ĠFile Ġ= Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlog Dir Ġ= Ġsh ake 2 Report . getLog Dir () ĊĠĠĠĠĠĠĠ Ġval Ġzip File Ġ= ĠZip File ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFile ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapplication . cacheDir , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" logs -${ System . currentTimeMillis ()}. zip " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġzip Parameters Ġ= ĠZip Parameters (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompression Method Ġ= ĠCompression Method . DE FL ATE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompression Level Ġ= ĠCompression Level . UL TRA ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġzip File . add Folder ( log Dir , Ġzip Parameters ) ĊĊĠĠĠĠĠĠĠ Ġreturn @ with Context Ġzip File . file ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġsave Screenshot To Log Folder () Ġ= Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlog Dir Ġ= Ġsh ake 2 Report . getLog Dir () ĊĠĠĠĠĠĠĠ Ġval Ġscreenshot Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSh ake 2 Report Api Impl . instance ?. get Screenshot And Reset () Ġ?: Ġreturn @ with Context Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġscreenshot File Ġ= ĠFile ( log Dir , ĠFILE _ SCREEN SHOT ) ĊĠĠĠĠĠĠĠ Ġscreenshot File . delete () ĊĠĠĠĠĠĠĠ Ġscreenshot File . output Stream (). use Ġ{ Ġout Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscreenshot . compress ( Bitmap . Compress Format . PNG , ĠQ UAL ITY _ SCREEN SHOT , Ġout ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġsending Report ( ĊĠĠĠĠĠĠĠ Ġuser Input : ĠString , ĊĠĠĠĠĠĠĠ Ġlog Zip : ĠFile ĊĠĠĠ Ġ): ĠString Ġ= Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġevent Ġ= ĠS entry Event () ĊĠĠĠĠĠĠĠ Ġevent . level Ġ= ĠS entry Level . ERROR ĊĠĠĠĠĠĠĠ Ġevent . message Ġ= ĠMessage (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġif Ġ( user Input . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Error Ġvia Ġsh ake 2 report Ġ${ System . currentTimeMillis () }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġuser Input ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġs entry Id : ĠS entry Id ĊĠĠĠĠĠĠĠ ĠS entry . with Scope Ġ{ Ġscope Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscope . add Attachment ( Attachment ( log Zip . absolute Path )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġs entry Id Ġ= ĠS entry . capture Event ( event ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠS entry . flush ( S ENTRY _ TIMEOUT _ MS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscope . clear Attachments () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn @ with Context Ġs entry Id . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġreport Status (@ String Res Ġstring Res Id : ĠInt ) Ġ= Ġwith Context ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . status . setText ( string Res Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġfinish Internal ( id : ĠString ) Ġ= Ġwith Context ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . progress Block . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġbinding . report Block . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġbinding . close Btn . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġbinding . report Id . text Ġ= Ġid ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcopy To Clipboard ( id : ĠCharSequence ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġclipboard Manager Ġ= ĠContext Compat ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. getSystem Service ( this , ĠClip board Manager :: class . java ) ĊĠĠĠĠĠĠĠ Ġval Ġclip Data Ġ= ĠClip Data . new Html Text ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . shake 2 report _ copy _ sentry _ title ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"< code >$ id </ code >" ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġclipboard Manager ?. set Primary Clip ( clip Data ) ĊĠĠĠ Ġ} Ċ } Ċ