package Ġlive . h ms . app 2 . ui . meeting . participants Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . activity ViewModels Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġlive . h ms . app 2 . databinding . Layout R tmp Recording Binding Ċ import Ġlive . h ms . app 2 . ui . meeting . Meeting ViewModel Ċ import Ġlive . h ms . app 2 . ui . settings . Settings Store Ċ import Ġlive . h ms . app 2 . util . view Lifecycle Ċ import Ġjava . net . URI Ċ import Ġjava . net . UR ISyntaxException Ċ Ċ class ĠR tmp Record Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġbinding Ġby Ġview Lifecycle < Layout R tmp Recording Binding >() ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsettings : ĠSettings Store ĊĠĠĠ Ġprivate Ġval Ġr tmp Url adapter : ĠR tmp Record Adapter Ġ= ĠR tmp Record Adapter (:: removeItem ) ĊĊĠĠĠ Ġprivate Ġval Ġmeeting ViewModel : ĠMeeting ViewModel Ġby Ġactivity ViewModels () ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate View ( in flater , Ġcontainer , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠLayout R tmp Recording Binding . inflate ( in flater , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġsettings Ġ= ĠSettings Store ( require Context ()) ĊĠĠĠĠĠĠĠ Ġ// ĠGet Ġa Ġlistener Ġon Ġthe Ġpage Ġfor Ġthe Ġurls . ĊĊĠĠĠĠĠĠĠ Ġbinding . add R tmp Url Button . setOnClickListener Ġ{ Ġadd Item () Ġ} ĊĠĠĠĠĠĠĠ Ġr tmp Url adapter . submit List ( settings . rt mp Urls List . toList ()) ĊĠĠĠĠĠĠĠ Ġbinding . rt mp Urls . layout Manager Ġ= ĠLinearLayoutManager ( context ) ĊĠĠĠĠĠĠĠ Ġbinding . rt mp Urls . adapter Ġ= Ġr tmp Url adapter ĊĠĠĠĠĠĠĠ Ġbinding . start Button . setOnClickListener Ġ{ Ġstart Clicked () Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠLoad Ġthe Ġrole Ġfor Ġthe Ġbot Ġfrom Ġpreferences . ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Item () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġurl ToAdd Ġ= Ġbinding . new R tmp Url . editable Text . toString () ĊĠĠĠĠĠĠĠ Ġif Ġ( url ToAdd . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( context , Ġ" Invalid Ġurl ", ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(! check Valid Url ( url ToAdd )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( context , Ġ" Invalid Ġurl , Ġmust Ġstart Ġwith ĠR TMP ", ĠToast . LENGTH _ LONG ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠURI Ġis Ġa Ġvalid Ġr tmp Ġurl ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew List Ġ= Ġr tmp Url adapter . current List . plus ( url ToAdd ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġr tmp Url adapter . submit List ( new List ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsettings . rt mp Urls List Ġ= Ġnew List . toSet () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Valid Url ( url : ĠString ): ĠBoolean Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuri Ġ= ĠURI ( url ) ĊĠĠĠĠĠĠĠ Ġuri . scheme Ġ== Ġ" rt mp " ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠUR ISyntaxException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Clicked () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠCreate Ġa Ġconfig Ġand Ġstart ĊĠĠĠĠĠĠĠ Ġval Ġis Recording Ġ= Ġbinding . should Record . isChecked ĊĠĠĠĠĠĠĠ Ġval Ġis H ls Ġ= Ġbinding . should Start H ls . isChecked ĊĠĠĠĠĠĠĠ Ġval Ġmeeting Url Ġ= Ġbinding . meeting Url . text . toString () ĊĠĠĠĠĠĠĠ Ġval Ġis R tmp Ġ= Ġsettings . rt mp Urls List . toList (). isNotEmpty () ĊĠĠĠĠĠĠĠ Ġif Ġ( is R tmp Ġ&& Ġ! is Recording Ġ&& Ġ! is H ls ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Turn Ġon Ġrecording , Ġor Ġprovide Ġr tmp Ġurls , Ġor Ġstart Ġh ls ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ LONG ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( meeting Url . isNull Or Blank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" A Ġvalid Ġmeeting Ġurl Ġis Ġrequired . Ġ$ meeting Url Ġis Ġinvalid Ġor Ġnot Ġa Ġrole Ġname ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ LONG ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif (( is Recording Ġ|| Ġis R tmp ) Ġ&& Ġis H ls ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Recording / R tmp Ġand ĠH LS Ġcan 't Ġbe Ġstarted Ġtogether . ĠOnly Ġrecording / rt mp Ġstreams Ġcan Ġbe Ġstarted Ġor Ġjust ĠH LS .", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ LONG ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġif ( is Recording Ġ|| Ġis R tmp ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmeeting ViewModel . record Meeting ( is Recording , Ġsettings . rt mp Urls List . toList (), Ġmeeting Url ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). pop Back Stack () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif ( is H ls ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmeeting ViewModel . start H ls ( meeting Url ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). pop Back Stack () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġremove Item ( url : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d (" rt mp record ", Ġ" clicked Ġ$ url ") ĊĠĠĠĠĠĠĠ Ġ// ĠRemove Ġthis Ġitem Ġfrom Ġthe Ġadapter . ĊĠĠĠĠĠĠĠ Ġval Ġnew List Ġ= Ġr tmp Url adapter . current List . minus ( url ) ĊĠĠĠĠĠĠĠ Ġr tmp Url adapter . submit List ( new List ) ĊĠĠĠĠĠĠĠ Ġ// ĠActually Ġremove Ġit Ġfrom Ġpreferences ĊĠĠĠĠĠĠĠ Ġsettings . rt mp Urls List Ġ= Ġnew List . toSet () ĊĠĠĠ Ġ} Ċ }