ViewLog.java 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303
  1. package de.tudarmstadt.informatik.hostage.ui;
  2. import java.text.SimpleDateFormat;
  3. import java.util.ArrayList;
  4. import java.util.Arrays;
  5. import java.util.Calendar;
  6. import java.util.Date;
  7. import java.util.HashMap;
  8. import de.tudarmstadt.informatik.hostage.R;
  9. import de.tudarmstadt.informatik.hostage.logging.DatabaseHandler;
  10. import de.tudarmstadt.informatik.hostage.logging.Record;
  11. import de.tudarmstadt.informatik.hostage.logging.SQLLogger;
  12. import android.annotation.SuppressLint;
  13. import android.app.Activity;
  14. import android.app.AlertDialog;
  15. import android.app.DatePickerDialog;
  16. import android.app.Dialog;
  17. import android.content.Context;
  18. import android.content.DialogInterface;
  19. import android.content.Intent;
  20. import android.content.SharedPreferences;
  21. import android.content.SharedPreferences.Editor;
  22. import android.os.Build;
  23. import android.os.Bundle;
  24. import android.preference.PreferenceManager;
  25. import android.support.v4.app.FragmentTransaction;
  26. import android.util.Log;
  27. import android.view.Gravity;
  28. import android.view.Menu;
  29. import android.view.MenuItem;
  30. import android.view.View;
  31. import android.widget.DatePicker;
  32. import android.widget.LinearLayout;
  33. import android.widget.TableLayout;
  34. import android.widget.TableRow;
  35. import android.widget.TextView;
  36. import android.widget.TimePicker;
  37. import android.widget.Toast;
  38. public class ViewLog extends Activity {
  39. DatabaseHandler dbh;
  40. private final Context context = this;
  41. private final SimpleDateFormat sdf = new SimpleDateFormat("MMM dd,yyyy HH:mm");
  42. @Override
  43. protected void onCreate(Bundle savedInstanceState) {
  44. super.onCreate(savedInstanceState);
  45. setContentView(R.layout.activity_viewlog);
  46. dbh = new DatabaseHandler(getApplicationContext());
  47. initStatistic();
  48. }
  49. @Override
  50. public boolean onCreateOptionsMenu(Menu menu) {
  51. getMenuInflater().inflate(R.menu.main, menu);
  52. return true;
  53. }
  54. @Override
  55. public boolean onOptionsItemSelected(MenuItem item) {
  56. // Handle item selection
  57. switch (item.getItemId()) {
  58. case R.id.action_settings:
  59. startActivity(new Intent(this, SettingsActivity.class));
  60. break;
  61. case R.id.action_about:
  62. startActivity(new Intent(this, AboutActivity.class));
  63. break;
  64. default:
  65. }
  66. return super.onOptionsItemSelected(item);
  67. }
  68. public void exportDatabase(View view) {
  69. AlertDialog.Builder builder = new AlertDialog.Builder(this);
  70. builder.setTitle(R.string.export_dialog_title);
  71. builder.setItems(R.array.format, new DialogInterface.OnClickListener() {
  72. public void onClick(DialogInterface dialog, int position) {
  73. SQLLogger logger = new SQLLogger(context);
  74. logger.exportDatabase(position);
  75. }
  76. });
  77. builder.create();
  78. builder.show();
  79. }
  80. public void uploadDatabase(View view) {
  81. SQLLogger log = new SQLLogger(this);
  82. log.uploadDatabase();
  83. }
  84. public void showLog(View view) {
  85. startActivity(new Intent(this, ViewLogTable.class));
  86. }
  87. @SuppressLint("NewApi")
  88. public void deleteLog(View view) {
  89. AlertDialog.Builder builder = new AlertDialog.Builder(this);
  90. builder.setTitle(R.string.delete_dialog_title);
  91. builder.setItems(R.array.delete_criteria,
  92. new DialogInterface.OnClickListener() {
  93. public void onClick(DialogInterface dialog, int position) {
  94. switch (position) {
  95. case 0:
  96. deleteByBSSID();
  97. break;
  98. case 1:
  99. deleteByDate();
  100. break;
  101. case 2:
  102. deleteAll();
  103. }
  104. }
  105. });
  106. builder.create();
  107. builder.show();
  108. }
  109. private void deleteByDate() {
  110. showDialog(0);
  111. }
  112. private DatePickerDialog.OnDateSetListener pDateSetListener = new DatePickerDialog.OnDateSetListener() {
  113. public void onDateSet(DatePicker view, int year, int monthOfYear,
  114. int dayOfMonth) {
  115. deleteByDate(year, monthOfYear, dayOfMonth);
  116. }
  117. };
  118. @Override
  119. protected Dialog onCreateDialog(int id) {
  120. switch (id) {
  121. case 0:
  122. final Calendar cal = Calendar.getInstance();
  123. int pYear = cal.get(Calendar.YEAR);
  124. int pMonth = cal.get(Calendar.MONTH);
  125. int pDay = cal.get(Calendar.DAY_OF_MONTH);
  126. return new DatePickerDialog(this, pDateSetListener, pYear, pMonth,
  127. pDay);
  128. }
  129. return null;
  130. }
  131. private void deleteByDate(int year, int monthOfYear, int dayOfMonth) {
  132. TimePicker timePicker = new TimePicker(context);
  133. final Calendar calendar = Calendar.getInstance();
  134. calendar.set(year, monthOfYear, dayOfMonth,
  135. timePicker.getCurrentHour(), timePicker.getCurrentMinute(), 0);
  136. AlertDialog.Builder builder = new AlertDialog.Builder(this);
  137. builder.setTitle(R.string.dialog_clear_database_date)
  138. .setMessage(sdf.format(calendar.getTime()))
  139. .setPositiveButton(R.string.delete,
  140. new DialogInterface.OnClickListener() {
  141. @SuppressLint("NewApi")
  142. public void onClick(DialogInterface dialog, int id) {
  143. long time = calendar.getTimeInMillis();
  144. // Delete Data
  145. dbh.deleteByDate(time);
  146. Toast.makeText(getApplicationContext(),
  147. "Data sets deleted!",
  148. Toast.LENGTH_SHORT).show();
  149. // Recreate the activity
  150. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
  151. recreate();
  152. } else {
  153. Intent intent = getIntent();
  154. finish();
  155. startActivity(intent);
  156. }
  157. }
  158. })
  159. .setNegativeButton(R.string.cancel,
  160. new DialogInterface.OnClickListener() {
  161. public void onClick(DialogInterface dialog, int id) {
  162. // User cancelled the dialog
  163. }
  164. });
  165. // Create the AlertDialog object
  166. builder.create();
  167. builder.show();
  168. }
  169. private void deleteByBSSID() {
  170. AlertDialog.Builder builder = new AlertDialog.Builder(this);
  171. final String[] bssidArray = dbh.getAllBSSIDS();
  172. for(int i = 0; i < bssidArray.length; i++){
  173. bssidArray[i] = bssidArray[i] + " (" + dbh.getSSID(bssidArray[i]) +")";
  174. }
  175. builder.setTitle(R.string.delete_dialog_title);
  176. builder.setItems(bssidArray, new DialogInterface.OnClickListener() {
  177. @SuppressLint("NewApi")
  178. public void onClick(DialogInterface dialog, int position) {
  179. dbh.deleteByBSSID(bssidArray[position]);
  180. Toast.makeText(
  181. getApplicationContext(),
  182. "All entries with bssid '" + bssidArray[position]
  183. + "' deleted.", Toast.LENGTH_SHORT).show();
  184. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
  185. recreate();
  186. } else {
  187. Intent intent = getIntent();
  188. finish();
  189. startActivity(intent);
  190. }
  191. }
  192. });
  193. builder.create();
  194. builder.show();
  195. }
  196. private void deleteAll() {
  197. AlertDialog.Builder builder = new AlertDialog.Builder(this);
  198. builder.setMessage(R.string.dialog_clear_database)
  199. .setPositiveButton(R.string.clear,
  200. new DialogInterface.OnClickListener() {
  201. @SuppressLint("NewApi")
  202. public void onClick(DialogInterface dialog, int id) {
  203. // Clear all Data
  204. dbh.clearData();
  205. SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(context);
  206. Editor editor = pref.edit();
  207. editor.putInt("ATTACK_ID_COUNTER", 0);
  208. editor.putInt("LAST_UPLOADED_ATTACK_ID", -1);
  209. editor.commit();
  210. Toast.makeText(getApplicationContext(),
  211. "Database cleared!", Toast.LENGTH_SHORT)
  212. .show();
  213. // Recreate the activity
  214. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
  215. recreate();
  216. } else {
  217. Intent intent = getIntent();
  218. finish();
  219. startActivity(intent);
  220. }
  221. }
  222. })
  223. .setNegativeButton(R.string.cancel,
  224. new DialogInterface.OnClickListener() {
  225. public void onClick(DialogInterface dialog, int id) {
  226. // User cancelled the dialog
  227. }
  228. });
  229. // Create the AlertDialog object
  230. builder.create();
  231. builder.show();
  232. }
  233. private void initStatistic() {
  234. TableLayout table = (TableLayout) findViewById(R.id.layoutContainer);
  235. ArrayList<String> protocols = new ArrayList<String>();
  236. protocols.add("Total");
  237. protocols.addAll(Arrays.asList(getResources().getStringArray(
  238. R.array.protocols)));
  239. for (String protocol : protocols) {
  240. TableRow row = new TableRow(this);
  241. TextView protocolName = new TextView(this);
  242. protocolName.setBackgroundResource(R.color.dark_grey);
  243. protocolName.setText(protocol);
  244. protocolName.setTextAppearance(this,
  245. android.R.style.TextAppearance_Medium);
  246. protocolName.setPadding(6, 0, 0, 0);
  247. row.addView(protocolName);
  248. TextView value = new TextView(this);
  249. value.setBackgroundResource(R.color.light_grey);
  250. value.setTextAppearance(this, android.R.style.TextAppearance_Medium);
  251. value.setGravity(Gravity.RIGHT);
  252. value.setPadding(3, 0, 3, 0);
  253. row.addView(value);
  254. if (protocol.equals("Total")) {
  255. value.setText("" + dbh.getAttackCount());
  256. } else {
  257. value.setText("" + dbh.getAttackPerProtokolCount(protocol));
  258. }
  259. table.addView(row);
  260. }
  261. setFirstAndLastAttack();
  262. }
  263. private void setFirstAndLastAttack() {
  264. Record firstAttack = dbh.getRecordOfAttackId(dbh.getSmallestAttackId());
  265. Record lastAttack = dbh.getRecordOfAttackId(dbh.getHighestAttackId());
  266. if (firstAttack != null) {
  267. Date resultdate = new Date(firstAttack.getTimestamp());
  268. TextView text = (TextView) findViewById(R.id.textFirstAttackValue);
  269. text.setText(sdf.format(resultdate));
  270. text = (TextView) findViewById(R.id.textLastAttackValue);
  271. resultdate = new Date(lastAttack.getTimestamp());
  272. text.setText(sdf.format(resultdate));
  273. } else {
  274. TextView text = (TextView) findViewById(R.id.textFirstAttackValue);
  275. text.setText("-");
  276. text = (TextView) findViewById(R.id.textLastAttackValue);
  277. text.setText("-");
  278. }
  279. }
  280. }