package Ġy uk u . alk it ab . base . dialog Ċ Ċ import Ġandroid . content . DialogInterface Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . core . os . bundle Of Ċ import Ġandroidx . fragment . app . Dialog Fragment Ċ import Ġy uk u . alk it ab . base . S Ċ import Ġy uk u . alk it ab . base . dialog . Ver ses Dialog . Companion . new Compare Instance Ċ import Ġy uk u . alk it ab . base . dialog . Ver ses Dialog . Companion . newInstance Ċ import Ġy uk u . alk it ab . base . dialog . base . Base Dialog Ċ import Ġy uk u . alk it ab . base . model . M Version Ċ import Ġy uk u . alk it ab . base . util . Ap pear ances . apply TextAppearance Ċ import Ġy uk u . alk it ab . base . ver ses . Ver ses Controller Ċ import Ġy uk u . alk it ab . base . ver ses . Ver ses Controller Impl Ċ import Ġy uk u . alk it ab . base . ver ses . Ver ses DataModel Ċ import Ġy uk u . alk it ab . base . ver ses . Ver ses Listeners Ċ import Ġy uk u . alk it ab . base . ver ses . Ver ses Ui Model Ċ import Ġy uk u . alk it ab . debug . R Ċ import Ġy uk u . alk it ab . model . Version Ċ import Ġy uk u . alk it ab . util . A ri Ċ import Ġy uk u . alk it ab . util . Int ArrayList Ċ import Ġkotlin . properties . Deleg ates . notNull Ċ Ċ private Ġconst Ġval ĠEX TRA _ ari Ranges Ġ= Ġ" ari Ranges " Ċ private Ġconst Ġval ĠEX TRA _ ari Ġ= Ġ" ari " Ċ private Ġconst Ġval ĠEX TRA _ compare Mode Ġ= Ġ" compare Mode " Ċ Ċ /** Ċ Ġ* ĠDialog Ġthat Ġshows Ġa Ġlist Ġof Ġver ses . ĠThere Ġare Ġtwo Ġmodes : Ċ Ġ* Ġ" normal Ġmode " Ġthat Ġis Ġcreated Ġvia Ġ[ newInstance ] Ġto Ġshow Ġa Ġlist Ġof Ġver ses Ġfrom Ġa Ġsingle Ġversion . Ċ Ġ* Ġ-- Ġfield Ġar i Ranges Ġis Ġused , Ġcompare Mode == false . Ċ Ġ* Ġ" compare Ġmode " Ġthat Ġis Ġcreated Ġvia Ġ[ new Compare Instance ] Ġto Ġshow Ġa Ġlist Ġof Ġdifferent Ġversion Ġof Ġa Ġver se . Ċ Ġ* Ġ-- Ġfield Ġar i Ġis Ġused , Ġcompare Mode == true . Ċ Ġ*/ Ċ class ĠVer ses Dialog Ġ: ĠBase Dialog () Ġ{ ĊĠĠĠ Ġabstract Ġclass ĠVer ses Dialog Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġopen Ġfun Ġon Ver se Selected ( ari : ĠInt ) Ġ{} ĊĠĠĠĠĠĠĠ Ġopen Ġfun Ġon Comp ared Ver se Selected ( ari : ĠInt , Ġm version : ĠM Version ) Ġ{} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġar i Ġby Ġnot Null < Int >() ĊĠĠĠ Ġprivate Ġvar Ġcompare Mode Ġby Ġnot Null < Boolean >() ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġar i Ranges : ĠInt ArrayList ĊĊĠĠĠ Ġ// Ġdata Ġthat Ġwill Ġbe Ġpassed Ġwhen Ġone Ġver se Ġis Ġclicked ĊĠĠĠ Ġprivate Ġsealed Ġclass ĠCallback Data Ġ{ ĊĠĠĠĠĠĠĠ Ġclass ĠWith M Version ( val Ġm version : ĠM Version ) Ġ: ĠCallback Data () ĊĠĠĠĠĠĠĠ Ġclass ĠWith A ri ( val Ġar i : ĠInt ) Ġ: ĠCallback Data () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcustom Callback Datas : ĠArray < Callback Data > ĊĊĠĠĠ Ġvar Ġlistener : ĠVer ses Dialog Listener ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġon Dismiss Listener : ĠDialog Interface . On Dismiss Listener ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġset Style ( Dialog Fragment . STYLE _ NO _ TITLE , Ġ 0 ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠTODO Ġapp compat Ġ 1 . 1 . 0 : Ġchange Ġto Ġrequire Arguments () ĊĠĠĠĠĠĠĠ Ġval Ġarguments Ġ= Ġrequire NotNull ( arguments ) ĊĠĠĠĠĠĠĠ Ġar i Ranges Ġ= Ġarguments . get Parcelable ( EXTRA _ ari Ranges ) Ġ?: ĠInt ArrayList ( 0 ) ĊĠĠĠĠĠĠĠ Ġar i Ġ= Ġarguments . getInt ( EXTRA _ ari ) ĊĠĠĠĠĠĠĠ Ġcompare Mode Ġ= Ġarguments . getBoolean ( EXTRA _ compare Mode ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsource Version Ġ= ĠS . active Version () ĊĠĠĠĠĠĠĠ Ġval Ġsource Version Id Ġ= ĠS . active Version Id () ĊĠĠĠĠĠĠĠ Ġval Ġtext Size Mult Ġ= ĠS . get Db (). get Per Version Settings ( source Version Id ). fontSize Multiplier ĊĊĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġinflater . inflate ( R . layout . dialog _ ver ses , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġres . set BackgroundColor ( S . applied (). backgroundColor ) ĊĠĠĠĠĠĠĠ Ġval Ġt Reference Ġ= Ġres . findViewById < TextView >( R . id . t Reference ) ĊĊĠĠĠĠĠĠĠ Ġval Ġver ses Controller Ġ= ĠVer ses Controller Impl ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġres . findViewById ( R . id . ls View ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ver ses ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠVer ses DataModel . EMPTY , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠVer ses Ui Model . EMPTY . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġver se Selection Mode Ġ= ĠVer ses Controller . Ver se Selection Mode . single Click ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠVer ses Listeners . EMPTY . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Ver ses Listener Ġ= Ġselected Ver ses Listener ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġbuild Ġreference Ġlabel ĊĠĠĠĠĠĠĠ Ġval Ġsb Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġif Ġ(! compare Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ< Ġar i Ranges . size ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġar i _ start Ġ= Ġar i Ranges [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġar i _ end Ġ= Ġar i Ranges [ i Ġ+ Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sb . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ("; Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ( source Version . reference Range ( ari _ start , Ġar i _ end )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi Ġ+= Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ( source Version . reference ( ari )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġapply TextAppearance ( t Reference , Ġtext Size Mult ) ĊĠĠĠĠĠĠĠ Ġt Reference . text Ġ= Ġsb ĊĊĠĠĠĠĠĠĠ Ġver ses Controller . ver ses DataModel Ġ= Ġif Ġ(! compare Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdisplayed Ar is Ġ= ĠInt ArrayList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdisplayed Ver se Texts Ġ= Ġmutable ListOf < String >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġver se _ count Ġ= Ġsource Version . load Ver ses By A ri Ranges ( ari Ranges , Ġdisplayed Ar is , Ġdisplayed Ver se Texts ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcustom Callback Datas Ġ= ĠArray ( verse _ count ) Ġ{ Ġi Ġ-> ĠCallback Data . With A ri ( display ed Ar is [ i ]) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdisplayed Ver se Number Texts Ġ= ĠList ( verse _ count ) Ġ{ Ġi Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġar i Ġ= Ġdisplayed Ar is [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ A ri . to Chapter ( ari )} :${ A ri . to Ver se ( ari )}" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfirst A ri Ġ= Ġar i Ranges [ 0 ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠVer ses DataModel ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġar i _ bc _ Ġ= ĠA ri . to Book Chapter ( first A ri ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġver ses _ Ġ= ĠVer ses Dialog Normal Ver ses ( display ed Ver se Texts , Ġdisplayed Ver se Number Texts ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġversion _ Ġ= Ġsource Version , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġversion Id _ Ġ= Ġsource Version Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ġ// Ġread Ġeach Ġversion Ġand Ġdisplay Ġit . ĠFirst Ġversion Ġmust Ġbe Ġthe Ġsource Version . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm versions Ġ= ĠS . get Available Versions () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġsort Ġsuch Ġthat Ġsource Version Ġis Ġfirst ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm versions . sortBy Ġ{ Ġif Ġ( it . version Id Ġ== Ġsource Version Id ) Ġ- 1 Ġelse Ġ 0 Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdisplayed Version Ġ= ĠarrayOf Null s < Version >( m versions . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcustom Callback Datas Ġ= ĠArray ( m versions . size ) Ġ{ Ġi Ġ-> ĠCallback Data . With M Version ( m versions [ i ]) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠVer ses DataModel ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġar i _ bc _ Ġ= ĠA ri . to Book Chapter ( ari ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġver ses _ Ġ= ĠVer ses Dialog Compare Ver ses ( require Context (), Ġar i , Ġm versions , Ġdisplayed Version ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġres ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Dismiss ( dialog : ĠDialog Interface ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Dismiss ( dialog ) ĊĠĠĠĠĠĠĠ Ġon Dismiss Listener ?. on Dismiss ( dialog ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġselected Ver ses Listener Ġ= Ġobject Ġ: ĠVer ses Controller . Selected Ver ses Listener () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Ver se Single Click ( verse _ 1 : ĠInt Ġ/* Ġthis Ġis Ġactually Ġposition + 1 , Ġnot Ġnecessarily Ġver se _ 1 Ġ*/) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlistener Ġ= Ġlistener Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġposition Ġ= Ġver se _ 1 Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcallback Data Ġ= Ġcustom Callback Datas [ position ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! compare Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( callback Data ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠCallback Data . With A ri Ġ-> Ġlistener . on Ver se Selected ( callback Data . ari ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ġ// Ġonly Ġif Ġthe Ġver se Ġis Ġavailable Ġin Ġthis Ġversion . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( callback Data ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠCallback Data . With M Version Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( callback Data . m version . version ?. load Ver se Text ( ari ) Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlistener . on Comp ared Ver se Selected ( ari , Ġcallback Data . m version ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance ( ari Ranges : ĠInt ArrayList ) Ġ= ĠVer ses Dialog (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarguments Ġ= Ġbundle Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEX TRA _ ari Ranges Ġto Ġar i Ranges ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġnew Compare Instance ( ari : ĠInt ) Ġ= ĠVer ses Dialog (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarguments Ġ= Ġbundle Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEX TRA _ ari Ġto Ġar i , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEX TRA _ compare Mode Ġto Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }