ServicesListAdapter.java 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. package de.tudarmstadt.informatik.hostage.ui2.adapter;
  2. import android.app.AlertDialog;
  3. import android.content.Context;
  4. import android.content.DialogInterface;
  5. import android.content.SharedPreferences;
  6. import android.os.Build;
  7. import android.view.LayoutInflater;
  8. import android.view.View;
  9. import android.view.ViewGroup;
  10. import android.widget.ArrayAdapter;
  11. import android.widget.CompoundButton;
  12. import android.widget.Switch;
  13. import android.widget.TextView;
  14. import java.util.List;
  15. import de.tudarmstadt.informatik.hostage.R;
  16. import de.tudarmstadt.informatik.hostage.commons.HelperUtils;
  17. import de.tudarmstadt.informatik.hostage.ui2.activity.MainActivity;
  18. import de.tudarmstadt.informatik.hostage.ui2.fragment.ServicesFragment;
  19. import de.tudarmstadt.informatik.hostage.ui2.model.ServicesListItem;
  20. /**
  21. * Created by Daniel Lazar on 06.02.14.
  22. */
  23. public class ServicesListAdapter extends ArrayAdapter<ServicesListItem> {
  24. private SharedPreferences mConnectionInfo;
  25. private class ViewHolder {
  26. public TextView protocolName;
  27. public TextView recordedAttacks;
  28. public Switch activated;
  29. public View circle;
  30. }
  31. private Context mActivity;
  32. private Switch mServicesSwitch;
  33. private CompoundButton.OnCheckedChangeListener mListener;
  34. private final Context context;
  35. private final List<ServicesListItem> values;
  36. int sdk = Build.VERSION.SDK_INT;
  37. public ServicesListAdapter(Context context, List<ServicesListItem> objects){
  38. super(context, R.layout.services_list_item, objects);
  39. this.context = context;
  40. this.values = objects;
  41. }
  42. public void setActivity(Context activity, Switch servicesSwitch, CompoundButton.OnCheckedChangeListener mainListener) {
  43. mActivity = activity;
  44. mServicesSwitch = servicesSwitch;
  45. mListener = mainListener;
  46. }
  47. @Override
  48. public View getView(final int position, View convertView, ViewGroup parent) {
  49. LayoutInflater inflater = (LayoutInflater) context
  50. .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  51. View rowView = convertView;
  52. ViewHolder holder = null;
  53. final ServicesListItem item = values.get(position);
  54. if(rowView == null){
  55. rowView = inflater.inflate(R.layout.services_list_item, parent, false);
  56. holder = new ViewHolder();
  57. holder.protocolName = (TextView) rowView.findViewById(R.id.services_item_name);
  58. holder.recordedAttacks = (TextView) rowView.findViewById(R.id.services_item_rec_attacks);
  59. holder.activated = (Switch) rowView.findViewById(R.id.services_item_switch);
  60. holder.circle = rowView.findViewById(R.id.services_circle);
  61. rowView.setTag(holder);
  62. } else {
  63. holder = (ViewHolder) rowView.getTag();
  64. }
  65. holder.protocolName.setText(item.protocol);
  66. holder.activated.setTag(item);
  67. this.updateStatus(item, holder);
  68. holder.activated.setOnCheckedChangeListener(
  69. new CompoundButton.OnCheckedChangeListener() {
  70. public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
  71. ServicesListItem item = (ServicesListItem) buttonView.getTag();
  72. if(!HelperUtils.isWifiConnected(mActivity)){
  73. new AlertDialog.Builder(mActivity)
  74. .setTitle(R.string.information)
  75. .setMessage(R.string.wifi_not_connected_msg)
  76. .setPositiveButton(android.R.string.ok,
  77. new DialogInterface.OnClickListener() {
  78. public void onClick(DialogInterface dialog, int which) {
  79. }
  80. })
  81. .setIcon(android.R.drawable.ic_dialog_info)
  82. .show();
  83. buttonView.setChecked(false);
  84. } else {
  85. if(isChecked){
  86. if(!MainActivity.getInstance().getHoneyService().isRunning(item.protocol)) {
  87. MainActivity.getInstance().getHoneyService().startListener(item.protocol);
  88. mServicesSwitch.setOnCheckedChangeListener(null);
  89. mServicesSwitch.setChecked(true);
  90. mServicesSwitch.setOnCheckedChangeListener(mListener);
  91. }
  92. buttonView.setChecked(true);
  93. } else {
  94. if(MainActivity.getInstance().getHoneyService().isRunning(item.protocol)){
  95. MainActivity.getInstance().getHoneyService().stopListener(item.protocol);
  96. }
  97. buttonView.setChecked(false);
  98. }
  99. }
  100. }
  101. });
  102. return rowView;
  103. }
  104. private void updateStatus(ServicesListItem item, ViewHolder holder){
  105. if(MainActivity.getInstance().getHoneyService().isRunning(item.protocol)){
  106. holder.activated.setChecked(true);
  107. if(!MainActivity.getInstance().hasProtocolAttacks(item.protocol)){
  108. if(Integer.valueOf(item.attacks) > 0) {
  109. setBackground(holder, R.drawable.services_circle_yellow);
  110. }
  111. else {
  112. setBackground(holder, R.drawable.services_circle_green);
  113. }
  114. }
  115. else {
  116. if(MainActivity.getInstance().hasProtocolAttacks(item.protocol)){
  117. setBackground(holder, R.drawable.services_circle_red);
  118. }
  119. }
  120. }
  121. else {
  122. holder.activated.setChecked(false);
  123. setBackground(holder, R.drawable.services_circle);
  124. }
  125. holder.recordedAttacks.setText(String.format(MainActivity.getContext().getResources().getString(R.string.recorded_attacks) + " %d", Integer.valueOf(item.attacks)));
  126. }
  127. private void setBackground(ViewHolder holder, int drawable){
  128. if(sdk < Build.VERSION_CODES.JELLY_BEAN){
  129. holder.circle.setBackgroundDrawable(MainActivity.getInstance().getResources().getDrawable(drawable));
  130. }
  131. else {
  132. holder.circle.setBackground(MainActivity.getInstance().getResources()
  133. .getDrawable(drawable));
  134. }
  135. }
  136. }