From 48d36c778c782118b39dde8216b55b66964d434c Mon Sep 17 00:00:00 2001
From: santimunin <noreply@pandorafms.org>
Date: Fri, 1 Jun 2012 16:56:35 +0000
Subject: [PATCH] 2012-06-01 Santiago Munin <burnin1@gmail.com> 	*
 AndroidManifest.xml: Added IncidenList (new activity) 	*
 src/pandroid_event_viewer/pandorafms/IncidentListItem.java: Added, value
 object of incidents. 	*
 src/pandroid_event_viewer/pandorafms/IncidentList.java: New activity. It will
 show all incidents. 	* src/pandroid_event_viewer/pandorafms/Options.java:
 Little refactoring. 	* src/pandroid_event_viewer/pandorafms/EventList.java:
 Deprecated function removed. 	* res/layout/item_list_incident_layout.xml:
 Layout of IncidentList items. 	* res/values/strings.xml: Added new entries.

git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@6405 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
---
 .../pandroid_event_viewer/AndroidManifest.xml |   2 +-
 extras/pandroid_event_viewer/ChangeLog        |  10 +
 .../res/layout/item_list_incident_layout.xml  | 110 +++++++
 .../res/values/strings.xml                    |   2 +
 .../pandorafms/EventList.java                 |  26 --
 .../pandorafms/IncidentList.java              | 271 ++++++++++++++++++
 .../pandorafms/IncidentListItem.java          |  27 ++
 .../pandorafms/Options.java                   |   4 +-
 8 files changed, 423 insertions(+), 29 deletions(-)
 create mode 100644 extras/pandroid_event_viewer/res/layout/item_list_incident_layout.xml
 create mode 100644 extras/pandroid_event_viewer/src/pandroid_event_viewer/pandorafms/IncidentList.java
 create mode 100644 extras/pandroid_event_viewer/src/pandroid_event_viewer/pandorafms/IncidentListItem.java

diff --git a/extras/pandroid_event_viewer/AndroidManifest.xml b/extras/pandroid_event_viewer/AndroidManifest.xml
index 79a2572fc3..fa6b59b733 100644
--- a/extras/pandroid_event_viewer/AndroidManifest.xml
+++ b/extras/pandroid_event_viewer/AndroidManifest.xml
@@ -79,7 +79,7 @@
             android:label="@string/pandroid_event_viewer_str"
             android:theme="@android:style/Theme.Dialog" >
         </activity>
-
+		<activity android:name=".IncidentList"/>
         <service android:name=".PandroidEventviewerService" >
         </service>
 
diff --git a/extras/pandroid_event_viewer/ChangeLog b/extras/pandroid_event_viewer/ChangeLog
index c17bef9b41..7c15f34868 100644
--- a/extras/pandroid_event_viewer/ChangeLog
+++ b/extras/pandroid_event_viewer/ChangeLog
@@ -1,3 +1,13 @@
+2012-06-01 Santiago Munín <burnin1@gmail.com>
+	* AndroidManifest.xml: Added IncidenList (new activity)
+	* src/pandroid_event_viewer/pandorafms/IncidentListItem.java: Added, value object of incidents.
+	* src/pandroid_event_viewer/pandorafms/IncidentList.java: New activity. It will show all incidents.
+	* src/pandroid_event_viewer/pandorafms/Options.java: Little refactoring.
+	* src/pandroid_event_viewer/pandorafms/EventList.java: Deprecated function removed.
+	* res/layout/item_list_incident_layout.xml: Layout of IncidentList items.
+	* res/values/strings.xml: Added new entries.
+
+
 2012-06-01 Santiago Munín <burnin1@gmail.com>
 	* Little changes on the whole app: Fixed some Lint errors.
 
diff --git a/extras/pandroid_event_viewer/res/layout/item_list_incident_layout.xml b/extras/pandroid_event_viewer/res/layout/item_list_incident_layout.xml
new file mode 100644
index 0000000000..6e2e95a556
--- /dev/null
+++ b/extras/pandroid_event_viewer/res/layout/item_list_incident_layout.xml
@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+// Pandora FMS - http://pandorafms.com
+// ==================================================
+// Copyright (c) 2005-2011 Artica Soluciones Tecnologicas
+// Please see http://pandorafms.org for full contribution list
+
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public License
+// as published by the Free Software Foundation; version 2
+
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details. 
+-->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/item_linear_layout"
+    android:layout_width="fill_parent"
+    android:layout_height="fill_parent"
+    android:orientation="vertical" >
+
+    <RelativeLayout
+        android:id="@+id/content_incident_item"
+        android:layout_width="wrap_content"
+        android:layout_height="0dp"
+        android:layout_weight="1" >
+
+        <TextView
+            android:id="@+id/incident_name"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content" />
+
+        <LinearLayout
+            android:layout_width="fill_parent"
+            android:layout_height="wrap_content"
+            android:layout_below="@id/incident_name"
+            android:orientation="horizontal" >
+
+            <TextView
+                android:id="@+id/incident_agent"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_weight="0"
+                android:textSize="10sp" />
+
+            <TextView
+                android:id="@+id/incident_last_update_timestamp"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_weight="0"
+                android:textSize="10sp" />
+        </LinearLayout>
+    </RelativeLayout>
+
+    <Button
+        android:id="@+id/button_load_more_incidents"
+        android:layout_width="fill_parent"
+        android:layout_height="wrap_content"
+        android:text="@string/load_more_events_button_str"
+        android:visibility="gone" />
+
+    <LinearLayout
+        android:id="@+id/loading_more_incidents"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:orientation="horizontal"
+        android:visibility="gone" >
+
+        <ProgressBar
+            style="?android:attr/progressBarStyleSmall"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:paddingRight="10dip" />
+
+        <TextView
+            android:layout_width="fill_parent"
+            android:layout_height="wrap_content"
+            android:text="@string/loading_label_str"
+            android:textStyle="bold" />
+    </LinearLayout>
+
+    <LinearLayout
+        xmlns:android="http://schemas.android.com/apk/res/android"
+        android:id="@+id/incident_extra_info"
+        android:layout_width="fill_parent"
+        android:layout_height="fill_parent"
+        android:background="#FFFFFF"
+        android:orientation="vertical"
+        android:visibility="gone" >
+
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="@string/description" />
+
+        <TextView
+            android:id="@+id/incident_description"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="@string/description" />
+
+        <Button
+            android:id="@+id/incident_close_button"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="@string/incident_close_button" />
+    </LinearLayout>
+
+</LinearLayout>
\ No newline at end of file
diff --git a/extras/pandroid_event_viewer/res/values/strings.xml b/extras/pandroid_event_viewer/res/values/strings.xml
index 95fd59ae5e..4bab07375f 100644
--- a/extras/pandroid_event_viewer/res/values/strings.xml
+++ b/extras/pandroid_event_viewer/res/values/strings.xml
@@ -105,4 +105,6 @@
 	<string name="artica_copyright">Copyright (&#169;) 2011 Artica</string>
 	<string name="dont_show_again">Don\'t show again</string>
 	<string name="pandorafms_logo_description">PandoraFMS\'s logo</string>
+	<string name="description">Description</string>
+	<string name="incident_close_button">Close incident</string>
 </resources>
\ No newline at end of file
diff --git a/extras/pandroid_event_viewer/src/pandroid_event_viewer/pandorafms/EventList.java b/extras/pandroid_event_viewer/src/pandroid_event_viewer/pandorafms/EventList.java
index 253a02dfdf..b8513a2d54 100644
--- a/extras/pandroid_event_viewer/src/pandroid_event_viewer/pandorafms/EventList.java
+++ b/extras/pandroid_event_viewer/src/pandroid_event_viewer/pandorafms/EventList.java
@@ -200,32 +200,6 @@ public class EventList extends ListActivity {
 		}
 	}
 
-	/**
-	 * Sets the group image on event list.
-	 * 
-	 * @param view
-	 *            Parent view.
-	 * @param group_icon
-	 *            Group icon.
-	 * @param id
-	 *            Group's ImageView id.
-	 */
-	/*
-	 * private void setImageGroup(View view, String group_icon, int id) {
-	 * ImageView imgview = (ImageView) view.findViewById(id); Bitmap img;
-	 * 
-	 * SharedPreferences preferences = getApplicationContext()
-	 * .getSharedPreferences( getApplicationContext().getString(
-	 * R.string.const_string_preferences), Activity.MODE_PRIVATE);
-	 * 
-	 * String url = preferences.getString("url", "");
-	 * 
-	 * img = Core.downloadImage(url + "/images/groups_small/" + group_icon +
-	 * ".png");
-	 * 
-	 * if (img != null) { imgview.setImageBitmap(img); } }
-	 */
-
 	private String getImageGroupUrl(String group_icon) {
 		SharedPreferences preferences = getApplicationContext()
 				.getSharedPreferences(
diff --git a/extras/pandroid_event_viewer/src/pandroid_event_viewer/pandorafms/IncidentList.java b/extras/pandroid_event_viewer/src/pandroid_event_viewer/pandorafms/IncidentList.java
new file mode 100644
index 0000000000..41d2b8a80d
--- /dev/null
+++ b/extras/pandroid_event_viewer/src/pandroid_event_viewer/pandorafms/IncidentList.java
@@ -0,0 +1,271 @@
+/*
+Pandora FMS - http://pandorafms.com
+
+==================================================
+Copyright (c) 2005-2011 Artica Soluciones Tecnologicas
+Please see http://pandorafms.org for full contribution list
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public License
+as published by the Free Software Foundation; version 2
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+ */
+package pandroid_event_viewer.pandorafms;
+
+import java.util.ArrayList;
+import java.util.List;
+import android.app.ListActivity;
+import android.content.Context;
+import android.graphics.Color;
+import android.os.AsyncTask;
+import android.os.Bundle;
+import android.text.Html;
+import android.text.method.LinkMovementMethod;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.View.OnClickListener;
+import android.widget.BaseAdapter;
+import android.widget.Button;
+import android.widget.LinearLayout;
+import android.widget.ListView;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
+
+/**
+ * Activity where incidents are displayed.
+ * 
+ * @author Santiago Munín González
+ * 
+ */
+public class IncidentList extends ListActivity {
+	private ListView lv;
+	private MyIncidentListAdapter la;
+	private boolean loadInProgress;
+	private static String TAG = "IncidentList";
+	private List<IncidentListItem> incidents = new ArrayList<IncidentListItem>();
+	private int newIncidents;
+	private int offset, pagination;
+
+	@Override
+	protected void onCreate(Bundle savedInstanceState) {
+		super.onCreate(savedInstanceState);
+		setContentView(R.layout.list_view_layout);
+		offset = 0;
+		pagination = 0;
+		la = new MyIncidentListAdapter(getBaseContext());
+		this.toggleLoadingLayout();
+		lv = (ListView) findViewById(android.R.id.list);
+		lv.setAdapter(la);
+		// TODO broadcast receiver went here
+		this.toggleLoadingLayout();
+		loadIncidents();
+		this.toggleLoadingLayout();
+	}
+
+	/**
+	 * Shows loading information.
+	 */
+	private void toggleLoadingLayout() {
+		LinearLayout layout;
+
+		layout = (LinearLayout) findViewById(R.id.empty_list_layout);
+		layout.setVisibility(LinearLayout.GONE);
+
+		layout = (LinearLayout) findViewById(R.id.loading_layout);
+
+		if (loadInProgress) {
+			layout.setVisibility(LinearLayout.VISIBLE);
+		} else {
+			layout.setVisibility(LinearLayout.GONE);
+		}
+	}
+	/**
+	 * Loads incidents.
+	 *
+	 */
+	private void loadIncidents() {
+		la.showLoadingEvents = true;
+		new GetIncidentsTask().execute((Void)null);
+	}
+	private class GetIncidentsTask extends AsyncTask<Void, Void, Void> {
+		List<IncidentListItem> list = new ArrayList<IncidentListItem>();
+		@Override
+		protected Void doInBackground(Void... params) {
+			incidents = new ArrayList<IncidentListItem>();
+			//TODO just a tests
+			IncidentListItem i = new IncidentListItem();
+			i.title = "Test";
+			i.description = "asdadsadads";
+			i.timestamp = "ASDD";
+			i.statusImage = "http://www.limpiatumundo.com/imagenes/circle_blue.png";
+			list.add(i);
+			i = new IncidentListItem();
+			i.title = "Test2";
+			list.add(i);
+			
+			return null;
+		}
+		@Override
+		protected void onPostExecute(Void result) {
+			super.onPostExecute(result);
+			incidents.clear();
+			incidents.addAll(list);
+			la.notifyDataSetChanged();
+		}
+		
+	}
+	/**
+	 * Private adapter (incident list).
+	 * 
+	 * @author Santiago Munín González
+	 * 
+	 */
+	private class MyIncidentListAdapter extends BaseAdapter {
+		private Context mContext;
+		public boolean showLoadingEvents;
+
+		public MyIncidentListAdapter(Context c) {
+			super();
+			mContext = c;
+			showLoadingEvents = false;
+			
+		}
+
+		@Override
+		public int getCount() {
+			// TODO +1?
+			return incidents.size()+1;
+		}
+
+		@Override
+		public Object getItem(int position) {
+			return null;
+		}
+
+		@Override
+		public long getItemId(int position) {
+			return 0;
+		}
+
+		@Override
+		public View getView(int position, View convertView, ViewGroup parent) {
+			View view;
+
+			LayoutInflater inflater = (LayoutInflater) mContext
+					.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+			view = inflater.inflate(R.layout.item_list_incident_layout, null);
+			view.setOnClickListener(new OnIncidentClickListener(position));
+			// If the end of the list.
+			if (incidents.size() == position) {
+				// Show button to get more events
+				if ((!loadInProgress) && (newIncidents != 0)) {
+					if (showLoadingEvents) {
+						LinearLayout layout = (LinearLayout) view
+								.findViewById(R.id.loading_more_incidents);
+						layout.setVisibility(LinearLayout.VISIBLE);
+
+						RelativeLayout layout2 = (RelativeLayout) view
+								.findViewById(R.id.content_incident_item);
+						layout2.setVisibility(RelativeLayout.VISIBLE);
+
+						Button button = (Button) view
+								.findViewById(R.id.button_load_more_incidents);
+						button.setVisibility(Button.GONE);
+					} else {
+						Button button = (Button) view
+								.findViewById(R.id.button_load_more_incidents);
+
+			/*			if (incidents.size() == 0) {
+							button.setVisibility(Button.GONE);
+						} else if (incidents.size() >= newIncidents) {
+							button.setVisibility(Button.GONE);
+						} else {
+							button.setVisibility(Button.VISIBLE);
+						}*/
+
+						button.setOnClickListener(new View.OnClickListener() {
+							@Override
+							public void onClick(View v) {
+								offset += pagination;								
+								loadIncidents();
+							}
+						});
+
+						/*RelativeLayout content_event_item = (RelativeLayout) view
+								.findViewById(R.id.content_event_item);
+						content_event_item.setVisibility(RelativeLayout.GONE);*/
+					}
+				}
+			} else {
+				IncidentListItem item = incidents.get(position);
+
+				TextView tv = (TextView) view.findViewById(R.id.incident_name);
+				tv.setText(item.title);
+				Core.setTextViewLeftImage(tv, item.statusImage);
+
+				tv = (TextView) view.findViewById(R.id.incident_agent);
+				tv.setText(item.nameAgent);
+				Core.setTextViewLeftImage(tv, item.priorityImage);
+
+				tv = (TextView) view
+						.findViewById(R.id.incident_last_update_timestamp);
+				tv.setText(item.timestamp);
+
+				// Show extended info
+				if (item.opened) {
+					((LinearLayout) view.findViewById(R.id.incident_extra_info)).setVisibility(View.VISIBLE);
+
+					TextView text = (TextView) view.findViewById(R.id.incident_description);
+					text.setText(item.description);
+
+					view.setOnClickListener(new OnIncidentClickListener(position));
+
+					Button button;
+					button = (Button) findViewById(R.id.incident_close_button);
+					// TODO if status == closed then
+					// button.setVisibility(Visibility.GONE);
+					// else
+				/*	button.setOnClickListener(new OnClickListener() {
+
+						@Override
+						public void onClick(View v) {
+							// TODO close event
+						}
+					});*/
+
+				} else {
+					((LinearLayout) view.findViewById(R.id.incident_extra_info)).setVisibility(View.GONE);
+				}
+			}
+
+			return view;
+		}
+
+		/**
+		 * Custom click listener (show more information).
+		 * 
+		 * @author Santiago Munín González
+		 * 
+		 */
+		private class OnIncidentClickListener implements OnClickListener {
+			private int mPosition;
+
+			OnIncidentClickListener(int position) {
+				mPosition = position;
+			}
+
+			@Override
+			public void onClick(View arg0) {
+				IncidentListItem item = incidents.get(mPosition);
+				item.opened = !item.opened;
+				incidents.set(mPosition, item);
+				la.notifyDataSetChanged();
+			}
+		}
+	}
+}
\ No newline at end of file
diff --git a/extras/pandroid_event_viewer/src/pandroid_event_viewer/pandorafms/IncidentListItem.java b/extras/pandroid_event_viewer/src/pandroid_event_viewer/pandorafms/IncidentListItem.java
new file mode 100644
index 0000000000..565fea9e39
--- /dev/null
+++ b/extras/pandroid_event_viewer/src/pandroid_event_viewer/pandorafms/IncidentListItem.java
@@ -0,0 +1,27 @@
+package pandroid_event_viewer.pandorafms;
+
+import java.util.List;
+
+/**
+ * Represents an incident.
+ * 
+ * @author Santiago Munín González
+ * 
+ */
+public class IncidentListItem {
+	public int id;
+	public int idAgent;
+	public String nameAgent;
+	public String title;
+	public String description;
+	public int priority;
+	public String priorityImage;
+	public int idGroup;
+	public String nameGroup;
+	public List<String> notes;
+	public int status;
+	public String statusImage;
+	public String timestamp;
+	public boolean opened = false;
+	//TODO attachments too?
+}
diff --git a/extras/pandroid_event_viewer/src/pandroid_event_viewer/pandorafms/Options.java b/extras/pandroid_event_viewer/src/pandroid_event_viewer/pandorafms/Options.java
index 59bc316488..685da150b1 100644
--- a/extras/pandroid_event_viewer/src/pandroid_event_viewer/pandorafms/Options.java
+++ b/extras/pandroid_event_viewer/src/pandroid_event_viewer/pandorafms/Options.java
@@ -92,8 +92,8 @@ public class Options extends Activity {
 		combo.setAdapter(adapter);
 		combo.setSelection(refreshTimeKey);
 
-		final Button buttonSearch = (Button) findViewById(R.id.update_options);
-		buttonSearch.setOnClickListener(new View.OnClickListener() {
+		final Button button = (Button) findViewById(R.id.update_options);
+		button.setOnClickListener(new View.OnClickListener() {
 			@Override
 			public void onClick(View v) {
 				save_options();