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/22 12:28:17 UTC
[05/12] incubator-taverna-mobile git commit: Implemented running
workflows over Taverna Player. Fixed downloading workflow indicator
Implemented running workflows over Taverna Player. Fixed downloading workflow indicator
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/78ee0be7
Tree: http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/tree/78ee0be7
Diff: http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/diff/78ee0be7
Branch: refs/heads/master
Commit: 78ee0be76ba3befd6433319ac33e9258ff08a8ce
Parents: 4f660cb
Author: larrytech7 <la...@gmail.com>
Authored: Tue Jun 16 12:56:37 2015 +0100
Committer: larrytech7 <la...@gmail.com>
Committed: Tue Jun 16 12:56:37 2015 +0100
----------------------------------------------------------------------
.../activities/DashboardMainActivity.java | 9 +-
.../WorkflowDownloadReceiver.java | 4 +-
.../mobile/fragments/WorkflowItemFragment.java | 50 ++--
.../workflowdetails/WorkflowdetailFragment.java | 238 ++++++++++++++++++-
.../mobile/tavernamobile/TavernaPlayerAPI.java | 2 +-
.../mobile/utils/WorkflowDownloadManager.java | 4 +-
app/src/main/res/layout/fragment_item_grid.xml | 7 +-
app/src/main/res/layout/fragment_item_list.xml | 2 +-
app/src/main/res/values/strings.xml | 1 +
9 files changed, 267 insertions(+), 50 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/78ee0be7/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 35a073d..5ff0640 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
@@ -56,7 +56,7 @@ import org.apache.taverna.mobile.fragments.WorkflowItemFragment;
import java.io.File;
public class DashboardMainActivity extends ActionBarActivity
- implements NavigationDrawerFragment.NavigationDrawerCallbacks, WorkflowItemFragment.OnWorkflowSelectedListener, FavoriteFragment.FavoriteItemSelected {
+ implements NavigationDrawerFragment.NavigationDrawerCallbacks, FavoriteFragment.FavoriteItemSelected {
/**
* Fragment managing the behaviors, interactions and presentation of the navigation drawer.
@@ -252,13 +252,6 @@ public class DashboardMainActivity extends ActionBarActivity
}
@Override
- public void onWorkflowSelected(int id) {
- //send all details to the next Activity which should display the Workflow details in full
- startActivity(new Intent(this, WorkflowDetailActivity.class));
-
- }
-
- @Override
public void onFavoriteItemSelected(int position) {
//trigger when a favorite item is selected.
startActivity(new Intent(this, WorkflowDetailActivity.class));
http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/78ee0be7/app/src/main/java/org/apache/taverna/mobile/broadcastreceivers/WorkflowDownloadReceiver.java
----------------------------------------------------------------------
diff --git a/app/src/main/java/org/apache/taverna/mobile/broadcastreceivers/WorkflowDownloadReceiver.java b/app/src/main/java/org/apache/taverna/mobile/broadcastreceivers/WorkflowDownloadReceiver.java
index 8bc2468..0657b46 100644
--- a/app/src/main/java/org/apache/taverna/mobile/broadcastreceivers/WorkflowDownloadReceiver.java
+++ b/app/src/main/java/org/apache/taverna/mobile/broadcastreceivers/WorkflowDownloadReceiver.java
@@ -47,11 +47,11 @@ public class WorkflowDownloadReceiver extends BroadcastReceiver {
query.setFilterById(receivedID);
Cursor cur = mgr.query(query);
int index = cur.getColumnIndex(DownloadManager.COLUMN_STATUS);
- String workflow = cur.getString(cur.getColumnIndex(DownloadManager.COLUMN_LOCAL_FILENAME));
+// String workflow = cur.getString(cur.getColumnIndex(DownloadManager.COLUMN_LOCAL_FILENAME));
if(cur.moveToFirst()) {
if(cur.getInt(index) == DownloadManager.STATUS_SUCCESSFUL){
- wdm.sendNotification(workflow+context.getResources().getString(R.string.downloadcomplete));
+ wdm.sendNotification(context.getResources().getString(R.string.downloadcomplete));
}else{
wdm.sendNotification(context.getResources().getString(R.string.downloadfailed));
}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/78ee0be7/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 5793b33..49acbe5 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
@@ -56,8 +56,6 @@ import java.util.List;
* Large screen devices (such as tablets) are supported by replacing the ListView
* with a GridView.
* <p/>
- * Activities containing this fragment MUST implement the {@link org.apache.taverna.mobile.fragments.WorkflowItemFragment.OnWorkflowSelectedListener}
- * interface.
*/
public class WorkflowItemFragment extends Fragment implements android.app.LoaderManager.LoaderCallbacks<List<Workflow>>, SwipeRefreshLayout.OnRefreshListener {
@@ -72,8 +70,6 @@ public class WorkflowItemFragment extends Fragment implements android.app.Loader
private String mParam1;
private String mParam2;
- private OnWorkflowSelectedListener mListener;
-
/**
* The fragment's ListView/GridView.
*/
@@ -133,12 +129,11 @@ public class WorkflowItemFragment extends Fragment implements android.app.Loader
mListView = (RecyclerView) view.findViewById(android.R.id.list);
mListView.setHasFixedSize(true);
mListView.setLayoutManager(new LinearLayoutManager(getActivity()));
- getActivity().getLoaderManager().initLoader(0,null,this);
if(workflowAdapter.getItemCount() == 0){
setEmptyText("No Workflows available");
- mListView.swapAdapter(workflowAdapter, false);
+ mListView.swapAdapter(workflowAdapter, true);
}else {
- mListView.setAdapter(workflowAdapter);
+ mListView.swapAdapter(workflowAdapter,true);
mListView.setAnimation(in);
}
return view;
@@ -148,13 +143,26 @@ public class WorkflowItemFragment extends Fragment implements android.app.Loader
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
- mListener = (OnWorkflowSelectedListener) activity;
+
((DashboardMainActivity) activity).onSectionAttached(1);
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString()
+ " must implement OnFragmentInteractionListener");
}
}
+
+ /**
+ * Called when the fragment is visible to the user and actively running.
+ * This is generally
+ * tied to {@link android.app.Activity#onResume() Activity.onResume} of the containing
+ * Activity's lifecycle.
+ */
+ @Override
+ public void onResume() {
+ super.onResume();
+ getActivity().getLoaderManager().initLoader(0,null,this);
+ }
+
/**
* Initialize the contents of the Activity's standard options menu. You
* should place your menu items in to <var>menu</var>. For this method
@@ -209,7 +217,6 @@ public class WorkflowItemFragment extends Fragment implements android.app.Loader
@Override
public void onDetach() {
super.onDetach();
- mListener = null;
}
/**
@@ -241,37 +248,20 @@ public class WorkflowItemFragment extends Fragment implements android.app.Loader
@Override
public void onLoadFinished(android.content.Loader<List<Workflow>> loader, List<Workflow> workflows) {
swipeRefreshLayout.setRefreshing(false);
- loader.stopLoading();
workflowAdapter = new WorkflowAdapter(getActivity(), workflows);
- if(workflows.size() > 0)
- mListView.swapAdapter(workflowAdapter, true);
+ mListView.swapAdapter(workflowAdapter, true);
}
@Override
public void onLoaderReset(android.content.Loader<List<Workflow>> listLoader) {
- listLoader.reset();
- mListView.swapAdapter(null, false);
+ //listLoader.reset();
+// mListView.swapAdapter(null, true);
}
@Override
public void onRefresh() {
- getActivity().getLoaderManager().initLoader(0,null,this);
- }
-
- /**
- * This interface must be implemented by activities that contain this
- * fragment to allow an interaction in this fragment to be communicated
- * to the activity and potentially other fragments contained in that
- * activity.
- * <p/>
- * See the Android Training lesson <a href=
- * "http://developer.android.com/training/basics/fragments/communicating.html"
- * >Communicating with Other Fragments</a> for more information.
- */
- public interface OnWorkflowSelectedListener {
- // TODO: Update argument type and name
- public void onWorkflowSelected(int workflowPosition);
+ getActivity().getLoaderManager().restartLoader(0, null, this);
}
}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/78ee0be7/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 2a173c3..656ea90 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
@@ -25,36 +25,54 @@ package org.apache.taverna.mobile.fragments.workflowdetails;
*/
import android.app.Activity;
+import android.app.AlertDialog;
import android.app.DownloadManager;
import android.app.LoaderManager;
import android.app.ProgressDialog;
import android.content.Context;
+import android.content.DialogInterface;
import android.content.Intent;
import android.content.Loader;
import android.database.Cursor;
import android.media.Image;
import android.net.Uri;
+import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.preference.PreferenceManager;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
+import android.util.Base64;
+import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
+import android.widget.EditText;
import android.widget.ImageView;
+import android.widget.LinearLayout;
import android.widget.TextView;
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.Workflow;
import org.apache.taverna.mobile.utils.DetailsLoader;
import org.apache.taverna.mobile.utils.WorkflowDownloadManager;
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
import org.w3c.dom.Text;
+import java.io.BufferedReader;
+import java.io.DataOutputStream;
import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
import java.util.prefs.PreferenceChangeEvent;
/**
@@ -69,6 +87,9 @@ public class WorkflowdetailFragment extends Fragment implements View.OnClickList
private DownloadManager downloadManager;
View rootView;
private ProgressDialog progressDialog;
+ public AlertDialog runDialog;
+ public AlertDialog.Builder alertDialogBuilder;
+ private String download_url;
public static long WORKFLO_ID;
/**
@@ -89,13 +110,15 @@ public class WorkflowdetailFragment extends Fragment implements View.OnClickList
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
-
+ long workflowid = getActivity().getIntent().getLongExtra("workflowid", 0);
rootView = inflater.inflate(R.layout.fragment_workflow_detail, container, false);
progressDialog = new ProgressDialog(getActivity());
progressDialog.setMessage(getActivity().getResources().getString(R.string.loading));
progressDialog.setCancelable(true);
- WORKFLO_ID = getActivity().getIntent().getLongExtra("workflowid", 0);
+ WORKFLO_ID = workflowid;
+ Button createRun = (Button) rootView.findViewById(R.id.run_wk);
+ createRun.setOnClickListener(this);
Button download = (Button) rootView.findViewById(R.id.download_wk);
download.setOnClickListener(this);
downloadManager = (DownloadManager) getActivity().getSystemService(Context.DOWNLOAD_SERVICE);
@@ -118,6 +141,7 @@ public class WorkflowdetailFragment extends Fragment implements View.OnClickList
switch(view.getId()){
case R.id.run_wk:
//TODO implement functionality to issue a run request to the Taverna PLAYER to run the current workflow
+ new WorkflowRunTask(getActivity()).execute(""+WORKFLO_ID);
break;
case R.id.download_wk:
// start the android Download manager to start downloading a remote workflow file
@@ -125,7 +149,7 @@ public class WorkflowdetailFragment extends Fragment implements View.OnClickList
try {
dmgr.downloadWorkflow(new File(PreferenceManager.getDefaultSharedPreferences(getActivity()).getString(
DashboardMainActivity.APP_DIRECTORY_NAME, "/")),
- "");
+ download_url);
} catch (Exception e) {
e.printStackTrace();
}
@@ -162,7 +186,7 @@ public class WorkflowdetailFragment extends Fragment implements View.OnClickList
@Override
public void onLoadFinished(Loader<Workflow> workflowLoader, Workflow workflow) {
TextView author = (TextView) rootView.findViewById(R.id.wkf_author);
- author.append("->"+workflow.getWorkflow_author());
+ author.append("->" + workflow.getWorkflow_author());
TextView title = (TextView) rootView.findViewById(R.id.wtitle);
title.setText(workflow.getWorkflow_title());
TextView desc = (TextView) rootView.findViewById(R.id.wdescription);
@@ -173,6 +197,7 @@ public class WorkflowdetailFragment extends Fragment implements View.OnClickList
updated.append(workflow.getWorkflow_datemodified());
// ImageView preview = (ImageView) rootView.findViewById(R.id.wkf_image);
// preview.setImageURI(Uri.parse(workflow.getWorkflow_remote_url()));
+ download_url =workflow.getWorkflow_remote_url();
// progressDialog.cancel();
progressDialog.dismiss();
}
@@ -181,4 +206,209 @@ public class WorkflowdetailFragment extends Fragment implements View.OnClickList
public void onLoaderReset(Loader<Workflow> workflowLoader) {
workflowLoader.reset();
}
+
+ //create and return a new TextView
+ public TextView createTextView(Context mcontetx, String placeholder){
+ TextView tv = new TextView(mcontetx);
+ tv.setText(placeholder);
+ tv.setMinLines(2);
+
+ return tv;
+ }
+
+ //create and return a new EdiText view
+ public EditText createEditText(Context ctx, int i){
+ EditText edt;
+ edt = new EditText(ctx);
+ edt.setHint("Enter Value");
+ edt.setMinLines(2);
+ edt.setId(i);
+ return edt;
+ }
+//fetch and compute the framework on which the run inputs are to be built and entered
+ private class WorkflowRunTask extends AsyncTask<String, Void, String>{
+
+ private Context context;
+
+ private WorkflowRunTask(Context context) {
+ this.context = context;
+ }
+
+ @Override
+ protected void onPreExecute() {
+ super.onPreExecute();
+ progressDialog.setMessage(this.context.getResources().getString(R.string.fetchrun));
+ progressDialog.show();
+ }
+
+ @Override
+ protected String doInBackground(String... params) {
+ StringBuffer sb = new StringBuffer();
+ try {
+
+ URL workflowurl = new URL(TavernaPlayerAPI.PLAYER_RUN_FRAMEWORK_URL+params[0]);
+ HttpURLConnection connection = (HttpURLConnection) workflowurl.openConnection();
+ String userpass = "icep603@gmail.com" + ":" + "creationfox";
+ String basicAuth = "Basic " + Base64.encodeToString(userpass.getBytes(), Base64.DEFAULT);
+
+ connection.setRequestProperty("Authorization", basicAuth);
+ connection.setRequestProperty("Accept", "application/json");
+ connection.setRequestMethod("GET");
+ // connection.setDoInput(true);
+ // connection.setDoOutput(true);
+ 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));
+
+ String jsonData = "";
+ while ((jsonData = br.readLine()) != null) {
+ sb.append(jsonData);
+ }
+ dis.close();
+ br.close();
+ return sb.toString();
+
+ }catch (IOException ex){
+ ex.printStackTrace();
+ }
+ return sb.toString();
+ }
+
+ @Override
+ protected void onPostExecute(String result) {
+ //show the skeleton to the user in a dialog box
+ final Context ctx = this.context;
+ final LinearLayout ll = new LinearLayout(ctx);
+ ll.setOrientation(LinearLayout.VERTICAL);
+
+ try {
+ final JSONObject json = new JSONObject(result); //main server response json
+ JSONObject mjson = json.getJSONObject("run"); //main framework response json
+ String name = mjson.getString("name"); //a name that can be configured or edited for the new run to be created
+ ll.addView(createTextView(ctx, name));
+ final JSONArray attr_array = mjson.getJSONArray("inputs_attributes");
+ for(int i=0; i<attr_array.length(); i++){
+ JSONObject obj = attr_array.getJSONObject(i);
+ ll.addView(createTextView(ctx, obj.getString("name")));
+ ll.addView(createEditText(ctx, i));
+ }
+
+ alertDialogBuilder = new AlertDialog.Builder(ctx);
+ alertDialogBuilder.setView(ll);
+ // alertDialogBuilder.setMessage(result);
+ alertDialogBuilder.setIcon(ctx.getResources().getDrawable(R.mipmap.ic_launcher));
+ alertDialogBuilder.setTitle("New Run");
+ alertDialogBuilder.setPositiveButton("Execute", new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialogInterface, int i) {
+ int n = attr_array.length();
+ for(int j=0; j<n; j++){
+ try {
+ EditText inputText = (EditText) ll.findViewById(j);
+ String value = inputText.getText().toString();//get input entry entered by the user
+ JSONObject jojb = attr_array.getJSONObject(j); //get the input attributes provided by the skeleton
+ jojb.put("value", value); //replace value field in object with the entry provided by the user
+ attr_array.put(j, jojb); //replace the input entry with the new name/input json object
+
+ } catch (JSONException e) {
+ e.printStackTrace();
+ }
+
+ }
+ try {
+ json.put("inputs_attributes", attr_array);
+ Log.i("RUN FRAMEWORK", json.toString(2));
+ new RunTask(ctx).execute(json.toString());
+ } catch (JSONException e) {
+ e.printStackTrace();
+ }
+
+ }
+ });
+ alertDialogBuilder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
+
+ @Override
+ public void onClick(DialogInterface dialogInterface, int i) {
+ dialogInterface.dismiss();
+ }
+ });
+
+ runDialog = alertDialogBuilder.create();
+
+ } catch (JSONException e) {
+ e.printStackTrace();
+ }
+ progressDialog.dismiss();
+
+ runDialog.show();
+ }
+ }
+ //Send request for the execution of a run on the server through the player
+ private class RunTask extends AsyncTask<String, Void, String>{
+
+ private Context context;
+
+ private RunTask(Context ctx) {
+ this.context = ctx;
+ }
+
+ @Override
+ protected void onPreExecute() {
+ super.onPreExecute();
+ }
+
+ @Override
+ protected String doInBackground(String... params) {
+ StringBuffer sb = new StringBuffer();
+ try {
+
+ URL workflowurl = new URL(TavernaPlayerAPI.PLAYER_RUN_URL);
+ HttpURLConnection connection = (HttpURLConnection) workflowurl.openConnection();
+ String userpass = "icep603@gmail.com" + ":" + "creationfox";
+ String basicAuth = "Basic " + Base64.encodeToString(userpass.getBytes(), Base64.DEFAULT);
+
+ connection.setRequestProperty("Authorization", basicAuth);
+ connection.setRequestProperty("Accept", "application/json");
+ connection.setRequestProperty("Content-Type", "application/json");
+ connection.setRequestMethod("POST");
+ // connection.setDoInput(true);
+ // connection.setDoOutput(true);
+ connection.connect(); //send request
+
+ DataOutputStream dos = new DataOutputStream(connection.getOutputStream());
+ dos.writeBytes(params[0]);//write post data which is a formatted json data representing inputs to a run
+ //dos.writeUTF("");
+ dos.flush();
+ dos.close();
+
+ InputStream dis = connection.getInputStream();
+ BufferedReader br = new BufferedReader(new InputStreamReader(dis));
+
+ String jsonData = "";
+ while ((jsonData = br.readLine()) != null) {
+ sb.append(jsonData);
+ }
+ dis.close();
+ br.close();
+ Log.i("RESPONSE Code", "" + connection.getResponseCode());
+ Log.i("RESPONSE Messsage", "" + connection.getResponseMessage());
+ Log.i("Authorization ", "" + connection.getRequestProperty("Authorization"));
+
+ return sb.toString();
+
+ }catch (IOException ex){
+ ex.printStackTrace();
+ }
+ return sb.toString();
+ }
+
+ @Override
+ protected void onPostExecute(String s) {
+ Log.i("RUN OutPut", s);
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/78ee0be7/app/src/main/java/org/apache/taverna/mobile/tavernamobile/TavernaPlayerAPI.java
----------------------------------------------------------------------
diff --git a/app/src/main/java/org/apache/taverna/mobile/tavernamobile/TavernaPlayerAPI.java b/app/src/main/java/org/apache/taverna/mobile/tavernamobile/TavernaPlayerAPI.java
index d3e1e40..85874a8 100644
--- a/app/src/main/java/org/apache/taverna/mobile/tavernamobile/TavernaPlayerAPI.java
+++ b/app/src/main/java/org/apache/taverna/mobile/tavernamobile/TavernaPlayerAPI.java
@@ -11,7 +11,7 @@ public class TavernaPlayerAPI {
public static final String SERVER_BASE_URL = "http://heater.cs.man.ac.uk:8090/taverna-2.5.4/";
public static final String PLAYER_WORKFLOW_URL = PLAYER_BASE_URL+"workflows/";
public static final String PLAYER_RUN_URL = PLAYER_BASE_URL+"runs/";
- public static final String PLAYER_RUN_IMAGE_URL = PLAYER_RUN_URL+"new?workflow_id="; //returns a json 'framework' used for creating runs for the given workflow
+ public static final String PLAYER_RUN_FRAMEWORK_URL = PLAYER_RUN_URL+"new?workflow_id="; //returns a json 'framework' used for creating runs for the given workflow
public TavernaPlayerAPI() {
http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/78ee0be7/app/src/main/java/org/apache/taverna/mobile/utils/WorkflowDownloadManager.java
----------------------------------------------------------------------
diff --git a/app/src/main/java/org/apache/taverna/mobile/utils/WorkflowDownloadManager.java b/app/src/main/java/org/apache/taverna/mobile/utils/WorkflowDownloadManager.java
index ea32477..8364e42 100644
--- a/app/src/main/java/org/apache/taverna/mobile/utils/WorkflowDownloadManager.java
+++ b/app/src/main/java/org/apache/taverna/mobile/utils/WorkflowDownloadManager.java
@@ -85,9 +85,9 @@ public class WorkflowDownloadManager {
request.setDestinationUri(destinationurl);
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED |
DownloadManager.Request.VISIBILITY_VISIBLE);
- request.allowScanningByMediaScanner();
- long id = downloadManager.enqueue(request);
+ long id = this.downloadManager.enqueue(request);
+
if(id != 0)
sendNotification(this.context.getResources().getString(R.string.downloadprogress));
/* int status = cur.getInt(cur.getColumnIndex(DownloadManager.COLUMN_STATUS));
http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/78ee0be7/app/src/main/res/layout/fragment_item_grid.xml
----------------------------------------------------------------------
diff --git a/app/src/main/res/layout/fragment_item_grid.xml b/app/src/main/res/layout/fragment_item_grid.xml
index 82d8c0d..31600d2 100644
--- a/app/src/main/res/layout/fragment_item_grid.xml
+++ b/app/src/main/res/layout/fragment_item_grid.xml
@@ -22,7 +22,10 @@ limitations under the License.
<!-- <GridView android:id="@+id/gridlist"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:numColumns="2">-->
+ android:numColumns="2">--> <android.support.v4.widget.SwipeRefreshLayout
+ android:id="@+id/refresh"
+ android:layout_height="match_parent"
+ android:layout_width="match_parent">
<android.support.v7.widget.RecyclerView
xmlns:recycler_view="http://schemas.android.com/apk/res-auto"
android:id="@android:id/list"
@@ -32,7 +35,7 @@ limitations under the License.
android:background="@color/button_material_light"
></android.support.v7.widget.RecyclerView>
<!-- </GridView>-->
-
+</android.support.v4.widget.SwipeRefreshLayout>
<TextView android:id="@android:id/empty"
android:layout_width="match_parent"
android:layout_height="match_parent"
http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/78ee0be7/app/src/main/res/layout/fragment_item_list.xml
----------------------------------------------------------------------
diff --git a/app/src/main/res/layout/fragment_item_list.xml b/app/src/main/res/layout/fragment_item_list.xml
index 9852dfb..19aa79e 100644
--- a/app/src/main/res/layout/fragment_item_list.xml
+++ b/app/src/main/res/layout/fragment_item_list.xml
@@ -36,7 +36,7 @@ limitations under the License.
android:id="@android:id/list"
android:theme="@style/Theme.AppCompat.Light"
android:layout_width="match_parent"
- android:layout_height="wrap_content"
+ android:layout_height="match_parent"
android:background="@color/button_material_light"
>
http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/78ee0be7/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 e7b2221..e9ac67c 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -79,5 +79,6 @@ limitations under the License.
<string name="seemore"> See more &raquo</string>
<string name="loading">Loading details</string>
<string name="loadworkflows">Loading Workflows</string>
+ <string name="fetchrun">Fetching run components </string>
</resources>