package Ġcom . oct opus . sample . ui . detail Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Intent Ċ import Ġandroid . database . Cursor Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . View Ċ import Ġcom . big k oo . picker view . Time Picker View Ċ import Ġcom . oct opus . sample . R Ċ import Ġcom . oct opus . sample . manager . User Manager Ċ import Ġcom . oct opus . sample . ui . check . Check Activity Ċ import Ġcom . oct opus . sample . ui . res . Res Activity Ċ import Ġcom . oct opus . sample . utils . toast Ċ import Ġcom . q ing me i 2 . architecture . core . base . view . activity . Base Activity Ċ import Ġcom . q ing me i 2 . architecture . core . ext . observe Ċ import Ġkotlinx . android . synt hetic . main . activity _ detail .* Ċ import Ġorg . kode in . di . K ode in Ċ import Ġorg . kode in . di . generic . instance Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . util .* ĊĊ Ċ class ĠDetail Activity Ġ: ĠBase Activity () Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠCLASS _ NUM Ġ= Ġ" class _ num " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġk ode in : ĠK ode in Ġ= ĠK ode in . lazy Ġ{ ĊĠĠĠĠĠĠĠ Ġextend ( parent K ode in ) ĊĠĠĠĠĠĠĠ Ġimport ( detail K ode in Module ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġlayout Id Ġ= ĠR . layout . activity _ detail ĊĊĠĠĠ Ġprivate Ġval Ġm ViewModel Ġby Ġinstance < Detail ViewModel >() ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Pv Time : ĠTime Picker View ĊĊĠĠĠ Ġprivate Ġvar Ġm StartTime : ĠString Ġ= Ġ"" ĊĠĠĠ Ġprivate Ġvar Ġm EndTime : ĠString Ġ= Ġ"" ĊĊĠĠĠ Ġprivate Ġval Ġm Adapter Ġ= ĠDetail Adapter () ĊĊĠĠĠ Ġ@ Suppress Lint (" SetText I 1 8 n ") ĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġm ViewModel . getClass Detail ( intent . getString Extra ( CLASS _ NUM ) Ġ?: Ġ"") ĊĊĠĠĠĠĠĠĠ Ġm Swipe Refresh Layout . isEnabled Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġ// æİ§åĪ¶ æĹ¶éĹ´ èĮĥåĽ´ ( å¦Ĥæŀľ ä¸į è®¾ç½® èĮĥåĽ´ ï¼Į åĪĻ ä½¿çĶ¨ é»ĺè®¤ æĹ¶éĹ´ 1 9 0 0 - 2 1 0 0 å¹´ ï¼Į æŃ¤ æ®µ ä»£çłģ åı¯ æ³¨éĩĬ ) ĊĠĠĠĠĠĠĠ Ġ// åĽłä¸º ç³»ç»Ł Calendar çļĦ æľĪ ä»½ æĺ¯ ä»İ 0 - 1 1 çļĦ , æīĢä»¥ å¦Ĥæŀľ æĺ¯ è°ĥçĶ¨ Calendar çļĦ set æĸ¹æ³ķ æĿ¥ è®¾ç½® æĹ¶éĹ´ , æľĪ ä»½ çļĦ èĮĥåĽ´ ä¹Ł è¦ģ æĺ¯ ä»İ 0 - 1 1 ĊĠĠĠĠĠĠĠ Ġ// æİ§åĪ¶ æĹ¶éĹ´ èĮĥåĽ´ ( å¦Ĥæŀľ ä¸į è®¾ç½® èĮĥåĽ´ ï¼Į åĪĻ ä½¿çĶ¨ é»ĺè®¤ æĹ¶éĹ´ 1 9 0 0 - 2 1 0 0 å¹´ ï¼Į æŃ¤ æ®µ ä»£çłģ åı¯ æ³¨éĩĬ ) ĊĠĠĠĠĠĠĠ Ġ// åĽłä¸º ç³»ç»Ł Calendar çļĦ æľĪ ä»½ æĺ¯ ä»İ 0 - 1 1 çļĦ , æīĢä»¥ å¦Ĥæŀľ æĺ¯ è°ĥçĶ¨ Calendar çļĦ set æĸ¹æ³ķ æĿ¥ è®¾ç½® æĹ¶éĹ´ , æľĪ ä»½ çļĦ èĮĥåĽ´ ä¹Ł è¦ģ æĺ¯ ä»İ 0 - 1 1 ĊĠĠĠĠĠĠĠ Ġval Ġselected Date : ĠCalendar Ġ= ĠCalendar . getInstance () ĊĠĠĠĠĠĠĠ Ġval ĠstartDate : ĠCalendar Ġ= ĠCalendar . getInstance () ĊĠĠĠĠĠĠĠ ĠstartDate . set ( 2 0 2 0 , Ġ 0 , Ġ 2 3 ) ĊĠĠĠĠĠĠĠ Ġval ĠendDate : ĠCalendar Ġ= ĠCalendar . getInstance () ĊĠĠĠĠĠĠĠ ĠendDate . set ( 2 0 2 9 , Ġ 1 1 , Ġ 2 8 ) ĊĠĠĠĠĠĠĠ Ġ// æĹ¶éĹ´ éĢīæĭ© åĻ¨ ĊĠĠĠĠĠĠĠ Ġ// æĹ¶éĹ´ éĢīæĭ© åĻ¨ ĊĠĠĠĠĠĠĠ Ġm Pv Time Ġ= ĠTime Picker View . Builder ( this , ĠTime Picker View . On Time Select Listener Ġ{ Ġdate , Ġv Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// éĢī ä¸Ń äºĭä»¶ åĽŀè°ĥ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ è¿ĻéĩĮ åĽŀè°ĥ è¿ĩ æĿ¥çļĦ v , å°±æĺ¯ show () æĸ¹æ³ķ éĩĮéĿ¢ æīĢ æ·»åĬł çļĦ ĠView ĠåıĤæķ° ï¼Į å¦Ĥæŀľ show çļĦæĹ¶åĢĻ æ²¡æľī æ·»åĬł åıĤæķ° ï¼Į v åĪĻ ä¸º null ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m StartTime . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm StartTime Ġ= Ġget Times ( date ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm EndTime Ġ= Ġget Times ( date ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm ViewModel . add Check in Info ( m StartTime , Ġm EndTime ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm StartTime Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm EndTime Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) Ġ// å¹´ æľĪ æĹ¥ æĹ¶ åĪĨ ç§Ĵ ĠçļĦ æĺ¾ç¤º ä¸İ åĲ¦ ï¼Į ä¸į è®¾ç½® åĪĻ é»ĺè®¤ åħ¨éĥ¨ æĺ¾ç¤º ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setType ( boolean ArrayOf ( true , Ġtrue , Ġtrue , Ġtrue , Ġtrue , Ġtrue )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setLabel (" å¹´ ", Ġ" æľĪ ", Ġ" æĹ¥ ", Ġ" æĹ¶ ", Ġ" åĪĨ ", Ġ" ç§Ĵ ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. is Center Label ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Divider Color ( Color . DK GRAY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setContent Size ( 2 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setDate ( selected Date ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set R ang Date ( startDate , ĠendDate ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Decor View ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĊĠĠĠĠĠĠĠ Ġm RecyclerView . adapter Ġ= Ġm Adapter ĊĊĠĠĠĠĠĠĠ Ġif Ġ( User Manager . INSTANCE . role List [ 0 ]. role Name Ġ!= Ġ" student ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Btn . text Ġ= Ġ" éĢīæĭ© æĹ¶éĹ´ å¹¶ åĪĽå»º çŃ¾ åĪ° " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Btn . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m StartTime . isEmpty ()) Ġtoast Ġ{ Ġ" éĢīæĭ© å¼Ģå§ĭ æĹ¶éĹ´ " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġtoast Ġ{ Ġ" éĢīæĭ© ç»ĵæĿŁ æĹ¶éĹ´ " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Pv Time . show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Btn . text Ġ= Ġ" çŃ¾ åĪ° ï¼Ī å·² çŃ¾ å¿½ çķ¥ ï¼ī " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Btn . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm ViewModel . check in () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Btn Res Upload . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġm Btn Check . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( Intent ( this , ĠCheck Activity :: class . java ). putExtra ( CLASS _ NUM , Ġintent . getString Extra ( CLASS _ NUM ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġ"")) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġm Btn Res List . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( Intent ( this , ĠRes Activity :: class . java )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġm Btn Res Upload . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Intent . ACTION _ GET _ CONTENT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . add Category ( Intent . CATEGORY _ OP ENABLE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . type Ġ= Ġ"* /* " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . startActivity For Result ( intent , Ġ 1 0 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġobserve ( m ViewModel . state LiveData ) Ġ{ Ġstate Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! state . msg . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoast Ġ{ Ġstate . msg Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( state . class Info Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Tv Info . text Ġ= Ġ" è¯¾ç¨ĭ åĲįç§° ï¼ļ ${ state . class Info . class X . classname }\ n è¯¾ç¨ĭ èĢģ å¸Ī ï¼ļ ${ state . class Info . teacher . username }" ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Adapter . set List ( state . class Info . class X . student List ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Times ( date : ĠDate ): ĠString Ġ{ Ġ// åı¯ æł¹æį® éľĢè¦ģ èĩª è¡Į æĪª åıĸ æķ°æį® æĺ¾ç¤º ĊĠĠĠĠĠĠĠ Ġval Ġformat Ġ= ĠSimpleDateFormat (" yyyy / MM / dd ĠHH : mm : ss ") ĊĠĠĠĠĠĠĠ Ġreturn Ġformat . format ( date ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġèİ·åıĸ æĸĩä»¶çļĦ çľŁ å®ŀ è·¯å¾Ħ ĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠĠĠĠĠĠĠ Ġif Ġ( data Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠçĶ¨æĪ· æľª éĢīæĭ© ä»»ä½ķ æĸĩä»¶ ï¼Į çĽ´æİ¥ è¿ĶåĽŀ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġuri : ĠUri ? Ġ= Ġdata . data Ġ// Ġèİ·åıĸ çĶ¨æĪ· éĢīæĭ© æĸĩä»¶çļĦ URI ĊĠĠĠĠĠĠĠ Ġ// ĠéĢļè¿ĩ Content Provider æŁ¥è¯¢ æĸĩä»¶ è·¯å¾Ħ ĊĠĠĠĠĠĠĠ Ġval Ġresolver Ġ= Ġthis . content Resolver ĊĠĠĠĠĠĠĠ Ġval Ġcursor : ĠCursor ? Ġ= Ġuri ?. let Ġ{ Ġresolver . query ( it , Ġnull , Ġnull , Ġnull , Ġnull ) Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( cursor Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ æľª æŁ¥è¯¢ åĪ° ï¼Į è¯´æĺİ ä¸º æĻ®éĢļ æĸĩä»¶ ï¼Į åı¯ çĽ´æİ¥ éĢļè¿ĩ URI èİ·åıĸ æĸĩä»¶ è·¯å¾Ħ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpath : ĠString ? Ġ= Ġuri ?. path ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpath ?. let Ġ{ Ġm ViewModel . upload ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( cursor . moveTo First ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ å¤ļ åªĴ ä½ĵ æĸĩä»¶ ï¼Į ä»İ æķ°æį®åºĵ ä¸Ń èİ·åıĸ æĸĩä»¶çļĦ çľŁ å®ŀ è·¯å¾Ħ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpath : ĠString Ġ= Ġcursor . getString ( cursor . getColumnIndex ("_ data ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm ViewModel . upload ( path ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcursor . close () ĊĠĠĠ Ġ} Ċ Ċ }