package Ġcom . lu o . module . init Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . net . wifi . Wifi Manager Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . widget . ProgressBar Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . core . widget . Content Loading ProgressBar Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . lifecycle . lifecycle Scope Ċ import Ġandroidx . recyclerview . widget . Grid LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . alibaba . android . ar outer . facade . annotation . Route Ċ import Ġcom . fm . library . common . constants . Router Path Ċ import Ġcom . fm . library . common . constants . ext . getImage Bitmap By Url Ċ import Ġcom . fm . library . common . constants . module . Face Msg 2 Ċ import Ġcom . fm . library . common . constants . net . Global Service Creator Ċ import Ġcom . fm . library . face . Face Ċ import Ġcom . fm . library . face . to Crop Bitmap Ċ import Ġcom . lu o . module . init . net . Init Api Ċ import Ġcom . lu o . module . init . net . dom in . to Face Msg Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . launch Ċ Ċ @ Route ( path Ġ= ĠRouter Path . Init . PAGE _ INIT ) Ċ class ĠInit Activity Main Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTAG Ġ= Ġ" Init Activity Main " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġm Adapter Ġ= ĠInit Store Adapter () ĊĊĠĠĠ Ġlateinit Ġvar Ġm Rv : ĠRecyclerView ĊĠĠĠ Ġlateinit Ġvar Ġm Tv Total : ĠTextView ĊĠĠĠ Ġlateinit Ġvar Ġm Tv Current : ĠTextView ĊĠĠĠ Ġlateinit Ġvar Ġm Name : ĠTextView ĊĠĠĠ Ġlateinit Ġvar Ġm Progress : ĠProgress Bar ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm ViewModel : ĠInit ViewModel ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . init _ activity _ main ) ĊĊĠĠĠĠĠĠĠ Ġm Rv Ġ= ĠfindViewById < RecyclerView >( R . id . init _ rv ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . adapter Ġ= Ġm Adapter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . layout Manager Ġ= ĠGrid LayoutManager ( application Context , Ġ 4 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġm Tv Total Ġ= ĠfindViewById ( R . id . init _ tv _ total ) ĊĠĠĠĠĠĠĠ Ġm Tv Current Ġ= ĠfindViewById ( R . id . init _ tv _ current ) ĊĠĠĠĠĠĠĠ Ġm Progress Ġ= ĠfindViewById ( R . id . progress ) ĊĠĠĠĠĠĠĠ Ġm Progress . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . max Ġ= Ġ 1 0 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġm Name Ġ= ĠfindViewById ( R . id . init _ tv _ name ) ĊĠĠĠĠĠĠĠ Ġval Ġwifi Manager Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget ApplicationContext (). getSystem Service ( Context . WIFI _ SERVICE ) Ġas ĠW ifi Manager ĊĠĠĠĠĠĠĠ Ġ// åĪ¤æĸŃ wifi æĺ¯åĲ¦ å¼ĢåĲ¯ ĊĠĠĠĠĠĠĠ Ġ// åĪ¤æĸŃ wifi æĺ¯åĲ¦ å¼ĢåĲ¯ ĊĠĠĠĠĠĠĠ Ġif Ġ(! wifi Manager . is Wifi Enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwifi Manager . is Wifi Enabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġwifi Info Ġ= Ġwifi Manager . connection Info ĊĠĠĠĠĠĠĠ Ġval Ġip Address Ġ= Ġwifi Info . ipAddress ĊĠĠĠĠĠĠĠ Ġval Ġip Ġ= Ġint To Ip ( ipAddress ) ĊĊĠĠĠĠĠĠĠ Ġm Name . text Ġ= Ġip ĊĊĠĠĠĠĠĠĠ Ġm ViewModel Ġ= ĠViewModel Provider ( this ). get ( Init ViewModel :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġrequest Face Msg () ĊĊĠĠĠĠĠĠĠ Ġsetup Ob serve () Ċ // ĠĠĠĠĠĠĠ Ġval Ġapi Ġ= ĠGlobal Service Creator . create < Init Api >() Ċ // ĠĠĠĠĠĠĠ Ġlifecycle Scope . launch Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġapi . getAll Faces 2 () Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġres . body () !! Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġlist . forEach Indexed Ġ{ Ġindex , Ġface Msg 2 Ġ-> Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbitmap Ġ= Ġthis @ Init Activity Main . getImage Bitmap By Url ( face Msg 2 . pic !! ) !! Ċ //// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbox Ġ= ĠFace . find Face ( bitmap )[ 0 ] Ċ //// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFace . get Feature ( box . to Crop Bitmap ( bitmap ), Ġbox ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm ViewModel . init Face ( face Msg 2 , Ġbitmap ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġm Adapter . users Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtmp List Ġ= ĠArrayList < Face Msg 2 >( list . size Ġ+ Ġ 1 ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtmp List . add ( face Msg 2 ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtmp List . addAll ( list ) Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Adapter . users Ġ= Ġtmp List Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Adapter . notify DataSet Changed () Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Tv Current . text Ġ= Ġ( index Ġ+ Ġ 1 ). toString () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Progress . progress Ġ= Ġ( index Ġ+ Ġ 1 ) Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Rv . scrollTo Position ( 0 ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Ob serve () Ġ{ ĊĠĠĠĠĠĠĠ Ġm ViewModel . have F ea LiveData . observe ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Adapter . users Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Adapter . notify DataSet Changed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Rv . scrollTo Position ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Tv Current . text Ġ= Ġit . size . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Progress . progress Ġ= Ġit . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm ViewModel . no F ea LiveData . observe ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Tv Total . text Ġ= Ġit . size . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġm ViewModel . request Faces () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlifecycle Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġ 5 . coerce At Most ( it . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġface List Ġ= ĠArrayList < Face Msg 2 >( size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbit List Ġ= ĠArrayList < Bitmap >( size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġsize ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġface List . add ( it [ i ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbit List . add ( this @ Init Activity Main . getImage Bitmap By Url ( it [ i ]. pic !! ) !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm ViewModel . init Face ( face List , Ġbit List ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm ViewModel . need ToUpdate . observe ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it ) Ġm ViewModel . request Faces () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrequest Face Msg () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġm ViewModel . request Faces () ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġint To Ip ( i : ĠInt ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ( i Ġand Ġ 0 xFF ). toString () Ġ+ Ġ"." Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( i Ġshr Ġ 8 Ġand Ġ 0 xFF ) Ġ+ Ġ"." Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( i Ġshr Ġ 1 6 Ġand Ġ 0 xFF ) Ġ+ Ġ"." Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( i Ġshr Ġ 2 4 Ġand Ġ 0 xFF ) ĊĠĠĠ Ġ} Ċ }