/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 ĠARM ĠLtd . Ċ Ġ* Ċ Ġ* ĠSPDX - License - Identifier : ĠApache - 2 . 0 Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . arm . pel ion dev ic eman agement . screens . activities Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Adapter View Ċ import Ġandroid . widget . Array Adapter Ċ import Ġandroidx . appcompat . widget . Search View Ċ import Ġandroidx . appcompat . widget . Toolbar Ċ import Ġandroidx . recyclerview . widget . Default Item Animator Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . arm . pel ion dev ic eman agement . R Ċ import Ġcom . arm . pel ion dev ic eman agement . components . adapters . Devices Search Adapter Ċ import Ġcom . arm . pel ion dev ic eman agement . components . adapters . En rolling Devices Search Adapter Ċ import Ġcom . arm . pel ion dev ic eman agement . components . listeners . Recycler ItemClickListener Ċ import Ġcom . arm . pel ion dev ic eman agement . components . listeners . SearchResults Listener Ċ import Ġcom . arm . pel ion dev ic eman agement . components . models . devices . En rolling IoT Device Ċ import Ġcom . arm . pel ion dev ic eman agement . components . models . devices . IoT Device Ċ import Ġcom . arm . pel ion dev ic eman agement . constants . App Constants Ċ import Ġcom . arm . pel ion dev ic eman agement . constants . App Constants . SEARCH _ B UNDLE Ċ import Ġcom . arm . pel ion dev ic eman agement . constants . state . devices . Devices Filters Ċ import Ġcom . arm . pel ion dev ic eman agement . constants . state . devices . Devices Search State Ċ import Ġcom . arm . pel ion dev ic eman agement . databinding . Activity Search Devices En rolling Binding Ċ import Ġcom . arm . pel ion dev ic eman agement . helpers . Log Helper Ċ Ċ class ĠSearch Devices En rolling Activity Ġ: ĠBase Activity (), ĠRe cycler ItemClickListener Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠTAG : ĠString Ġ= ĠSearch Devices En rolling Activity :: class . java . simple Name ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġview Binder : ĠActivity Search Devices En rolling Binding ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtoolbar : ĠToolbar ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsearch State : ĠDevices Search State ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġdevice Filters Array : ĠArray < String > ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsearch Bundle : ĠBundle ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġdevices List : ĠArrayList < IoT Device > ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġen rolling List : ĠArrayList < En rolling IoT Device > ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġdevices Search Adapter : ĠDevices Search Adapter ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġen rolling Devices Search Adapter : ĠEn rolling Devices Search Adapter ĊĊĠĠĠ Ġprivate Ġval Ġquery Text Listener Ġ= Ġobject Ġ: ĠSearch View . On Query Text Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Query Text Submit ( query : ĠString ?): ĠBoolean Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Query Text Change ( new Text : ĠString ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Hide No Results View ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( search State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDevices Search State . DEVICES Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdevices Search Adapter . filter . filter ( new Text ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDevices Search State . EN ROLL ING _ DEVICES Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġen rolling Devices Search Adapter . filter . filter ( new Text ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġsearch Results Listener Ġ= Ġobject Ġ: ĠSearch Results Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon No Results Found () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog Helper . debug ( TAG , Ġ" Search Ġreturned Ġno Ġresults !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Hide No Results View ( true ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Theme ( false ) ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġview Binder Ġ= ĠActivity Search Devices En rolling Binding . inflate ( layout Inflater ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( view Binder . root ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Post Create ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Post Create ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠArguments ĊĠĠĠĠĠĠĠ Ġsearch State Ġ= ĠDevices Search State . valueOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . getString Extra ( App Constants . DEVICES _ AND _ EN ROLL ING _ SEARCH ) !! ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġsearch Bundle Ġ= Ġintent . extras !! ĊĊĠĠĠĠĠĠĠ Ġ// ĠInitialize ĊĠĠĠĠĠĠĠ Ġinit () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit () Ġ{ ĊĠĠĠĠĠĠĠ ĠLog Helper . debug ( TAG , Ġ" -> Active Search State : Ġ${ search State . name }") ĊĊĠĠĠĠĠĠĠ Ġtoolbar Ġ= Ġview Binder . toolbar ĊĠĠĠĠĠĠĠ Ġview Binder . rv Devices Search . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager Ġ= ĠLinearLayoutManager ( context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRecyclerView . VERTICAL , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem Animator Ġ= ĠDefault Item Animator () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Has Fixed Size ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Item View Cache Size ( 2 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġwhen ( search State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDevices Search State . DEVICES Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Toolbar ( toolbar , ĠgetString ( R . string . devices _ text )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdd Ġfilters Ġto Ġthe Ġview ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Device Filters () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdevices List Ġ= Ġsearch Bundle ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Parcelable ArrayList < IoT Device >( SEARCH _ B UNDLE ) Ġas ĠArrayList < IoT Device > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Helper . debug ( TAG , Ġ" -> devices List () Ġsize : Ġ${ devices List . size }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdevices Search Adapter Ġ= ĠDevices Search Adapter ( devices List , Ġthis , Ġsearch Results Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Binder . rv Devices Search . adapter Ġ= Ġdevices Search Adapter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDevices Search State . EN ROLL ING _ DEVICES Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Toolbar ( toolbar , ĠgetString ( R . string . en rolling _ devices _ text )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġen rolling List Ġ= Ġsearch Bundle ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Parcelable ArrayList < En rolling IoT Device >( SEARCH _ B UNDLE ) Ġas ĠArrayList < En rolling IoT Device > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Helper . debug ( TAG , Ġ" -> en rolling Devices List () Ġsize : Ġ${ en rolling List . size }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġen rolling Devices Search Adapter Ġ= ĠEn rolling Devices Search Adapter ( en rolling List , Ġsearch Results Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Binder . rv Devices Search . adapter Ġ= Ġen rolling Devices Search Adapter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠSet Ġquery Ġlistener ĊĠĠĠĠĠĠĠ Ġview Binder . search Bar . search TextBox . setOn Query Text Listener ( query Text Listener ) ĊĠĠĠĠĠĠĠ Ġ// ĠActivate Ġsearch - bar ĊĠĠĠĠĠĠĠ Ġview Binder . search Bar . search TextBox . is Icon ified Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Device Filters () Ġ{ ĊĠĠĠĠĠĠĠ Ġdevice Filters Array Ġ= Ġresources . getString Array ( R . array . devices _ filters ) ĊĠĠĠĠĠĠĠ Ġval Ġfilters Adapter Ġ= ĠArray Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . dropdown _ menu _ item , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdevice Filters Array ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġview Binder . filters Menu . setText ( device Filters Array [ 2 ], Ġfalse ) ĊĠĠĠĠĠĠĠ Ġview Binder . filters Menu . setAdapter ( filters Adapter ) ĊĠĠĠĠĠĠĠ Ġview Binder . dropdown Filters Menu . visibility Ġ= ĠView . VISIBLE ĊĊĠĠĠĠĠĠĠ Ġview Binder . filters Menu . on ItemClickListener Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAdapter View . On ItemClickListener Ġ{ Ġ_, Ġ_, Ġposition , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Helper . debug ( TAG , Ġ" SelectedItem : Ġ${ device Filters Array [ position ]} ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( position ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdevices Search Adapter . set Filter Type ( Devices Filters . DEVICE _ ID ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdevices Search Adapter . set Filter Type ( Devices Filters . DEVICE _ NAME ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdevices Search Adapter . set Filter Type ( Devices Filters . ENDPOINT _ NAME ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Hide No Results View ( visibility : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( visibility ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Binder . rv Devices Search . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Binder . no SearchResults View . root . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Binder . no SearchResults View . root . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Binder . rv Devices Search . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Item Click ( data : ĠAny ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdevice Item Ġ= Ġdata Ġas ĠIoT Device ĊĠĠĠĠĠĠĠ ĠLog Helper . debug ( TAG , Ġ" SelectedItem : Ġ$ device Item ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnavigate Back To Device Management Activity () Ġ{ ĊĠĠĠĠĠĠĠ Ġfire Intent With Finish ( Intent ( this , ĠDevice Management Activity :: class . java ), Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Support Navigate Up (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġnavigate Back To Device Management Activity () ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Support Navigate Up () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Back Pressed () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Back Pressed () ĊĠĠĠĠĠĠĠ Ġnavigate Back To Device Management Activity () ĊĠĠĠ Ġ} Ċ }