package net.kismetwireless.android.smarterwifimanager; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.CheckBox; import android.widget.ListView; import android.widget.TextView; import java.util.ArrayList; /** * Created by dragorn on 9/17/13. */ public class FragmentBluetoothBlacklist extends SmarterFragment { private Context context; private View mainView; private ArrayList<SmarterBluetooth> lastBtList = new ArrayList<SmarterBluetooth>(); private SmarterWifiServiceBinder serviceBinder; private BluetoothListAdapter listAdapter; private ListView lv; private TextView emptyView; public void updateBluetoothList() { ArrayList<SmarterBluetooth> bt = serviceBinder.getBluetoothBlacklist(); lastBtList.clear(); lastBtList.addAll(bt); if (listAdapter != null) { listAdapter.notifyDataSetChanged(); if (lastBtList.size() == 0) { lv.setVisibility(View.GONE); emptyView.setVisibility(View.VISIBLE); } else { lv.setVisibility(View.VISIBLE); emptyView.setVisibility(View.GONE); } } } private SmarterWifiService.SmarterServiceCallback callback = new SmarterWifiService.SmarterServiceCallback() { @Override public void bluetoothStateChanged(final SmarterWifiService.BluetoothState state) { super.bluetoothStateChanged(state); Activity ma = getActivity(); if (ma != null) { ma.runOnUiThread(new Runnable() { @Override public void run() { updateBluetoothList(); } }); } } }; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { super.onCreateView(inflater, container, savedInstanceState); // if (mainView == null) mainView = inflater.inflate(R.layout.fragment_bluetooth, container, false); context = getActivity().getApplicationContext(); lv = (ListView) mainView.findViewById(R.id.bluetoothListView); emptyView = (TextView) mainView.findViewById(R.id.textViewNoBluetooth); listAdapter = new BluetoothListAdapter(context, R.layout.bluetooth_blacklist_entry, lastBtList); lv.setAdapter(listAdapter); serviceBinder = new SmarterWifiServiceBinder(context); serviceBinder.addCallback(callback); serviceBinder.doBindService(); return mainView; } public class BluetoothListAdapter extends ArrayAdapter<SmarterBluetooth> { private int layoutResourceId; public BluetoothListAdapter(Context context, int textViewResourceId, ArrayList<SmarterBluetooth> items) { super(context, textViewResourceId, items); layoutResourceId = textViewResourceId; } @Override public View getView(int position, View convertView, ViewGroup parent) { try { final SmarterBluetooth entry = getItem(position); View v = null; if (convertView == null) { LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); v = inflater.inflate(layoutResourceId, null); } else { v = convertView; } TextView btView = (TextView) v.findViewById(R.id.btListDevice); CheckBox btCb = (CheckBox) v.findViewById(R.id.btListCheck); btView.setText(entry.getBtName()); btCb.setChecked(entry.isBlacklisted()); btCb.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { CheckBox cb = (CheckBox) view; entry.setBlacklisted(!entry.isBlacklisted()); cb.setChecked(entry.isBlacklisted()); Log.d("smarter", "listadapter setting " + entry.getBtName() + " to " + entry.isBlacklisted()); serviceBinder.setBluetoothBlacklisted(entry, entry.isBlacklisted(), false); listAdapter.notifyDataSetChanged(); } }); return v; } catch (Exception ex) { Log.e("smarter", "error", ex); return null; } } } @Override public void onPause() { super.onPause(); if (serviceBinder != null) serviceBinder.removeCallback(callback); } @Override public void onResume() { super.onResume(); if (serviceBinder != null) serviceBinder.addCallback(callback); } @Override public void onDestroy() { super.onDestroy(); if (serviceBinder != null) serviceBinder.doUnbindService(); } @Override public int getTitle() { return R.string.tab_bluetooth; } }