package Ġcom . squareup . workflow 1 . ui . modal Ċ Ċ import Ġandroid . app . Dialog Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Parcel Ċ import Ġandroid . os . Parcelable Ċ import Ġandroid . os . Parcelable . Creator Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . view . ViewGroup . LayoutParams . MATCH _ PARENT Ċ import Ġandroid . widget . Frame Layout Ċ import Ġandroidx . lifecycle . Lifecycle Ċ import Ġandroidx . lifecycle . Lifecycle . Event . ON _ DESTROY Ċ import Ġandroidx . lifecycle . Lifecycle Observer Ċ import Ġandroidx . lifecycle . On Lifecycle Event Ċ import Ġcom . squareup . workflow 1 . ui . Named Ċ import Ġcom . squareup . workflow 1 . ui . View Environment Ċ import Ġcom . squareup . workflow 1 . ui . Workflow Lifecycle Owner Ċ import Ġcom . squareup . workflow 1 . ui . Workflow Ui Experimental Api Ċ import Ġcom . squareup . workflow 1 . ui . Workflow View Stub Ċ import Ġcom . squareup . workflow 1 . ui . compatible Ċ import Ġcom . squareup . workflow 1 . ui . lifecycle OrNull Ċ import Ġkotlin . Lazy Thread Safety Mode . NONE Ċ Ċ /** Ċ Ġ* ĠBase Ġclass Ġfor Ġcontainers Ġthat Ġshow Ġ[ Has Mod als . mod als ] Ġin Ġ[ Dialog ] Ġwindows . Ċ Ġ* Ċ Ġ* Ġ@ param ĠModal Rendering T Ġthe Ġtype Ġof Ġthe Ġnested Ġrender ings Ġto Ġbe Ġshown Ġin Ġa Ġdialog Ġwindow . Ċ Ġ*/ Ċ @ Workflow Ui Experimental Api Ċ public Ġabstract Ġclass ĠModal Container < Modal Rendering T Ġ: ĠAny > Ġ@ Jvm Over loads Ġconstructor ( ĊĠ Ġcontext : ĠContext , ĊĠ Ġattribute Set : ĠAttributeSet ? Ġ= Ġnull , ĊĠ Ġdef Style : ĠInt Ġ= Ġ 0 , ĊĠ Ġdef Style Res : ĠInt Ġ= Ġ 0 Ċ ) Ġ: ĠFrame Layout ( context , Ġattribute Set , Ġdef Style , Ġdef Style Res ) Ġ{ ĊĊĠ Ġprivate Ġval Ġbase View Stub : ĠWorkflow View Stub Ġ= ĠWorkflow View Stub ( context ). also Ġ{ ĊĠĠĠ Ġadd View ( it , ĠViewGroup . LayoutParams ( MATCH _ PARENT , ĠMATCH _ PARENT )) ĊĠ Ġ} ĊĊĠ Ġprivate Ġvar Ġdialog s : ĠList < Dialog Ref < Modal Rendering T >> Ġ= Ġempty List () ĊĊĠ Ġprivate Ġval Ġparent Lifecycle Owner Ġby Ġlazy ( NONE ) Ġ{ ĠWorkflow Lifecycle Owner . get ( this ) Ġ} ĊĊĠ Ġprotected Ġfun Ġupdate ( ĊĠĠĠ Ġnew Screen : ĠHas Mod als < *, ĠModal Rendering T >, ĊĠĠĠ Ġview Environment : ĠView Environment ĊĠ Ġ) Ġ{ ĊĠĠĠ Ġbase View Stub . update ( new Screen . bene ath Mod als , Ġview Environment ) ĊĊĠĠĠ Ġval Ġnew Dialog s Ġ= Ġmutable ListOf < Dialog Ref < Modal Rendering T >>() ĊĠĠĠ Ġfor Ġ(( i , Ġmodal ) Ġin Ġnew Screen . mod als . with Index ()) Ġ{ ĊĠĠĠĠĠ Ġnew Dialog s Ġ+= Ġif Ġ( i Ġ< Ġdialog s . size Ġ&& Ġcompatible ( dialogs [ i ]. modal Rendering , Ġmodal )) Ġ{ ĊĠĠĠĠĠĠĠ Ġdialog s [ i ]. copy ( modal Rendering Ġ= Ġmodal , Ġview Environment Ġ= Ġview Environment ) ĊĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ Ġupdate Dialog ( it ) Ġ} ĊĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġbuild Dialog ( modal , Ġview Environment ). also Ġ{ Ġref Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġref . dialog . decor View ?. let Ġ{ Ġdialog View Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠImplement ations Ġof Ġbuild Dialog Ġmay Ġuse ĠView Registry . build View , Ġwhich Ġwill Ġset Ġthe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWorkflow Lifecycle Owner Ġon Ġthe Ġcontent Ġview , Ġbut Ġsince Ġwe Ġcan 't Ġrely Ġon Ġthat Ġwe Ġalso ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġset Ġit Ġhere . ĠWhen Ġthe Ġviews Ġare Ġattached , Ġthis Ġwill Ġbecome Ġthe Ġparent Ġlifecycle Ġof ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthe Ġone Ġfrom Ġbuild Dialog Ġif Ġany , Ġand Ġso Ġwe Ġcan Ġuse Ġour Ġlifecycle Ġto Ġdestroy - on - detach ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthe Ġdialog Ġhierarchy . ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWorkflow Lifecycle Owner . install On ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog View , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfind Parent Lifecycle Ġ= Ġ{ Ġparent Lifecycle Owner ?. lifecycle Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog View . add On Attach State ChangeListener ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠOn Attach State ChangeListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġon Destroy Ġ= ĠOn Destroy Ġ{ Ġref . dismiss () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġlifecycle : ĠLifecycle ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon View Attached To Window ( v : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNote Ġthis Ġis Ġa Ġdifferent Ġlifecycle Ġthan Ġthe ĠWorkflow Lifecycle Owner ĠâĢĵ Ġit Ġwill ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġprobably Ġbe Ġthe Ġow ning ĠAppCompatActivity . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlifecycle Ġ= Ġref . dialog . decor View ?. context ?. lifecycle OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAndroid Ġmakes Ġa Ġlot Ġof Ġlog cat Ġnoise Ġif Ġit Ġhas Ġto Ġclose Ġthe Ġwindow Ġfor Ġus . Ġ: / ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġhttps :// github . com / square / workflow / issues / 5 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlifecycle ?. add Observer ( on Destroy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon View Detached From Window ( v : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlifecycle ?. remove Observer ( on Destroy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlifecycle Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġref . dialog . show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ( dialogs Ġ- Ġnew Dialog s ). forEach Ġ{ Ġit . dismiss () Ġ} ĊĠĠĠ Ġdialog s Ġ= Ġnew Dialog s ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠCalled Ġto Ġcreate Ġ( but Ġnot Ġshow ) Ġa ĠDialog Ġto Ġrender Ġ[ initial Modal Rendering ]. ĊĠĠ Ġ*/ ĊĠ Ġprotected Ġabstract Ġfun Ġbuild Dialog ( ĊĠĠĠ Ġinitial Modal Rendering : ĠModal Rendering T , ĊĠĠĠ Ġinitial View Environment : ĠView Environment ĊĠ Ġ): ĠDialog Ref < Modal Rendering T > ĊĊĠ Ġprotected Ġabstract Ġfun Ġupdate Dialog ( dialog Ref : ĠDialog Ref < Modal Rendering T >) ĊĊĠ Ġoverride Ġfun Ġon Save InstanceState (): ĠParcel able Ġ{ ĊĠĠĠ Ġreturn ĠSaved State ( ĊĠĠĠĠĠĠĠ Ġsuper . on Save InstanceState () !! , ĊĠĠĠĠĠĠĠ Ġdialog s . map Ġ{ Ġit . save () Ġ} ĊĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Restore InstanceState ( state : ĠParcel able ) Ġ{ ĊĠĠĠ Ġ( state Ġas ? ĠSaved State ) ĊĠĠĠĠĠ Ġ? . let Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( it . dialog Bund les . size Ġ== Ġdialog s . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġit . dialog Bund les . zip ( dialogs ) Ġ{ Ġview State , Ġdialog Ref Ġ-> Ġdialog Ref . restore ( view State ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . on Restore InstanceState ( state . super State ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ?: Ġsuper . on Restore InstanceState ( state ) ĊĠ Ġ} ĊĊĠ Ġinternal Ġdata Ġclass ĠKey And Bundle ( ĊĠĠĠ Ġval Ġcompatibility Key : ĠString , ĊĠĠĠ Ġval Ġbundle : ĠBundle ĊĠ Ġ) Ġ: ĠParcel able Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġdescribe Contents (): ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġoverride Ġfun ĠwriteTo Parcel ( ĊĠĠĠĠĠ Ġparcel : ĠParcel , ĊĠĠĠĠĠ Ġflags : ĠInt ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠ Ġparcel . writeString ( compatibility Key ) ĊĠĠĠĠĠ Ġparcel . write Bundle ( bundle ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject ĠCRE ATOR Ġ: ĠCreator < Key And Bundle > Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġcreate From Parcel ( parcel : ĠParcel ): ĠKey And Bundle Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġparcel . readString () !! ĊĠĠĠĠĠĠĠ Ġval Ġbundle Ġ= Ġparcel . read Bundle ( Key And Bundle :: class . java . class Loader ) !! ĊĠĠĠĠĠĠĠ Ġreturn ĠKey And Bundle ( key , Ġbundle ) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġoverride Ġfun Ġnew Array ( size : ĠInt ): ĠArray < Key And Bundle ?> Ġ= ĠarrayOf Null s ( size ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* Ġ@ param Ġextra Ġoptional Ġhook Ġto Ġallow Ġsubclasses Ġto Ġassociate Ġextra Ġdata Ġwith Ġthis Ġdialog , ĊĠĠ Ġ* Ġe . g . Ġits Ġcontent Ġview . ĠNot Ġconsidered Ġfor Ġequality . ĊĠĠ Ġ*/ ĊĠ Ġ@ Workflow Ui Experimental Api ĊĠ Ġprotected Ġdata Ġclass ĠDialog Ref < Modal Rendering T Ġ: ĠAny >( ĊĠĠĠ Ġval Ġmodal Rendering : ĠModal Rendering T , ĊĠĠĠ Ġval Ġview Environment : ĠView Environment , ĊĠĠĠ Ġval Ġdialog : ĠDialog , ĊĠĠĠ Ġval Ġextra : ĠAny ? Ġ= Ġnull ĊĠ Ġ) Ġ{ ĊĠĠĠ Ġinternal Ġfun Ġsave (): ĠKey And Bundle Ġ{ ĊĠĠĠĠĠ Ġval Ġsaved Ġ= Ġdialog . window !!. save Hierarchy State () ĊĠĠĠĠĠ Ġreturn ĠKey And Bundle ( Named . key For ( modal Rendering ), Ġsaved ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġrestore ( key And Bundle : ĠKey And Bundle ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( Named . key For ( modal Rendering ) Ġ== Ġkey And Bundle . compatibility Key ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdialog . window !!. restore Hierarchy State ( key And Bundle . bundle ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCall Ġthis Ġinstead Ġof Ġcalling Ġ` dialog . dismiss ()` Ġdirectly ĠâĢĵ Ġthis Ġmethod Ġensures Ġthat Ġthe Ġmodal 's ĊĠĠĠĠ Ġ* Ġ[ Workflow Lifecycle Owner ] Ġis Ġdestroyed Ġcorrectly . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinternal Ġfun Ġdismiss () Ġ{ ĊĠĠĠĠĠ Ġ// ĠThe Ġdialog 's Ġviews Ġare Ġabout Ġto Ġbe Ġdet ached , Ġand Ġwhen Ġthat Ġhappens Ġwe Ġwant Ġto Ġtransition ĊĠĠĠĠĠ Ġ// Ġthe Ġdialog Ġview 's Ġlifecycle Ġto Ġa Ġterminal Ġstate Ġeven Ġthough Ġthe Ġparent Ġis Ġprobably Ġstill ĊĠĠĠĠĠ Ġ// Ġalive . ĊĠĠĠĠĠ Ġdialog . decor View ?. let ( Workflow Lifecycle Owner :: get )?. destroy On Detach () ĊĠĠĠĠĠ Ġdialog . dismiss () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠ Ġif Ġ( this Ġ=== Ġother ) Ġreturn Ġtrue ĊĠĠĠĠĠ Ġif Ġ( java Class Ġ!= Ġother ?. java Class ) Ġreturn Ġfalse ĊĊĠĠĠĠĠ Ġother Ġas ĠDialog Ref < *> ĊĊĠĠĠĠĠ Ġif Ġ( dialog Ġ!= Ġother . dialog ) Ġreturn Ġfalse ĊĊĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠ Ġreturn Ġdialog . hashCode () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġclass ĠSaved State Ġ: ĠBase Saved State Ġ{ ĊĠĠĠ Ġconstructor ( ĊĠĠĠĠĠ Ġsuper State : ĠParcel able ?, ĊĠĠĠĠĠ Ġdialog Bund les : ĠList < Key And Bundle > ĊĠĠĠ Ġ) Ġ: Ġsuper ( super State ) Ġ{ ĊĠĠĠĠĠ Ġthis . dialog Bund les Ġ= Ġdialog Bund les ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( source : ĠParcel ) Ġ: Ġsuper ( source ) Ġ{ ĊĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠ Ġthis . dialog Bund les Ġ= Ġmutable ListOf < Key And Bundle >(). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġsource . read Typed List ( this , ĠKey And Bundle ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġdialog Bund les : ĠList < Key And Bundle > ĊĊĠĠĠ Ġoverride Ġfun ĠwriteTo Parcel ( ĊĠĠĠĠĠ Ġout : ĠParcel , ĊĠĠĠĠĠ Ġflags : ĠInt ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠ Ġsuper . writeTo Parcel ( out , Ġflags ) ĊĠĠĠĠĠ Ġout . write Typed List ( dialog Bund les ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject ĠCRE ATOR Ġ: ĠCreator < Saved State > Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġcreate From Parcel ( source : ĠParcel ): ĠSaved State Ġ= ĊĠĠĠĠĠĠĠ ĠSaved State ( source ) ĊĊĠĠĠĠĠ Ġoverride Ġfun Ġnew Array ( size : ĠInt ): ĠArray < Saved State ?> Ġ= ĠarrayOf Null s ( size ) ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ private Ġclass ĠOn Destroy ( private Ġval Ġblock : Ġ() Ġ-> ĠUnit ) Ġ: ĠLifecycle Observer Ġ{ ĊĠ Ġ@ On Lifecycle Event ( ON _ DESTROY ) ĊĠ Ġfun Ġon Destroy () Ġ= Ġblock () Ċ } Ċ Ċ private Ġval ĠDialog . decor View : ĠView ? ĊĠ Ġget () Ġ= Ġwindow ?. decor View Ċ