RecordDetailFragment.java 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. package de.tudarmstadt.informatik.hostage.ui2.fragment;
  2. import java.util.ArrayList;
  3. import java.util.Date;
  4. import android.app.Activity;
  5. import android.app.AlertDialog;
  6. import android.content.DialogInterface;
  7. import android.os.Bundle;
  8. import android.text.format.DateFormat;
  9. import android.view.LayoutInflater;
  10. import android.view.Menu;
  11. import android.view.MenuInflater;
  12. import android.view.MotionEvent;
  13. import android.view.View;
  14. import android.view.ViewGroup;
  15. import android.widget.Button;
  16. import android.widget.LinearLayout;
  17. import android.widget.ScrollView;
  18. import android.widget.TextView;
  19. import de.tudarmstadt.informatik.hostage.R;
  20. import de.tudarmstadt.informatik.hostage.deprecated.UglyDbHelper;
  21. import de.tudarmstadt.informatik.hostage.logging.Record;
  22. import de.tudarmstadt.informatik.hostage.ui.LogFilter;
  23. import de.tudarmstadt.informatik.hostage.ui2.activity.MainActivity;
  24. import de.tudarmstadt.informatik.hostage.logging.MessageRecord;
  25. /**
  26. * Created by Julien on 02.03.14.
  27. */
  28. public class RecordDetailFragment extends UpNavigatibleFragment {
  29. private class Location {
  30. private double longitude;
  31. private double latitude;
  32. private float accuracy;
  33. public double getLatitude() {
  34. return latitude;
  35. }
  36. public void setLatitude(double latitude) {
  37. this.latitude = latitude;
  38. }
  39. public float getAccuracy() {
  40. return accuracy;
  41. }
  42. public void setAccuracy(float accuracy) {
  43. this.accuracy = accuracy;
  44. }
  45. public double getLongitude() {
  46. return this.longitude;
  47. }
  48. public void setLongitude(double longitude) {
  49. this.longitude = longitude;
  50. }
  51. public Location() {
  52. super();
  53. }
  54. public Location(double latitude, double longitude, float accuracy) {
  55. super();
  56. this.latitude = latitude;
  57. this.longitude = longitude;
  58. this.accuracy = accuracy;
  59. }
  60. }
  61. private Record record;
  62. private UglyDbHelper dbh;
  63. private View rootView;
  64. private LayoutInflater mInflater;
  65. private ScrollView mScrollView;
  66. private LinearLayout mRecordOverviewConversation;
  67. private TextView mRecordDetailsTextSsid;
  68. private TextView mRecordDetailsTextBssid;
  69. private TextView mRecordDetailsTextRemoteip;
  70. private TextView mRecordDetailsTextProtocol;
  71. private Button mRecordDeleteButton;
  72. public void setRecord(Record rec) {
  73. this.record = rec;
  74. }
  75. public Record getRecord() {
  76. return this.record;
  77. }
  78. public int getLayoutId() {
  79. // return R.layout.fragment_record_detail;
  80. return R.layout.fragment_record_overview;
  81. }
  82. public void onCreate(Bundle savedInstanceState) {
  83. super.onCreate(savedInstanceState);
  84. setHasOptionsMenu(true);
  85. }
  86. public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
  87. super.onCreateView(inflater, container, savedInstanceState);
  88. mInflater = inflater;
  89. getActivity().setTitle(record.getSsid());
  90. this.dbh = new UglyDbHelper(this.getActivity().getBaseContext());
  91. this.rootView = inflater.inflate(this.getLayoutId(), container, false);
  92. this.assignViews(rootView);
  93. this.configurateRootView(rootView);
  94. return rootView;
  95. }
  96. public void onStart() {
  97. super.onStart();
  98. }
  99. private void assignViews(View view) {
  100. mScrollView = (ScrollView) view.findViewById(R.id.scrollView);
  101. mRecordOverviewConversation = (LinearLayout) view.findViewById(R.id.record_overview_conversation);
  102. mRecordDetailsTextSsid = (TextView) view.findViewById(R.id.record_details_text_ssid);
  103. mRecordDetailsTextBssid = (TextView) view.findViewById(R.id.record_details_text_bssid);
  104. mRecordDetailsTextRemoteip = (TextView) view.findViewById(R.id.record_details_text_remoteip);
  105. mRecordDetailsTextProtocol = (TextView) view.findViewById(R.id.record_details_text_protocol);
  106. mRecordDeleteButton = (Button) view.findViewById(R.id.record_delete_button);
  107. }
  108. private void configurateRootView(View rootView) {
  109. mRecordDetailsTextBssid.setText(record.getBssid());
  110. mRecordDetailsTextSsid.setText(record.getSsid());
  111. if (record.getRemoteIP() != null)
  112. mRecordDetailsTextRemoteip.setText(record.getRemoteIP() + ":" + record.getRemotePort());
  113. mRecordDetailsTextProtocol.setText(record.getProtocol());
  114. ArrayList<Record> conversation = this.dbh.getConversationForAttackID(record.getAttack_id());
  115. for (Record r : conversation) {
  116. View row;
  117. String from = r.getLocalIP() == null ? "-" : r.getLocalIP() + ":" + r.getLocalPort();
  118. String to = r.getRemoteIP() == null ? "-" : r.getRemoteIP() + ":" + r.getRemotePort();
  119. if (r.getType() == MessageRecord.TYPE.SEND) {
  120. row = mInflater.inflate(R.layout.fragment_record_conversation_sent, null);
  121. } else {
  122. row = mInflater.inflate(R.layout.fragment_record_conversation_received, null);
  123. String tmp = from;
  124. from = to;
  125. to = tmp;
  126. }
  127. TextView conversationInfo = (TextView) row.findViewById(R.id.record_conversation_info);
  128. TextView conversationContent = (TextView) row.findViewById(R.id.record_conversation_content);
  129. conversationContent.setOnTouchListener(new View.OnTouchListener() {
  130. @Override
  131. public boolean onTouch(final View v, final MotionEvent motionEvent) {
  132. if (v.getId() == R.id.record_conversation_content) {
  133. v.getParent().requestDisallowInterceptTouchEvent(true);
  134. switch (motionEvent.getAction() & MotionEvent.ACTION_MASK) {
  135. case MotionEvent.ACTION_UP:
  136. v.getParent().requestDisallowInterceptTouchEvent(false);
  137. break;
  138. }
  139. }
  140. return false;
  141. }
  142. });
  143. Date date = new Date(r.getTimestamp());
  144. conversationInfo.setText(String.format(getString(R.string.record_details_info), from, to, getDateAsString(date), getTimeAsString(date)));
  145. if (r.getPacket() != null)
  146. conversationContent.setText(r.getPacket());
  147. mRecordOverviewConversation.addView(row);
  148. }
  149. mRecordDeleteButton.setOnClickListener(new View.OnClickListener() {
  150. @Override
  151. public void onClick(View v) {
  152. Activity activity = getActivity();
  153. if (activity == null) {
  154. return;
  155. }
  156. new AlertDialog.Builder(getActivity())
  157. .setTitle(android.R.string.dialog_alert_title)
  158. .setMessage(R.string.record_details_confirm_delete)
  159. .setPositiveButton(R.string.yes,
  160. new DialogInterface.OnClickListener() {
  161. public void onClick(DialogInterface dialog,
  162. int which) {
  163. dbh.deleteByAttackID(record.getAttack_id());
  164. // TODO: just navigate back...
  165. RecordOverviewFragment recordOverviewFragment = new RecordOverviewFragment();
  166. recordOverviewFragment.setFilter(new LogFilter());
  167. recordOverviewFragment.setGroupKey("Protocol");
  168. MainActivity.getInstance().injectFragment(recordOverviewFragment, false);
  169. }
  170. }
  171. ).setNegativeButton(R.string.no, null)
  172. .setIcon(android.R.drawable.ic_dialog_alert).show();
  173. }
  174. });
  175. }
  176. /*****************************
  177. *
  178. * Date Transform
  179. *
  180. * ***************************/
  181. private String getDateAsString(Date date) {
  182. return DateFormat.getDateFormat(getActivity()).format(date);
  183. }
  184. private String getTimeAsString(Date date) {
  185. return DateFormat.getTimeFormat(getActivity()).format(date);
  186. }
  187. public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
  188. super.onCreateOptionsMenu(menu, inflater);
  189. }
  190. }