package net.kismetwireless.android.smarterwifimanager;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
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 FragmentSsidBlacklist extends SmarterFragment {
private Context context;
private View mainView;
private ArrayList<SmarterSSID> lastSsidList = new ArrayList<SmarterSSID>();
private SmarterWifiServiceBinder serviceBinder;
private SsidListAdapter listAdapter;
private ListView lv;
private TextView emptyView;
private SmarterWifiService.WifiState wifiState = SmarterWifiService.WifiState.WIFI_IGNORE;
public void updateSsidList() {
ArrayList<SmarterSSID> list = serviceBinder.getSsidBlacklist();
lastSsidList.clear();
lastSsidList.addAll(list);
if (listAdapter != null) {
listAdapter.notifyDataSetChanged();
if (lastSsidList.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 wifiStateChanged(final SmarterSSID ssid, final SmarterWifiService.WifiState state,
final SmarterWifiService.WifiState controlstate, final SmarterWifiService.ControlType type) {
super.wifiStateChanged(ssid, state, controlstate, type);
Activity ma = getActivity();
if (ma != null) {
ma.runOnUiThread(new Runnable() {
@Override
public void run() {
updateSsidList();
}
});
}
wifiState = state;
}
};
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
//if (mainView == null)
mainView = inflater.inflate(R.layout.fragment_ssidblacklist, container, false);
context = getActivity().getApplicationContext();
lv = (ListView) mainView.findViewById(R.id.ssidBlacklistListview);
emptyView = (TextView) mainView.findViewById(R.id.textViewNoWifi);
listAdapter = new SsidListAdapter(context, R.layout.ssid_blacklist_entry, lastSsidList);
lv.setAdapter(listAdapter);
serviceBinder = new SmarterWifiServiceBinder(context);
serviceBinder.addCallback(callback);
serviceBinder.doBindService();
return mainView;
}
public class SsidListAdapter extends ArrayAdapter<SmarterSSID> {
private int layoutResourceId;
public SsidListAdapter(Context context, int textViewResourceId, ArrayList<SmarterSSID> items) {
super(context, textViewResourceId, items);
layoutResourceId = textViewResourceId;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
try {
final SmarterSSID 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 ssidView = (TextView) v.findViewById(R.id.ssidListSsid);
CheckBox ssidCb = (CheckBox) v.findViewById(R.id.ssidListCheck);
ssidView.setText(entry.getDisplaySsid());
ssidCb.setChecked(entry.isBlacklisted());
ssidCb.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
CheckBox cb = (CheckBox) view;
entry.setBlacklisted(!entry.isBlacklisted());
cb.setChecked(entry.isBlacklisted());
LogAlias.d("smarter", "listadapter setting " + entry.getSsid() + " to " + entry.isBlacklisted());
serviceBinder.setSsidBlacklisted(entry, entry.isBlacklisted());
listAdapter.notifyDataSetChanged();
if (entry.isBlacklisted()) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle(R.string.ignoring_dialog_network);
builder.setMessage(R.string.ignoring_dialog_description);
builder.setNegativeButton(R.string.ignoring_dialog_leave, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
});
builder.setPositiveButton(R.string.ignoring_dialog_delete, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
serviceBinder.deleteSsidTowerMap(entry);
}
});
builder.create().show();
}
}
});
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_ignore;
}
}