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 <larrya...@gmail.com>
Authored: Mon Jun 29 18:56:49 2015 +0100
Committer: larrytech7 <larrya...@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>
 

Reply via email to