package Ġai . k un . social distance alarm . ui . history Ċ Ċ import Ġai . k un . social distance alarm . R Ċ Ċ import Ġai . k un . op entr aces dk _ fat . dao . Device Ċ import Ġai . k un . op entr aces dk _ fat . util . Bluetooth Utils Ċ import Ġai . k un . op entr aces dk _ fat . util . Constants . SIGNAL _ DISTANCE _ LIGHT _ WARN Ċ import Ġai . k un . op entr aces dk _ fat . util . Constants . SIGNAL _ DISTANCE _ OK Ċ import Ġai . k un . op entr aces dk _ fat . util . Constants . SIGNAL _ DISTANCE _ STRONG _ WARN Ċ import Ġai . k un . op entr aces dk _ fat . util . Constants . TIME _ FORMAT Ċ Ċ import Ġai . k un . social distance alarm . util . Date Utils . get Formatted DateString Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . res . Color State List Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . core . content . res . Resources Compat Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ Ċ /** Ċ Ġ* ĠLists Ġthe Ġhistory Ġof Ġcontacts Ġwith Ġother Ġusers Ġof Ġthe Ġapplication . Ġ ĠWe Ġwanted Ġto Ġturn Ġthis Ċ Ġ* Ġinto Ġsome Ġform Ġof Ġgam ification Ġsimilar Ġto Ġwhat Ġthe Ġother Ġapplications Ġhave Ġdone , Ġbut Ġwe Ġdidn 't Ċ Ġ* Ġhave Ġthe Ġdesign Ġresources Ġto Ġdo Ġit . Ċ Ġ* Ċ Ġ* Ġ@ constructor Ċ Ġ* ĠConstructs Ġan Ġadapter Ġfor Ġthe Ġlist Ġview Ġfor Ġdevice Ġhistory Ċ Ġ* Ċ Ġ* Ġ@ param Ġadapter Context ĠThe Ġadapter Ġcontext Ġto Ġuse Ċ Ġ*/ Ċ class ĠDevice History ListAdapter Ġinternal Ġconstructor ( ĊĠĠĠ Ġadapter Context : ĠContext Ċ ) Ġ: ĠRecyclerView . Adapter < Device History ListAdapter . Device ViewHolder >() Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġinflater : ĠLayoutInflater Ġ= ĠLayoutInflater . from ( adapter Context ) ĊĠĠĠ Ġprivate Ġval Ġcontext : ĠContext Ġ= Ġadapter Context ĊĠĠĠ Ġprivate Ġvar Ġdevices Ġ= Ġempty List < Device >() ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġview Ġholder ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ constructor ĊĠĠĠĠ Ġ* Ġpopulate Ġthe Ġview Ġwith Ġdistance , Ġtime , Ġetc . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param ĠitemView ĠThe Ġview Ġto Ġpopulate ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinner Ġclass ĠDevice ViewHolder ( item View : ĠView ) Ġ: ĠRecyclerView . ViewHolder ( item View ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdistance TextView : ĠTextView Ġ= ĠitemView . findViewById ( R . id . textView _ distance ) ĊĠĠĠĠĠĠĠ Ġval Ġsignal TextView : ĠTextView Ġ= ĠitemView . findViewById ( R . id . textView _ signal ) ĊĠĠĠĠĠĠĠ Ġval Ġtimestamp TextView : ĠTextView Ġ= ĠitemView . findViewById ( R . id . textView _ timestamp ) ĊĠĠĠĠĠĠĠ Ġval Ġpeople ImageView : ĠImageView Ġ= ĠitemView . findViewById ( R . id . imageView _ people ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInf late Ġthe Ġlayout ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġparent ĠThe Ġparent Ġview Ġgroup ĊĠĠĠĠ Ġ* Ġ@ param Ġview Type ĠThe Ġview Ġtype ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠDevice ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠitemView Ġ= Ġinflater . inflate ( R . layout . item _ device _ history , Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġreturn ĠDevice ViewHolder ( item View ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTranslate Ġthe Ġvalues Ġin Ġthe Ġholder Ġinto Ġthe Ġcorrect ĠUI . ĊĠĠĠĠ Ġ* ĠThe Ġcode Ġbelow Ġshould Ġhave Ġbe ĠD RY ed , Ġbut ĠI Ġwas Ġin Ġa Ġhur ry . Ġ ĠIt 's Ġnearly Ġidentical Ġto Ġwhat ĊĠĠĠĠ Ġ* Ġis Ġdone Ġfor Ġhome . Ġ ĠAgain Ġthe Ġplan Ġwas Ġto Ġeventually Ġchange Ġthis Ġto Ġsomething Ġthat Ġhad ĊĠĠĠĠ Ġ* Ġgam ification , Ġbut Ġthe Ġpriority Ġwas Ġlaunch ing ĠiOS Ġand Ġapple Ġdidn 't Ġlet Ġus Ġlaunch . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġholder ĠThe Ġholder Ġto Ġset Ġup ĊĠĠĠĠ Ġ* Ġ@ param Ġposition ĠThe Ġposition Ġof Ġthe Ġholder ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠDevice ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Ġ= Ġdevices [ position ] ĊĊĠĠĠĠĠĠĠ Ġ// ĠNotify Ġthe Ġuser Ġwhen Ġwe Ġare Ġadding Ġa Ġdevice Ġthat 's Ġtoo Ġclose ĊĠĠĠĠĠĠĠ Ġval Ġsignal Ġ= ĠBluetooth Utils . calculate Signal ( current . rssi , Ġcurrent . tx Power , Ġcurrent . is Android ) ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsignal Ġ<= ĠSIGNAL _ DISTANCE _ OK Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . distance TextView . text Ġ= Ġcontext . resources . getString ( R . string . sa fer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . people ImageView . setImage Resource ( R . drawable . ic _ person _ good _ icon ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . people ImageView . image Tint List Ġ= ĠColor State List . valueOf ( Resources Compat . getColor ( context . resources , ĠR . color . green , Ġcontext . theme )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsignal Ġ<= ĠSIGNAL _ DISTANCE _ LIGHT _ WARN Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . distance TextView . text Ġ= Ġcontext . resources . getString ( R . string . warning ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . people ImageView . setImage Resource ( R . drawable . ic _ person _ warning _ icon ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . people ImageView . image Tint List Ġ= ĠColor State List . valueOf ( Resources Compat . getColor ( context . resources , ĠR . color . yellow , Ġcontext . theme )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsignal Ġ<= ĠSIGNAL _ DISTANCE _ STRONG _ WARN Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . distance TextView . text Ġ= Ġcontext . resources . getString ( R . string . strong _ warning ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . people ImageView . setImage Resource ( R . drawable . ic _ person _ danger _ icon ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . people ImageView . image Tint List Ġ= ĠColor State List . valueOf ( Resources Compat . getColor ( context . resources , ĠR . color . orange , Ġcontext . theme )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . distance TextView . text Ġ= Ġcontext . resources . getString ( R . string . too _ close ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . people ImageView . setImage Resource ( R . drawable . ic _ person _ too _ close _ icon ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . people ImageView . image Tint List Ġ= ĠColor State List . valueOf ( Resources Compat . getColor ( context . resources , ĠR . color . red , Ġcontext . theme )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( current . is Team Member ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . distance TextView . text Ġ= Ġcontext . resources . getString ( R . string . sa fer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . people ImageView . setImage Resource ( R . drawable . ic _ people _ black _ 2 4 dp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . people ImageView . image Tint List Ġ= ĠColor State List . valueOf ( Resources Compat . getColor ( context . resources , ĠR . color . green , Ġcontext . theme )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( current . is Team Member ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . distance TextView . text Ġ= Ġcontext . resources . getString ( R . string . sa fer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . people ImageView . setImage Resource ( R . drawable . ic _ people _ black _ 2 4 dp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . people ImageView . image Tint List Ġ= ĠColor State List . valueOf ( Resources Compat . getColor ( context . resources , ĠR . color . green , Ġcontext . theme )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġholder . signal TextView . text Ġ= Ġsignal . toString () ĊĠĠĠĠĠĠĠ Ġholder . timestamp TextView . text Ġ= Ġget Formatted DateString ( TIME _ FORMAT , Ġcurrent . time Stamp ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUpdate Ġthe Ġdevice Ġlist . Ġ ĠThe Ġhistory Ġview Ġshows Ġa Ġlive Ġlist Ġof Ġdevices . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġdevices ĠThe Ġdevices Ġin Ġthe Ġcurrent Ġview ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinternal Ġfun Ġset Devices ( devices : ĠList < Device >) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . devices Ġ= Ġdevices ĊĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġthe Ġnumber Ġof Ġdetected Ġdevices ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun ĠgetItem Count () Ġ= Ġdevices . size Ċ }