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