-
Notifications
You must be signed in to change notification settings - Fork 444
/
FilesAdapter.java
118 lines (100 loc) · 3.97 KB
/
FilesAdapter.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
package com.dropbox.core.examples.android;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.MimeTypeMap;
import android.widget.ImageView;
import android.widget.TextView;
import com.dropbox.core.v2.files.FileMetadata;
import com.dropbox.core.v2.files.FolderMetadata;
import com.dropbox.core.v2.files.Metadata;
import com.squareup.picasso.Picasso;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* Adapter for file list
*/
public class FilesAdapter extends RecyclerView.Adapter<FilesAdapter.MetadataViewHolder> {
private List<Metadata> mFiles;
private final Picasso mPicasso;
private final Callback mCallback;
public void setFiles(List<Metadata> files) {
mFiles = Collections.unmodifiableList(new ArrayList<>(files));
notifyDataSetChanged();
}
public interface Callback {
void onFolderClicked(FolderMetadata folder);
void onFileClicked(FileMetadata file);
}
public FilesAdapter(Picasso picasso, Callback callback) {
mPicasso = picasso;
mCallback = callback;
}
@Override
public MetadataViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
Context context = viewGroup.getContext();
View view = LayoutInflater.from(context)
.inflate(R.layout.files_item, viewGroup, false);
return new MetadataViewHolder(view);
}
@Override
public void onBindViewHolder(MetadataViewHolder metadataViewHolder, int i) {
metadataViewHolder.bind(mFiles.get(i));
}
@Override
public long getItemId(int position) {
return mFiles.get(position).getPathLower().hashCode();
}
@Override
public int getItemCount() {
return mFiles == null ? 0 : mFiles.size();
}
public class MetadataViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
private final TextView mTextView;
private final ImageView mImageView;
private Metadata mItem;
public MetadataViewHolder(View itemView) {
super(itemView);
mImageView = (ImageView)itemView.findViewById(R.id.image);
mTextView = (TextView)itemView.findViewById(R.id.text);
itemView.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if (mItem instanceof FolderMetadata) {
mCallback.onFolderClicked((FolderMetadata) mItem);
} else if (mItem instanceof FileMetadata) {
mCallback.onFileClicked((FileMetadata)mItem);
}
}
public void bind(Metadata item) {
mItem = item;
mTextView.setText(mItem.getName());
// Load based on file path
// Prepending a magic scheme to get it to
// be picked up by DropboxPicassoRequestHandler
if (item instanceof FileMetadata) {
MimeTypeMap mime = MimeTypeMap.getSingleton();
String ext = item.getName().substring(item.getName().indexOf(".") + 1);
String type = mime.getMimeTypeFromExtension(ext);
if (type != null && type.startsWith("image/")) {
mPicasso.load(FileThumbnailRequestHandler.buildPicassoUri((FileMetadata)item))
.placeholder(R.drawable.ic_photo_grey_600_36dp)
.error(R.drawable.ic_photo_grey_600_36dp)
.into(mImageView);
} else {
mPicasso.load(R.drawable.ic_insert_drive_file_blue_36dp)
.noFade()
.into(mImageView);
}
} else if (item instanceof FolderMetadata) {
mPicasso.load(R.drawable.ic_folder_blue_36dp)
.noFade()
.into(mImageView);
}
}
}
}