package andraus.bluetoothhidemu.view;
import java.util.Set;
import andraus.bluetoothhidemu.R;
import andraus.bluetoothhidemu.settings.Settings;
import andraus.bluetoothhidemu.spoof.Spoof.SpoofMode;
import android.bluetooth.BluetoothDevice;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
/**
* Custom ArrayAdapter
*
*/
public class BluetoothDeviceArrayAdapter extends ArrayAdapter<BluetoothDeviceView> {
/**
* Constructor
*
* Note: ArrayAdapter will be empty. needs to be populate afterwards.
*
* @param context
*/
public BluetoothDeviceArrayAdapter(Context context) {
super(context, R.layout.spinner_layout);
setDropDownViewResource(R.layout.spinner_dropdown_layout);
setNotifyOnChange(true);
}
/**
* Re-populates the adapter. Will clean any previous data.
*
* @param bondedDeviceSet
*/
public void rePopulate(Set<BluetoothDevice> bondedDeviceSet) {
if (!isEmpty()) {
clear();
}
//Add "null" element
add(BluetoothDeviceView.getNullBluetoothDeviceView(getContext().getResources().getString(R.string.msg_device_list_null)));
for (BluetoothDevice device: bondedDeviceSet) {
BluetoothDeviceView deviceView = new BluetoothDeviceView(device, Settings.getEmulationMode(getContext(), device));
add(deviceView);
}
sort(BluetoothDeviceView.getComparator());
}
/**
*
* @param bluetoothAddress
* @return
*/
public int getPositionByAddress(String bluetoothAddress) {
for (int i = 0; i < getCount(); i++) {
BluetoothDeviceView deviceView = getItem(i);
if (deviceView.getAddress().equals(bluetoothAddress)) {
return i;
}
}
return -1;
}
/**
* Returns the position for null element (tipically 0)
* @return
*/
public int getNullPosition() {
for (int i = 0; i < getCount(); i++) {
BluetoothDeviceView deviceView = getItem(i);
if (deviceView.isNull()) {
return i;
}
}
throw new IllegalStateException("No null value found!");
}
/**
*
*/
@Override
public void add(BluetoothDeviceView deviceView) {
if (deviceView.getSpoofMode() != SpoofMode.INVALID) {
super.add(deviceView);
}
}
/**
*
*/
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// Set spinner text to "empty" if null element is selected (disconnect option)
View view = super.getView(position, convertView, parent);
if (getItem(position).isNull()) {
((TextView) view).setText("");
}
return view;
}
}