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>