package Ġcom . ma i . nix . ma i app . navigation _ fragments . ex ams Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . content . Intent Ċ import Ġandroid . widget . Toast Ċ import Ġandroid . app . Activity Ċ import Ġandroid . app . Application Ċ import Ġandroid . net . Uri Ċ import Ġandroid . view .* Ċ import Ġandroidx . browser . custom tabs . Custom Tabs Intent Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . ViewModel Providers Ċ import Ġandroidx . lifecycle . lifecycle Scope Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġcom . ma i . nix . ma i app . M VI Entity Ċ import Ġcom . ma i . nix . ma i app . R Ċ import Ġcom . ma i . nix . ma i app . choose _ groups . New Choose Group Activity Ċ import Ġcom . ma i . nix . ma i app . helpers . Parser Ċ import Ġkotlinx . android . synt hetic . main . fragment _ ex ams _ layout .* Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġkotlinx . coroutines . flow . collect Ċ import Ġkotlinx . coroutines . launch Ċ Ċ /** Ċ Ġ* ĠCreated Ġby ĠN ix Ġon Ġ 1 7 . 0 8 . 2 0 1 7 . Ċ Ġ*/ Ċ Ċ @ Experimental Cor outines Api Ċ class ĠEx ams Choose Group Fragment Ġ: ĠFragment (), ĠM VI Entity Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠREQUEST _ CODE _ GROUP Ġ= Ġ 5 6 9 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġex ams ViewModel : ĠEx ams ViewModel ĊĊĠĠĠ Ġprivate Ġval Ġexam Adapter Ġ= ĠEx ams Adapter () ĊĊĠĠĠ Ġprivate Ġvar Ġselected Group : ĠString Ġ= Ġ"" ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġset Has Options Menu ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġinflater . inflate ( R . layout . fragment _ ex ams _ layout , Ġcontainer , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġbottom Data Card . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġprepare RecyclerView () ĊĠĠĠĠĠĠĠ Ġsetup ViewModel () ĊĠĠĠĠĠĠĠ Ġobserve ViewModel () ĊĊĠĠĠĠĠĠĠ Ġchoose Group Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity For Result ( New Choose Group Activity . new Intent ( require Context (), Ġtrue ), ĠREQUEST _ CODE _ GROUP ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġex ams Swipe Refresh Layout . setOn Refresh Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( selected Group . isNotEmpty ()) Ġupdate ( selected Group ) Ġelse Ġex ams Swipe Refresh Layout . is Refresh ing Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload ( group : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlifecycle Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġex ams ViewModel . ex ams Intent . send ( Ex ams Intent . Load Ex ams ( group , Ġuse Db Ġ= Ġfalse )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate ( group : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlifecycle Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġex ams ViewModel . ex ams Intent . send ( Ex ams Intent . Update Ex ams ( group , Ġupdate Db Ġ= Ġfalse )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġobserve ViewModel () Ġ{ ĊĠĠĠĠĠĠĠ Ġlifecycle Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġex ams ViewModel . state . collect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Group Ġ= Ġit . group ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchoose Group Button . text Ġ= Ġif Ġ( selected Group . isEmpty ()) Ġrequire Context (). getString ( R . string . choose _ group _ space ) Ġelse Ġselected Group ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġex ams Swipe Refresh Layout . is Refresh ing Ġ= Ġit . loading ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexam Adapter . update Items ( it . ex ams ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexam Adapter . notify DataSet Changed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! it . error . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( require Context (), ĠR . string . error , ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsetup ViewModel () Ġ{ ĊĠĠĠĠĠĠĠ Ġex ams ViewModel Ġ= ĠViewModel Providers . of ( this , ĠEx ams ViewModel Factory ( require Context (). application Context Ġas ĠApplication )). get ( Ex ams ViewModel :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprepare RecyclerView () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlinear LayoutManager Ġ= ĠLinearLayoutManager ( require Context ()) ĊĠĠĠĠĠĠĠ Ġlinear LayoutManager . orientation Ġ= ĠLinearLayoutManager . VERTICAL ĊĠĠĠĠĠĠĠ Ġex ams RecyclerView . layout Manager Ġ= Ġlinear LayoutManager ĊĠĠĠĠĠĠĠ Ġex ams RecyclerView . adapter Ġ= Ġexam Adapter ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠĠĠĠĠĠĠ Ġif Ġ( result Code Ġ== ĠActivity . RESULT _ OK Ġ&& Ġrequest Code Ġ== ĠREQUEST _ CODE _ GROUP ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgroup Ġ= Ġdata ?. getString Extra ( New Choose Group Activity . EXTRA _ GROUP ) ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload ( group ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu , Ġinflater : ĠMenu Inflater ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu . clear () ĊĠĠĠĠĠĠĠ Ġinflater . inflate ( R . menu . action _ menu , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġsuper . onCreate Options Menu ( menu , Ġinflater ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( selected Group . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( context , ĠR . string . exception _ group _ null , ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( item . itemId Ġ== ĠR . id . share _ button ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġi Ġ= ĠIntent ( Intent . ACTION _ SEND ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi . type Ġ= Ġ" text / plain " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi . putExtra ( Intent . EXTRA _ TEXT , ĠParser . generate Ex ams Link ( selected Group )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi . putExtra ( Intent . EXTRA _ SUBJECT , Ġselected Group ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( Intent . create Chooser ( i , ĠgetString ( R . string . share _ exam _ link ))) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( item . itemId Ġ== ĠR . id . browser _ button ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠCustom Tabs Intent . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . set Show Title ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . set Toolbar Color ( Context Compat . getColor ( require Context (), ĠR . color . color Text )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcustom Tabs Intent Ġ= Ġbuilder . build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcustom Tabs Intent . launch Url ( require Context (), ĠUri . parse ( Parser . generate Ex ams Link ( selected Group ))) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠ Ġ} Ċ }