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/07/13 14:54:20 UTC
[02/34] incubator-taverna-mobile git commit: Added author avatar
loading and name on the dashboard. Still unstable though
Added author avatar loading and name on the dashboard. Still unstable though
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/f964b0d1
Tree: http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/tree/f964b0d1
Diff: http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/diff/f964b0d1
Branch: refs/heads/master
Commit: f964b0d10842fb38a6bb7fd727feb8b6b44e830d
Parents: f542e6d
Author: larrytech7 <la...@gmail.com>
Authored: Mon Jun 29 18:56:49 2015 +0100
Committer: larrytech7 <la...@gmail.com>
Committed: Mon Jun 29 18:56:49 2015 +0100
----------------------------------------------------------------------
.../mobile/adapters/WorkflowAdapter.java | 71 +++++++++++-----
.../customviews/WorkflowPreviewImageView.java | 7 ++
.../mobile/fragments/WorkflowItemFragment.java | 89 +++++++++++++++++---
.../workflowdetails/WorkflowdetailFragment.java | 84 ++++++++++++++++--
.../taverna/mobile/tavernamobile/User.java | 21 ++++-
.../taverna/mobile/utils/AvatarLoader.java | 69 +++++++++++++++
.../utils/xmlparsers/AvatarXMLParser.java | 46 ++++++++++
.../xmlparsers/MyExperimentXmlParserRules.java | 41 ++++++++-
.../utils/xmlparsers/WorkflowDetailParser.java | 7 +-
app/src/main/res/anim/zoomin | 15 ++++
app/src/main/res/anim/zoomout | 15 ++++
.../res/layout/fragment_workflow_detail.xml | 14 +++
12 files changed, 431 insertions(+), 48 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/f964b0d1/app/src/main/java/org/apache/taverna/mobile/adapters/WorkflowAdapter.java
----------------------------------------------------------------------
diff --git a/app/src/main/java/org/apache/taverna/mobile/adapters/WorkflowAdapter.java b/app/src/main/java/org/apache/taverna/mobile/adapters/WorkflowAdapter.java
index c2c55eb..c8dae51 100644
--- a/app/src/main/java/org/apache/taverna/mobile/adapters/WorkflowAdapter.java
+++ b/app/src/main/java/org/apache/taverna/mobile/adapters/WorkflowAdapter.java
@@ -28,6 +28,7 @@ import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
+import android.os.AsyncTask;
import android.preference.PreferenceManager;
import android.support.v7.widget.RecyclerView;
import android.text.Html;
@@ -42,16 +43,27 @@ import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
+import com.thebuzzmedia.sjxp.rule.IRule;
+
import org.apache.taverna.mobile.R;
import org.apache.taverna.mobile.activities.DashboardMainActivity;
import org.apache.taverna.mobile.activities.WorkflowDetailActivity;
import org.apache.taverna.mobile.fragments.workflowdetails.WorkflowdetailFragment;
+import org.apache.taverna.mobile.tavernamobile.User;
import org.apache.taverna.mobile.tavernamobile.Workflow;
import org.apache.taverna.mobile.utils.WorkflowDownloadManager;
import org.apache.taverna.mobile.utils.Workflow_DB;
+import org.apache.taverna.mobile.utils.xmlparsers.AvatarXMLParser;
+import org.apache.taverna.mobile.utils.xmlparsers.MyExperimentXmlParserRules;
+import org.apache.taverna.mobile.utils.xmlparsers.WorkflowDetailParser;
import org.json.JSONException;
import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.HttpURLConnection;
+import java.net.MalformedURLException;
+import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
@@ -123,34 +135,11 @@ public class WorkflowAdapter extends RecyclerView.Adapter<WorkflowAdapter.ViewHo
viewHolder.btn_view_workflow.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
-// Intent detailsIntent = new Intent(context, WorkflowDetailActivity.class);
-
- //detailsIntent.putExtras(null);
context.startActivity(it);
((Activity) context).overridePendingTransition(android.R.anim.slide_in_left, android.R.anim.fade_out);
}
});
- /*viewHolder.btn_download_workflow.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- try {
-
- //String workflow_name = Uri.parse(wkflow_url).getLastPathSegment();
- WorkflowDownloadManager dm = new WorkflowDownloadManager(c);
- File destinationFile = new File(PreferenceManager.getDefaultSharedPreferences(c)
- .getString(DashboardMainActivity.APP_DIRECTORY_NAME, "/"));
- Log.i("Workflow Name ", destinationFile.getAbsolutePath());
- dm.downloadWorkflow(destinationFile, wkflow_url);
- } catch(NullPointerException np){
- np.printStackTrace();
- }catch (IllegalArgumentException ill){
- ill.printStackTrace();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- });*/
viewHolder.btn_mark_workflow.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
@@ -177,6 +166,9 @@ public class WorkflowAdapter extends RecyclerView.Adapter<WorkflowAdapter.ViewHo
} catch (JSONException e) {
e.printStackTrace();
}
+ synchronized (this){
+ new DetailLinkLoader().execute(uri);
+ }
}
public void setData(List<Workflow> workflowList){
@@ -226,4 +218,37 @@ public class WorkflowAdapter extends RecyclerView.Adapter<WorkflowAdapter.ViewHo
btn_view_workflow = (Button) v.findViewById(R.id.button_view_workflow);
}
}
+
+ /**
+ * Loads partially details of a given workflow to retrieve author information
+ */
+ private class DetailLinkLoader extends AsyncTask<String, Void, Void>{
+
+ @Override
+ protected Void doInBackground(String ... strings) {
+ URL url = null;
+ HttpURLConnection connection = null;
+ try {
+ url = new URL(strings[0]); //fetch workflow detail
+ connection = (HttpURLConnection) url.openConnection();
+ connection.setDoInput(true);
+ connection.connect();
+ InputStream input = connection.getInputStream();
+ IRule avatarRule = new MyExperimentXmlParserRules.UploaderRule(IRule.Type.ATTRIBUTE,"/workflow/uploader", "resource","uri","id");
+ WorkflowDetailParser detailMinParser = new WorkflowDetailParser(new IRule[]{avatarRule});
+ detailMinParser.parse(input, new User());
+
+ } catch (MalformedURLException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+ @Override
+ protected void onPostExecute(Void aVoid) {
+ super.cancel(true);
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/f964b0d1/app/src/main/java/org/apache/taverna/mobile/customviews/WorkflowPreviewImageView.java
----------------------------------------------------------------------
diff --git a/app/src/main/java/org/apache/taverna/mobile/customviews/WorkflowPreviewImageView.java b/app/src/main/java/org/apache/taverna/mobile/customviews/WorkflowPreviewImageView.java
new file mode 100644
index 0000000..c34c680
--- /dev/null
+++ b/app/src/main/java/org/apache/taverna/mobile/customviews/WorkflowPreviewImageView.java
@@ -0,0 +1,7 @@
+package org.apache.taverna.mobile.customviews;
+
+/**
+ * Created by root on 6/29/15.
+ */
+public class WorkflowPreviewImageView {
+}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/f964b0d1/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 10a1f8b..b206f01 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
@@ -28,6 +28,9 @@ import android.app.Activity;
import android.app.ProgressDialog;
import android.app.SearchManager;
import android.content.Context;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.widget.SwipeRefreshLayout;
@@ -44,15 +47,22 @@ import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
+import android.widget.ImageView;
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.adapters.WorkflowAdapter;
+import org.apache.taverna.mobile.tavernamobile.User;
import org.apache.taverna.mobile.tavernamobile.Workflow;
+import org.apache.taverna.mobile.utils.AvatarLoader;
import org.apache.taverna.mobile.utils.WorkflowLoader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.HttpURLConnection;
+import java.net.URL;
import java.util.ArrayList;
import java.util.List;
@@ -87,8 +97,9 @@ public class WorkflowItemFragment extends Fragment implements SwipeRefreshLayout
*/
private WorkflowAdapter workflowAdapter;
private static WorkflowAdapter searchAdpater;
- private View rootView;
+ private static View rootView;
public static Context cx;
+ private static boolean STATE_ON = false;
public static WorkflowItemFragment newInstance(String param1, String param2) {
WorkflowItemFragment fragment = new WorkflowItemFragment();
@@ -166,16 +177,15 @@ public class WorkflowItemFragment extends Fragment implements SwipeRefreshLayout
@Override
public void onResume() {
super.onResume();
- /* //Handle search actions from a system sent intent
- Intent searchIntent = getActivity().getIntent();
- if(searchIntent != null && Intent.ACTION_SEARCH.equals(searchIntent.getAction())){
- //retrieve and process query then display results
- String query = searchIntent.getStringExtra(SearchManager.QUERY);
- //Toast.makeText(getActivity(), "Query = " + query, Toast.LENGTH_SHORT).show();
- performSearch(workflowAdapter,query);
- }else*/
+ if(!STATE_ON)
new WorkflowLoader(getActivity(), swipeRefreshLayout).execute();
- // getActivity().getLoaderManager().initLoader(0,null,this).forceLoad();
+
+ }
+
+ @Override
+ public void onSaveInstanceState(Bundle outState) {
+ super.onSaveInstanceState(outState);
+ STATE_ON = true;
}
@Override
@@ -277,4 +287,63 @@ public class WorkflowItemFragment extends Fragment implements SwipeRefreshLayout
}
});
}
+ public static void startLoadingAvatar(final User author) {
+
+ ((Activity)cx).runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ synchronized (this) {
+ new AvatarLoader().execute(author.getDetails_uri());
+ System.out.println(author.getDetails_uri());
+ }
+ }
+ });
+ }
+
+ public static void updateAvatar(final User author) {
+
+ ((Activity)cx).runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ synchronized (this) {
+ ((TextView)rootView.findViewById(R.id.workflow_author)).setText(author.getName());
+ new LoadAuthorAvatar((ImageView) rootView.findViewById(R.id.author_profile_image)).execute(author.getAvatar_url());
+ }
+ }
+ });
+ }
+ /**
+ * Load the Author Avatar from a background Task
+ */
+ private static class LoadAuthorAvatar extends AsyncTask<String, Void, Bitmap> {
+ ImageView img;
+
+ public LoadAuthorAvatar(ImageView imageView) {
+ img = imageView;
+ }
+
+ @Override
+ protected Bitmap doInBackground(String... strings) {
+ Bitmap myBitmap = null;
+ try {
+ URL url = new URL(strings[0]);
+ HttpURLConnection connection = null;
+ connection = (HttpURLConnection) url.openConnection();
+ connection.setDoInput(true);
+ connection.connect();
+ InputStream input = connection.getInputStream();
+ myBitmap = BitmapFactory.decodeStream(input);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ return myBitmap;
+ }
+
+ @Override
+ protected void onPostExecute(Bitmap bitmap) {
+ img.setImageBitmap(bitmap);
+/// img.setBackground();
+ notify();
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/f964b0d1/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 31ab593..8d96e13 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
@@ -46,15 +46,20 @@ import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.util.Base64;
import android.util.Log;
+import android.view.DragEvent;
import android.view.LayoutInflater;
+import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
+import android.view.animation.Animation;
+import android.view.animation.AnimationUtils;
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 android.widget.ZoomControls;
import org.apache.taverna.mobile.R;
import org.apache.taverna.mobile.activities.DashboardMainActivity;
@@ -95,6 +100,10 @@ public class WorkflowdetailFragment extends Fragment implements View.OnClickList
private static String download_url;
public static long WORKFLO_ID;
public static Context cont;
+ private static boolean LOAD_STATE = false;
+ private ZoomControls zoomControls;
+ static Animation zoomin;
+ static Animation zoomout;
/**
* Returns a new instance of this fragment for the given section
@@ -120,6 +129,11 @@ public class WorkflowdetailFragment extends Fragment implements View.OnClickList
progressDialog.setMessage(getActivity().getResources().getString(R.string.loading));
progressDialog.setCancelable(false);
WORKFLO_ID = workflowid;
+ zoomin = AnimationUtils.loadAnimation(getActivity(), R.anim.zoomin);
+ zoomout = AnimationUtils.loadAnimation(getActivity(), R.anim.zoomout);
+ zoomControls = (ZoomControls) rootView.findViewById(R.id.zoomControls);
+ zoomControls.setOnZoomInClickListener(this);
+ zoomControls.setOnZoomOutClickListener(this);
Button createRun = (Button) rootView.findViewById(R.id.run_wk);
createRun.setOnClickListener(this);
@@ -163,6 +177,10 @@ public class WorkflowdetailFragment extends Fragment implements View.OnClickList
case R.id.mark_wk:
//TODO mark a workflow as important and launch task to store the entry into the local database
break;
+ case R.id.zoomControls:
+ zoomin.startNow();
+ Toast.makeText(getActivity(), "Zooming", Toast.LENGTH_SHORT).show();
+ break;
}
}
@@ -175,8 +193,14 @@ public class WorkflowdetailFragment extends Fragment implements View.OnClickList
@Override
public void onResume() {
super.onResume();
- getActivity().getLoaderManager().initLoader(1, null, this).forceLoad();
+ if(!LOAD_STATE)
+ getActivity().getLoaderManager().initLoader(1, null, this).forceLoad();
+ }
+ @Override
+ public void onSaveInstanceState(Bundle outState) {
+ super.onSaveInstanceState(outState);
+ LOAD_STATE = true;
}
@Override
@@ -212,26 +236,71 @@ public class WorkflowdetailFragment extends Fragment implements View.OnClickList
}
public static void setWorkflowDetails(final Workflow wk){
+
((Activity)cont).runOnUiThread(new Runnable() {
@Override
public void run() {
- //update UI with code here
+ //load necessary widgets
TextView author = (TextView) rootView.findViewById(R.id.wkf_author);
+ TextView updated = (TextView) rootView.findViewById(R.id.wupdatedat);
+ TextView type = (TextView) rootView.findViewById(R.id.wtype);
+ TextView title = (TextView) rootView.findViewById(R.id.wtitle);
+ TextView desc = (TextView) rootView.findViewById(R.id.wdescription);
+ TextView createdat = (TextView) rootView.findViewById(R.id.wcreatedat);
+ final ImageView preview = (ImageView) rootView.findViewById(R.id.wkf_image);
+
+ //set widget data
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);
desc.setText(wk.getWorkflow_description());
- TextView createdat = (TextView) rootView.findViewById(R.id.wcreatedat);
createdat.setText("Created : " + wk.getWorkflow_datecreated());
- TextView updated = (TextView) rootView.findViewById(R.id.wupdatedat);
updated.setText("Workflow Description");
- ImageView preview = (ImageView) rootView.findViewById(R.id.wkf_image);
+ type.setText("Type-> "+wk.getWorkflow_Type());
+
//preview.setImageURI(Uri.parse(wk.getWorkflow_preview()));
new LoadImageThread(preview, wk.getWorkflow_preview()).execute();
download_url =wk.getWorkflow_remote_url();
+ zoomin.setAnimationListener(new Animation.AnimationListener() {
+
+ @Override
+ public void onAnimationStart(Animation arg0) {
+ // TODO Auto-generated method stub
+ preview.startAnimation(zoomout);
+ }
+
+ @Override
+ public void onAnimationRepeat(Animation arg0) {
+ // TODO Auto-generated method stub
+ }
+
+ @Override
+ public void onAnimationEnd(Animation arg0) {
+ preview.startAnimation(zoomout);
+
+ }
+ });
+ zoomout.setAnimationListener(new Animation.AnimationListener() {
+
+ @Override
+ public void onAnimationStart(Animation arg0) {
+ // TODO Auto-generated method stub
+ preview.startAnimation(zoomin);
+ }
+
+ @Override
+ public void onAnimationRepeat(Animation arg0) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void onAnimationEnd(Animation arg0) {
+ preview.startAnimation(zoomin);
+
+ }
+ });
progressDialog.dismiss();
}
});
@@ -267,6 +336,7 @@ public class WorkflowdetailFragment extends Fragment implements View.OnClickList
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/f964b0d1/app/src/main/java/org/apache/taverna/mobile/tavernamobile/User.java
----------------------------------------------------------------------
diff --git a/app/src/main/java/org/apache/taverna/mobile/tavernamobile/User.java b/app/src/main/java/org/apache/taverna/mobile/tavernamobile/User.java
index e352913..efd578c 100644
--- a/app/src/main/java/org/apache/taverna/mobile/tavernamobile/User.java
+++ b/app/src/main/java/org/apache/taverna/mobile/tavernamobile/User.java
@@ -34,9 +34,6 @@ import java.util.List;
*/
public class User {
- public User() {
- super();
- }
private static final long serialVersionUID = 3467195671046297377L;
@Element(required = false)
protected String id;
@@ -57,7 +54,12 @@ public class User {
@Element(required = false)
protected String website;
protected String details_uri;
+ private String avatar_url;
+ public User(){
+ super();
+// this.setAvatar_url("http://www.myexperiment.org/users/6/pictures/614");
+ }
protected List<Workflow> user_workflows; //a list of workflows owned by this user
public void setId(String id) {
@@ -80,6 +82,14 @@ public class User {
this.details_uri = details_uri;
}
+ public String getAvatar_url() {
+ return this.avatar_url;
+ }
+
+ public void setAvatar_url(String avatar_url) {
+ this.avatar_url = avatar_url;
+ }
+
public String getName() {
return name;
}
@@ -135,4 +145,9 @@ public class User {
public void setWebsite(String website) {
this.website = website;
}
+
+ @Override
+ public String toString(){
+ return "This is the user object";
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/f964b0d1/app/src/main/java/org/apache/taverna/mobile/utils/AvatarLoader.java
----------------------------------------------------------------------
diff --git a/app/src/main/java/org/apache/taverna/mobile/utils/AvatarLoader.java b/app/src/main/java/org/apache/taverna/mobile/utils/AvatarLoader.java
new file mode 100644
index 0000000..b7f5ee4
--- /dev/null
+++ b/app/src/main/java/org/apache/taverna/mobile/utils/AvatarLoader.java
@@ -0,0 +1,69 @@
+package org.apache.taverna.mobile.utils;
+/**
+ * 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.os.AsyncTask;
+
+import com.thebuzzmedia.sjxp.rule.IRule;
+
+import org.apache.taverna.mobile.tavernamobile.User;
+import org.apache.taverna.mobile.utils.xmlparsers.AvatarXMLParser;
+import org.apache.taverna.mobile.utils.xmlparsers.MyExperimentXmlParserRules;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.HttpURLConnection;
+import java.net.MalformedURLException;
+import java.net.URL;
+
+/**
+ * Created by Larry AKah on 6/29/15.
+ */
+public class AvatarLoader extends AsyncTask<String, Void, Void> {
+ @Override
+ protected Void doInBackground(String... strings) {
+ URL url = null;
+ HttpURLConnection connection = null;
+ try {
+
+ url = new URL(strings[0]);
+ connection = (HttpURLConnection) url.openConnection();
+ connection.setDoInput(true);
+ connection.connect();
+ InputStream input = connection.getInputStream();
+ IRule avatarRule = new MyExperimentXmlParserRules.AuthorRule(IRule.Type.ATTRIBUTE,"/user/avatar", "resource","uri","id");
+ IRule avatarName = new MyExperimentXmlParserRules.AuthorRule(IRule.Type.CHARACTER,"/user/name");
+ AvatarXMLParser avatarXMLParser = new AvatarXMLParser(new IRule[]{avatarRule, avatarName});
+
+ avatarXMLParser.parse(input, new User());
+
+ } catch (MalformedURLException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ return null;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/f964b0d1/app/src/main/java/org/apache/taverna/mobile/utils/xmlparsers/AvatarXMLParser.java
----------------------------------------------------------------------
diff --git a/app/src/main/java/org/apache/taverna/mobile/utils/xmlparsers/AvatarXMLParser.java b/app/src/main/java/org/apache/taverna/mobile/utils/xmlparsers/AvatarXMLParser.java
new file mode 100644
index 0000000..9b74aa1
--- /dev/null
+++ b/app/src/main/java/org/apache/taverna/mobile/utils/xmlparsers/AvatarXMLParser.java
@@ -0,0 +1,46 @@
+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 com.thebuzzmedia.sjxp.XMLParser;
+import com.thebuzzmedia.sjxp.XMLParserException;
+import com.thebuzzmedia.sjxp.rule.IRule;
+
+import org.apache.taverna.mobile.fragments.WorkflowItemFragment;
+import org.apache.taverna.mobile.tavernamobile.User;
+
+/**
+ * Created by Larry Akah on 6/29/15.
+ */
+public class AvatarXMLParser extends XMLParser {
+
+ public AvatarXMLParser(IRule[] rules) throws IllegalArgumentException, XMLParserException {
+ super(rules);
+ }
+
+ @Override
+ protected void doEndDocument(Object userObject) {
+ WorkflowItemFragment.updateAvatar((User) userObject);
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/f964b0d1/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
index 9bb47ed..9be18b3 100644
--- 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
@@ -24,8 +24,6 @@ package org.apache.taverna.mobile.utils.xmlparsers;
* under the License.
*/
-import android.annotation.TargetApi;
-import android.os.Build;
import android.text.Html;
import com.thebuzzmedia.sjxp.XMLParser;
@@ -34,7 +32,6 @@ 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;
@@ -149,14 +146,23 @@ public class MyExperimentXmlParserRules {
switch(index){
case 0:
muser.setWebsite(value);
+ if( (userObject instanceof User)){
+ ((User)userObject).setWebsite(value);
+ }
break;
case 1:
muser.setDetails_uri(value);
+ if( (userObject instanceof User)){
+ ((User)userObject).setDetails_uri(value);
+ }
break;
case 2:
muser.setId(value);
break;
}
+ if( (userObject instanceof User)){
+ System.out.println("USER Details => "+muser.getDetails_uri());
+ }
}
@Override
@@ -166,6 +172,35 @@ public class MyExperimentXmlParserRules {
((Workflow)userObject).setUploader(muser);
}
}
+//rule used to parse author from main page
+ public static class AuthorRule extends DefaultRule{
+
+ public AuthorRule(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:
+ ((User) userObject).setAvatar_url(value);
+ break;
+ case 1:
+ ((User) userObject).setDetails_uri(value);
+ break;
+ case 2:
+ ((User) userObject).setId(value);
+ break;
+ }
+ }
+
+ @Override
+ public void handleParsedCharacters(XMLParser parser, String text, Object userObject) {
+ ((User) userObject).setName(text);
+ //((Workflow)userObject).setUploader(muser);
+ }
+ }
//rule for the date the workflow was created/uploaded
public static class DateRule extends DefaultRule{
http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/f964b0d1/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 a49d836..906b99e 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
@@ -4,7 +4,9 @@ import com.thebuzzmedia.sjxp.XMLParser;
import com.thebuzzmedia.sjxp.XMLParserException;
import com.thebuzzmedia.sjxp.rule.IRule;
+import org.apache.taverna.mobile.fragments.WorkflowItemFragment;
import org.apache.taverna.mobile.fragments.workflowdetails.WorkflowdetailFragment;
+import org.apache.taverna.mobile.tavernamobile.User;
import org.apache.taverna.mobile.tavernamobile.Workflow;
/**
@@ -45,8 +47,9 @@ public class WorkflowDetailParser extends XMLParser {
//deliver results when parsing has completed and all the information required has been retrieved
@Override
protected void doEndDocument(Object userObject) {
+ if(userObject instanceof User){
+ WorkflowItemFragment.startLoadingAvatar((User) userObject);
+ }else
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/f964b0d1/app/src/main/res/anim/zoomin
----------------------------------------------------------------------
diff --git a/app/src/main/res/anim/zoomin b/app/src/main/res/anim/zoomin
new file mode 100644
index 0000000..691c50e
--- /dev/null
+++ b/app/src/main/res/anim/zoomin
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set xmlns:android="http://schemas.android.com/apk/res/android"
+ android:fillAfter="true" >
+ <scale
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:duration="20000"
+ android:fromXScale="1"
+ android:fromYScale="1"
+ android:pivotX="50%"
+ android:pivotY="50%"
+ android:toXScale="3"
+ android:toYScale="3" >
+ </scale>
+
+</set>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/f964b0d1/app/src/main/res/anim/zoomout
----------------------------------------------------------------------
diff --git a/app/src/main/res/anim/zoomout b/app/src/main/res/anim/zoomout
new file mode 100644
index 0000000..af391cb
--- /dev/null
+++ b/app/src/main/res/anim/zoomout
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set xmlns:android="http://schemas.android.com/apk/res/android"
+ android:fillAfter="true" >
+ <scale
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:duration="20000"
+ android:fromXScale="1.0"
+ android:fromYScale="1.0"
+ android:pivotX="50%"
+ android:pivotY="50%"
+ android:toXScale="0.5"
+ android:toYScale="0.5" >
+ </scale>
+
+</set>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/f964b0d1/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 228a391..8a9b7fc 100644
--- a/app/src/main/res/layout/fragment_workflow_detail.xml
+++ b/app/src/main/res/layout/fragment_workflow_detail.xml
@@ -68,6 +68,13 @@ limitations under the License.
android:id="@+id/wupdatedat"
android:layout_marginTop="5dp"
android:text="@string/modified" />
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:id="@+id/wtype"
+ android:layout_marginTop="5dp"
+ android:text="Type" />
<TextView
android:layout_width="match_parent"
@@ -86,6 +93,13 @@ limitations under the License.
android:backgroundTint="@color/accent_material_light"
android:backgroundTintMode="src_atop" />
+ <ZoomControls
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:id="@+id/zoomControls"
+ android:layout_gravity="center_horizontal"
+ android:orientation="horizontal" />
+
</LinearLayout>
</ScrollView>