android: Add fragment that displays a single remediation instruction
authorTobias Brunner <tobias@strongswan.org>
Thu, 30 May 2013 09:18:24 +0000 (11:18 +0200)
committerTobias Brunner <tobias@strongswan.org>
Mon, 8 Jul 2013 16:49:29 +0000 (18:49 +0200)
src/frontends/android/res/layout/remediation_instruction.xml [new file with mode: 0644]
src/frontends/android/src/org/strongswan/android/ui/RemediationInstructionFragment.java [new file with mode: 0644]

diff --git a/src/frontends/android/res/layout/remediation_instruction.xml b/src/frontends/android/res/layout/remediation_instruction.xml
new file mode 100644 (file)
index 0000000..09c0d43
--- /dev/null
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright (C) 2013 Tobias Brunner
+    Hochschule fuer Technik Rapperswil
+
+    This program is free software; you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by the
+    Free Software Foundation; either version 2 of the License, or (at your
+    option) any later version.  See <http://www.fsf.org/copyleft/gpl.txt>.
+
+    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:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical"
+    android:padding="5dp" >
+
+    <TextView
+        android:id="@+id/title"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginLeft="10dp"
+        android:textIsSelectable="true"
+        android:textAppearance="?android:attr/textAppearanceLarge" />
+
+    <TextView
+        android:id="@+id/description"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginLeft="10dp"
+        android:textIsSelectable="true"
+        android:textColor="?android:textColorSecondary"
+        android:textAppearance="?android:attr/textAppearanceMedium" />
+
+    <TextView
+        android:id="@+id/list_header"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginLeft="10dp"
+        android:layout_marginTop="20dp"
+        android:textIsSelectable="true"
+        android:textAppearance="?android:attr/textAppearanceMedium" />
+
+    <include
+        layout="@android:layout/list_content"
+        android:layout_width="match_parent"
+        android:layout_height="0dp"
+        android:layout_weight="1"
+        android:layout_margin="5dp" />
+
+</LinearLayout>
diff --git a/src/frontends/android/src/org/strongswan/android/ui/RemediationInstructionFragment.java b/src/frontends/android/src/org/strongswan/android/ui/RemediationInstructionFragment.java
new file mode 100644 (file)
index 0000000..04c288b
--- /dev/null
@@ -0,0 +1,109 @@
+/*
+ * Copyright (C) 2013 Tobias Brunner
+ * Hochschule fuer Technik Rapperswil
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.  See <http://www.fsf.org/copyleft/gpl.txt>.
+ *
+ * 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 org.strongswan.android.ui;
+
+import org.strongswan.android.R;
+import org.strongswan.android.logic.imc.RemediationInstruction;
+
+import android.app.ListFragment;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ArrayAdapter;
+import android.widget.TextView;
+
+public class RemediationInstructionFragment extends ListFragment
+{
+       public static final String ARG_REMEDIATION_INSTRUCTION = "instruction";
+       private RemediationInstruction mInstruction = null;
+       private TextView mTitle;
+       private TextView mDescription;
+       private TextView mHeader;
+
+       @Override
+       public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
+       {
+               return inflater.inflate(R.layout.remediation_instruction, container, false);
+       }
+
+       @Override
+       public void onActivityCreated(Bundle savedInstanceState)
+       {
+               super.onActivityCreated(savedInstanceState);
+
+               if (savedInstanceState != null)
+               {
+                       mInstruction = savedInstanceState.getParcelable(ARG_REMEDIATION_INSTRUCTION);
+               }
+               /* show dividers only between list items */
+               getListView().setHeaderDividersEnabled(false);
+               getListView().setFooterDividersEnabled(false);
+               /* don't show loader while adapter is not set */
+               setListShown(true);
+               mTitle = (TextView)getView().findViewById(R.id.title);
+               mDescription = (TextView)getView().findViewById(R.id.description);
+               mHeader = (TextView)getView().findViewById(R.id.list_header);
+       }
+
+       @Override
+       public void onSaveInstanceState(Bundle outState)
+       {
+               super.onSaveInstanceState(outState);
+               outState.putParcelable(ARG_REMEDIATION_INSTRUCTION, mInstruction);
+       }
+
+       @Override
+       public void onStart()
+       {
+               super.onStart();
+
+               Bundle args = getArguments();
+               if (args != null)
+               {
+                       mInstruction = args.getParcelable(ARG_REMEDIATION_INSTRUCTION);
+               }
+               updateView(mInstruction);
+       }
+
+       public void updateView(RemediationInstruction instruction)
+       {
+               mInstruction = instruction;
+               if (mInstruction != null)
+               {
+                       mTitle.setText(mInstruction.getTitle());
+                       mDescription.setText(mInstruction.getDescription());
+                       if (mInstruction.getHeader() != null)
+                       {
+                               mHeader.setText(mInstruction.getHeader());
+                               setListAdapter(new ArrayAdapter<String>(getActivity(),
+                                                          android.R.layout.simple_list_item_1, mInstruction.getItems()));
+                       }
+                       else
+                       {
+                               mHeader.setText("");
+                               setListAdapter(null);
+                       }
+               }
+               else
+               {
+                       mTitle.setText("");
+                       mDescription.setText("");
+                       mHeader.setText("");
+                       setListAdapter(null);
+               }
+       }
+}