/* Ċ Ġ* ĠCopyright Ġ 2 0 1 4 - 2 0 1 7 ĠE du ard ĠE re za ĠMart ÃŃ nez Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* ĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġcom . will . habit . crash Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . app . AlertDialog Ċ import Ġandroid . content . Clip Data Ċ import Ġandroid . content . Clipboard Manager Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Typed Value Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Button Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . TextView Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . core . content . res . Resources Compat Ċ import Ġcom . will . habit . R Ċ import Ġcom . will . habit . crash . Custom Activity On Crash . close Application Ċ import Ġcom . will . habit . crash . Custom Activity On Crash . getAll Error Details From Intent Ċ import Ġcom . will . habit . crash . Custom Activity On Crash . getConfig From Intent Ċ import Ġcom . will . habit . crash . Custom Activity On Crash . restart Application Ċ Ċ class ĠDefault Error Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĠĠĠ Ġ@ Suppress Lint (" Private Resource ") ĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġ// This Ġis Ġneeded Ġto Ġavoid Ġa Ġcrash Ġif Ġthe Ġdeveloper Ġhas Ġnot Ġspecified ĊĠĠĠĠĠĠĠ Ġ// an Ġapp - level Ġtheme Ġthat Ġextends ĠTheme . AppCompat ĊĠĠĠĠĠĠĠ Ġval Ġa Ġ= Ġobtain Styled Attributes ( R . style able . AppCompatTheme ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! a . hasValue ( R . style able . AppCompatTheme _ window ActionBar )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Theme ( R . style . Theme _ AppCompat _ Light _ Dark ActionBar ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġa . recycle () ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . custom activity on crash _ default _ error _ activity ) ĊĊĠĠĠĠĠĠĠ Ġ// Close / restart Ġbutton Ġlogic : ĊĠĠĠĠĠĠĠ Ġ// If Ġa Ġclass Ġif Ġset , Ġuse Ġrestart . ĊĠĠĠĠĠĠĠ Ġ// Else , Ġuse Ġclose Ġand Ġjust Ġfinish Ġthe Ġapp . ĊĠĠĠĠĠĠĠ Ġ// It Ġis Ġrecommended Ġthat Ġyou Ġfollow Ġthis Ġlogic Ġif Ġimplementing Ġa Ġcustom Ġerror Ġactivity . ĊĠĠĠĠĠĠĠ Ġval Ġrestart Button Ġ= ĠfindViewById < View >( R . id . custom activity on crash _ error _ activity _ restart _ button ) Ġas ĠButton ĊĠĠĠĠĠĠĠ Ġval Ġconfig Ġ= ĠgetConfig From Intent ( intent ) ĊĠĠĠĠĠĠĠ Ġif Ġ( config . is Show Restart Button () Ġ&& Ġconfig . get Restart Activity Class () Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrestart Button . setText ( R . string . custom activity on crash _ error _ activity _ restart _ app ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrestart Button . setOnClickListener Ġ{ Ġrestart Application ( this @ Default Error Activity , Ġconfig ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrestart Button . setOnClickListener Ġ{ Ġclose Application ( this @ Default Error Activity , Ġconfig ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġmore Info Button Ġ= ĠfindViewById < View >( R . id . custom activity on crash _ error _ activity _ more _ info _ button ) Ġas ĠButton ĊĠĠĠĠĠĠĠ Ġif Ġ( config . is Show Error Details ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmore Info Button . setOnClickListener Ġ{ Ġ// We Ġretrieve Ġall Ġthe Ġerror Ġdata Ġand Ġshow Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdialog Ġ= ĠAlertDialog . Builder ( this @ Default Error Activity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( R . string . custom activity on crash _ error _ activity _ error _ details _ title ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage ( getAll Error Details From Intent ( this @ Default Error Activity , Ġintent )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( R . string . custom activity on crash _ error _ activity _ error _ details _ close , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Neutral Button ( R . string . custom activity on crash _ error _ activity _ error _ details _ copy ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ Ġdialog , Ġwhich Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcopy Error To Clipboard () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this @ Default Error Activity , ĠR . string . custom activity on crash _ error _ activity _ error _ details _ copied , ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠtextView Ġ= Ġdialog . findViewById < View >( android . R . id . message ) Ġas ĠTextView ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . setText Size ( Typed Value . COMPLEX _ UNIT _ PX , Ġresources . get Dimension ( R . dim en . custom activity on crash _ error _ activity _ error _ details _ text _ size )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmore Info Button . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġdefault Error Activity Drawable Id Ġ= Ġconfig . getError Drawable () ĊĠĠĠĠĠĠĠ Ġval Ġerror ImageView Ġ= ĠfindViewById < View >( R . id . custom activity on crash _ error _ activity _ image ) Ġas ĠImageView ĊĠĠĠĠĠĠĠ Ġif Ġ( default Error Activity Drawable Id Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror ImageView . setImage Drawable ( Resources Compat . get Drawable ( resources , Ġdefault Error Activity Drawable Id , Ġtheme )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcopy Error To Clipboard () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġerror Information Ġ= ĠgetAll Error Details From Intent ( this @ Default Error Activity , Ġintent ) ĊĠĠĠĠĠĠĠ Ġval Ġclipboard Ġ= Ġget System Service ( Context . CLIP BOARD _ SERVICE ) Ġas ĠClip board Manager ĊĠĠĠĠĠĠĠ Ġval Ġclip Ġ= ĠClip Data . new Plain Text ( getString ( R . string . custom activity on crash _ error _ activity _ error _ details _ clipboard _ label ), Ġerror Information ) ĊĠĠĠĠĠĠĠ Ġclipboard . set Primary Clip ( clip ) ĊĠĠĠ Ġ} Ċ }