package Ġcom . g ow tham . lets chat . fragments . create _ group Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Bundle Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . fragment . app . view Models Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġandroidx . navigation . fragment . nav Args Ċ import Ġcom . can hub . crop per . Crop Image Ċ import Ġcom . g ow tham . lets chat . R Ċ import Ġcom . g ow tham . lets chat . databinding . F Create Group Binding Ċ import Ġcom . g ow tham . lets chat . db . data . Chat User Ċ import Ġcom . g ow tham . lets chat . db . da os . Chat User Dao Ċ import Ġcom . g ow tham . lets chat . db . data . Group Ċ import Ġcom . g ow tham . lets chat . fragments . add _ group _ members . Ad Add Members Ċ import Ġcom . g ow tham . lets chat . utils .* Ċ import Ġcom . g ow tham . lets chat . views . Custom Progress View Ċ import Ġdagger . h ilt . android . Android EntryPoint Ċ import Ġjavax . inject . Inject Ċ Ċ @ Android EntryPoint Ċ class ĠF Create Group Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġchat User Dao : ĠChat User Dao ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġpreference : ĠMP reference ĊĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠCreate Group ViewModel Ġby Ġview Models () ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠF Create Group Binding ĊĊĠĠĠ Ġval Ġargs Ġby Ġnav Args < F Create Group Args >() ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmember List : ĠList < Chat User > ĊĊĠĠĠ Ġprivate Ġvar Ġprogress View : ĠCustom Progress View ?= null ĊĊĠĠĠ Ġprivate Ġval Ġad Members : ĠAd Add Members Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠAd Add Members ( require Context ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding = F Create Group Binding . inflate ( layout Inflater , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġbinding . lifecycle Owner = view Lifecycle Owner ĊĠĠĠĠĠĠĠ Ġbinding . view model = viewModel ĊĠĠĠĠĠĠĠ Ġprogress View = ĠCustom Progress View ( require Context ()) ĊĠĠĠĠĠĠĠ Ġbinding . toolbar . set Navigation OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). pop Back Stack () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . image Add Image . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠImage Utils . ask Permission ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . fab . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠsetData In View () ĊĠĠĠĠĠĠĠ Ġsubscribe Observer s () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsubscribe Observer s () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . group Create Status . observe ( view Lifecycle Owner ,{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠLoad State . On Success Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( find Nav Controller (). isValid Destination ( R . id . F Create Group )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogress View ?. dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgroup = it . data Ġas ĠGroup ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreference . setCurrent Group ( group . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaction = F Create Group Directions . action F Create Group To F Group Chat ( group ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( action ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠLoad State . On Failure Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogress View ?. dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠLoad State . On Loading Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogress View ?. show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġvalidate () Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠgroupName = viewModel . groupName . value . toString (). trim () ĊĠĠĠĠĠĠĠ Ġif Ġ( groupName . isNotEmpty () Ġ&& Ġ! viewModel . progress Pro Pic . value !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . create Group ( member List Ġas ĠArrayList < Chat User >) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠsetData In View () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . ed t GroupName . request Focus () ĊĠĠĠĠĠĠĠ ĠUtils . show Soft Keyboard ( require Activity (), binding . ed t GroupName ) ĊĠĠĠĠĠĠĠ Ġmember List = args . member List . toList (). map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . isSelected = false ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġmember Count = member List . size ĊĠĠĠĠĠĠĠ Ġbinding . member Count = if ( member Count == 1 ) Ġ"$ member Count Ġmember " Ġelse Ġ"$ member Count Ġmembers " ĊĠĠĠĠĠĠĠ Ġbinding . list Members . adapter Ġ= Ġad Members ĊĠĠĠĠĠĠĠ Ġad Members . add Restore Policy () ĊĠĠĠĠĠĠĠ Ġad Members . submit List ( member List ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Request Permissions Result ( ĊĠĠĠĠĠĠĠ Ġrequest Code : ĠInt , ĊĠĠĠĠĠĠĠ Ġpermissions : ĠArray < out ĠString >, ĊĠĠĠĠĠĠĠ Ġgrant Results : ĠInt Array ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Request Permissions Result ( request Code , Ġpermissions , Ġgrant Results ) ĊĠĠĠĠĠĠĠ ĠImage Utils . on Image Per Result ( this , Ġ* grant Results ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠC rop Image . C ROP _ IMAGE _ ACTIVITY _ REQUEST _ CODE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Crop Result ( data ) ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ ĠImage Utils . crop Image ( require Activity (), Ġdata ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Crop Result ( data : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimage Path : ĠUri ? Ġ= ĠImage Utils . getC ropped Image ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage Path ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . upload Profile Image ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ Ġprogress View ?. dismiss If Showing () ĊĠĠĠĠĠĠĠ ĠUtils . close Key Board ( require Activity ()) ĊĠĠĠ Ġ} Ċ Ċ }