http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/e752e97d/app/src/main/java/org/apache/taverna/mobile/broadcastreceivers/WorkflowDownloadReceiver.java ---------------------------------------------------------------------- diff --git a/app/src/main/java/org/apache/taverna/mobile/broadcastreceivers/WorkflowDownloadReceiver.java b/app/src/main/java/org/apache/taverna/mobile/broadcastreceivers/WorkflowDownloadReceiver.java index 0657b46..383f707 100644 --- a/app/src/main/java/org/apache/taverna/mobile/broadcastreceivers/WorkflowDownloadReceiver.java +++ b/app/src/main/java/org/apache/taverna/mobile/broadcastreceivers/WorkflowDownloadReceiver.java @@ -2,10 +2,10 @@ package org.apache.taverna.mobile.broadcastreceivers; /** * 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 @@ -23,15 +23,16 @@ package org.apache.taverna.mobile.broadcastreceivers; * specific language governing permissions and limitations * under the License. */ + +import org.apache.taverna.mobile.R; +import org.apache.taverna.mobile.utils.WorkflowDownloadManager; + import android.app.DownloadManager; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.database.Cursor; -import org.apache.taverna.mobile.R; -import org.apache.taverna.mobile.utils.WorkflowDownloadManager; - public class WorkflowDownloadReceiver extends BroadcastReceiver { public WorkflowDownloadReceiver() { } @@ -43,19 +44,21 @@ public class WorkflowDownloadReceiver extends BroadcastReceiver { DownloadManager mgr = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE); WorkflowDownloadManager wdm = new WorkflowDownloadManager(context, mgr); - DownloadManager.Query query = new DownloadManager.Query(); //ask for information about the download queue + DownloadManager.Query query = new DownloadManager.Query(); //ask for information about + // the download queue query.setFilterById(receivedID); Cursor cur = mgr.query(query); int index = cur.getColumnIndex(DownloadManager.COLUMN_STATUS); -// String workflow = cur.getString(cur.getColumnIndex(DownloadManager.COLUMN_LOCAL_FILENAME)); +// String workflow = cur.getString(cur.getColumnIndex(DownloadManager +// .COLUMN_LOCAL_FILENAME)); - if(cur.moveToFirst()) { - if(cur.getInt(index) == DownloadManager.STATUS_SUCCESSFUL){ + if (cur.moveToFirst()) { + if (cur.getInt(index) == DownloadManager.STATUS_SUCCESSFUL) { wdm.sendNotification(context.getResources().getString(R.string.downloadcomplete)); - }else{ + } else { wdm.sendNotification(context.getResources().getString(R.string.downloadfailed)); } - }else{ + } else { wdm.sendNotification(context.getResources().getString(R.string.downloadfailed)); } cur.close();
http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/e752e97d/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 index 5f5276e..fb0b497 100644 --- a/app/src/main/java/org/apache/taverna/mobile/customviews/WorkflowPreviewImageView.java +++ b/app/src/main/java/org/apache/taverna/mobile/customviews/WorkflowPreviewImageView.java @@ -2,10 +2,10 @@ package org.apache.taverna.mobile.customviews; /** * 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 @@ -37,13 +37,12 @@ import android.widget.ImageView; /** * Created by Akah Harvey on 6/29/15. */ -public class WorkflowPreviewImageView extends ImageView{ - Matrix matrix = new Matrix(); - +public class WorkflowPreviewImageView extends ImageView { static final int NONE = 0; static final int DRAG = 1; static final int ZOOM = 2; static final int CLICK = 3; + Matrix matrix = new Matrix(); int mode = NONE; PointF last = new PointF(); @@ -60,8 +59,7 @@ public class WorkflowPreviewImageView extends ImageView{ ScaleGestureDetector mScaleDetector; Context context; - public WorkflowPreviewImageView(Context context, AttributeSet attr) - { + public WorkflowPreviewImageView(Context context, AttributeSet attr) { super(context, attr); super.setClickable(true); this.context = context; @@ -71,12 +69,10 @@ public class WorkflowPreviewImageView extends ImageView{ setImageMatrix(matrix); setScaleType(ScaleType.MATRIX); - setOnTouchListener(new OnTouchListener() - { + setOnTouchListener(new OnTouchListener() { @Override - public boolean onTouch(View v, MotionEvent event) - { + public boolean onTouch(View v, MotionEvent event) { mScaleDetector.onTouchEvent(event); matrix.getValues(m); @@ -84,8 +80,7 @@ public class WorkflowPreviewImageView extends ImageView{ float y = m[Matrix.MTRANS_Y]; PointF curr = new PointF(event.getX(), event.getY()); - switch (event.getAction()) - { + switch (event.getAction()) { //when one finger is touching //set the mode to DRAG case MotionEvent.ACTION_DOWN: @@ -105,38 +100,36 @@ public class WorkflowPreviewImageView extends ImageView{ case MotionEvent.ACTION_MOVE: //if the mode is ZOOM or //if the mode is DRAG and already zoomed - if (mode == ZOOM || (mode == DRAG && saveScale > minScale)) - { - float deltaX = curr.x - last.x;// x difference - float deltaY = curr.y - last.y;// y difference - float scaleWidth = Math.round(origWidth * saveScale);// width after applying current scale - float scaleHeight = Math.round(origHeight * saveScale);// height after applying current scale + if (mode == ZOOM || (mode == DRAG && saveScale > minScale)) { + float deltaX = curr.x - last.x; // x difference + float deltaY = curr.y - last.y; // y difference + float scaleWidth = Math.round(origWidth * saveScale); // width after + // applying current scale + float scaleHeight = Math.round(origHeight * saveScale); // height + // after applying current scale //if scaleWidth is smaller than the views width //in other words if the image width fits in the view //limit left and right movement - if (scaleWidth < width) - { + if (scaleWidth < width) { deltaX = 0; - if (y + deltaY > 0) + if (y + deltaY > 0) { deltaY = -y; - else if (y + deltaY < -bottom) + } else if (y + deltaY < -bottom) { deltaY = -(y + bottom); - } - //if scaleHeight is smaller than the views height - //in other words if the image height fits in the view - //limit up and down movement - else if (scaleHeight < height) - { + } + } else if (scaleHeight < height) { + //if scaleHeight is smaller than the views height + //in other words if the image height fits in the view + //limit up and down movement deltaY = 0; - if (x + deltaX > 0) + if (x + deltaX > 0) { deltaX = -x; - else if (x + deltaX < -right) + } else if (x + deltaX < -right) { deltaX = -(x + right); - } + } + } else { //if the image doesnt fit in the width or height //limit both up and down and left and right - else - { if (x + deltaX > 0) deltaX = -x; else if (x + deltaX < -right) @@ -175,65 +168,80 @@ public class WorkflowPreviewImageView extends ImageView{ } @Override - public void setImageBitmap(Bitmap bm) - { + public void setImageBitmap(Bitmap bm) { super.setImageBitmap(bm); bmWidth = bm.getWidth(); bmHeight = bm.getHeight(); } - public void setMaxZoom(float x) - { + public void setMaxZoom(float x) { maxScale = x; } - private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener - { + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + width = MeasureSpec.getSize(widthMeasureSpec); + height = MeasureSpec.getSize(heightMeasureSpec); + //Fit to screen. + float scale; + float scaleX = width / bmWidth; + float scaleY = height / bmHeight; + scale = Math.min(scaleX, scaleY); + matrix.setScale(scale, scale); + setImageMatrix(matrix); + saveScale = 1f; + + // Center the image + redundantYSpace = height - (scale * bmHeight); + redundantXSpace = width - (scale * bmWidth); + redundantYSpace /= 2; + redundantXSpace /= 2; + + matrix.postTranslate(redundantXSpace, redundantYSpace); + + origWidth = width - 2 * redundantXSpace; + origHeight = height - 2 * redundantYSpace; + right = width * saveScale - width - (2 * redundantXSpace * saveScale); + bottom = height * saveScale - height - (2 * redundantYSpace * saveScale); + setImageMatrix(matrix); + } + + private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener { @Override - public boolean onScaleBegin(ScaleGestureDetector detector) - { + public boolean onScaleBegin(ScaleGestureDetector detector) { mode = ZOOM; return true; } @Override - public boolean onScale(ScaleGestureDetector detector) - { + public boolean onScale(ScaleGestureDetector detector) { float mScaleFactor = detector.getScaleFactor(); float origScale = saveScale; saveScale *= mScaleFactor; - if (saveScale > maxScale) - { + if (saveScale > maxScale) { saveScale = maxScale; mScaleFactor = maxScale / origScale; - } - else if (saveScale < minScale) - { + } else if (saveScale < minScale) { saveScale = minScale; mScaleFactor = minScale / origScale; } right = width * saveScale - width - (2 * redundantXSpace * saveScale); bottom = height * saveScale - height - (2 * redundantYSpace * saveScale); - if (origWidth * saveScale <= width || origHeight * saveScale <= height) - { + if (origWidth * saveScale <= width || origHeight * saveScale <= height) { matrix.postScale(mScaleFactor, mScaleFactor, width / 2, height / 2); - if (mScaleFactor < 1) - { + if (mScaleFactor < 1) { matrix.getValues(m); float x = m[Matrix.MTRANS_X]; float y = m[Matrix.MTRANS_Y]; - if (mScaleFactor < 1) - { - if (Math.round(origWidth * saveScale) < width) - { + if (mScaleFactor < 1) { + if (Math.round(origWidth * saveScale) < width) { if (y < -bottom) matrix.postTranslate(0, -(y + bottom)); else if (y > 0) matrix.postTranslate(0, -y); - } - else - { + } else { if (x < -right) matrix.postTranslate(-(x + right), 0); else if (x > 0) @@ -241,10 +249,9 @@ public class WorkflowPreviewImageView extends ImageView{ } } } - } - else - { - matrix.postScale(mScaleFactor, mScaleFactor, detector.getFocusX(), detector.getFocusY()); + } else { + matrix.postScale(mScaleFactor, mScaleFactor, detector.getFocusX(), detector + .getFocusY()); matrix.getValues(m); float x = m[Matrix.MTRANS_X]; float y = m[Matrix.MTRANS_Y]; @@ -262,34 +269,4 @@ public class WorkflowPreviewImageView extends ImageView{ return true; } } - - @Override - protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec) - { - super.onMeasure(widthMeasureSpec, heightMeasureSpec); - width = MeasureSpec.getSize(widthMeasureSpec); - height = MeasureSpec.getSize(heightMeasureSpec); - //Fit to screen. - float scale; - float scaleX = width / bmWidth; - float scaleY = height / bmHeight; - scale = Math.min(scaleX, scaleY); - matrix.setScale(scale, scale); - setImageMatrix(matrix); - saveScale = 1f; - - // Center the image - redundantYSpace = height - (scale * bmHeight) ; - redundantXSpace = width - (scale * bmWidth); - redundantYSpace /= 2; - redundantXSpace /= 2; - - matrix.postTranslate(redundantXSpace, redundantYSpace); - - origWidth = width - 2 * redundantXSpace; - origHeight = height - 2 * redundantYSpace; - right = width * saveScale - width - (2 * redundantXSpace * saveScale); - bottom = height * saveScale - height - (2 * redundantYSpace * saveScale); - setImageMatrix(matrix); - } } http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/e752e97d/app/src/main/java/org/apache/taverna/mobile/data/DataManager.java ---------------------------------------------------------------------- diff --git a/app/src/main/java/org/apache/taverna/mobile/data/DataManager.java b/app/src/main/java/org/apache/taverna/mobile/data/DataManager.java index d41accf..52863e3 100644 --- a/app/src/main/java/org/apache/taverna/mobile/data/DataManager.java +++ b/app/src/main/java/org/apache/taverna/mobile/data/DataManager.java @@ -1,7 +1,7 @@ package org.apache.taverna.mobile.data; -import org.apache.taverna.mobile.data.model.DetailAnnouncement; import org.apache.taverna.mobile.data.model.Announcements; +import org.apache.taverna.mobile.data.model.DetailAnnouncement; import org.apache.taverna.mobile.data.remote.BaseApiManager; import rx.Observable; @@ -13,22 +13,20 @@ public class DataManager { public BaseApiManager mBaseApiManager = new BaseApiManager(); - public DataManager(){ + public DataManager() { } /** - * * @return List of all Announcement */ - public Observable<Announcements> getAllAnnouncement(int pageNumber){ + public Observable<Announcements> getAllAnnouncement(int pageNumber) { return mBaseApiManager.getTavernaApi().getAllAnnouncements(pageNumber); } /** - * * @return Detail of Announcement */ - public Observable<DetailAnnouncement> getAnnouncementDetail(String id){ + public Observable<DetailAnnouncement> getAnnouncementDetail(String id) { return mBaseApiManager.getTavernaApi().getAnnouncement(id); } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/e752e97d/app/src/main/java/org/apache/taverna/mobile/data/model/Announcement.java ---------------------------------------------------------------------- diff --git a/app/src/main/java/org/apache/taverna/mobile/data/model/Announcement.java b/app/src/main/java/org/apache/taverna/mobile/data/model/Announcement.java index 7f32e5a..3904374 100644 --- a/app/src/main/java/org/apache/taverna/mobile/data/model/Announcement.java +++ b/app/src/main/java/org/apache/taverna/mobile/data/model/Announcement.java @@ -1,30 +1,48 @@ package org.apache.taverna.mobile.data.model; -import android.os.Parcel; -import android.os.Parcelable; - import org.simpleframework.xml.Attribute; import org.simpleframework.xml.Text; +import android.os.Parcel; +import android.os.Parcelable; + /** * Created by Sagar */ public class Announcement implements Parcelable { + public static final Parcelable.Creator<Announcement> CREATOR = new Parcelable + .Creator<Announcement>() { + @Override + public Announcement createFromParcel(Parcel source) { + return new Announcement(source); + } + + @Override + public Announcement[] newArray(int size) { + return new Announcement[size]; + } + }; @Attribute(name = "resource", required = false) String resource; - - @Attribute(name = "uri", required = false) String uri; - - @Attribute(name = "id", required = false) String id; - @Text String content; + public Announcement() { + } + + + protected Announcement(Parcel in) { + this.resource = in.readString(); + this.uri = in.readString(); + this.id = in.readString(); + this.content = in.readString(); + } + public String getContent() { return content; } @@ -33,7 +51,6 @@ public class Announcement implements Parcelable { this.content = content; } - public String getResource() { return this.resource; } @@ -42,7 +59,6 @@ public class Announcement implements Parcelable { this.resource = _value; } - public String getUri() { return this.uri; } @@ -51,7 +67,6 @@ public class Announcement implements Parcelable { this.uri = _value; } - public String getId() { return this.id; } @@ -60,7 +75,6 @@ public class Announcement implements Parcelable { this.id = _value; } - @Override public int describeContents() { return 0; @@ -73,26 +87,4 @@ public class Announcement implements Parcelable { dest.writeString(this.id); dest.writeString(this.content); } - - public Announcement() { - } - - protected Announcement(Parcel in) { - this.resource = in.readString(); - this.uri = in.readString(); - this.id = in.readString(); - this.content = in.readString(); - } - - public static final Parcelable.Creator<Announcement> CREATOR = new Parcelable.Creator<Announcement>() { - @Override - public Announcement createFromParcel(Parcel source) { - return new Announcement(source); - } - - @Override - public Announcement[] newArray(int size) { - return new Announcement[size]; - } - }; } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/e752e97d/app/src/main/java/org/apache/taverna/mobile/data/model/Announcements.java ---------------------------------------------------------------------- diff --git a/app/src/main/java/org/apache/taverna/mobile/data/model/Announcements.java b/app/src/main/java/org/apache/taverna/mobile/data/model/Announcements.java index 01454da..3050637 100644 --- a/app/src/main/java/org/apache/taverna/mobile/data/model/Announcements.java +++ b/app/src/main/java/org/apache/taverna/mobile/data/model/Announcements.java @@ -1,10 +1,11 @@ package org.apache.taverna.mobile.data.model; -import android.os.Parcel; -import android.os.Parcelable; import org.simpleframework.xml.ElementList; import org.simpleframework.xml.Root; +import android.os.Parcel; +import android.os.Parcelable; + import java.util.List; /** @@ -13,15 +14,36 @@ import java.util.List; @Root(name = "announcements") public class Announcements implements Parcelable { + public static final Parcelable.Creator<Announcements> CREATOR = new Parcelable + .Creator<Announcements>() { + @Override + public Announcements createFromParcel(Parcel source) { + return new Announcements(source); + } + + @Override + public Announcements[] newArray(int size) { + return new Announcements[size]; + } + }; @ElementList(name = "announcement", inline = true, required = false) List<Announcement> announcement; + public Announcements() { + } + protected Announcements(Parcel in) { + this.announcement = in.createTypedArrayList(Announcement.CREATOR); + } - public List<Announcement> getAnnouncement() { return this.announcement; } - public void setAnnouncement(List<Announcement> _value) { this.announcement = _value; } + public List<Announcement> getAnnouncement() { + return this.announcement; + } + public void setAnnouncement(List<Announcement> _value) { + this.announcement = _value; + } @Override public int describeContents() { @@ -32,23 +54,4 @@ public class Announcements implements Parcelable { public void writeToParcel(Parcel dest, int flags) { dest.writeTypedList(this.announcement); } - - public Announcements() { - } - - protected Announcements(Parcel in) { - this.announcement = in.createTypedArrayList(Announcement.CREATOR); - } - - public static final Parcelable.Creator<Announcements> CREATOR = new Parcelable.Creator<Announcements>() { - @Override - public Announcements createFromParcel(Parcel source) { - return new Announcements(source); - } - - @Override - public Announcements[] newArray(int size) { - return new Announcements[size]; - } - }; } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/e752e97d/app/src/main/java/org/apache/taverna/mobile/data/model/Author.java ---------------------------------------------------------------------- diff --git a/app/src/main/java/org/apache/taverna/mobile/data/model/Author.java b/app/src/main/java/org/apache/taverna/mobile/data/model/Author.java index 111f64f..09df99f 100644 --- a/app/src/main/java/org/apache/taverna/mobile/data/model/Author.java +++ b/app/src/main/java/org/apache/taverna/mobile/data/model/Author.java @@ -1,82 +1,89 @@ package org.apache.taverna.mobile.data.model; -import android.os.Parcel; -import android.os.Parcelable; - import org.simpleframework.xml.Attribute; import org.simpleframework.xml.Text; +import android.os.Parcel; +import android.os.Parcelable; + /** * Created by Sagar */ public class Author implements Parcelable { - @Attribute(name="resource", required = false) - String resource; - - - @Attribute(name="uri", required = false) - String uri; - - - @Attribute(name="id", required = false) - String id; - - @Text - String content; - - public String getContent() { - return content; - } - public void setContent(String content) { - this.content = content; - } - - - public String getResource() { return this.resource; } - public void setResource(String _value) { this.resource = _value; } - - - public String getUri() { return this.uri; } - public void setUri(String _value) { this.uri = _value; } - - - public String getId() { return this.id; } - public void setId(String _value) { this.id = _value; } - - + public static final Parcelable.Creator<Author> CREATOR = new Parcelable.Creator<Author>() { @Override - public int describeContents() { - return 0; + public Author createFromParcel(Parcel source) { + return new Author(source); } @Override - public void writeToParcel(Parcel dest, int flags) { - dest.writeString(this.resource); - dest.writeString(this.uri); - dest.writeString(this.id); - dest.writeString(this.content); - } - - public Author() { + public Author[] newArray(int size) { + return new Author[size]; } - - protected Author(Parcel in) { - this.resource = in.readString(); - this.uri = in.readString(); - this.id = in.readString(); - this.content = in.readString(); - } - - public static final Parcelable.Creator<Author> CREATOR = new Parcelable.Creator<Author>() { - @Override - public Author createFromParcel(Parcel source) { - return new Author(source); - } - - @Override - public Author[] newArray(int size) { - return new Author[size]; - } - }; + }; + @Attribute(name = "resource", required = false) + String resource; + @Attribute(name = "uri", required = false) + String uri; + @Attribute(name = "id", required = false) + String id; + @Text + String content; + + public Author() { + } + + + protected Author(Parcel in) { + this.resource = in.readString(); + this.uri = in.readString(); + this.id = in.readString(); + this.content = in.readString(); + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getResource() { + return this.resource; + } + + public void setResource(String _value) { + this.resource = _value; + } + + public String getUri() { + return this.uri; + } + + public void setUri(String _value) { + this.uri = _value; + } + + public String getId() { + return this.id; + } + + public void setId(String _value) { + this.id = _value; + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeString(this.resource); + dest.writeString(this.uri); + dest.writeString(this.id); + dest.writeString(this.content); + } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/e752e97d/app/src/main/java/org/apache/taverna/mobile/data/model/DetailAnnouncement.java ---------------------------------------------------------------------- diff --git a/app/src/main/java/org/apache/taverna/mobile/data/model/DetailAnnouncement.java b/app/src/main/java/org/apache/taverna/mobile/data/model/DetailAnnouncement.java index d291fe3..2715d88 100644 --- a/app/src/main/java/org/apache/taverna/mobile/data/model/DetailAnnouncement.java +++ b/app/src/main/java/org/apache/taverna/mobile/data/model/DetailAnnouncement.java @@ -1,44 +1,61 @@ package org.apache.taverna.mobile.data.model; -import android.os.Parcel; -import android.os.Parcelable; - import org.simpleframework.xml.Attribute; import org.simpleframework.xml.Element; import org.simpleframework.xml.Root; +import android.os.Parcel; +import android.os.Parcelable; + /** * Created by Sagar */ @Root(name = "announcement") public class DetailAnnouncement implements Parcelable { + public static final Parcelable.Creator<DetailAnnouncement> CREATOR = new Parcelable + .Creator<DetailAnnouncement>() { + @Override + public DetailAnnouncement createFromParcel(Parcel source) { + return new DetailAnnouncement(source); + } + + @Override + public DetailAnnouncement[] newArray(int size) { + return new DetailAnnouncement[size]; + } + }; + @Attribute(name = "resource", required = false) + String resource; + @Attribute(name = "uri", required = false) + String uri; + @Attribute(name = "id", required = false) + String id; @Element(name = "author") private Author author; - @Element(name = "title") private String title; - @Element(name = "text") private String text; - @Element(name = "created-at") private String date; - - @Attribute(name = "resource", required = false) - String resource; - - - @Attribute(name = "uri", required = false) - String uri; - - - @Attribute(name = "id", required = false) - String id; - @Element(name = "id") private String idElement; + public DetailAnnouncement() { + } + + protected DetailAnnouncement(Parcel in) { + this.author = in.readParcelable(Author.class.getClassLoader()); + this.title = in.readString(); + this.text = in.readString(); + this.date = in.readString(); + this.resource = in.readString(); + this.uri = in.readString(); + this.id = in.readString(); + this.idElement = in.readString(); + } + public String getIdElement() { return idElement; } @@ -55,7 +72,6 @@ public class DetailAnnouncement implements Parcelable { this.resource = _value; } - public String getUri() { return this.uri; } @@ -64,7 +80,6 @@ public class DetailAnnouncement implements Parcelable { this.uri = _value; } - public String getId() { return this.id; } @@ -73,7 +88,6 @@ public class DetailAnnouncement implements Parcelable { this.id = _value; } - public Author getAuthor() { return author; } @@ -106,7 +120,6 @@ public class DetailAnnouncement implements Parcelable { this.date = date; } - @Override public int describeContents() { return 0; @@ -123,32 +136,6 @@ public class DetailAnnouncement implements Parcelable { dest.writeString(this.id); dest.writeString(this.idElement); } - - public DetailAnnouncement() { - } - - protected DetailAnnouncement(Parcel in) { - this.author = in.readParcelable(Author.class.getClassLoader()); - this.title = in.readString(); - this.text = in.readString(); - this.date = in.readString(); - this.resource = in.readString(); - this.uri = in.readString(); - this.id = in.readString(); - this.idElement = in.readString(); - } - - public static final Parcelable.Creator<DetailAnnouncement> CREATOR = new Parcelable.Creator<DetailAnnouncement>() { - @Override - public DetailAnnouncement createFromParcel(Parcel source) { - return new DetailAnnouncement(source); - } - - @Override - public DetailAnnouncement[] newArray(int size) { - return new DetailAnnouncement[size]; - } - }; } http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/e752e97d/app/src/main/java/org/apache/taverna/mobile/data/remote/BaseApiManager.java ---------------------------------------------------------------------- diff --git a/app/src/main/java/org/apache/taverna/mobile/data/remote/BaseApiManager.java b/app/src/main/java/org/apache/taverna/mobile/data/remote/BaseApiManager.java index ec97b34..4fa690b 100644 --- a/app/src/main/java/org/apache/taverna/mobile/data/remote/BaseApiManager.java +++ b/app/src/main/java/org/apache/taverna/mobile/data/remote/BaseApiManager.java @@ -10,13 +10,12 @@ import retrofit2.converter.simplexml.SimpleXmlConverterFactory; public class BaseApiManager { - String ENDPOINT = "http://www.myexperiment.org/"; - public TavernaService mTavernaService; + String ENDPOINT = "http://www.myexperiment.org/"; - public BaseApiManager(){ + public BaseApiManager() { - mTavernaService = createApi(TavernaService.class,ENDPOINT); + mTavernaService = createApi(TavernaService.class, ENDPOINT); } /******** Helper class that sets up a new services *******/ @@ -29,10 +28,10 @@ public class BaseApiManager { .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .build(); - return retrofit.create(clazz); + return retrofit.create(clazz); } - public TavernaService getTavernaApi(){ + public TavernaService getTavernaApi() { return mTavernaService; } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/e752e97d/app/src/main/java/org/apache/taverna/mobile/data/remote/TavernaService.java ---------------------------------------------------------------------- diff --git a/app/src/main/java/org/apache/taverna/mobile/data/remote/TavernaService.java b/app/src/main/java/org/apache/taverna/mobile/data/remote/TavernaService.java index f483490..cbc05e3 100644 --- a/app/src/main/java/org/apache/taverna/mobile/data/remote/TavernaService.java +++ b/app/src/main/java/org/apache/taverna/mobile/data/remote/TavernaService.java @@ -1,7 +1,7 @@ package org.apache.taverna.mobile.data.remote; -import org.apache.taverna.mobile.data.model.DetailAnnouncement; import org.apache.taverna.mobile.data.model.Announcements; +import org.apache.taverna.mobile.data.model.DetailAnnouncement; import retrofit2.http.GET; import retrofit2.http.Query; http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/e752e97d/app/src/main/java/org/apache/taverna/mobile/fragments/FavoriteFragment.java ---------------------------------------------------------------------- diff --git a/app/src/main/java/org/apache/taverna/mobile/fragments/FavoriteFragment.java b/app/src/main/java/org/apache/taverna/mobile/fragments/FavoriteFragment.java index dccaa01..86278a8 100644 --- a/app/src/main/java/org/apache/taverna/mobile/fragments/FavoriteFragment.java +++ b/app/src/main/java/org/apache/taverna/mobile/fragments/FavoriteFragment.java @@ -25,6 +25,12 @@ package org.apache.taverna.mobile.fragments; * under the License. */ +import org.apache.taverna.mobile.R; +import org.apache.taverna.mobile.adapters.FavoriteWorkflowAdapter; +import org.apache.taverna.mobile.adapters.WorkflowAdapter; +import org.apache.taverna.mobile.utils.WorkflowDB; +import org.json.JSONException; + import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v7.widget.LinearLayoutManager; @@ -34,16 +40,9 @@ import android.view.LayoutInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; -import android.widget.AdapterView; import android.widget.TextView; import android.widget.Toast; -import org.apache.taverna.mobile.R; -import org.apache.taverna.mobile.adapters.FavoriteWorkflowAdapter; -import org.apache.taverna.mobile.adapters.WorkflowAdapter; -import org.apache.taverna.mobile.utils.Workflow_DB; -import org.json.JSONException; - import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -51,16 +50,19 @@ import java.util.List; /** * Created by Larry Akah on 6/6/15. */ -public class FavoriteFragment extends Fragment implements RecyclerView.OnCreateContextMenuListener{ +public class FavoriteFragment extends Fragment implements RecyclerView.OnCreateContextMenuListener { /** * The fragment argument representing the section number for this * fragment. */ private static final String ARG_SECTION_NUMBER = "SECTION_NUMBER"; public FavoriteWorkflowAdapter favoriteAdapter; + public WorkflowDB myWorkflowDb; private RecyclerView wFavoriteListView; private RecyclerView.AdapterDataObserver dataObserver; - public Workflow_DB myWorkflowDb; + + public FavoriteFragment() { + } /** * Returns a new instance of this fragment for the given section @@ -75,22 +77,19 @@ public class FavoriteFragment extends Fragment implements RecyclerView.OnCreateC return fragment; } - public FavoriteFragment() { - } - @Override - public void onCreate(Bundle savedInstanceState){ + public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - dataObserver = new RecyclerView.AdapterDataObserver(){ + dataObserver = new RecyclerView.AdapterDataObserver() { @Override public void onChanged() { super.onChanged(); - // Toast.makeText(getActivity(), "data changed", Toast.LENGTH_SHORT).show(); + // Toast.makeText(getActivity(), "data changed", Toast.LENGTH_SHORT).show(); setUpFavoriteData(); setUpListView(); } }; - setUpFavoriteData(); + setUpFavoriteData(); } @@ -98,7 +97,7 @@ public class FavoriteFragment extends Fragment implements RecyclerView.OnCreateC public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_dashboard_main, container, false); - wFavoriteListView = (RecyclerView)rootView.findViewById(R.id.favoriteList); + wFavoriteListView = (RecyclerView) rootView.findViewById(R.id.favoriteList); wFavoriteListView.setHasFixedSize(true); wFavoriteListView.setLayoutManager(new LinearLayoutManager(getActivity())); wFavoriteListView.setAdapter(favoriteAdapter); @@ -108,15 +107,16 @@ public class FavoriteFragment extends Fragment implements RecyclerView.OnCreateC /** * Prepare the data to be used in the list as favorite items */ - private void setUpFavoriteData(){ - myWorkflowDb = new Workflow_DB(getActivity(), WorkflowAdapter.WORKFLOW_FAVORITE_KEY); + private void setUpFavoriteData() { + myWorkflowDb = new WorkflowDB(getActivity(), WorkflowAdapter.WORKFLOW_FAVORITE_KEY); try { List<ArrayList<Object>> mfavorites = myWorkflowDb.get(); favoriteAdapter = new FavoriteWorkflowAdapter(getActivity(), mfavorites); favoriteAdapter.registerAdapterDataObserver(dataObserver); } catch (JSONException e) { e.printStackTrace(); - favoriteAdapter = new FavoriteWorkflowAdapter(getActivity(), Collections.<ArrayList<Object>>emptyList()); + favoriteAdapter = new FavoriteWorkflowAdapter(getActivity(), Collections + .<ArrayList<Object>>emptyList()); favoriteAdapter.registerAdapterDataObserver(dataObserver); } } @@ -124,9 +124,10 @@ public class FavoriteFragment extends Fragment implements RecyclerView.OnCreateC /** * Populate the listview using the adapter */ - private void setUpListView(){ + private void setUpListView() { wFavoriteListView.setAdapter(favoriteAdapter); } + /** * Called when a context menu for the {@code view} is about to be shown. * Unlike {@link #onCreateOptionsMenu}, this will be called every @@ -143,14 +144,11 @@ public class FavoriteFragment extends Fragment implements RecyclerView.OnCreateC * <p/> * It is not safe to hold onto the context menu after this method returns. * {@inheritDoc} - * - * @param menu - * @param v - * @param menuInfo */ @Override - public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { - // super.onCreateContextMenu(menu, v, menuInfo); + public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo + menuInfo) { + // super.onCreateContextMenu(menu, v, menuInfo); menu.add("View"); menu.add("Remove"); menu.setHeaderIcon(R.mipmap.ic_launcher); @@ -178,14 +176,13 @@ public class FavoriteFragment extends Fragment implements RecyclerView.OnCreateC @Override public boolean onContextItemSelected(MenuItem item) { String title = (String) item.getTitle(); - if(title.equals("View")){ - Toast.makeText(getActivity(),"View", Toast.LENGTH_SHORT).show(); + if (title.equals("View")) { + Toast.makeText(getActivity(), "View", Toast.LENGTH_SHORT).show(); return true; - } - else if (title.equals("Remove")){ - Toast.makeText(getActivity(),"Removing", Toast.LENGTH_SHORT).show(); + } else if (title.equals("Remove")) { + Toast.makeText(getActivity(), "Removing", Toast.LENGTH_SHORT).show(); return true; - }else + } else return super.onContextItemSelected(item); } @@ -198,7 +195,7 @@ public class FavoriteFragment extends Fragment implements RecyclerView.OnCreateC @Override public void onResume() { super.onResume(); - // setUpListView(); + // setUpListView(); //wFavoriteListView.setOnCreateContextMenuListener(this); //registerForContextMenu(wFavoriteListView); @@ -218,9 +215,9 @@ public class FavoriteFragment extends Fragment implements RecyclerView.OnCreateC /** * Causes the empty textView to be set and become visible */ - private void setEmptyText(){ + private void setEmptyText() { View emptyView = wFavoriteListView.getChildAt(1); - if(emptyView instanceof TextView){ + if (emptyView instanceof TextView) { emptyView.setVisibility(View.VISIBLE); } } http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/e752e97d/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 2b83374..98523a1 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 @@ -2,10 +2,10 @@ package org.apache.taverna.mobile.fragments; /** * 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 @@ -24,6 +24,13 @@ package org.apache.taverna.mobile.fragments; * under the License. */ +import org.apache.taverna.mobile.R; +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 android.app.Activity; import android.app.ProgressDialog; import android.app.SearchManager; @@ -52,14 +59,6 @@ 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; @@ -73,43 +72,47 @@ import java.util.List; * with a GridView. * <p/> */ -public class WorkflowItemFragment extends Fragment implements SwipeRefreshLayout.OnRefreshListener,SearchView.OnQueryTextListener { +public class WorkflowItemFragment extends Fragment implements SwipeRefreshLayout + .OnRefreshListener, SearchView.OnQueryTextListener { // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER private static final String ARG_PARAM1 = "param1"; private static final String ARG_PARAM2 = "param2"; - - private Animation in; - private ProgressDialog mProgressDialog; //progressbar used to indicate the state of the workflow loaders - - private String mParam1; - private String mParam2; - + public static Context cx; + //variables controlling the different kinds of data loading + public static boolean isLoadMoreData = false; + public static boolean isRefreshData = false; /** * The fragment's ListView/GridView. */ private static RecyclerView mListView; - private SwipeRefreshLayout swipeRefreshLayout; - private static View rootView; - public static Context cx; private static boolean STATE_ON = false; private static TextView noDataText; private static LruCache<String, Bitmap> avatarCache; - private LinearLayoutManager mLinearLayoutManager; private static WorkflowAdapter workflowAdapter; - //variables for controlling the infinite scroll mechanism private static int previousTotal = 0; + private Animation in; + private ProgressDialog mProgressDialog; //progressbar used to indicate the state of the + // workflow loaders + private String mParam1; + private String mParam2; + private SwipeRefreshLayout swipeRefreshLayout; + private LinearLayoutManager mLinearLayoutManager; private int visibleThreshold = 3; private int firstVisibleItem, visibleItemCount, totalItemCount; private int currentPage = 1; - private boolean loading = true; + private boolean loading = true; private InfiniteScrollListener scrollListener; private RecyclerView.AdapterDataObserver workflowObserver; - //variables controlling the different kinds of data loading - public static boolean isLoadMoreData = false; - public static boolean isRefreshData = false; + + /** + * Mandatory empty constructor for the fragment manager to instantiate the + * fragment (e.g. upon screen orientation changes). + */ + public WorkflowItemFragment() { + } public static WorkflowItemFragment newInstance(String param1, String param2) { WorkflowItemFragment fragment = new WorkflowItemFragment(); @@ -120,13 +123,77 @@ public class WorkflowItemFragment extends Fragment implements SwipeRefreshLayout return fragment; } + public static void updateWorkflowUI(final List<Workflow> data) { + + ((Activity) cx).runOnUiThread(new Runnable() { + @Override + public void run() { + WorkflowItemFragment.workflowAdapter = new WorkflowAdapter(cx, data); + if (isLoadMoreData) { + isLoadMoreData = false; + isRefreshData = false; + ((WorkflowAdapter) mListView.getAdapter()).addItems(data, previousTotal); + } else + mListView.swapAdapter(workflowAdapter, false); + + if (WorkflowItemFragment.workflowAdapter.getItemCount() == 0) { + mListView.setVisibility(View.GONE); + noDataText.setVisibility(View.VISIBLE); + // Toast.makeText(cx, cx.getResources().getString(R.string + // .err_workflow_conn), Toast.LENGTH_LONG).show(); + } else { + mListView.setVisibility(View.VISIBLE); + noDataText.setVisibility(View.GONE); + } + } + }); + } + + public static void startLoadingAvatar(final User author) { + + ((Activity) cx).runOnUiThread(new Runnable() { + @Override + public void run() { + synchronized (this) { + author.getUserViewHolder().author_name.setText(author.getName()); + //((TextView) rootView.findViewById(R.id.workflow_author)).setText(author + // .getName()); + //check whether avatar is already in the cache before trying to download it + // from remote resource + if (avatarCache.get(author.getDetails_uri()) == null) + new AvatarLoader(author.getUserViewHolder()).execute(author + .getDetails_uri(), author.getRow_id()); + else { + author.getUserViewHolder().author_profile.setImageBitmap(avatarCache.get + (author.getDetails_uri())); +// ((ImageView) rootView.findViewById(R.id.author_profile_image)) +// .setImageBitmap(avatarCache.get(author.getDetails_uri())); + } + System.out.println("Author cached ID " + author.getDetails_uri() + "\n Name: " + + "" + author.getName()); + } + } + }); + } + /** - * Mandatory empty constructor for the fragment manager to instantiate the - * fragment (e.g. upon screen orientation changes). + * Called when avatar xml has finished parsing. fetches the avatar remotely and updates the item + * in the list view + * + * @param author the author avatar to load */ - public WorkflowItemFragment() { - } + public static void updateAvatar(final User author) { + ((Activity) cx).runOnUiThread(new Runnable() { + @Override + public void run() { + // new LoadAuthorAvatar((ImageView) rootView.findViewById(R.id + // .author_profile_image),author.getDetails_uri()).execute(author.getAvatar_url()); + new LoadAuthorAvatar(author.getUserViewHolder().author_profile, author + .getDetails_uri()).execute(author.getAvatar_url()); + } + }); + } @Override public void onCreate(Bundle savedInstanceState) { @@ -135,13 +202,14 @@ public class WorkflowItemFragment extends Fragment implements SwipeRefreshLayout cx = getActivity(); mLinearLayoutManager = new LinearLayoutManager(cx); scrollListener = new InfiniteScrollListener(); - workflowObserver= new RecyclerView.AdapterDataObserver() { + workflowObserver = new RecyclerView.AdapterDataObserver() { @Override public void onItemRangeInserted(int positionStart, int itemCount) { super.onItemRangeInserted(positionStart, itemCount); - mListView.swapAdapter(workflowAdapter,false); - Toast.makeText(getActivity(), "adding more workflows to listview", Toast.LENGTH_SHORT).show(); + mListView.swapAdapter(workflowAdapter, false); + Toast.makeText(getActivity(), "adding more workflows to listview", Toast + .LENGTH_SHORT).show(); } }; workflowAdapter = new WorkflowAdapter(getActivity()); @@ -151,11 +219,12 @@ public class WorkflowItemFragment extends Fragment implements SwipeRefreshLayout mParam1 = getArguments().getString(ARG_PARAM1); mParam2 = getArguments().getString(ARG_PARAM2); } - in = AnimationUtils.loadAnimation(getActivity(),android.R.anim.slide_in_left); + in = AnimationUtils.loadAnimation(getActivity(), android.R.anim.slide_in_left); } @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle + savedInstanceState) { rootView = inflater.inflate(R.layout.fragment_item, container, false); noDataText = (TextView) rootView.findViewById(android.R.id.empty); swipeRefreshLayout = (SwipeRefreshLayout) rootView.findViewById(R.id.refresh); @@ -171,12 +240,13 @@ public class WorkflowItemFragment extends Fragment implements SwipeRefreshLayout mListView.setItemAnimator(new DefaultItemAnimator()); final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024); - // Use 1/8th of the available memory for this memory cache. up to 4MB for high screen densities and 1.2Mb for low sds + // Use 1/8th of the available memory for this memory cache. up to 4MB for high screen + // densities and 1.2Mb for low sds final int cacheSize = maxMemory / 8; - avatarCache = new LruCache<String, Bitmap>(cacheSize){ + avatarCache = new LruCache<String, Bitmap>(cacheSize) { @Override - protected int sizeOf(String key, Bitmap bitmap){ - // The cache size will be measured in kilobytes + protected int sizeOf(String key, Bitmap bitmap) { + // The cache size will be measured in kilobytes return bitmap.getByteCount() / 1024; } }; @@ -189,7 +259,7 @@ public class WorkflowItemFragment extends Fragment implements SwipeRefreshLayout super.onAttach(activity); try { - // ((DashboardMainActivity) activity).onSectionAttached(1); + // ((DashboardMainActivity) activity).onSectionAttached(1); } catch (ClassCastException e) { throw new ClassCastException(activity.toString() + " must implement OnFragmentInteractionListener"); @@ -214,8 +284,8 @@ public class WorkflowItemFragment extends Fragment implements SwipeRefreshLayout @Override public void onResume() { super.onResume(); - if(!STATE_ON) { - new WorkflowLoader(getActivity(), swipeRefreshLayout).execute(""+currentPage); + if (!STATE_ON) { + new WorkflowLoader(getActivity(), swipeRefreshLayout).execute("" + currentPage); if (mListView.getAdapter().getItemCount() == 0) { mListView.setVisibility(View.GONE); @@ -226,7 +296,8 @@ public class WorkflowItemFragment extends Fragment implements SwipeRefreshLayout noDataText.setVisibility(View.GONE); } } -// ((RecyclerView)(getActivity()).findViewById(R.id.favoriteList)).getAdapter().notifyDataSetChanged(); +// ((RecyclerView)(getActivity()).findViewById(R.id.favoriteList)).getAdapter() +// .notifyDataSetChanged(); } @Override @@ -239,12 +310,14 @@ public class WorkflowItemFragment extends Fragment implements SwipeRefreshLayout public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); //menu.clear(); - if(menu.size() == 1) { + if (menu.size() == 1) { //get the searchview and set the searchable configuration - SearchManager searchManager = (SearchManager) getActivity().getSystemService(Context.SEARCH_SERVICE); + SearchManager searchManager = (SearchManager) getActivity().getSystemService(Context + .SEARCH_SERVICE); SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView(); //assuming this activity is the searchable activity - searchView.setSearchableInfo(searchManager.getSearchableInfo(getActivity().getComponentName())); + searchView.setSearchableInfo(searchManager.getSearchableInfo(getActivity() + .getComponentName())); searchView.setSubmitButtonEnabled(true); searchView.setOnQueryTextListener(this); // searchView.setOnSearchClickListener(this); @@ -257,8 +330,8 @@ public class WorkflowItemFragment extends Fragment implements SwipeRefreshLayout @Override public boolean onOptionsItemSelected(MenuItem item) { - if(item.getTitle().equals("Refresh")){ - new WorkflowLoader(getActivity(),swipeRefreshLayout).execute("1"); + if (item.getTitle().equals("Refresh")) { + new WorkflowLoader(getActivity(), swipeRefreshLayout).execute("1"); return true; } return super.onOptionsItemSelected(item); @@ -267,15 +340,15 @@ public class WorkflowItemFragment extends Fragment implements SwipeRefreshLayout @Override public void onDestroy() { super.onDetach(); - // workflowAdapter.unregisterAdapterDataObserver(workflowObserver); + // workflowAdapter.unregisterAdapterDataObserver(workflowObserver); } //handle a request to query for given workflows - private void performSearch(String search){ + private void performSearch(String search) { WorkflowAdapter ladapter = new WorkflowAdapter(getActivity()); WorkflowAdapter wk = workflowAdapter; - if(!TextUtils.isEmpty(search)) { + if (!TextUtils.isEmpty(search)) { if (null != wk) for (int i = 0; i < wk.getItemCount(); i++) { Workflow workflow = wk.getItem(i); @@ -286,7 +359,8 @@ public class WorkflowItemFragment extends Fragment implements SwipeRefreshLayout mListView.swapAdapter(ladapter, true); if (ladapter.getItemCount() == 0) - Toast.makeText(getActivity(), "No workflows found matching criteria", Toast.LENGTH_SHORT).show(); + Toast.makeText(getActivity(), "No workflows found matching criteria", Toast + .LENGTH_SHORT).show(); } } @@ -295,11 +369,13 @@ public class WorkflowItemFragment extends Fragment implements SwipeRefreshLayout isRefreshData = true; isLoadMoreData = false; - new WorkflowLoader(getActivity(),swipeRefreshLayout).execute(""+1); + new WorkflowLoader(getActivity(), swipeRefreshLayout).execute("" + 1); } /** - * Search action triggered, handle the search request. Filter the workflows by name/title and swap current adapter with the new adapter + * Search action triggered, handle the search request. Filter the workflows by name/title and + * swap current adapter with the new adapter + * * @param query Search string criteria * @return whether or not user handled request 'manually' */ @@ -315,66 +391,6 @@ public class WorkflowItemFragment extends Fragment implements SwipeRefreshLayout return true; } - public static void updateWorkflowUI(final List<Workflow> data) { - - ((Activity)cx).runOnUiThread(new Runnable() { - @Override - public void run() { - WorkflowItemFragment.workflowAdapter = new WorkflowAdapter(cx,data); - if(isLoadMoreData) { - isLoadMoreData = false; - isRefreshData = false; - ((WorkflowAdapter)mListView.getAdapter()).addItems(data, previousTotal); - }else - mListView.swapAdapter(workflowAdapter, false); - - if(WorkflowItemFragment.workflowAdapter.getItemCount() == 0){ - mListView.setVisibility(View.GONE); - noDataText.setVisibility(View.VISIBLE); - // Toast.makeText(cx, cx.getResources().getString(R.string.err_workflow_conn), Toast.LENGTH_LONG).show(); - }else{ - mListView.setVisibility(View.VISIBLE); - noDataText.setVisibility(View.GONE); - } - } - }); - } - - public static void startLoadingAvatar(final User author) { - - ((Activity)cx).runOnUiThread(new Runnable() { - @Override - public void run() { - synchronized (this) { - author.getUserViewHolder().author_name.setText(author.getName()); - //((TextView) rootView.findViewById(R.id.workflow_author)).setText(author.getName()); - //check whether avatar is already in the cache before trying to download it from remote resource - if(avatarCache.get(author.getDetails_uri()) == null) - new AvatarLoader(author.getUserViewHolder()).execute(author.getDetails_uri(), author.getRow_id()); - else{ - author.getUserViewHolder().author_profile.setImageBitmap(avatarCache.get(author.getDetails_uri())); -// ((ImageView) rootView.findViewById(R.id.author_profile_image)).setImageBitmap(avatarCache.get(author.getDetails_uri())); - } - System.out.println("Author cached ID "+author.getDetails_uri()+"\n Name: "+author.getName()); - } - } - }); - } - - /** - * Called when avatar xml has finished parsing. fetches the avatar remotely and updates the item in the list view - * @param author the author avatar to load - */ - public static void updateAvatar(final User author) { - - ((Activity)cx).runOnUiThread(new Runnable() { - @Override - public void run() { - // new LoadAuthorAvatar((ImageView) rootView.findViewById(R.id.author_profile_image),author.getDetails_uri()).execute(author.getAvatar_url()); - new LoadAuthorAvatar( author.getUserViewHolder().author_profile,author.getDetails_uri()).execute(author.getAvatar_url()); - } - }); - } /** * Load the Author Avatar from a background Task */ @@ -413,13 +429,13 @@ public class WorkflowItemFragment extends Fragment implements SwipeRefreshLayout try { avatarCache.put(row_id_as_key, bitmap); - }catch(NullPointerException np){ + } catch (NullPointerException np) { } } } - private class InfiniteScrollListener extends RecyclerView.OnScrollListener{ + private class InfiniteScrollListener extends RecyclerView.OnScrollListener { /** * Callback method to be invoked when the RecyclerView has been scrolled. This will be * called after the scroll has completed. @@ -437,18 +453,19 @@ public class WorkflowItemFragment extends Fragment implements SwipeRefreshLayout visibleItemCount = mListView.getChildCount(); totalItemCount = mLinearLayoutManager.getItemCount(); firstVisibleItem = mLinearLayoutManager.findFirstVisibleItemPosition(); - if(loading){ - if(totalItemCount > previousTotal){ + if (loading) { + if (totalItemCount > previousTotal) { loading = false; previousTotal = totalItemCount; } } - if(!loading && (totalItemCount - visibleItemCount) <= (firstVisibleItem+visibleThreshold)){ + if (!loading && (totalItemCount - visibleItemCount) <= (firstVisibleItem + + visibleThreshold)) { //list has reached end, load more. Toast.makeText(getActivity(), "Loading more", Toast.LENGTH_SHORT).show(); isLoadMoreData = true; currentPage++; - new WorkflowLoader(getActivity(),swipeRefreshLayout).execute(""+currentPage); + new WorkflowLoader(getActivity(), swipeRefreshLayout).execute("" + currentPage); System.out.println(currentPage); loading = true; } http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/e752e97d/app/src/main/java/org/apache/taverna/mobile/fragments/WorkflowViewpager.java ---------------------------------------------------------------------- diff --git a/app/src/main/java/org/apache/taverna/mobile/fragments/WorkflowViewpager.java b/app/src/main/java/org/apache/taverna/mobile/fragments/WorkflowViewpager.java new file mode 100644 index 0000000..0d5acb6 --- /dev/null +++ b/app/src/main/java/org/apache/taverna/mobile/fragments/WorkflowViewpager.java @@ -0,0 +1,114 @@ +package org.apache.taverna.mobile.fragments; + +import org.apache.taverna.mobile.R; + +import android.os.Bundle; +import android.support.design.widget.TabLayout; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentManager; +import android.support.v4.app.FragmentPagerAdapter; +import android.support.v4.view.ViewPager; +import android.support.v7.app.ActionBar; +import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.Toolbar; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by rajan on 8/3/16. + */ +public class WorkflowViewpager extends Fragment { + + private final String LOG_TAG = getClass().getSimpleName(); + + ViewPager viewPager; + TabLayout tabLayout; + + + public static WorkflowViewpager getInstance(int position) { + WorkflowViewpager myFragment = new WorkflowViewpager(); + Bundle args = new Bundle(); + args.putInt("position", position); + myFragment.setArguments(args); + return myFragment; + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle + savedInstanceState) { + View workflow_pager = inflater.inflate(R.layout.viewpager_workflow, container, false); + + /** + * Setting the tool bar in MainActivity for all fragment + */ + Toolbar toolbar = (Toolbar) workflow_pager.findViewById(R.id.toolbar); + ((AppCompatActivity) getActivity()).setSupportActionBar(toolbar); + + final ActionBar ab = ((AppCompatActivity) getActivity()).getSupportActionBar(); + ab.setHomeAsUpIndicator(R.drawable.ic_menu); + ab.setDisplayHomeAsUpEnabled(true); + + + viewPager = (ViewPager) workflow_pager.findViewById(R.id.mviewpager); + final Adapter adapter = new Adapter(getChildFragmentManager()); + + /** + * Dynamically Adding tabs + * To add the new Tab "Go to res/values/category_id and add new title and category id" + */ + adapter.addFragment(new WorkflowItemFragment(), getResources().getString(R.string + .title_explore)); + adapter.addFragment(new FavoriteFragment(), getResources().getString(R.string + .title_favorite)); + + viewPager.setAdapter(adapter); + viewPager.setOffscreenPageLimit(2); + tabLayout = (TabLayout) workflow_pager.findViewById(R.id.mtablayout); + tabLayout.setupWithViewPager(viewPager); + + return workflow_pager; + } + + + @Override + public void onViewCreated(View view, Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + Log.i(LOG_TAG, "Workflow_viewpager.onCreate"); + + } + + static class Adapter extends FragmentPagerAdapter { + private final List<Fragment> mFragments = new ArrayList<>(); + private final List<String> mFragmentTitles = new ArrayList<>(); + + public Adapter(FragmentManager fm) { + super(fm); + } + + public void addFragment(Fragment fragment, String title) { + mFragments.add(fragment); + mFragmentTitles.add(title); + } + + @Override + public Fragment getItem(int position) { + return mFragments.get(position); + } + + @Override + public int getCount() { + return mFragments.size(); + } + + + @Override + public CharSequence getPageTitle(int position) { + return mFragmentTitles.get(position); + } + } +} http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/e752e97d/app/src/main/java/org/apache/taverna/mobile/fragments/Workflow_viewpager.java ---------------------------------------------------------------------- diff --git a/app/src/main/java/org/apache/taverna/mobile/fragments/Workflow_viewpager.java b/app/src/main/java/org/apache/taverna/mobile/fragments/Workflow_viewpager.java deleted file mode 100644 index 753645f..0000000 --- a/app/src/main/java/org/apache/taverna/mobile/fragments/Workflow_viewpager.java +++ /dev/null @@ -1,113 +0,0 @@ -package org.apache.taverna.mobile.fragments; - -import android.os.Bundle; -import android.support.design.widget.TabLayout; -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentPagerAdapter; -import android.support.v4.view.ViewPager; -import android.support.v7.app.ActionBar; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.Toolbar; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.support.v4.app.FragmentManager; -import org.apache.taverna.mobile.R; -import java.util.ArrayList; -import java.util.List; - -/** - * Created by rajan on 8/3/16. - */ -public class Workflow_viewpager extends Fragment{ - - private final String LOG_TAG = getClass().getSimpleName(); - - ViewPager viewPager; - TabLayout tabLayout; - - - public static Workflow_viewpager getInstance(int position) { - Workflow_viewpager myFragment = new Workflow_viewpager(); - Bundle args = new Bundle(); - args.putInt("position", position); - myFragment.setArguments(args); - return myFragment; - } - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - View workflow_pager = inflater.inflate(R.layout.viewpager_workflow, container, false); - - /** - * Setting the tool bar in MainActivity for all fragment - */ - Toolbar toolbar = (Toolbar) workflow_pager.findViewById(R.id.toolbar); - ((AppCompatActivity) getActivity()).setSupportActionBar(toolbar); - - final ActionBar ab = ((AppCompatActivity) getActivity()).getSupportActionBar(); - ab.setHomeAsUpIndicator(R.drawable.ic_menu); - ab.setDisplayHomeAsUpEnabled(true); - - - viewPager = (ViewPager) workflow_pager.findViewById(R.id.mviewpager); - final Adapter adapter = new Adapter(getChildFragmentManager()); - - /** - * Dynamically Adding tabs - * To add the new Tab "Go to res/values/category_id and add new title and category id" - */ - adapter.addFragment(new WorkflowItemFragment() , getResources().getString(R.string.title_explore)); - adapter.addFragment(new FavoriteFragment(), getResources().getString(R.string.title_favorite)); - - viewPager.setAdapter(adapter); - viewPager.setOffscreenPageLimit(2); - tabLayout = (TabLayout) workflow_pager.findViewById(R.id.mtablayout); - tabLayout.setupWithViewPager(viewPager); - - return workflow_pager; - } - - - - @Override - public void onViewCreated(View view, Bundle savedInstanceState) - { - super.onViewCreated(view, savedInstanceState); - Log.i(LOG_TAG, "Workflow_viewpager.onCreate"); - - } - - static class Adapter extends FragmentPagerAdapter - { - private final List<Fragment> mFragments = new ArrayList<>(); - private final List<String> mFragmentTitles = new ArrayList<>(); - - public Adapter(FragmentManager fm) { - super(fm); - } - - public void addFragment(Fragment fragment, String title) { - mFragments.add(fragment); - mFragmentTitles.add(title); - } - - @Override - public Fragment getItem(int position) { - return mFragments.get(position); - } - - @Override - public int getCount() { - return mFragments.size(); - } - - - - @Override - public CharSequence getPageTitle(int position) { - return mFragmentTitles.get(position); - } - } -}
