package Ġcom . v ander . scaffold . debug y zer . bug report Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . os . Build Ċ import Ġandroid . text . TextUtils Ċ import Ġandroid . util . Display Metrics Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . core . app . Share Compat Ċ import Ġandroidx . core . content . File Provider Ċ import Ġcom . mat tp rec ious . te lescope . Lens Ċ import Ġcom . v ander . scaffold . R Ċ import Ġcom . v ander . scaffold . debug y zer . Bug Report File Provider Ċ import Ġcom . v ander . scaffold . debug y zer . log . Log Cat Ċ import Ġcom . v ander . scaffold . debug y zer . log . Memory Log Ċ import Ġio . reactivex . Maybe Ċ import Ġio . reactivex . Single Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . functions . Bi Function Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ import Ġtim ber . log . Tim ber Ċ import Ġjava . io . File Ċ Ċ /** Ċ Ġ* ĠP ops Ġa Ġdialog Ġasking Ġfor Ġmore Ġinformation Ġabout Ġthe Ġbug Ġreport Ġand Ġthen Ġcreates Ġan Ġemail Ġwith Ġa Ċ Ġ* ĠJIRA - formatted Ġbody . Ċ Ġ*/ Ċ class ĠBug Report Lens ( ĊĠĠĠ Ġprivate Ġval Ġactivity : ĠActivity , ĊĠĠĠ Ġprivate Ġval Ġmemory Log : ĠMemory Log , ĊĠĠĠ Ġprivate Ġval Ġlog Cat : ĠLog Cat , ĊĠĠĠ Ġprivate Ġval Ġreport Data : ĠReport Data Ċ ) Ġ: ĠLens () Ġ{ ĊĊĠ Ġprivate Ġvar Ġscreenshot : ĠFile ? Ġ= Ġnull ĊĊĠ Ġoverride Ġfun Ġon Capture ( screenshot : ĠFile ?) Ġ{ ĊĠĠĠ Ġthis . screenshot Ġ= Ġscreenshot ĊĊĠĠĠ Ġval Ġdialog Ġ= ĠBug Report Dialog ( activity ) ĊĠĠĠ Ġdialog . on Report ĊĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġreport Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( report . include Logs ) Ġmerge Logs ( report ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. do OnError Ġ{ ĠTim ber . e ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. do OnError Ġ{ ĠToast . makeText ( activity , ĠR . string . debug _ error _ logs , ĠToast . LENGTH _ SHORT ). show () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. onError Return Ġ{ Ġreport Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Maybe () ĊĠĠĠĠĠĠĠĠĠ Ġelse ĠMaybe . just ( report ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ. do On Success Ġ{ Ġsubmit Report ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ. subscribe () ĊĠĠĠ Ġdialog . show () ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġmerge Logs ( report : ĠReport ): ĠSingle < Report > Ġ= ĊĠĠĠĠĠ ĠSingle . zip ( memory Log . save (), Ġlog Cat . save (), ĊĠĠĠĠĠĠĠĠĠ ĠBi Function Ġ{ Ġapp Log : ĠFile , Ġdump Log : ĠFile Ġ-> Ġreport . copy ( app Logs Ġ= Ġapp Log , Ġdump Logs Ġ= Ġdump Log ) Ġ}) ĊĊĠ Ġprivate Ġfun Ġsubmit Report ( report : ĠReport ) Ġ{ ĊĠĠĠ Ġval Ġdm Ġ= Ġactivity . resources . display Metrics ĊĠĠĠ Ġval Ġdensity Bucket Ġ= Ġget Density String ( dm ) ĊĊĠĠĠ Ġval Ġintent Ġ= ĠShare Compat . Intent Builder . from ( activity ) ĊĠĠĠĠĠĠĠ Ġ. setType (" message / rfc 8 2 2 ") ĊĠĠĠĠĠĠĠ Ġ. add Email To ( report Data . email ) ĊĠĠĠĠĠĠĠ Ġ. set Subject ( report . title ) ĊĊĠĠĠ Ġval Ġbody Ġ= ĠStringBuilder () ĊĠĠĠ Ġif Ġ(! TextUtils . isEmpty ( report . description )) Ġ{ ĊĠĠĠĠĠ Ġbody . append ("{ panel : title = Description }\ n "). append ( report . description ). append ("\ n { panel }\ n \ n ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġbody . append ("{ panel : title = App }\ n ") ĊĠĠĠ Ġbody . append (" Version : Ġ"). append ( report Data . name ). append ('\ n ') ĊĠĠĠ Ġbody . append (" Version Ġcode : Ġ"). append ( report Data . code ). append ('\ n ') ĊĠĠĠ Ġbody . append ("{ panel }\ n \ n ") ĊĊĠĠĠ Ġbody . append ("{ panel : title = Device }\ n ") ĊĠĠĠ Ġbody . append (" Make : Ġ"). append ( Build . MAN U FACT UR ER ). append ('\ n ') ĊĠĠĠ Ġbody . append (" Model : Ġ"). append ( Build . MODEL ). append ('\ n ') ĊĠĠĠ Ġbody . append (" Resolution : Ġ") ĊĠĠĠĠĠĠĠ Ġ. append ( dm . height Pixels ) ĊĠĠĠĠĠĠĠ Ġ. append (" x ") ĊĠĠĠĠĠĠĠ Ġ. append ( dm . width Pixels ) ĊĠĠĠĠĠĠĠ Ġ. append ('\ n ') ĊĠĠĠ Ġbody . append (" Density : Ġ") ĊĠĠĠĠĠĠĠ Ġ. append ( dm . density D pi ) ĊĠĠĠĠĠĠĠ Ġ. append (" dpi Ġ( ") ĊĠĠĠĠĠĠĠ Ġ. append ( density Bucket ) ĊĠĠĠĠĠĠĠ Ġ. append (" )\ n ") ĊĠĠĠ Ġbody . append (" Release : Ġ"). append ( Build . VERSION . RELEASE ). append ('\ n ') ĊĠĠĠ Ġbody . append (" API : Ġ"). append ( Build . VERSION . SDK _ INT ). append ('\ n ') ĊĠĠĠ Ġbody . append ("{ panel }") ĊĊĠĠĠ Ġintent . setText ( body . toString ()) ĊĊĠĠĠ Ġif Ġ( screenshot Ġ!= Ġnull Ġ&& Ġreport . include Screenshot ) Ġ{ ĊĠĠĠĠĠ Ġintent . add Stream ( File Provider . get Uri For File ( activity , ĠBug Report File Provider . authority ( activity ), Ġscreenshot !! )) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreport . app Logs ?. let Ġ{ ĊĠĠĠĠĠ Ġintent . add Stream ( File Provider . get Uri For File ( activity , ĠBug Report File Provider . authority ( activity ), Ġit )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreport . dump Logs ?. let Ġ{ ĊĠĠĠĠĠ Ġintent . add Stream ( File Provider . get Uri For File ( activity , ĠBug Report File Provider . authority ( activity ), Ġit )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġintent . start Chooser () ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġget Density String ( display Metrics : ĠDisplay Metrics ): ĠString Ġ= ĊĠĠĠĠĠ Ġwhen Ġ( display Metrics . density D pi ) Ġ{ ĊĠĠĠĠĠĠĠ ĠDisplay Metrics . D ENS ITY _ LOW Ġ-> Ġ" ld pi " ĊĠĠĠĠĠĠĠ ĠDisplay Metrics . D ENS ITY _ MEDIUM Ġ-> Ġ" md pi " ĊĠĠĠĠĠĠĠ ĠDisplay Metrics . D ENS ITY _ HIGH Ġ-> Ġ" hdpi " ĊĠĠĠĠĠĠĠ ĠDisplay Metrics . D ENS ITY _ X HIGH Ġ-> Ġ" x hdpi " ĊĠĠĠĠĠĠĠ ĠDisplay Metrics . D ENS ITY _ XX HIGH Ġ-> Ġ" xx hdpi " ĊĠĠĠĠĠĠĠ ĠDisplay Metrics . D ENS ITY _ XXX HIGH Ġ-> Ġ" xxx hdpi " ĊĠĠĠĠĠĠĠ ĠDisplay Metrics . D ENS ITY _ TV Ġ-> Ġ" tv dpi " ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġdisplay Metrics . density D pi . toString () ĊĠĠĠĠĠ Ġ} Ċ } Ċ