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.os.Handler;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import java.util.ArrayList;
/**
* Created by dragorn on 9/17/13.
*/
public class FragmentLearned extends SmarterFragment {
private Context context;
private View mainView;
private ArrayList<SmarterSSID> lastSsidList = new ArrayList<SmarterSSID>();
private SmarterWifiServiceBinder serviceBinder;
private LearnedSsidListAdapter listAdapter;
private ListView lv;
private TextView emptyView;
private View forgetView, forgetSeparator;
private Handler timeHandler = new Handler();
private void updateTowerList() {
ArrayList<SmarterSSID> ssids = serviceBinder.getSsidTowerlist();
if (ssids != null) {
// Log.d("smarter", "ssid list size" + ssids.size());
lastSsidList.clear();
lastSsidList.addAll(ssids);
listAdapter.notifyDataSetChanged();
}
if (lastSsidList.size() <= 0) {
emptyView.setVisibility(View.VISIBLE);
lv.setVisibility(View.GONE);
} else {
emptyView.setVisibility(View.GONE);
lv.setVisibility(View.VISIBLE);
}
}
private Runnable updateTowerRunnable = new Runnable() {
@Override
public void run() {
updateTowerList();
timeHandler.postDelayed(this, 1000);
}
};
private SmarterWifiService.SmarterServiceCallback serviceCallback = new SmarterWifiService.SmarterServiceCallback() {
@Override
public void wifiStateChanged(SmarterSSID ssid, SmarterWifiService.WifiState state,
final SmarterWifiService.WifiState controlstate,
final SmarterWifiService.ControlType type) {
super.wifiStateChanged(ssid, state, controlstate, type);
Activity ma = getActivity();
if (ma == null)
return;
ma.runOnUiThread(new Runnable() {
@Override
public void run() {
if (controlstate == SmarterWifiService.WifiState.WIFI_ON && type == SmarterWifiService.ControlType.CONTROL_TOWER &&
forgetView != null) {
forgetView.setVisibility(View.VISIBLE);
forgetSeparator.setVisibility(View.VISIBLE);
} else {
forgetView.setVisibility(View.GONE);
forgetSeparator.setVisibility(View.GONE);
}
}
});
}
};
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
// if (mainView == null)
mainView = inflater.inflate(R.layout.fragment_learnedssid, container, false);
context = getActivity().getApplicationContext();
lv = (ListView) mainView.findViewById(R.id.learnedListView);
emptyView = (TextView) mainView.findViewById(R.id.textViewNoneLearned);
listAdapter = new LearnedSsidListAdapter(context, R.layout.ssid_learnlist_entry, lastSsidList);
lv.setAdapter(listAdapter);
serviceBinder = new SmarterWifiServiceBinder(context);
serviceBinder.addCallback(serviceCallback);
forgetView = (View) mainView.findViewById(R.id.forget);
forgetSeparator = (View) mainView.findViewById(R.id.forgetSeparator);
forgetView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
serviceBinder.deleteCurrentTower();
}
});
serviceBinder.doCallAndBindService(new SmarterWifiServiceBinder.BinderCallback() {
@Override
public void run(SmarterWifiServiceBinder b) {
if (!isAdded())
return;
Activity a = getActivity();
if (a == null)
return;
a.runOnUiThread(new Runnable() {
@Override
public void run() {
updateTowerRunnable.run();
}
});
}
});
return mainView;
}
public class LearnedSsidListAdapter extends ArrayAdapter<SmarterSSID> {
private int layoutResourceId;
public LearnedSsidListAdapter(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);
TextView towerView = (TextView) v.findViewById(R.id.ssidListTower);
ImageView trashImage = (ImageView) v.findViewById(R.id.ssidListDelete);
ssidView.setText(entry.getDisplaySsid());
towerView.setText("Learned " + Integer.toString(entry.getNumTowers()) + " towers");
trashImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle(R.string.delete_dialog_title);
builder.setMessage(R.string.delete_learned_message);
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
});
builder.setPositiveButton("Delete", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
serviceBinder.deleteSsidTowerMap(entry);
lastSsidList = serviceBinder.getSsidTowerlist();
listAdapter.clear();
listAdapter.addAll(lastSsidList);
}
});
builder.create().show();
}
});
return v;
} catch (Exception ex) {
Log.e("smarter", "error", ex);
return null;
}
}
}
@Override
public void onPause() {
super.onPause();
timeHandler.removeCallbacks(updateTowerRunnable);
}
@Override
public void onResume() {
super.onResume();
// Log.d("smarter", "fragmentlearned onresume");
updateTowerRunnable.run();
}
@Override
public void onDestroy() {
super.onDestroy();
timeHandler.removeCallbacks(updateTowerRunnable);
if (serviceBinder != null)
serviceBinder.doUnbindService();
}
@Override
public int getTitle() {
return R.string.tab_learned;
}
}