Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Unverified Commit e3dd340d authored by Tobias Kaminsky's avatar Tobias Kaminsky Committed by GitHub
Browse files

Merge pull request #79 from nextcloud/activity-endless-scrolling

Activity scrolling
parents 941f8fba 29842547
Loading
Loading
Loading
Loading
+37 −6
Original line number Diff line number Diff line
@@ -42,6 +42,7 @@ import com.owncloud.android.lib.resources.activities.models.RichElement;
import com.owncloud.android.lib.resources.activities.models.RichElementTypeAdapter;
import com.owncloud.android.lib.resources.status.OwnCloudVersion;

import org.apache.commons.httpclient.Header;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.GetMethod;
import org.json.JSONException;
@@ -68,18 +69,28 @@ public class GetRemoteActivitiesOperation extends RemoteOperation{

    private static final String NODE_DATA = "data";

    private String nextUrl = "";

    public void setNextUrl(String url) {
        nextUrl = url;
    }

    @Override
    protected RemoteOperationResult run(OwnCloudClient client) {
        RemoteOperationResult result = null;
        int status = -1;
        GetMethod get = null;
        ArrayList<Object> activities;
        ArrayList<Activity> activities;
        String url;
        if (nextUrl.isEmpty()) {
            if (client.getOwnCloudVersion().compareTo(OwnCloudVersion.nextcloud_12) >= 0) {
                url = client.getBaseUri() + OCS_ROUTE_V12_AND_UP;
            } else {
                url = client.getBaseUri() + OCS_ROUTE_PRE_V12;
            }
        } else {
            url = nextUrl;
        }
        Log_OC.d(TAG, "URL: " + url);

        try {
@@ -89,12 +100,28 @@ public class GetRemoteActivitiesOperation extends RemoteOperation{
            status = client.executeMethod(get);
            String response = get.getResponseBodyAsString();

            Header nextPageHeader = get.getResponseHeader("Link");
            if (nextPageHeader != null) {
                String link = nextPageHeader.getValue();
                if (link.startsWith("<") && link.endsWith(">; rel=\"next\"")) {
                    nextUrl = nextPageHeader.getValue().substring(1, link.length() - 13);
                } else {
                    nextUrl = "";
                }
            } else {
                nextUrl = "";
            }

            if (isSuccess(status)) {
                Log_OC.d(TAG, "Successful response: " + response);
                result = new RemoteOperationResult(true, status, get.getResponseHeaders());
                // Parse the response
                activities = parseResult(response);
                result.setData(activities);

                ArrayList<Object> data = new ArrayList<>();
                data.add(activities);
                data.add(nextUrl);
                result.setData(data);
            } else {
                result = new RemoteOperationResult(false, status, get.getResponseHeaders());
                Log_OC.e(TAG, "Failed response while getting user activities ");
@@ -116,7 +143,11 @@ public class GetRemoteActivitiesOperation extends RemoteOperation{
        return result;
    }

    private ArrayList<Object> parseResult(String response) throws JSONException {
    public boolean hasMoreActivities() {
        return !nextUrl.isEmpty();
    }

    private ArrayList<Activity> parseResult(String response) throws JSONException {
        JsonParser jsonParser = new JsonParser();
        JsonObject jo = (JsonObject)jsonParser.parse(response);
        JsonArray jsonDataArray = jo.getAsJsonObject(NODE_OCS).getAsJsonArray(NODE_DATA);