112 lines
3.8 KiB
Java
112 lines
3.8 KiB
Java
/*
|
|
This software is subject to the license described in the License.txt file
|
|
included with this software distribution. You may not use this file except in compliance
|
|
with this license.
|
|
|
|
Copyright (c) Dynastream Innovations Inc. 2014
|
|
All rights reserved.
|
|
*/
|
|
|
|
package com.rubenvandeven.heartbeatstreamer.multidevicesearch;
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import android.content.Context;
|
|
import android.view.LayoutInflater;
|
|
import android.view.View;
|
|
import android.view.ViewGroup;
|
|
import android.widget.ArrayAdapter;
|
|
import android.widget.ProgressBar;
|
|
import android.widget.TextView;
|
|
|
|
import com.rubenvandeven.heartbeatstreamer.multidevicesearch.Activity_MultiDeviceSearchSampler.MultiDeviceSearchResultWithRSSI;
|
|
import com.rubenvandeven.heartbeatstreamer.R;
|
|
|
|
/**
|
|
* Adapter that displays MultiDeviceSearchResultWithRSSI in a List View with
|
|
* layout R.layout.layout_multidevice_searchresult
|
|
*/
|
|
public class ArrayAdapter_MultiDeviceSearchResult extends
|
|
ArrayAdapter<MultiDeviceSearchResultWithRSSI>
|
|
{
|
|
private static final int DEFAULT_MIN_RSSI = -1;
|
|
|
|
private ArrayList<MultiDeviceSearchResultWithRSSI> mData;
|
|
private String[] mDeviceTypes;
|
|
private int mMinRSSI = DEFAULT_MIN_RSSI;
|
|
|
|
public ArrayAdapter_MultiDeviceSearchResult(Context context,
|
|
ArrayList<MultiDeviceSearchResultWithRSSI> data)
|
|
{
|
|
super(context, R.layout.layout_multidevice_searchresult, data);
|
|
mData = data;
|
|
mDeviceTypes = context.getResources().getStringArray(R.array.device_types);
|
|
}
|
|
|
|
/**
|
|
* Update the display with new data for the specified position
|
|
*/
|
|
public View getView(int position, View convertView, ViewGroup parent)
|
|
{
|
|
if (convertView == null)
|
|
{
|
|
LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(
|
|
Context.LAYOUT_INFLATER_SERVICE);
|
|
convertView = inflater.inflate(R.layout.layout_multidevice_searchresult, null);
|
|
}
|
|
|
|
MultiDeviceSearchResultWithRSSI i = mData.get(position);
|
|
|
|
if (i != null)
|
|
{
|
|
TextView tv_deviceType = (TextView) convertView
|
|
.findViewById(R.id.textView_multiDeviceType);
|
|
TextView tv_deviceName = (TextView) convertView
|
|
.findViewById(R.id.textView_multiDeviceName);
|
|
ProgressBar pb_RSSI = (ProgressBar) convertView
|
|
.findViewById(R.id.progressBar_multiDeviceRSSI);
|
|
|
|
if (tv_deviceType != null)
|
|
{
|
|
tv_deviceType.setText(mDeviceTypes[i.mDevice.getAntDeviceType().ordinal()]);
|
|
}
|
|
if (tv_deviceName != null)
|
|
{
|
|
tv_deviceName.setText(i.mDevice.getDeviceDisplayName());
|
|
}
|
|
|
|
// only update once i.mRSSI value has been populated
|
|
if (pb_RSSI != null && i.mRSSI != Integer.MIN_VALUE)
|
|
{
|
|
// display RSSI data
|
|
if (pb_RSSI.getVisibility() != View.VISIBLE)
|
|
{
|
|
convertView.findViewById(R.id.label_RSSI).setVisibility(View.VISIBLE);
|
|
pb_RSSI.setVisibility(View.VISIBLE);
|
|
}
|
|
|
|
// Device is nearest it can be, cap to zero
|
|
if (i.mRSSI >= 0)
|
|
{
|
|
i.mRSSI = 0;
|
|
}
|
|
|
|
// 0 is farthest away, (- mMinRSSI) is nearest
|
|
int nearness = i.mRSSI - mMinRSSI;
|
|
|
|
// find the new farthest
|
|
if (nearness < 0)
|
|
{
|
|
mMinRSSI = i.mRSSI;
|
|
nearness = 0;
|
|
}
|
|
|
|
int display = 100 * nearness / -mMinRSSI;
|
|
pb_RSSI.setProgress(display);
|
|
}
|
|
}
|
|
|
|
return convertView;
|
|
}
|
|
}
|