You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@taverna.apache.org by ia...@apache.org on 2015/06/29 12:08:54 UTC

[44/46] incubator-taverna-mobile git commit: Fixed details not loading when requested

Fixed details not loading when requested


Project: http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/commit/12bc0cb8
Tree: http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/tree/12bc0cb8
Diff: http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/diff/12bc0cb8

Branch: refs/heads/master
Commit: 12bc0cb862aeb5ce603194a0d311c50714842d46
Parents: c810e19
Author: larrytech7 <la...@gmail.com>
Authored: Sat Jun 27 23:13:26 2015 +0100
Committer: larrytech7 <la...@gmail.com>
Committed: Sat Jun 27 23:13:26 2015 +0100

----------------------------------------------------------------------
 app/src/main/ic_loading-web.png                 | Bin 0 -> 32040 bytes
 .../activities/DashboardMainActivity.java       |  19 +-
 .../mobile/fragments/WorkflowItemFragment.java  |  25 +-
 .../workflowdetails/WorkflowdetailFragment.java |  46 ++-
 .../taverna/mobile/tavernamobile/Workflow.java  |   5 +
 .../taverna/mobile/utils/DetailsLoader.java     |  61 ++--
 .../taverna/mobile/utils/WorkflowLoader.java    |   6 +-
 .../utils/xmlparsers/MyExperimentXmlParser.java | 319 ------------------
 .../xmlparsers/MyExperimentXmlParserRules.java  | 320 +++++++++++++++++++
 .../utils/xmlparsers/WorkflowDetailParser.java  |   2 +
 .../res/layout/fragment_workflow_detail.xml     |   2 +-
 app/src/main/res/mipmap-hdpi/ic_loading.png     | Bin 0 -> 1899 bytes
 app/src/main/res/mipmap-mdpi/ic_loading.png     | Bin 0 -> 1108 bytes
 app/src/main/res/mipmap-xhdpi/ic_loading.png    | Bin 0 -> 2927 bytes
 app/src/main/res/mipmap-xxhdpi/ic_loading.png   | Bin 0 -> 5161 bytes
 app/src/main/res/mipmap-xxxhdpi/ic_loading.png  | Bin 0 -> 7653 bytes
 app/src/main/res/values/strings.xml             |   3 +
 17 files changed, 434 insertions(+), 374 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/12bc0cb8/app/src/main/ic_loading-web.png
----------------------------------------------------------------------
diff --git a/app/src/main/ic_loading-web.png b/app/src/main/ic_loading-web.png
new file mode 100644
index 0000000..1adde64
Binary files /dev/null and b/app/src/main/ic_loading-web.png differ

http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/12bc0cb8/app/src/main/java/org/apache/taverna/mobile/activities/DashboardMainActivity.java
----------------------------------------------------------------------
diff --git a/app/src/main/java/org/apache/taverna/mobile/activities/DashboardMainActivity.java b/app/src/main/java/org/apache/taverna/mobile/activities/DashboardMainActivity.java
index 4b69674..e5f245b 100644
--- a/app/src/main/java/org/apache/taverna/mobile/activities/DashboardMainActivity.java
+++ b/app/src/main/java/org/apache/taverna/mobile/activities/DashboardMainActivity.java
@@ -25,6 +25,7 @@ package org.apache.taverna.mobile.activities;
 * under the License.
 */
 
+import android.app.Dialog;
 import android.content.Context;
 import android.content.Intent;
 import android.content.SharedPreferences;
@@ -32,6 +33,7 @@ import android.net.Uri;
 import android.os.Bundle;
 import android.os.Environment;
 import android.preference.PreferenceManager;
+import android.support.v4.app.DialogFragment;
 import android.support.v4.app.Fragment;
 import android.support.v4.app.FragmentManager;
 import android.support.v4.app.FragmentPagerAdapter;
@@ -43,6 +45,9 @@ import android.support.v7.app.ActionBarActivity;
 import android.view.Menu;
 import android.view.MenuInflater;
 import android.view.MenuItem;
+import android.widget.EditText;
+import android.widget.LinearLayout;
+import android.widget.TextView;
 import android.widget.Toast;
 
 import org.apache.taverna.mobile.R;
@@ -68,7 +73,7 @@ public class DashboardMainActivity extends ActionBarActivity
     static final int NUM_ITEMS = 2;
     private final int SELECT_WORKFLOW = 10;
     public static final String APP_DIRECTORY_NAME = "TavernaMobile";
-
+    private  Dialog aboutDialog;
     MyAdapter mAdapter;
     ViewPager mPager;
 
@@ -77,6 +82,7 @@ public class DashboardMainActivity extends ActionBarActivity
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_dashboard_main);
         setUpWorkflowDirectory(this);
+        aboutDialog = new Dialog(this);
 
         mNavigationDrawerFragment = (NavigationDrawerFragment)
                 getSupportFragmentManager().findFragmentById(R.id.navigation_drawer);
@@ -136,10 +142,13 @@ public class DashboardMainActivity extends ActionBarActivity
                         .commit();
                 break;
             case 4: //show about
-                fragmentManager.beginTransaction()
-                        .replace(R.id.container, FavoriteFragment.newInstance(position + 1))
-                        .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
-                        .commit();
+                TextView about = new TextView(getApplicationContext());
+                about.setTextSize(25);
+                about.setText(getResources().getString(R.string.about));
+
+                aboutDialog.setTitle("About Taverna Mobile");
+                aboutDialog.setContentView(about);
+                aboutDialog.show();
                 break;
             case 5://open settings/preference activity
                 startActivity(new Intent(this, SettingsActivity.class));

http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/12bc0cb8/app/src/main/java/org/apache/taverna/mobile/fragments/WorkflowItemFragment.java
----------------------------------------------------------------------
diff --git a/app/src/main/java/org/apache/taverna/mobile/fragments/WorkflowItemFragment.java b/app/src/main/java/org/apache/taverna/mobile/fragments/WorkflowItemFragment.java
index f60f3e3..10a1f8b 100644
--- a/app/src/main/java/org/apache/taverna/mobile/fragments/WorkflowItemFragment.java
+++ b/app/src/main/java/org/apache/taverna/mobile/fragments/WorkflowItemFragment.java
@@ -34,6 +34,7 @@ import android.support.v4.widget.SwipeRefreshLayout;
 import android.support.v7.widget.LinearLayoutManager;
 import android.support.v7.widget.RecyclerView;
 import android.support.v7.widget.SearchView;
+import android.text.TextUtils;
 import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.Menu;
@@ -223,19 +224,21 @@ public class WorkflowItemFragment extends Fragment implements SwipeRefreshLayout
         WorkflowAdapter ladapter = new WorkflowAdapter(getActivity());
         WorkflowAdapter wk = searchAdpater;//workflowAdapter;
 
-        if(null != wk)
-        for(int i=0; i< wk.getItemCount(); i++) {
-            Workflow workflow = wk.getItem(i);
-            if( workflow.getWorkflow_title().toLowerCase().contains(search.toLowerCase())){
-                ladapter.addWorkflow(workflow);
+        if(!TextUtils.isEmpty(search)) {
+            if (null != wk)
+                for (int i = 0; i < wk.getItemCount(); i++) {
+                    Workflow workflow = wk.getItem(i);
+                    if (workflow.getWorkflow_title().toLowerCase().contains(search.toLowerCase())) {
+                        ladapter.addWorkflow(workflow);
+                    }
+                }
+            else {
+                Toast.makeText(getActivity(), "No workflows available", Toast.LENGTH_SHORT).show();
             }
+            mListView.swapAdapter(ladapter, true);
+            if (ladapter.getItemCount() == 0)
+                Toast.makeText(getActivity(), "No workflows found matching criteria", Toast.LENGTH_SHORT).show();
         }
-        else{
-            Toast.makeText(getActivity(),"No workflows available", Toast.LENGTH_SHORT).show();
-        }
-        mListView.swapAdapter(ladapter, true);
-        if(ladapter.getItemCount()==0)
-            Toast.makeText(getActivity(),"No workflows found matching criteria", Toast.LENGTH_SHORT).show();
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/12bc0cb8/app/src/main/java/org/apache/taverna/mobile/fragments/workflowdetails/WorkflowdetailFragment.java
----------------------------------------------------------------------
diff --git a/app/src/main/java/org/apache/taverna/mobile/fragments/workflowdetails/WorkflowdetailFragment.java b/app/src/main/java/org/apache/taverna/mobile/fragments/workflowdetails/WorkflowdetailFragment.java
index 5b3c363..31ab593 100644
--- a/app/src/main/java/org/apache/taverna/mobile/fragments/workflowdetails/WorkflowdetailFragment.java
+++ b/app/src/main/java/org/apache/taverna/mobile/fragments/workflowdetails/WorkflowdetailFragment.java
@@ -59,6 +59,7 @@ import android.widget.Toast;
 import org.apache.taverna.mobile.R;
 import org.apache.taverna.mobile.activities.DashboardMainActivity;
 import org.apache.taverna.mobile.tavernamobile.TavernaPlayerAPI;
+import org.apache.taverna.mobile.tavernamobile.User;
 import org.apache.taverna.mobile.tavernamobile.Workflow;
 import org.apache.taverna.mobile.utils.DetailsLoader;
 import org.apache.taverna.mobile.utils.WorkflowDownloadManager;
@@ -180,7 +181,7 @@ public class WorkflowdetailFragment extends Fragment implements View.OnClickList
 
     @Override
     public Loader<Workflow> onCreateLoader(int i, Bundle bundle) {
-
+        progressDialog.show();
         return new DetailsLoader(getActivity(),
                 DetailsLoader.LOAD_TYPE.TYPE_WORKFLOW_DETAIL,
                 getActivity().getIntent().getStringExtra("uri"));
@@ -202,7 +203,7 @@ public class WorkflowdetailFragment extends Fragment implements View.OnClickList
           //  preview.setImageURI(Uri.parse(workflow.getWorkflow_remote_url()));
         download_url =workflow.getWorkflow_remote_url();
       //  progressDialog.cancel();
-     */  // progressDialog.dismiss();
+     */ //progressDialog.dismiss();
     }
 
     @Override
@@ -216,7 +217,8 @@ public class WorkflowdetailFragment extends Fragment implements View.OnClickList
             public void run() {
                 //update UI with code here
                 TextView author = (TextView) rootView.findViewById(R.id.wkf_author);
-                author.append("->" + wk.getWorkflow_author());
+                User uploader = wk.getUploader();
+                author.setText("Uploader ->" + uploader != null?uploader.getName():"Unknown");
                 TextView title = (TextView) rootView.findViewById(R.id.wtitle);
                 title.setText(wk.getWorkflow_title());
                 TextView desc = (TextView) rootView.findViewById(R.id.wdescription);
@@ -224,15 +226,47 @@ public class WorkflowdetailFragment extends Fragment implements View.OnClickList
                 TextView createdat = (TextView) rootView.findViewById(R.id.wcreatedat);
                 createdat.setText("Created : " + wk.getWorkflow_datecreated());
                 TextView updated = (TextView) rootView.findViewById(R.id.wupdatedat);
-                updated.setText(wk.getWorkflow_datemodified() + wk.getWorkflow_remote_url());
+                updated.setText("Workflow Description");
                     ImageView preview = (ImageView) rootView.findViewById(R.id.wkf_image);
-                  preview.setImageURI(Uri.parse("http://www.myexperiment.org/workflows/5/versions/2/previews/full"));
+                  //preview.setImageURI(Uri.parse(wk.getWorkflow_preview()));
+                new LoadImageThread(preview, wk.getWorkflow_preview()).execute();
                 download_url =wk.getWorkflow_remote_url();
 
-              //  progressDialog.dismiss();
+                progressDialog.dismiss();
             }
         });
     }
+    private static class LoadImageThread extends AsyncTask<String, Void, Bitmap>{
+          ImageView imageView;
+          String src ;
+        public LoadImageThread(ImageView image, String source) {
+            imageView = image;
+            src = source;
+        }
+
+        @Override
+        protected Bitmap doInBackground(String... strings) {
+            Bitmap myBitmap = null;
+            try {
+                URL url = new URL(src);
+                HttpURLConnection connection = null;
+                connection = (HttpURLConnection) url.openConnection();
+                connection.setDoInput(true);
+                connection.connect();
+                InputStream input = connection.getInputStream();
+                 myBitmap = BitmapFactory.decodeStream(input);
+//                imageView.setImageBitmap(myBitmap);
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+            return myBitmap;
+        }
+
+        @Override
+        protected void onPostExecute(Bitmap bitmap) {
+            imageView.setImageBitmap(bitmap);
+        }
+    }
     //create and return a new TextView
     public TextView createTextView(Context mcontext, String placeholder){
         TextView tv = new TextView(mcontext);

http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/12bc0cb8/app/src/main/java/org/apache/taverna/mobile/tavernamobile/Workflow.java
----------------------------------------------------------------------
diff --git a/app/src/main/java/org/apache/taverna/mobile/tavernamobile/Workflow.java b/app/src/main/java/org/apache/taverna/mobile/tavernamobile/Workflow.java
index 7868450..b4547ae 100644
--- a/app/src/main/java/org/apache/taverna/mobile/tavernamobile/Workflow.java
+++ b/app/src/main/java/org/apache/taverna/mobile/tavernamobile/Workflow.java
@@ -299,6 +299,11 @@ public class Workflow {
     public void setWorkflow_credits(List<String> workflow_credits) {
         this.workflow_credits = workflow_credits;
     }
+
+    @Override
+    public String toString() {
+        return this.workflow_title;
+    }
 }
 /* Use the sample code if it becomes necessary to pass this objects amongst activities
 / simple class that just has one member property as an example

http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/12bc0cb8/app/src/main/java/org/apache/taverna/mobile/utils/DetailsLoader.java
----------------------------------------------------------------------
diff --git a/app/src/main/java/org/apache/taverna/mobile/utils/DetailsLoader.java b/app/src/main/java/org/apache/taverna/mobile/utils/DetailsLoader.java
index a73d10d..4be2542 100644
--- a/app/src/main/java/org/apache/taverna/mobile/utils/DetailsLoader.java
+++ b/app/src/main/java/org/apache/taverna/mobile/utils/DetailsLoader.java
@@ -31,10 +31,9 @@ import android.util.Log;
 
 import com.thebuzzmedia.sjxp.rule.IRule;
 
-import org.apache.taverna.mobile.tavernamobile.Runs;
 import org.apache.taverna.mobile.tavernamobile.TavernaPlayerAPI;
 import org.apache.taverna.mobile.tavernamobile.Workflow;
-import org.apache.taverna.mobile.utils.xmlparsers.MyExperimentXmlParser;
+import org.apache.taverna.mobile.utils.xmlparsers.MyExperimentXmlParserRules;
 import org.apache.taverna.mobile.utils.xmlparsers.WorkflowDetailParser;
 import org.json.JSONArray;
 import org.json.JSONException;
@@ -49,8 +48,6 @@ import java.net.HttpURLConnection;
 import java.net.MalformedURLException;
 import java.net.URL;
 
-import static org.apache.taverna.mobile.utils.DetailsLoader.LOAD_TYPE.*;
-
 /**
  * Loads workflow details from the myexperiment API and presents them on the UI .The class is generic and can be used to load the
  * different details sections of the app.
@@ -69,7 +66,7 @@ public class DetailsLoader extends AsyncTaskLoader<Workflow> {
         this.context = context;
         this.lt = load_type;
         this.uri = detailsRUI;
-        workflow = new Workflow();
+        this.workflow = new Workflow();
     }
 
     @Override
@@ -110,44 +107,44 @@ public class DetailsLoader extends AsyncTaskLoader<Workflow> {
             connection.connect(); //send request
             Log.i("RESPONSE Code", "" + connection.getResponseCode());
             Log.i("RESPONSE Messsage", ""+connection.getResponseMessage());
-            Log.i("Authorization ", ""+connection.getRequestProperty("Authorization"));
 
             InputStream dis = connection.getInputStream();
-            BufferedReader br = new BufferedReader(new InputStreamReader(dis));
-            StringBuffer sb = new StringBuffer();
-            String jsonData = "";
-            while((jsonData = br.readLine()) != null){
-                sb.append(jsonData);
-            }
 
             switch(this.lt) {
                 case TYPE_WORKFLOW_DETAIL: {
                     //make rules and apply the parser
-                    IRule workfl = new MyExperimentXmlParser.WorkflowDetailRule(IRule.Type.ATTRIBUTE,
+                    IRule workfl = new MyExperimentXmlParserRules.WorkflowDetailRule(IRule.Type.ATTRIBUTE,
                             "/workflow", "uri","resource", "id","version");
-                    IRule title = new MyExperimentXmlParser.TitleRule(IRule.Type.CHARACTER,"/workflow/title");
-                    IRule description = new MyExperimentXmlParser.DescriptionRule(IRule.Type.CHARACTER, "/workflow/description");
-                    IRule type = new MyExperimentXmlParser.TypeRule(IRule.Type.CHARACTER, "/workflow/type");
-                    IRule attrType = new MyExperimentXmlParser.TypeRule(IRule.Type.ATTRIBUTE, "/workflow/type", "resource", "uri","id");
-                    IRule uploader = new MyExperimentXmlParser.UploaderRule(IRule.Type.CHARACTER, "/workflow/uploader");
-                    IRule attrUploader = new MyExperimentXmlParser.UploaderRule(IRule.Type.ATTRIBUTE, "/workflow/uploader",  "resource", "uri","id");
-                    IRule date = new MyExperimentXmlParser.DateRule(IRule.Type.CHARACTER, "/workflow/created-at");
-                    IRule preview = new MyExperimentXmlParser.PreviewRule(IRule.Type.CHARACTER, "/workflow/preview");
-                    IRule licetype = new MyExperimentXmlParser.LicenceTypeRule(IRule.Type.CHARACTER, "/workflow/licence-type");
-                    IRule attrlicetype = new MyExperimentXmlParser.LicenceTypeRule(IRule.Type.ATTRIBUTE,"/workflow/licence-type", "resource", "uri","id");
-                    IRule contenturi = new MyExperimentXmlParser.ContentUriRule(IRule.Type.CHARACTER, "/workflow/content-uri");
-                    IRule contentType = new MyExperimentXmlParser.ContentTypeRule(IRule.Type.CHARACTER, "/workflow/content-type");
-                    IRule tags = new MyExperimentXmlParser.TagsRule(IRule.Type.CHARACTER, "/workflow/tags/tag");
-                    IRule attrTags = new MyExperimentXmlParser.TagsRule(IRule.Type.ATTRIBUTE, "/workflow/tags/tag", "resource", "uri","id");
+                    IRule title = new MyExperimentXmlParserRules.TitleRule(IRule.Type.CHARACTER,"/workflow/title");
+                    IRule description = new MyExperimentXmlParserRules.DescriptionRule(IRule.Type.CHARACTER, "/workflow/description");
+                    IRule type = new MyExperimentXmlParserRules.TypeRule(IRule.Type.CHARACTER, "/workflow/type");
+                    IRule attrType = new MyExperimentXmlParserRules.TypeRule(IRule.Type.ATTRIBUTE, "/workflow/type", "resource", "uri","id");
+                    IRule uploader = new MyExperimentXmlParserRules.UploaderRule(IRule.Type.CHARACTER, "/workflow/uploader");
+                    IRule attrUploader = new MyExperimentXmlParserRules.UploaderRule(IRule.Type.ATTRIBUTE, "/workflow/uploader",  "resource", "uri","id");
+                    IRule date = new MyExperimentXmlParserRules.DateRule(IRule.Type.CHARACTER, "/workflow/created-at");
+                    IRule preview = new MyExperimentXmlParserRules.PreviewRule(IRule.Type.CHARACTER, "/workflow/preview");
+                    IRule licetype = new MyExperimentXmlParserRules.LicenceTypeRule(IRule.Type.CHARACTER, "/workflow/licence-type");
+                    IRule attrlicetype = new MyExperimentXmlParserRules.LicenceTypeRule(IRule.Type.ATTRIBUTE,"/workflow/licence-type", "resource", "uri","id");
+                    IRule contenturi = new MyExperimentXmlParserRules.ContentUriRule(IRule.Type.CHARACTER, "/workflow/content-uri");
+                    IRule contentType = new MyExperimentXmlParserRules.ContentTypeRule(IRule.Type.CHARACTER, "/workflow/content-type");
+                    IRule tags = new MyExperimentXmlParserRules.TagsRule(IRule.Type.CHARACTER, "/workflow/tags/tag");
+                    IRule attrTags = new MyExperimentXmlParserRules.TagsRule(IRule.Type.ATTRIBUTE, "/workflow/tags/tag", "resource", "uri","id");
 
                     WorkflowDetailParser parser = new WorkflowDetailParser(new IRule[]{workfl,title,description,type,
                             attrlicetype,attrType, uploader,attrUploader,date,preview,licetype,contenturi,contentType,tags,attrTags});
-                    parser.parse(dis, workflow);
+                 //   System.out.println(sb.toString());
+                    parser.parse(dis, this.workflow);
                 }
                 dis.close();
-                br.close();
+                //br.close();
                     return workflow;
                 case TYPE_RUN_HISTORY:{
+                    BufferedReader br = new BufferedReader(new InputStreamReader(dis));
+                    StringBuffer sb = new StringBuffer();
+                    String jsonData = "";
+                    while((jsonData = br.readLine()) != null){
+                        sb.append(jsonData);
+                    }
                     workflow = new Workflow(this.context);
                     JSONArray jsonArray = new JSONArray(sb.toString());
                     Log.i("JSON ", jsonArray.toString(2));
@@ -181,6 +178,12 @@ public class DetailsLoader extends AsyncTaskLoader<Workflow> {
                 }
                     return workflow;
                 default:
+                    BufferedReader br = new BufferedReader(new InputStreamReader(dis));
+                    StringBuffer sb = new StringBuffer();
+                    String jsonData = "";
+                    while((jsonData = br.readLine()) != null){
+                        sb.append(jsonData);
+                    }
                     dis.close();
                     br.close();
                     return workflow;

http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/12bc0cb8/app/src/main/java/org/apache/taverna/mobile/utils/WorkflowLoader.java
----------------------------------------------------------------------
diff --git a/app/src/main/java/org/apache/taverna/mobile/utils/WorkflowLoader.java b/app/src/main/java/org/apache/taverna/mobile/utils/WorkflowLoader.java
index e08de2a..af16b68 100644
--- a/app/src/main/java/org/apache/taverna/mobile/utils/WorkflowLoader.java
+++ b/app/src/main/java/org/apache/taverna/mobile/utils/WorkflowLoader.java
@@ -31,7 +31,7 @@ import android.util.Log;
 import com.thebuzzmedia.sjxp.rule.IRule;
 
 import org.apache.taverna.mobile.tavernamobile.Workflow;
-import org.apache.taverna.mobile.utils.xmlparsers.MyExperimentXmlParser;
+import org.apache.taverna.mobile.utils.xmlparsers.MyExperimentXmlParserRules;
 import org.apache.taverna.mobile.utils.xmlparsers.WorkflowParser;
 
 import java.io.IOException;
@@ -120,8 +120,8 @@ public class WorkflowLoader extends AsyncTask<Object, Object, Object>{ //Workflo
         } catch (JSONException | IOException e) {
             e.printStackTrace();
         }*/
-        IRule wkflowRule = new MyExperimentXmlParser.WorkflowRule(IRule.Type.ATTRIBUTE, "/workflows/workflow", "resource", "uri","id", "version");
-        IRule workflowNameRule = new MyExperimentXmlParser.WorkflowRule(IRule.Type.CHARACTER, "/workflows/workflow");
+        IRule wkflowRule = new MyExperimentXmlParserRules.WorkflowRule(IRule.Type.ATTRIBUTE, "/workflows/workflow", "resource", "uri","id", "version");
+        IRule workflowNameRule = new MyExperimentXmlParserRules.WorkflowRule(IRule.Type.CHARACTER, "/workflows/workflow");
         WorkflowParser xmlParser = new WorkflowParser(new IRule[]{wkflowRule, workflowNameRule});
         try {
             URL workflowurl = new URL("http://www.myexperiment.org/workflows.xml");

http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/12bc0cb8/app/src/main/java/org/apache/taverna/mobile/utils/xmlparsers/MyExperimentXmlParser.java
----------------------------------------------------------------------
diff --git a/app/src/main/java/org/apache/taverna/mobile/utils/xmlparsers/MyExperimentXmlParser.java b/app/src/main/java/org/apache/taverna/mobile/utils/xmlparsers/MyExperimentXmlParser.java
deleted file mode 100644
index 46250eb..0000000
--- a/app/src/main/java/org/apache/taverna/mobile/utils/xmlparsers/MyExperimentXmlParser.java
+++ /dev/null
@@ -1,319 +0,0 @@
-package org.apache.taverna.mobile.utils.xmlparsers;
-/**
- * Apache Taverna Mobile
- * Copyright 2015 The Apache Software Foundation
-
- * This product includes software developed at
- * The Apache Software Foundation (http://www.apache.org/).
-
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import android.annotation.TargetApi;
-import android.os.Build;
-import android.text.Html;
-
-import com.thebuzzmedia.sjxp.XMLParser;
-import com.thebuzzmedia.sjxp.rule.DefaultRule;
-
-import org.apache.taverna.mobile.tavernamobile.User;
-import org.apache.taverna.mobile.tavernamobile.Workflow;
-import org.apache.taverna.mobile.utils.WorkflowLoader;
-import org.simpleframework.xml.Default;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Created by Larry Akah on 6/23/15.
- */
-public class MyExperimentXmlParser {
-
-    public static Workflow mWorkflow = new Workflow();
-
-    public MyExperimentXmlParser(){
-    }
-
-    public Workflow getWorkflowHere(){
-        return mWorkflow;
-    }
-    //parse a single workflow from myexperiment
-    public static class WorkflowDetailRule extends DefaultRule{
-
-        public WorkflowDetailRule(Type type, String locationPath, String... attributeNames) throws IllegalArgumentException {
-            super(type, locationPath, attributeNames);
-        }
-
-        @Override
-        public void handleParsedAttribute(XMLParser parser, int index, String value, Object userObject) {
-            switch(index){
-                case 0: //uri
-                mWorkflow.setWorkflow_details_url(value);
-                    ((Workflow)userObject).setWorkflow_details_url(value);
-                    break;
-                case 1: //resource
-                    mWorkflow.setWorkflow_web_url(value);
-                    ((Workflow)userObject).setWorkflow_web_url(value);
-                    break;
-                case 2: //id
-                    mWorkflow.setId(Integer.parseInt(value));
-                    ((Workflow)userObject).setId(Integer.parseInt(value));
-                    break;
-                case 3://version
-                    mWorkflow.setWorkflow_versions(value);
-                    ((Workflow)userObject).setWorkflow_versions(value);
-                    break;
-            }
-        }
-    }
-
-    public static class TitleRule extends DefaultRule{
-
-        public TitleRule(Type type, String locationPath, String... attributeNames) throws IllegalArgumentException {
-            super(type, locationPath, attributeNames);
-        }
-
-        @Override
-        public void handleParsedCharacters(XMLParser parser, String text, Object userObject) {
-            mWorkflow.setWorkflow_title(text);
-            ((Workflow)userObject).setWorkflow_title(text);
-        }
-    }
-
-    public static class DescriptionRule extends DefaultRule{
-
-        public DescriptionRule(Type type, String locationPath, String... attributeNames) throws IllegalArgumentException {
-            super(type, locationPath, attributeNames);
-        }
-
-        @Override
-        public void handleParsedCharacters(XMLParser parser, String text, Object userObject) {
-
-            mWorkflow.setWorkflow_description(String.valueOf(Html.fromHtml(text)));
-            ((Workflow)userObject).setWorkflow_description(String.valueOf(Html.fromHtml(text)));
-        }
-    }
-
-    public static class TypeRule extends DefaultRule{
-
-        public TypeRule(Type type, String locationPath, String... attributeNames) throws IllegalArgumentException {
-            super(type, locationPath, attributeNames);
-        }
-
-        @Override
-        public void handleParsedAttribute(XMLParser parser, int index, String value, Object userObject) {
-            switch (index){
-                case 0:
-                    break;
-                case 1:
-                    break;
-                case 2:
-                    break;
-
-            }
-        }
-
-        @Override
-        public void handleParsedCharacters(XMLParser parser, String text, Object userObject) {
-            mWorkflow.setWorkflow_Type(text);
-            ((Workflow)userObject).setWorkflow_Type(text);
-        }
-    }
-
-    public static class UploaderRule extends DefaultRule{
-
-        User muser;
-        public UploaderRule(Type type, String locationPath, String... attributeNames) throws IllegalArgumentException {
-            super(type, locationPath, attributeNames);
-            muser = new User();
-        }
-
-        @Override
-        public void handleParsedAttribute(XMLParser parser, int index, String value, Object userObject) {
-            switch(index){
-                case 0:
-                    muser.setWebsite(value);
-                    break;
-                case 1:
-                    muser.setDetails_uri(value);
-                    break;
-                case 2:
-                    muser.setId(value);
-                    break;
-            }
-        }
-
-        @Override
-        public void handleParsedCharacters(XMLParser parser, String text, Object userObject) {
-           muser.setName(text);
-           mWorkflow.setUploader(muser);
-            ((Workflow)userObject).setUploader(muser);
-        }
-    }
-//rule for the date the workflow was created/uploaded
-    public static class DateRule extends DefaultRule{
-
-        public DateRule(Type type, String locationPath, String... attributeNames) throws IllegalArgumentException {
-            super(type, locationPath, attributeNames);
-        }
-
-    @Override
-    public void handleParsedCharacters(XMLParser parser, String text, Object userObject) {
-        mWorkflow.setWorkflow_datecreated(text);
-        ((Workflow)userObject).setWorkflow_datecreated(text);
-
-    }
-}
-
-    public static class PreviewRule extends DefaultRule{
-
-        public PreviewRule(Type type, String locationPath, String... attributeNames) throws IllegalArgumentException {
-            super(type, locationPath, attributeNames);
-        }
-
-        @Override
-        public void handleParsedCharacters(XMLParser parser, String text, Object userObject) {
-            mWorkflow.setWorkflow_preview(text);
-            ((Workflow)userObject).setWorkflow_preview(text);
-        }
-    }
-
-    public static class LicenceTypeRule extends DefaultRule{
-
-        public LicenceTypeRule(Type type, String locationPath, String... attributeNames) throws IllegalArgumentException {
-            super(type, locationPath, attributeNames);
-        }
-
-        @Override
-        public void handleParsedAttribute(XMLParser parser, int index, String value, Object userObject) {
-            super.handleParsedAttribute(parser, index, value, userObject);
-        }
-
-        @Override
-        public void handleParsedCharacters(XMLParser parser, String text, Object userObject) {
-            mWorkflow.setWorkflow_licence_type("Licence By "+text);
-            ((Workflow)userObject).setWorkflow_licence_type("Licence By "+text);
-        }
-    }
-//set download link for the workflow
-    public static class ContentUriRule extends DefaultRule{
-
-        public ContentUriRule(Type type, String locationPath, String... attributeNames) throws IllegalArgumentException {
-            super(type, locationPath, attributeNames);
-        }
-
-        @Override
-        public void handleParsedCharacters(XMLParser parser, String text, Object userObject) {
-            mWorkflow.setWorkflow_remote_url(text);
-            ((Workflow)userObject).setWorkflow_remote_url(text);
-        }
-    }
-
-    public static class ContentTypeRule extends DefaultRule{
-
-        public ContentTypeRule(Type type, String locationPath, String... attributeNames) throws IllegalArgumentException {
-            super(type, locationPath, attributeNames);
-        }
-
-        @Override
-        public void handleParsedCharacters(XMLParser parser, String text, Object userObject) {
-            mWorkflow.setWorkflow_content_type(text);
-            ((Workflow)userObject).setWorkflow_content_type(text);
-        }
-    }
-
-    public static class TagsRule extends DefaultRule{
-
-        public TagsRule(Type type, String locationPath, String... attributeNames) throws IllegalArgumentException {
-            super(type, locationPath, attributeNames);
-        }
-
-        @Override
-        public void handleParsedAttribute(XMLParser parser, int index, String value, Object userObject) {
-            super.handleParsedAttribute(parser, index, value, userObject);
-            System.out.println(value);
-        }
-
-        @Override
-        public void handleParsedCharacters(XMLParser parser, String text, Object userObject) {
-            mWorkflow.setWorkflow_tags(new ArrayList<String>(){});
-            ((Workflow)userObject).setWorkflow_tags(new ArrayList<String>(){});
-            System.out.println(text);
-        }
-    }
-
-    /**
-     * parse workflows from myExperiment
-     */
-    public final static class WorkflowRule extends DefaultRule{
-        Workflow workflow;
-        List<Workflow>  wlist;
-        static String uri,version,desc;
-        static String url=uri=version=desc="";
-        static long id = 0;
-
-        public WorkflowRule(Type type, String locationPath, String... attributeNames) throws IllegalArgumentException {
-            super(type, locationPath, attributeNames);
-            this.workflow = new Workflow();
-            wlist = new ArrayList<>();
-        }
-        //instantiated to parse xml data for a given workflow
-        public WorkflowRule(Type type, String path, int id, String attributenames){
-            super(type,path,attributenames);
-        }
-
-        @Override
-        public void handleParsedAttribute(XMLParser parser, int index, String value, Object userObject) {
-
-            switch(index){
-                case 0:
-                    System.out.println("Workflow Resource: "+value); url = value;
-                    desc = "To view workflow on the web, click "+value;
-                    break;
-                case 1:
-                    System.out.println("Workflow uri: "+value);
-                    uri = value;
-                    break;
-                case 2:
-                    System.out.println("Workflow id: "+value);
-                    id = Integer.parseInt(value);
-                    break;
-                case 3:
-                    System.out.println("Workflow version: "+value);
-                    version = value;
-                    break;
-            }
-        }
-
-        @Override
-        public void handleParsedCharacters(XMLParser parser, String text, Object workflowListObject) {
-            //add the  workflow to the workflow list
-            this.workflow = new Workflow("", desc, id, url);
-            this.workflow.setWorkflow_details_url(uri);
-            this.workflow.setWorkflow_title(text);
-            this.workflow.setWorkflow_author("");
-            wlist.add(this.workflow);
-            WorkflowLoader.loadedWorkflows.add(this.workflow);
-            System.out.println("static Workflow Count: " + WorkflowLoader.loadedWorkflows.size());
-            ((List<Workflow>)workflowListObject).add(this.workflow);
-            this.workflow = null;
-        }
-
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/12bc0cb8/app/src/main/java/org/apache/taverna/mobile/utils/xmlparsers/MyExperimentXmlParserRules.java
----------------------------------------------------------------------
diff --git a/app/src/main/java/org/apache/taverna/mobile/utils/xmlparsers/MyExperimentXmlParserRules.java b/app/src/main/java/org/apache/taverna/mobile/utils/xmlparsers/MyExperimentXmlParserRules.java
new file mode 100644
index 0000000..9bb47ed
--- /dev/null
+++ b/app/src/main/java/org/apache/taverna/mobile/utils/xmlparsers/MyExperimentXmlParserRules.java
@@ -0,0 +1,320 @@
+package org.apache.taverna.mobile.utils.xmlparsers;
+/**
+ * Apache Taverna Mobile
+ * Copyright 2015 The Apache Software Foundation
+
+ * This product includes software developed at
+ * The Apache Software Foundation (http://www.apache.org/).
+
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import android.annotation.TargetApi;
+import android.os.Build;
+import android.text.Html;
+
+import com.thebuzzmedia.sjxp.XMLParser;
+import com.thebuzzmedia.sjxp.rule.DefaultRule;
+
+import org.apache.taverna.mobile.tavernamobile.User;
+import org.apache.taverna.mobile.tavernamobile.Workflow;
+import org.apache.taverna.mobile.utils.WorkflowLoader;
+import org.simpleframework.xml.Default;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Created by Larry Akah on 6/23/15.
+ */
+public class MyExperimentXmlParserRules {
+
+    public static Workflow mWorkflow = new Workflow();
+
+    public MyExperimentXmlParserRules(){
+    }
+
+    public Workflow getWorkflowHere(){
+        return mWorkflow;
+    }
+    //parse a single workflow from myexperiment
+    public final static class WorkflowDetailRule extends DefaultRule{
+
+        public WorkflowDetailRule(Type type, String locationPath, String... attributeNames) throws IllegalArgumentException {
+            super(type, locationPath, attributeNames);
+            System.out.println("Parser rules created. Ready to parse");
+        }
+
+        @Override
+        public void handleParsedAttribute(XMLParser parser, int index, String value, Object userObject) {
+            switch(index){
+                case 0: //uri
+                    mWorkflow.setWorkflow_details_url(value);
+                    ((Workflow)userObject).setWorkflow_details_url(value);
+                    break;
+                case 1: //resource
+                    mWorkflow.setWorkflow_web_url(value);
+                    ((Workflow)userObject).setWorkflow_web_url(value);
+                    break;
+                case 2: //id
+                    mWorkflow.setId(Integer.parseInt(value));
+                    ((Workflow)userObject).setId(Integer.parseInt(value));
+                    break;
+                case 3://version
+                    mWorkflow.setWorkflow_versions(value);
+                    ((Workflow)userObject).setWorkflow_versions(value);
+                    break;
+            }
+        }
+    }
+
+    public static class TitleRule extends DefaultRule{
+
+        public TitleRule(Type type, String locationPath, String... attributeNames) throws IllegalArgumentException {
+            super(type, locationPath, attributeNames);
+        }
+
+        @Override
+        public void handleParsedCharacters(XMLParser parser, String text, Object userObject) {
+            mWorkflow.setWorkflow_title(text);
+            ((Workflow)userObject).setWorkflow_title(text);
+        }
+    }
+
+    public static class DescriptionRule extends DefaultRule{
+
+        public DescriptionRule(Type type, String locationPath, String... attributeNames) throws IllegalArgumentException {
+            super(type, locationPath, attributeNames);
+        }
+
+        @Override
+        public void handleParsedCharacters(XMLParser parser, String text, Object userObject) {
+
+            mWorkflow.setWorkflow_description(String.valueOf(Html.fromHtml(text)));
+            ((Workflow)userObject).setWorkflow_description(String.valueOf(Html.fromHtml(text)));
+        }
+    }
+
+    public static class TypeRule extends DefaultRule{
+
+        public TypeRule(Type type, String locationPath, String... attributeNames) throws IllegalArgumentException {
+            super(type, locationPath, attributeNames);
+        }
+
+        @Override
+        public void handleParsedAttribute(XMLParser parser, int index, String value, Object userObject) {
+            switch (index){
+                case 0:
+                    break;
+                case 1:
+                    break;
+                case 2:
+                    break;
+
+            }
+        }
+
+        @Override
+        public void handleParsedCharacters(XMLParser parser, String text, Object userObject) {
+            mWorkflow.setWorkflow_Type(text);
+            ((Workflow)userObject).setWorkflow_Type(text);
+        }
+    }
+
+    public static class UploaderRule extends DefaultRule{
+
+        User muser;
+        public UploaderRule(Type type, String locationPath, String... attributeNames) throws IllegalArgumentException {
+            super(type, locationPath, attributeNames);
+            muser = new User();
+        }
+
+        @Override
+        public void handleParsedAttribute(XMLParser parser, int index, String value, Object userObject) {
+            switch(index){
+                case 0:
+                    muser.setWebsite(value);
+                    break;
+                case 1:
+                    muser.setDetails_uri(value);
+                    break;
+                case 2:
+                    muser.setId(value);
+                    break;
+            }
+        }
+
+        @Override
+        public void handleParsedCharacters(XMLParser parser, String text, Object userObject) {
+           muser.setName(text);
+           mWorkflow.setUploader(muser);
+            ((Workflow)userObject).setUploader(muser);
+        }
+    }
+//rule for the date the workflow was created/uploaded
+    public static class DateRule extends DefaultRule{
+
+        public DateRule(Type type, String locationPath, String... attributeNames) throws IllegalArgumentException {
+            super(type, locationPath, attributeNames);
+        }
+
+    @Override
+    public void handleParsedCharacters(XMLParser parser, String text, Object userObject) {
+        mWorkflow.setWorkflow_datecreated(text);
+        ((Workflow)userObject).setWorkflow_datecreated(text);
+
+    }
+}
+
+    public static class PreviewRule extends DefaultRule{
+
+        public PreviewRule(Type type, String locationPath, String... attributeNames) throws IllegalArgumentException {
+            super(type, locationPath, attributeNames);
+        }
+
+        @Override
+        public void handleParsedCharacters(XMLParser parser, String text, Object userObject) {
+            mWorkflow.setWorkflow_preview(text);
+            ((Workflow)userObject).setWorkflow_preview(text);
+        }
+    }
+
+    public static class LicenceTypeRule extends DefaultRule{
+
+        public LicenceTypeRule(Type type, String locationPath, String... attributeNames) throws IllegalArgumentException {
+            super(type, locationPath, attributeNames);
+        }
+
+        @Override
+        public void handleParsedAttribute(XMLParser parser, int index, String value, Object userObject) {
+            super.handleParsedAttribute(parser, index, value, userObject);
+        }
+
+        @Override
+        public void handleParsedCharacters(XMLParser parser, String text, Object userObject) {
+            mWorkflow.setWorkflow_licence_type("Licence By "+text);
+            ((Workflow)userObject).setWorkflow_licence_type("Licence By "+text);
+        }
+    }
+//set download link for the workflow
+    public static class ContentUriRule extends DefaultRule{
+
+        public ContentUriRule(Type type, String locationPath, String... attributeNames) throws IllegalArgumentException {
+            super(type, locationPath, attributeNames);
+        }
+
+        @Override
+        public void handleParsedCharacters(XMLParser parser, String text, Object userObject) {
+            mWorkflow.setWorkflow_remote_url(text);
+            ((Workflow)userObject).setWorkflow_remote_url(text);
+        }
+    }
+
+    public static class ContentTypeRule extends DefaultRule{
+
+        public ContentTypeRule(Type type, String locationPath, String... attributeNames) throws IllegalArgumentException {
+            super(type, locationPath, attributeNames);
+        }
+
+        @Override
+        public void handleParsedCharacters(XMLParser parser, String text, Object userObject) {
+            mWorkflow.setWorkflow_content_type(text);
+            ((Workflow)userObject).setWorkflow_content_type(text);
+        }
+    }
+
+    public static class TagsRule extends DefaultRule{
+
+        public TagsRule(Type type, String locationPath, String... attributeNames) throws IllegalArgumentException {
+            super(type, locationPath, attributeNames);
+        }
+
+        @Override
+        public void handleParsedAttribute(XMLParser parser, int index, String value, Object userObject) {
+            super.handleParsedAttribute(parser, index, value, userObject);
+            System.out.println("Tag attribute value"+value);
+        }
+
+        @Override
+        public void handleParsedCharacters(XMLParser parser, String text, Object userObject) {
+            mWorkflow.setWorkflow_tags(new ArrayList<String>(){});
+            ((Workflow)userObject).setWorkflow_tags(new ArrayList<String>(){});
+            System.out.println(text);
+        }
+    }
+
+    /**
+     * parse workflows from myExperiment
+     */
+    public final static class WorkflowRule extends DefaultRule{
+        Workflow workflow;
+        List<Workflow>  wlist;
+        static String uri,version,desc;
+        static String url=uri=version=desc="";
+        static long id = 0;
+
+        public WorkflowRule(Type type, String locationPath, String... attributeNames) throws IllegalArgumentException {
+            super(type, locationPath, attributeNames);
+            this.workflow = new Workflow();
+            wlist = new ArrayList<>();
+        }
+        //instantiated to parse xml data for a given workflow
+        public WorkflowRule(Type type, String path, int id, String attributenames){
+            super(type,path,attributenames);
+        }
+
+        @Override
+        public void handleParsedAttribute(XMLParser parser, int index, String value, Object userObject) {
+
+            switch(index){
+                case 0:
+                    System.out.println("Workflow Resource: "+value); url = value;
+                    desc = "To view workflow on the web, click "+value;
+                    break;
+                case 1:
+                    System.out.println("Workflow uri: "+value);
+                    uri = value;
+                    break;
+                case 2:
+                    System.out.println("Workflow id: "+value);
+                    id = Integer.parseInt(value);
+                    break;
+                case 3:
+                    System.out.println("Workflow version: "+value);
+                    version = value;
+                    break;
+            }
+        }
+
+        @Override
+        public void handleParsedCharacters(XMLParser parser, String text, Object workflowListObject) {
+            //add the  workflow to the workflow list
+            this.workflow = new Workflow("", desc, id, url);
+            this.workflow.setWorkflow_details_url(uri);
+            this.workflow.setWorkflow_title(text);
+            this.workflow.setWorkflow_author("");
+            wlist.add(this.workflow);
+            WorkflowLoader.loadedWorkflows.add(this.workflow);
+            System.out.println("static Workflow Count: " + WorkflowLoader.loadedWorkflows.size());
+            ((List<Workflow>)workflowListObject).add(this.workflow);
+            this.workflow = null;
+        }
+
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/12bc0cb8/app/src/main/java/org/apache/taverna/mobile/utils/xmlparsers/WorkflowDetailParser.java
----------------------------------------------------------------------
diff --git a/app/src/main/java/org/apache/taverna/mobile/utils/xmlparsers/WorkflowDetailParser.java b/app/src/main/java/org/apache/taverna/mobile/utils/xmlparsers/WorkflowDetailParser.java
index 964c6af..a49d836 100644
--- a/app/src/main/java/org/apache/taverna/mobile/utils/xmlparsers/WorkflowDetailParser.java
+++ b/app/src/main/java/org/apache/taverna/mobile/utils/xmlparsers/WorkflowDetailParser.java
@@ -46,5 +46,7 @@ public class WorkflowDetailParser extends XMLParser {
     @Override
     protected void doEndDocument(Object userObject) {
         WorkflowdetailFragment.setWorkflowDetails((Workflow) userObject);
+       // WorkflowdetailFragment.setWorkflowDetails(MyExperimentXmlParserRules.mWorkflow);
+        System.out.println("Finished Parsing document. Results"+(Workflow) userObject);
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/12bc0cb8/app/src/main/res/layout/fragment_workflow_detail.xml
----------------------------------------------------------------------
diff --git a/app/src/main/res/layout/fragment_workflow_detail.xml b/app/src/main/res/layout/fragment_workflow_detail.xml
index 946e5ed..3c920d2 100644
--- a/app/src/main/res/layout/fragment_workflow_detail.xml
+++ b/app/src/main/res/layout/fragment_workflow_detail.xml
@@ -82,7 +82,7 @@ limitations under the License.
                 android:layout_width="match_parent"
                 android:layout_height="match_parent"
                 android:id="@+id/wkf_image"
-                android:src="@mipmap/ic_viewworkflow"
+                android:src="@mipmap/ic_loading"
                 android:backgroundTint="@color/accent_material_light"
                 android:backgroundTintMode="src_atop" />
 

http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/12bc0cb8/app/src/main/res/mipmap-hdpi/ic_loading.png
----------------------------------------------------------------------
diff --git a/app/src/main/res/mipmap-hdpi/ic_loading.png b/app/src/main/res/mipmap-hdpi/ic_loading.png
new file mode 100644
index 0000000..f0e927d
Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_loading.png differ

http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/12bc0cb8/app/src/main/res/mipmap-mdpi/ic_loading.png
----------------------------------------------------------------------
diff --git a/app/src/main/res/mipmap-mdpi/ic_loading.png b/app/src/main/res/mipmap-mdpi/ic_loading.png
new file mode 100644
index 0000000..216a417
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_loading.png differ

http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/12bc0cb8/app/src/main/res/mipmap-xhdpi/ic_loading.png
----------------------------------------------------------------------
diff --git a/app/src/main/res/mipmap-xhdpi/ic_loading.png b/app/src/main/res/mipmap-xhdpi/ic_loading.png
new file mode 100644
index 0000000..f8858a9
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_loading.png differ

http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/12bc0cb8/app/src/main/res/mipmap-xxhdpi/ic_loading.png
----------------------------------------------------------------------
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_loading.png b/app/src/main/res/mipmap-xxhdpi/ic_loading.png
new file mode 100644
index 0000000..5a4b82f
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_loading.png differ

http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/12bc0cb8/app/src/main/res/mipmap-xxxhdpi/ic_loading.png
----------------------------------------------------------------------
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_loading.png b/app/src/main/res/mipmap-xxxhdpi/ic_loading.png
new file mode 100644
index 0000000..8007c63
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_loading.png differ

http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/12bc0cb8/app/src/main/res/values/strings.xml
----------------------------------------------------------------------
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 1107796..dc320b3 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -85,5 +85,8 @@ limitations under the License.
     
     <string name="emailerr">Email must not be empty</string>
     <string name="passworderr">Password must not be empty</string>
+    <string name="about">Mobile Application for managing Taverna workflows on the fly.<br/>
+                         View, run and download workflows at a convenience on your android mobile<br/>
+                        device. \n\n <br/><b>Developed at Apache Taverna and Powered by MyExperiment</b><br/></string>
 
 </resources>