package Ġio . sentry . android . fragment Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . View Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . FragmentManager Ċ import Ġandroidx . fragment . app . FragmentManager . Fragment Lifecycle Callbacks Ċ import Ġio . sentry . Breadcrumb Ċ import Ġio . sentry . Hub Adapter Ċ import Ġio . sentry . I Hub Ċ import Ġio . sentry . IS pan Ċ import Ġio . sentry . S entry Level . INFO Ċ import Ġio . sentry . Span Status Ċ import Ġjava . util . Weak HashMap Ċ Ċ @ Suppress (" Too Many Functions ") Ċ class ĠS entry Fragment Lifecycle Callbacks ( ĊĠĠĠ Ġprivate Ġval Ġhub : ĠI Hub Ġ= ĠHub Adapter . getInstance (), ĊĠĠĠ Ġval Ġenable Fragment Lifecycle Breadcrumb s : ĠBoolean , ĊĠĠĠ Ġval Ġenable Auto Fragment Lifecycle Tracing : ĠBoolean Ċ ) Ġ: ĠFragment Lifecycle Callbacks () Ġ{ ĊĊĠĠĠ Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġenable Fragment Lifecycle Breadcrumb s : ĠBoolean Ġ= Ġtrue , ĊĠĠĠĠĠĠĠ Ġenable Auto Fragment Lifecycle Tracing : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġ) Ġ: Ġthis ( ĊĠĠĠĠĠĠĠ Ġhub Ġ= ĠHub Adapter . getInstance (), ĊĠĠĠĠĠĠĠ Ġenable Fragment Lifecycle Breadcrumb s Ġ= Ġenable Fragment Lifecycle Breadcrumb s , ĊĠĠĠĠĠĠĠ Ġenable Auto Fragment Lifecycle Tracing Ġ= Ġenable Auto Fragment Lifecycle Tracing ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġval Ġis Performance Enabled Ġget () Ġ= Ġhub . options . is Tracing Enabled Ġ&& Ġenable Auto Fragment Lifecycle Tracing ĊĊĠĠĠ Ġprivate Ġval Ġfragments With O ngo ing Transactions Ġ= ĠWeak HashMap < Fragment , ĠI Span >() ĊĊĠĠĠ Ġoverride Ġfun Ġon Fragment Attached ( ĊĠĠĠĠĠĠĠ Ġfragment Manager : ĠFragment Manager , ĊĠĠĠĠĠĠĠ Ġfragment : ĠFragment , ĊĠĠĠĠĠĠĠ Ġcontext : ĠContext ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġadd Breadcrumb ( fragment , Ġ" attached ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Fragment Save InstanceState ( ĊĠĠĠĠĠĠĠ Ġfragment Manager : ĠFragment Manager , ĊĠĠĠĠĠĠĠ Ġfragment : ĠFragment , ĊĠĠĠĠĠĠĠ Ġout State : ĠBundle ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġadd Breadcrumb ( fragment , Ġ" save Ġinstance Ġstate ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Fragment Created ( ĊĠĠĠĠĠĠĠ Ġfragment Manager : ĠFragment Manager , ĊĠĠĠĠĠĠĠ Ġfragment : ĠFragment , ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġadd Breadcrumb ( fragment , Ġ" created ") ĊĊĠĠĠĠĠĠĠ Ġstart Tracing ( fragment ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Fragment View Created ( ĊĠĠĠĠĠĠĠ Ġfragment Manager : ĠFragment Manager , ĊĠĠĠĠĠĠĠ Ġfragment : ĠFragment , ĊĠĠĠĠĠĠĠ Ġview : ĠView , ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġadd Breadcrumb ( fragment , Ġ" view Ġcreated ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Fragment Started ( fragment Manager : ĠFragment Manager , Ġfragment : ĠFragment ) Ġ{ ĊĠĠĠĠĠĠĠ Ġadd Breadcrumb ( fragment , Ġ" started ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Fragment Res umed ( fragment Manager : ĠFragment Manager , Ġfragment : ĠFragment ) Ġ{ ĊĠĠĠĠĠĠĠ Ġadd Breadcrumb ( fragment , Ġ" res umed ") ĊĊĠĠĠĠĠĠĠ Ġstop Tracing ( fragment ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Fragment Paused ( fragment Manager : ĠFragment Manager , Ġfragment : ĠFragment ) Ġ{ ĊĠĠĠĠĠĠĠ Ġadd Breadcrumb ( fragment , Ġ" paused ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Fragment Stopped ( fragment Manager : ĠFragment Manager , Ġfragment : ĠFragment ) Ġ{ ĊĠĠĠĠĠĠĠ Ġadd Breadcrumb ( fragment , Ġ" stopped ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Fragment View Destroyed ( fragment Manager : ĠFragment Manager , Ġfragment : ĠFragment ) Ġ{ ĊĠĠĠĠĠĠĠ Ġadd Breadcrumb ( fragment , Ġ" view Ġdestroyed ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Fragment Destroyed ( fragment Manager : ĠFragment Manager , Ġfragment : ĠFragment ) Ġ{ ĊĠĠĠĠĠĠĠ Ġadd Breadcrumb ( fragment , Ġ" destroy ed ") ĊĊĠĠĠĠĠĠĠ Ġstop Tracing ( fragment ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Fragment Detached ( fragment Manager : ĠFragment Manager , Ġfragment : ĠFragment ) Ġ{ ĊĠĠĠĠĠĠĠ Ġadd Breadcrumb ( fragment , Ġ" det ached ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Breadcrumb ( fragment : ĠFragment , Ġstate : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! enable Fragment Lifecycle Breadcrumb s ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġbreadcrumb Ġ= ĠB readcrumb (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= Ġ" navigation " ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetData (" state ", Ġstate ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetData (" screen ", Ġget Fragment Name ( fragment )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcategory Ġ= Ġ" ui . fragment . lifecycle " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlevel Ġ= ĠINFO ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġhub . add Breadcrumb ( breadcrumb ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Fragment Name ( fragment : ĠFragment ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfragment . java Class . simple Name ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Running Span ( fragment : ĠFragment ): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ Ġfragments With O ngo ing Transactions . containsKey ( fragment ) ĊĊĠĠĠ Ġprivate Ġfun Ġstart Tracing ( fragment : ĠFragment ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Performance Enabled Ġ|| Ġis Running Span ( fragment )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġtransaction : ĠI Span ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġhub . configure Scope Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ= Ġit . transaction ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġfragment Name Ġ= Ġget Fragment Name ( fragment ) ĊĠĠĠĠĠĠĠ Ġval Ġspan Ġ= Ġtransaction ?. start Child ( FRAGMENT _ LOAD _ OP , Ġfragment Name ) ĊĊĠĠĠĠĠĠĠ Ġspan ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragments With O ngo ing Transactions [ fragment ] Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstop Tracing ( fragment : ĠFragment ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Performance Enabled Ġ|| Ġ! isRunning Span ( fragment )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġspan Ġ= Ġfragments With O ngo ing Transactions [ fragment ] ĊĠĠĠĠĠĠĠ Ġspan ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġstatus Ġ= Ġit . status ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( status Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Ġ= ĠSpan Status . OK ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . finish ( status ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragments With O ngo ing Transactions . remove ( fragment ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠFR AG MENT _ LOAD _ OP Ġ= Ġ" ui . fragment . load " ĊĠĠĠ Ġ} Ċ } Ċ