activities: Added repository data classes for Activities.

This commit is contained in:
ardevd 2018-04-19 14:47:56 +02:00
parent bcc2d2f382
commit d569b0cbef
5 changed files with 208 additions and 0 deletions

View file

@ -0,0 +1,19 @@
package com.owncloud.android.ui.activities.data;
import android.support.annotation.NonNull;
import com.owncloud.android.lib.common.OwnCloudClient;
import java.util.List;
/**
* Main entry point for accessing activities data.
*/
public interface ActivitiesRepository {
interface LoadActivitiesCallback {
void onActivitiesLoaded(List<Object> activities, OwnCloudClient client, boolean clear);
void onActivitiesLoadedError(String error);
}
void getActivities(String pageUrl, @NonNull LoadActivitiesCallback callback);
}

View file

@ -0,0 +1,24 @@
package com.owncloud.android.ui.activities.data;
import android.content.Context;
import com.owncloud.android.lib.common.OwnCloudClient;
import com.owncloud.android.lib.resources.activities.models.Activity;
import java.util.List;
/**
* Defines an interface to the Activities service API. All ({@link Activity}) data requests should
* be piped through this interface.
*/
public interface ActivitiesServiceApi {
interface ActivitiesServiceCallback<T> {
void onLoaded (T activities, OwnCloudClient client, boolean clear);
void onError (String error);
}
void getAllActivities(String pageUrl, ActivitiesServiceApi.ActivitiesServiceCallback<List<Object>> callback);
}

View file

@ -0,0 +1,115 @@
package com.owncloud.android.ui.activities.data;
import android.accounts.Account;
import android.accounts.AuthenticatorException;
import android.accounts.OperationCanceledException;
import android.content.Context;
import android.os.AsyncTask;
import android.view.View;
import com.owncloud.android.MainApp;
import com.owncloud.android.R;
import com.owncloud.android.authentication.AccountUtils;
import com.owncloud.android.lib.common.OwnCloudAccount;
import com.owncloud.android.lib.common.OwnCloudClient;
import com.owncloud.android.lib.common.OwnCloudClientManagerFactory;
import com.owncloud.android.lib.common.operations.RemoteOperationResult;
import com.owncloud.android.lib.common.utils.Log_OC;
import com.owncloud.android.lib.resources.activities.GetRemoteActivitiesOperation;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import butterknife.BindString;
/**
* Implementation of the Activities Service API that communicates with the NextCloud remote server
*/
public class ActivitiesServiceApiImpl implements ActivitiesServiceApi {
private static final String TAG = ActivitiesServiceApiImpl.class.getSimpleName();
@Override
public void getAllActivities(String pageUrl, ActivitiesServiceCallback<List<Object>> callback) {
GetActivityListTask getActivityListTask = new GetActivityListTask(pageUrl, callback);
getActivityListTask.execute();
}
private class GetActivityListTask extends AsyncTask<Void, Void, Boolean> {
private final ActivitiesServiceCallback<List<Object>> mCallback;
private List<Object> mActivities;
private String mPageUrl;
String noResultsMessage = "no results";
private String errorMessage;
private OwnCloudClient ownCloudClient;
private GetActivityListTask(String pageUrl, ActivitiesServiceCallback<List<Object>> callback) {
mPageUrl = pageUrl;
mCallback = callback;
mActivities = new ArrayList<>();
}
@Override
protected Boolean doInBackground(Void... voids) {
final Account currentAccount = AccountUtils.getCurrentOwnCloudAccount(MainApp.getAppContext());
final Context context = MainApp.getAppContext();
OwnCloudAccount ocAccount;
try {
ocAccount = new OwnCloudAccount(currentAccount, context);
ownCloudClient = OwnCloudClientManagerFactory.getDefaultSingleton().
getClientFor(ocAccount, MainApp.getAppContext());
ownCloudClient.setOwnCloudVersion(AccountUtils.getServerVersion(currentAccount));
GetRemoteActivitiesOperation getRemoteNotificationOperation = new GetRemoteActivitiesOperation();
if (mPageUrl != null) {
getRemoteNotificationOperation.setNextUrl(mPageUrl);
}
final RemoteOperationResult result = getRemoteNotificationOperation.execute(ownCloudClient);
if (result.isSuccess() && result.getData() != null) {
final ArrayList<Object> data = result.getData();
mActivities = (ArrayList) data.get(0);
mPageUrl = (String) data.get(1);
return true;
} else {
Log_OC.d(TAG, result.getLogMessage());
// show error
errorMessage = result.getLogMessage();
if (result.getHttpCode() == 304) {
errorMessage = noResultsMessage;
}
return false;
}
} catch (com.owncloud.android.lib.common.accounts.AccountUtils.AccountNotFoundException e) {
Log_OC.e(TAG, "Account not found", e);
errorMessage = "Account not found";
} catch (IOException e) {
Log_OC.e(TAG, "IO error", e);
errorMessage = "IO error";
} catch (OperationCanceledException e) {
Log_OC.e(TAG, "Operation has been canceled", e);
errorMessage = "Operation has been canceled";
} catch (AuthenticatorException e) {
Log_OC.e(TAG, "Authentication Exception", e);
errorMessage = "Authentication Exception";
}
return false;
}
@Override
protected void onPostExecute(Boolean success) {
super.onPostExecute(success);
if (success) {
mCallback.onLoaded(new ArrayList<>(), ownCloudClient, mPageUrl == null);
}
mCallback.onError(errorMessage);
}
}
}

View file

@ -0,0 +1,18 @@
package com.owncloud.android.ui.activities.data;
import android.support.annotation.NonNull;
public class ActivityRepositories {
private ActivityRepositories() {
// No instance
}
private static ActivitiesRepository repository = null;
public static synchronized ActivitiesRepository getRepository(@NonNull ActivitiesServiceApi activitiesServiceApi) {
return new RemoteActivitiesRepository(activitiesServiceApi);
}
}

View file

@ -0,0 +1,32 @@
package com.owncloud.android.ui.activities.data;
import android.support.annotation.NonNull;
import com.owncloud.android.lib.common.OwnCloudClient;
import java.util.List;
public class RemoteActivitiesRepository implements ActivitiesRepository {
private final ActivitiesServiceApi mActivitiesServiceApi;
public RemoteActivitiesRepository(@NonNull ActivitiesServiceApi activitiesServiceApi) {
mActivitiesServiceApi = activitiesServiceApi;
}
@Override
public void getActivities(String pageUrl, @NonNull LoadActivitiesCallback callback) {
mActivitiesServiceApi.getAllActivities(pageUrl, new ActivitiesServiceApi.ActivitiesServiceCallback<List<Object>>() {
@Override
public void onLoaded(List<Object> activities, OwnCloudClient client, boolean clear) {
callback.onActivitiesLoaded(activities, client, clear);
}
@Override
public void onError(String error) {
callback.onActivitiesLoadedError(error);
}
});
}
}