185 lines
6.5 KiB
Java
185 lines
6.5 KiB
Java
/*
|
|
* Nextcloud Android client application
|
|
*
|
|
* @author Chris Narkiewicz
|
|
* @author Tobias Kaminsky
|
|
*
|
|
* Copyright (C) 2019 Tobias Kaminsky
|
|
* Copyright (C) 2019 Chris Narkiewicz <hello@ezaquarii.com>
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU Affero General Public License as published by
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU Affero General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Affero General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
package com.owncloud.android.ui.adapter;
|
|
|
|
import android.content.Context;
|
|
import android.text.format.DateFormat;
|
|
import android.view.LayoutInflater;
|
|
import android.view.View;
|
|
import android.view.ViewGroup;
|
|
import android.widget.ImageView;
|
|
import android.widget.TextView;
|
|
|
|
import com.nextcloud.client.account.CurrentAccountProvider;
|
|
import com.owncloud.android.R;
|
|
import com.owncloud.android.datamodel.FileDataStorageManager;
|
|
import com.owncloud.android.lib.common.OwnCloudClient;
|
|
import com.owncloud.android.lib.resources.activities.model.Activity;
|
|
import com.owncloud.android.lib.resources.files.model.FileVersion;
|
|
import com.owncloud.android.lib.resources.status.OCCapability;
|
|
import com.owncloud.android.ui.interfaces.ActivityListInterface;
|
|
import com.owncloud.android.ui.interfaces.VersionListInterface;
|
|
import com.owncloud.android.utils.DisplayUtils;
|
|
|
|
import java.util.Collections;
|
|
import java.util.Date;
|
|
import java.util.List;
|
|
|
|
import androidx.annotation.NonNull;
|
|
import androidx.recyclerview.widget.RecyclerView;
|
|
import butterknife.BindView;
|
|
import butterknife.ButterKnife;
|
|
|
|
public class ActivityAndVersionListAdapter extends ActivityListAdapter {
|
|
|
|
private static final int VERSION_TYPE = 102;
|
|
private VersionListInterface.View versionListInterface;
|
|
|
|
public ActivityAndVersionListAdapter(
|
|
Context context,
|
|
CurrentAccountProvider currentAccountProvider,
|
|
ActivityListInterface activityListInterface,
|
|
VersionListInterface.View versionListInterface,
|
|
FileDataStorageManager storageManager,
|
|
OCCapability capability
|
|
) {
|
|
super(context, currentAccountProvider, activityListInterface, storageManager, capability, true);
|
|
|
|
this.versionListInterface = versionListInterface;
|
|
}
|
|
|
|
public void setActivityAndVersionItems(List<Object> items, OwnCloudClient newClient, boolean clear) {
|
|
if (client == null) {
|
|
client = newClient;
|
|
}
|
|
if (clear) {
|
|
values.clear();
|
|
Collections.sort(items, (o1, o2) -> {
|
|
long o1Date;
|
|
long o2Date;
|
|
if (o1 instanceof Activity) {
|
|
o1Date = ((Activity) o1).getDatetime().getTime();
|
|
} else {
|
|
o1Date = ((FileVersion) o1).getModifiedTimestamp();
|
|
}
|
|
|
|
if (o2 instanceof Activity) {
|
|
o2Date = ((Activity) o2).getDatetime().getTime();
|
|
} else {
|
|
o2Date = ((FileVersion) o2).getModifiedTimestamp();
|
|
}
|
|
|
|
return -1 * Long.compare(o1Date, o2Date);
|
|
});
|
|
}
|
|
|
|
String sTime = "";
|
|
for (Object item : items) {
|
|
String time;
|
|
|
|
if (item instanceof Activity) {
|
|
Activity activity = (Activity) item;
|
|
if (activity.getDatetime() != null) {
|
|
time = getHeaderDateString(context, activity.getDatetime().getTime()).toString();
|
|
} else if (activity.getDate() != null) {
|
|
time = getHeaderDateString(context, activity.getDate().getTime()).toString();
|
|
} else {
|
|
time = context.getString(R.string.date_unknown);
|
|
}
|
|
} else {
|
|
FileVersion version = (FileVersion) item;
|
|
time = getHeaderDateString(context, version.getModifiedTimestamp()).toString();
|
|
}
|
|
|
|
if (sTime.equalsIgnoreCase(time)) {
|
|
values.add(item);
|
|
} else {
|
|
sTime = time;
|
|
values.add(sTime);
|
|
values.add(item);
|
|
}
|
|
}
|
|
|
|
notifyDataSetChanged();
|
|
}
|
|
|
|
@NonNull
|
|
@Override
|
|
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
|
switch (viewType) {
|
|
case VERSION_TYPE:
|
|
View versionView = LayoutInflater.from(parent.getContext()).inflate(R.layout.version_list_item,
|
|
parent, false);
|
|
return new VersionViewHolder(versionView);
|
|
default:
|
|
return super.onCreateViewHolder(parent, viewType);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
|
|
if (holder instanceof VersionViewHolder) {
|
|
final VersionViewHolder versionViewHolder = (VersionViewHolder) holder;
|
|
FileVersion fileVersion = (FileVersion) values.get(position);
|
|
|
|
versionViewHolder.size.setText(DisplayUtils.bytesToHumanReadable(fileVersion.getFileLength()));
|
|
versionViewHolder.time.setText(DateFormat.format("HH:mm", new Date(fileVersion.getModifiedTimestamp())
|
|
.getTime()));
|
|
|
|
versionViewHolder.restore.setOnClickListener(v -> versionListInterface.onRestoreClicked(fileVersion));
|
|
} else {
|
|
super.onBindViewHolder(holder, position);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public int getItemViewType(int position) {
|
|
Object value = values.get(position);
|
|
|
|
if (value instanceof Activity) {
|
|
return ACTIVITY_TYPE;
|
|
} else if (value instanceof FileVersion) {
|
|
return VERSION_TYPE;
|
|
} else {
|
|
return HEADER_TYPE;
|
|
}
|
|
}
|
|
|
|
protected class VersionViewHolder extends RecyclerView.ViewHolder {
|
|
@BindView(R.id.thumbnail)
|
|
public ImageView thumbnail;
|
|
@BindView(R.id.size)
|
|
public TextView size;
|
|
@BindView(R.id.time)
|
|
public TextView time;
|
|
@BindView(R.id.restore)
|
|
public ImageView restore;
|
|
|
|
VersionViewHolder(View itemView) {
|
|
super(itemView);
|
|
ButterKnife.bind(this, itemView);
|
|
}
|
|
}
|
|
}
|