|
@@ -21,6 +21,7 @@
|
|
|
package com.owncloud.android.ui.fragment;
|
|
|
|
|
|
import android.accounts.Account;
|
|
|
+import android.accounts.AccountManager;
|
|
|
import android.accounts.AuthenticatorException;
|
|
|
import android.accounts.OperationCanceledException;
|
|
|
import android.content.Context;
|
|
@@ -52,27 +53,33 @@ 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 com.owncloud.android.lib.resources.activities.models.RichObject;
|
|
|
+import com.owncloud.android.lib.resources.files.FileVersion;
|
|
|
+import com.owncloud.android.lib.resources.files.ReadFileVersionsOperation;
|
|
|
+import com.owncloud.android.lib.resources.status.OCCapability;
|
|
|
+import com.owncloud.android.lib.resources.status.OwnCloudVersion;
|
|
|
+import com.owncloud.android.ui.activity.ComponentsGetter;
|
|
|
import com.owncloud.android.ui.activity.FileActivity;
|
|
|
-import com.owncloud.android.ui.adapter.ActivityListAdapter;
|
|
|
+import com.owncloud.android.ui.adapter.ActivityAndVersionListAdapter;
|
|
|
+import com.owncloud.android.ui.helpers.FileOperationsHelper;
|
|
|
import com.owncloud.android.ui.interfaces.ActivityListInterface;
|
|
|
+import com.owncloud.android.ui.interfaces.VersionListInterface;
|
|
|
import com.owncloud.android.utils.ThemeUtils;
|
|
|
|
|
|
import java.io.IOException;
|
|
|
import java.util.ArrayList;
|
|
|
-import java.util.List;
|
|
|
|
|
|
import butterknife.BindString;
|
|
|
import butterknife.BindView;
|
|
|
import butterknife.ButterKnife;
|
|
|
import butterknife.Unbinder;
|
|
|
|
|
|
-public class FileDetailActivitiesFragment extends Fragment implements ActivityListInterface {
|
|
|
+public class FileDetailActivitiesFragment extends Fragment implements ActivityListInterface, VersionListInterface.View {
|
|
|
private static final String TAG = FileDetailActivitiesFragment.class.getSimpleName();
|
|
|
|
|
|
private static final String ARG_FILE = "FILE";
|
|
|
private static final String ARG_ACCOUNT = "ACCOUNT";
|
|
|
|
|
|
- private ActivityListAdapter adapter;
|
|
|
+ private ActivityAndVersionListAdapter adapter;
|
|
|
private Unbinder unbinder;
|
|
|
private OwnCloudClient ownCloudClient;
|
|
|
|
|
@@ -111,6 +118,9 @@ public class FileDetailActivitiesFragment extends Fragment implements ActivityLi
|
|
|
|
|
|
@BindString(R.string.activities_no_results_message)
|
|
|
public String noResultsMessage;
|
|
|
+ private boolean restoreFileVersionSupported;
|
|
|
+ private String userId;
|
|
|
+ private FileOperationsHelper operationsHelper;
|
|
|
|
|
|
public static FileDetailActivitiesFragment newInstance(OCFile file, Account account) {
|
|
|
FileDetailActivitiesFragment fragment = new FileDetailActivitiesFragment();
|
|
@@ -149,6 +159,11 @@ public class FileDetailActivitiesFragment extends Fragment implements ActivityLi
|
|
|
swipeEmptyListRefreshLayout.setOnRefreshListener(
|
|
|
() -> onRefreshListLayout(swipeEmptyListRefreshLayout));
|
|
|
|
|
|
+ AccountManager accountManager = AccountManager.get(getContext());
|
|
|
+ userId = accountManager.getUserData(account,
|
|
|
+ com.owncloud.android.lib.common.accounts.AccountUtils.Constants.KEY_USER_ID);
|
|
|
+
|
|
|
+
|
|
|
return view;
|
|
|
}
|
|
|
|
|
@@ -175,11 +190,18 @@ public class FileDetailActivitiesFragment extends Fragment implements ActivityLi
|
|
|
|
|
|
private void setupView() {
|
|
|
FileDataStorageManager storageManager = new FileDataStorageManager(account, getActivity().getContentResolver());
|
|
|
+ operationsHelper = ((ComponentsGetter) getActivity()).getFileOperationsHelper();
|
|
|
+
|
|
|
+ OCCapability capability = storageManager.getCapability(account.name);
|
|
|
+ OwnCloudVersion serverVersion = AccountUtils.getServerVersion(account);
|
|
|
+ restoreFileVersionSupported = capability.getFilesVersioning().isTrue() &&
|
|
|
+ serverVersion.compareTo(OwnCloudVersion.nextcloud_14) >= 0;
|
|
|
+
|
|
|
emptyContentProgressBar.getIndeterminateDrawable().setColorFilter(ThemeUtils.primaryAccentColor(getContext()),
|
|
|
PorterDuff.Mode.SRC_IN);
|
|
|
emptyContentIcon.setImageDrawable(getResources().getDrawable(R.drawable.ic_activity_light_grey));
|
|
|
|
|
|
- adapter = new ActivityListAdapter(getContext(), this, storageManager);
|
|
|
+ adapter = new ActivityAndVersionListAdapter(getContext(), this, this, storageManager);
|
|
|
recyclerView.setAdapter(adapter);
|
|
|
|
|
|
LinearLayoutManager layoutManager = new LinearLayoutManager(getContext());
|
|
@@ -205,6 +227,10 @@ public class FileDetailActivitiesFragment extends Fragment implements ActivityLi
|
|
|
});
|
|
|
}
|
|
|
|
|
|
+ public void reload() {
|
|
|
+ fetchAndSetData(null);
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* @param pageUrl String
|
|
|
*/
|
|
@@ -228,7 +254,7 @@ public class FileDetailActivitiesFragment extends Fragment implements ActivityLi
|
|
|
|
|
|
GetRemoteActivitiesOperation getRemoteNotificationOperation = new GetRemoteActivitiesOperation(
|
|
|
file.getLocalId());
|
|
|
-
|
|
|
+
|
|
|
if (pageUrl != null) {
|
|
|
getRemoteNotificationOperation.setNextUrl(pageUrl);
|
|
|
}
|
|
@@ -236,14 +262,28 @@ public class FileDetailActivitiesFragment extends Fragment implements ActivityLi
|
|
|
Log_OC.d(TAG, "BEFORE getRemoteActivitiesOperation.execute");
|
|
|
final RemoteOperationResult result = getRemoteNotificationOperation.execute(ownCloudClient);
|
|
|
|
|
|
+ ArrayList<Object> versions = null;
|
|
|
+ if (restoreFileVersionSupported) {
|
|
|
+ ReadFileVersionsOperation readFileVersionsOperation = new ReadFileVersionsOperation(
|
|
|
+ file.getLocalId(), userId);
|
|
|
+
|
|
|
+ RemoteOperationResult result1 = readFileVersionsOperation.execute(ownCloudClient);
|
|
|
+
|
|
|
+ versions = result1.getData();
|
|
|
+ }
|
|
|
+
|
|
|
if (result.isSuccess() && result.getData() != null) {
|
|
|
final ArrayList<Object> data = result.getData();
|
|
|
- final ArrayList<Object> activities = (ArrayList) data.get(0);
|
|
|
+ final ArrayList<Object> activitiesAndVersions = (ArrayList) data.get(0);
|
|
|
+
|
|
|
+ if (restoreFileVersionSupported && versions != null) {
|
|
|
+ activitiesAndVersions.addAll(versions);
|
|
|
+ }
|
|
|
nextPageUrl = (String) data.get(1);
|
|
|
|
|
|
activity.runOnUiThread(() -> {
|
|
|
- populateList(activities, ownCloudClient, pageUrl == null);
|
|
|
- if (activities.isEmpty()) {
|
|
|
+ populateList(activitiesAndVersions, pageUrl == null);
|
|
|
+ if (activitiesAndVersions.isEmpty()) {
|
|
|
setEmptyContent(noResultsHeadline, noResultsMessage);
|
|
|
list.setVisibility(View.GONE);
|
|
|
empty.setVisibility(View.VISIBLE);
|
|
@@ -283,8 +323,8 @@ public class FileDetailActivitiesFragment extends Fragment implements ActivityLi
|
|
|
t.start();
|
|
|
}
|
|
|
|
|
|
- private void populateList(List<Object> activities, OwnCloudClient mClient, boolean clear) {
|
|
|
- adapter.setActivityItems(activities, mClient, clear);
|
|
|
+ private void populateList(ArrayList<Object> activities, boolean clear) {
|
|
|
+ adapter.setActivityAndVersionItems(activities, clear);
|
|
|
}
|
|
|
|
|
|
private void setEmptyContent(String headline, String message) {
|
|
@@ -344,4 +384,9 @@ public class FileDetailActivitiesFragment extends Fragment implements ActivityLi
|
|
|
outState.putParcelable(FileActivity.EXTRA_FILE, file);
|
|
|
outState.putParcelable(FileActivity.EXTRA_ACCOUNT, account);
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onRestoreClicked(FileVersion fileVersion) {
|
|
|
+ operationsHelper.restoreFileVersion(fileVersion, userId);
|
|
|
+ }
|
|
|
}
|