package Ġcom . sa ur ab h . bluetooth chat app . ui . fragment Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . bluetooth . Bluetooth Adapter Ċ import Ġandroid . bluetooth . Bluetooth Device Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . TextView Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . view Models Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . google . android . material . floating action button . Floating ActionButton Ċ import Ġcom . sa ur ab h . bluetooth chat app . Constants Ċ import Ġcom . sa ur ab h . bluetooth chat app . R Ċ import Ġcom . sa ur ab h . bluetooth chat app . adapter . Chat ListAdapter Ċ import Ġcom . sa ur ab h . bluetooth chat app . devices . BL Device Ċ import Ġcom . sa ur ab h . bluetooth chat app . view model . Chat List ViewModel Ċ import Ġdagger . h ilt . android . Android EntryPoint Ċ Ċ @ Android EntryPoint Ċ class ĠChat List Fragment Ġ: ĠFragment ( R . layout . fragment _ chat _ list ), ĠPa ired Devices Dialog Fragment . OnClick , ĊĠĠĠ ĠChat ListAdapter . Interaction Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġchat ListAdapter : ĠChat ListAdapter ĊĠĠĠ Ġprivate Ġvar Ġbluetooth Adapter : ĠBluetooth Adapter ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġempty Chat List : ĠTextView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġpaired Devices : ĠFloating ActionButton ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġre cycler : ĠRecyclerView ĊĠĠĠ Ġprivate Ġval Ġview Mode : ĠChat List ViewModel Ġby Ġview Models () ĊĠĠĠ Ġprivate Ġvar Ġbl Devices : ĠList < BL Device ?> ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval ĠREQUEST _ ENABLE _ BT Ġ= Ġ 3 ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġpaired Devices Ġ= Ġview . findViewById ( R . id . btn _ main Activity _ paired Devices ) ĊĠĠĠĠĠĠĠ Ġempty Chat List Ġ= Ġview . findViewById ( R . id . txt _ chat List Fragment _ emptyList ) ĊĠĠĠĠĠĠĠ Ġre cycler Ġ= Ġview . findViewById ( R . id . recycler _ chat List F _ items ) ĊĠĠĠĠĠĠĠ Ġget Connected Devices () ĊĠĠĠĠĠĠĠ Ġinit RecyclerView () ĊĠĠĠĠĠĠĠ Ġsubscribe On Buttons () ĊĠĠĠĠĠĠĠ Ġset Bluetooth Adapter () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit RecyclerView () Ġ{ ĊĠĠĠĠĠĠĠ Ġre cycler . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager Ġ= ĠLinearLayoutManager ( require Context ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchat ListAdapter Ġ= ĠChat ListAdapter ( this @ Chat List Fragment ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= Ġchat ListAdapter ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Connected Devices ( devices : ĠList < BL Device ?> ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( devices . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsubmit Devices ( devices ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġempty Chat List . visibility Ġ= ĠView . VISIBLE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsubmit Devices ( devices : ĠList < BL Device ?> ) Ġ{ ĊĠĠĠĠĠĠĠ Ġchat ListAdapter . submit List ( devices ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Connected Devices () Ġ{ ĊĠĠĠĠĠĠĠ Ġview Mode . get Connected Devices (). observe ( view Lifecycle Owner ) Ġ{ Ġdevice Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbl Devices Ġ= Ġdevice ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" TAG ", Ġ" get Connected Devices : Ġ$ device ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Connected Devices ( device ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Bluetooth Adapter () Ġ{ ĊĠĠĠĠĠĠĠ Ġbluetooth Adapter Ġ= ĠBluetooth Adapter . getDefault Adapter () ĊĠĠĠĠĠĠĠ Ġif Ġ( bluetooth Adapter Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" the Ġdevice Ġdoesn 't Ġsupport ĠBluetooth !", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ SHORT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsubscribe On Buttons () Ġ{ ĊĠĠĠĠĠĠĠ Ġpaired Devices . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( bluetooth Adapter ?. isEnabled Ġ== Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġenable Bt Intent Ġ= ĠIntent ( Bluetooth Adapter . ACTION _ REQUEST _ ENABLE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity For Result ( enable Bt Intent , ĠREQUEST _ ENABLE _ BT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġshow Pa ired Devices () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Pa ired Devices () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbl Devices Ġ= Ġquery Pa ired Devices () ĊĠĠĠĠĠĠĠ Ġbl Devices ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpaired Devices Dialog Fragment Ġ= ĠPa ired Devices Dialog Fragment ( this , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaired Devices Dialog Fragment . show ( child FragmentManager , Ġ" From MainActivity To Pa ired ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġinsert Device ( item : ĠBL Device ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbl Devices ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . contains ( item )) Ġreturn Ġelse Ġview Mode . insert Connected Device ( item ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( bl Devices Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Mode . insert Connected Device ( item ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġquery Pa ired Devices (): ĠList < BL Device >? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpaired Devices : ĠSet < Bluetooth Device >? Ġ= Ġbluetooth Adapter ?. bon ded Devices ĊĠĠĠĠĠĠĠ Ġreturn Ġpaired Devices ?. map Ġ{ ĠBL Device ( it . name , Ġit . address ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnavigate To Fragment ( item : ĠBL Device ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbundle Ġ= ĠBundle () ĊĠĠĠĠĠĠĠ Ġbundle . putString ( Constants . DEVICE _ ADDRESS , Ġitem . device Address ) ĊĠĠĠĠĠĠĠ Ġbundle . putString ( Constants . DEVICE _ NAME , Ġitem . device Name ) ĊĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( R . id . action _ chat List Fragment _ to _ chat Fragment , Ġbundle ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠĠĠĠĠĠĠ Ġwhen ( request Code ){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠREQUEST _ ENABLE _ BT Ġ-> { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Code Ġ== ĠActivity . RESULT _ OK ) Ġshow Pa ired Devices () Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (), ĠR . string . bt _ not _ enabled _ le aving , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ SHORT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. finish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpaired Device Selected ( position : ĠInt , Ġitem : ĠBL Device ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinsert Device ( item ) ĊĠĠĠĠĠĠĠ Ġnavigate To Fragment ( item ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġon ItemSelected ( position : ĠInt , Ġitem : ĠBL Device ) Ġ{ ĊĠĠĠĠĠĠĠ Ġnavigate To Fragment ( item ) ĊĠĠĠ Ġ} Ċ } Ċ