package Ġcom . tun jid . android x . fragments ĊĊ Ċ import Ġandroid . net . ns d . N sd Service Info Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Ċ import Ġandroidx . core . view . update Padding Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . view Models Ċ import Ġandroidx . lifecycle . observe Ċ import Ġandroidx . recyclerview . widget . Divider Item Decoration Ċ import Ġandroidx . recyclerview . widget . Divider Item Decoration . VERTICAL Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . tun jid . android x . Place Holder Ċ import Ġcom . tun jid . android x . R Ċ import Ġcom . tun jid . android x . adapters . Service Clicked Listener Ċ import Ġcom . tun jid . android x . base classes . App Base Fragment Ċ import Ġcom . tun jid . android x . core . content . theme Color At Ċ import Ġcom . tun jid . android x . is Dark Theme Ċ import Ġcom . tun jid . android x . recyclerview . accept Diff Ċ import Ġcom . tun jid . android x . recyclerview . adapter Of Ċ import Ġcom . tun jid . android x . recyclerview . vertical LayoutManager Ċ import Ġcom . tun jid . android x . set Loading Ċ import Ġcom . tun jid . android x . uid river s . Inset Lifecycle Callbacks Ċ import Ġcom . tun jid . android x . view . util . inflate Ċ import Ġcom . tun jid . android x . view holders . NS D ViewHolder Ċ import Ġcom . tun jid . android x . view models . N sd ViewModel Ċ import Ġcom . tun jid . android x . view models . route Name Ċ Ċ /** Ċ Ġ* ĠA Ġ[ Fragment ] Ġlisting Ġsupported ĠN SD Ġservers Ċ Ġ*/ Ċ class ĠN sd Scan Fragment Ġ: ĠApp Base Fragment ( R . layout . fragment _ ns d _ scan ), ĊĠĠĠĠĠĠĠ ĠService Clicked Listener Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠviewModel Ġby Ġview Models < N sd ViewModel >() ĊĊĠĠĠ Ġprivate Ġvar Ġre cyclerView : ĠRecyclerView ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġui State Ġ= Ġui State . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoolbar Title Ġ= Ġthis :: class . java . route Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoolbar Shows Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtool Bar Menu Ġ= ĠR . menu . menu _ ns d _ scan , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfab Shows Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshows Bottom Nav Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlight StatusBar Ġ= Ġ! require Context (). is Dark Theme , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Bar Color Ġ= Ġrequire Context (). theme Color At ( R . attr . nav _ bar _ color ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġplace Holder Ġ= ĠPlace Holder ( view . findViewById ( R . id . placeholder _ container )) ĊĠĠĠĠĠĠĠ Ġplace Holder . bind ( Place Holder . State ( R . string . no _ ns d _ devices , ĠR . drawable . ic _ signal _ wifi __ 2 4 dp )) ĊĊĠĠĠĠĠĠĠ Ġre cyclerView = ĠĠ Ġview . findViewById < RecyclerView >( R . id . list ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager Ġ= Ġvertical LayoutManager () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= Ġadapter Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems Source Ġ= ĠviewModel :: services , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewHolder Creator Ġ= Ġ{ Ġparent , Ġ_ Ġ-> ĠN SD ViewHolder ( parent . inflate ( R . layout . view holder _ ns d _ list ), Ġthis @ N sd Scan Fragment ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewHolder Binder Ġ= Ġ{ ĠviewHolder , Ġservice , Ġ_ Ġ-> ĠviewHolder . bind ( service ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Item Decoration ( Divider Item Decoration ( require Activity (), ĠV ERT ICAL )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Padding ( bottom Ġ= ĠIn set Lifecycle Callbacks . bottom Inset ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . scan Changes . observe ( view Lifecycle Owner ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplace Holder . toggle ( viewModel . services . isEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaccept Diff ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . is Sc anning . observe ( view Lifecycle Owner ) Ġ{ Ġui State Ġ= Ġui State . copy ( toolbar Invalid ated Ġ= Ġtrue ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġscan Devices ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy View () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy View () ĊĠĠĠĠĠĠĠ Ġre cyclerView Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Prepare Options Menu ( menu : ĠMenu ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Prepare Options Menu ( menu ) ĊĊĠĠĠĠĠĠĠ Ġval Ġcurrently Sc anning Ġ= ĠviewModel . is Sc anning . value Ġ?: Ġfalse ĊĊĠĠĠĠĠĠĠ Ġmenu . find Item ( R . id . menu _ stop )?. isVisible Ġ= Ġcurrently Sc anning ĊĠĠĠĠĠĠĠ Ġmenu . find Item ( R . id . menu _ scan )?. isVisible Ġ= Ġ! currently Sc anning ĊĊĠĠĠĠĠĠĠ Ġval Ġrefresh Ġ= Ġmenu . find Item ( R . id . menu _ refresh ) ĊĊĠĠĠĠĠĠĠ Ġrefresh ?. isVisible Ġ= Ġcurrently Sc anning ĊĠĠĠĠĠĠĠ Ġif Ġ( currently Sc anning ) Ġrefresh ?. set Loading ( require Context (). theme Color At ( R . attr . prom inent _ text _ color )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ= Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠ ĠR . id . menu _ scan Ġ-> Ġscan Devices ( true ). let Ġ{ Ġtrue Ġ} ĊĠĠĠĠĠĠĠ ĠR . id . menu _ stop Ġ-> Ġscan Devices ( false ). let Ġ{ Ġtrue Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Service Clicked ( service Info : ĠN sd Service Info ) Ġ= ĠUnit ĊĊĠĠĠ Ġoverride Ġfun Ġis Self ( service Info : ĠN sd Service Info ): ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġfun Ġscan Devices ( enable : ĠBoolean ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( enable ) ĠviewModel . find Devices () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĠviewModel . stop Sc anning () ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance (): ĠN sd Scan Fragment Ġ= ĠN sd Scan Fragment (). apply Ġ{ Ġarguments Ġ= ĠBundle () Ġ} ĊĠĠĠ Ġ} Ċ } Ċ