Skip to content

Commit c620a93

Browse files
use image url instead of generating previews by oneself
Signed-off-by: tobiasKaminsky <[email protected]>
1 parent 585f734 commit c620a93

File tree

5 files changed

+51
-88
lines changed

5 files changed

+51
-88
lines changed

build.gradle

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@ buildscript {
1616
}
1717
dependencies {
1818
classpath 'com.android.tools.build:gradle:3.2.1'
19-
classpath 'org.codehaus.groovy:groovy-all:2.4.12'
20-
classpath('com.dicedmelon.gradle:jacoco-android:0.1.3') {
21-
exclude group: 'org.codehaus.groovy', module: 'groovy-all'
19+
classpath 'org.codehaus.groovy:groovy-all:2.4.12'
20+
classpath('com.dicedmelon.gradle:jacoco-android:0.1.3') {
21+
exclude group: 'org.codehaus.groovy', module: 'groovy-all'
2222
}
2323
}
2424
}
@@ -212,9 +212,9 @@ dependencies {
212212
// dependencies for app building
213213
implementation 'com.android.support:multidex:1.0.3'
214214
// implementation project('nextcloud-android-library')
215-
genericImplementation "com.github.nextcloud:android-library:master-SNAPSHOT"
216-
gplayImplementation "com.github.nextcloud:android-library:master-SNAPSHOT"
217-
versionDevImplementation 'com.github.nextcloud:android-library:master-SNAPSHOT' // use always latest master
215+
genericImplementation "com.github.nextcloud:android-library:activity-previews-SNAPSHOT"
216+
gplayImplementation "com.github.nextcloud:android-library:activity-previews-SNAPSHOT"
217+
versionDevImplementation 'com.github.nextcloud:android-library:activity-previews-SNAPSHOT' // use always latest master
218218
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
219219
implementation "com.android.support:support-v4:${supportLibraryVersion}"
220220
implementation "com.android.support:design:${supportLibraryVersion}"
@@ -268,7 +268,7 @@ dependencies {
268268

269269
findbugsPlugins 'com.h3xstream.findsecbugs:findsecbugs-plugin:1.8.0'
270270
findbugsPlugins 'com.mebigfatguy.fb-contrib:fb-contrib:7.4.3'
271-
271+
272272
// jacocoAnt "org.jacoco:org.jacoco.ant:${jacocoVersion}"
273273
// jacocoAgent "org.jacoco:org.jacoco.agent:${jacocoVersion}"
274274
// androidJacocoAgent "org.jacoco:org.jacoco.agent:${jacocoVersion}"

src/main/java/com/owncloud/android/ui/activities/ActivitiesActivity.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/**
1+
/*
22
* Nextcloud Android client application
33
*
44
* Copyright (C) 2018 Edvard Holst
@@ -21,6 +21,7 @@
2121
import android.content.Intent;
2222
import android.graphics.PorterDuff;
2323
import android.os.Bundle;
24+
import android.support.annotation.NonNull;
2425
import android.support.design.widget.BottomNavigationView;
2526
import android.support.v4.widget.SwipeRefreshLayout;
2627
import android.support.v7.app.ActionBar;
@@ -35,7 +36,6 @@
3536
import android.widget.Toast;
3637

3738
import com.owncloud.android.R;
38-
import com.owncloud.android.datamodel.FileDataStorageManager;
3939
import com.owncloud.android.datamodel.OCFile;
4040
import com.owncloud.android.lib.common.OwnCloudClient;
4141
import com.owncloud.android.lib.common.utils.Log_OC;
@@ -169,8 +169,7 @@ private void setupContent() {
169169
emptyContentProgressBar.getIndeterminateDrawable().setColorFilter(ThemeUtils.primaryAccentColor(this),
170170
PorterDuff.Mode.SRC_IN);
171171

172-
FileDataStorageManager storageManager = new FileDataStorageManager(getAccount(), getContentResolver());
173-
adapter = new ActivityListAdapter(this, this, storageManager, false);
172+
adapter = new ActivityListAdapter(this, this, false);
174173
recyclerView.setAdapter(adapter);
175174

176175
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
@@ -179,7 +178,7 @@ private void setupContent() {
179178
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
180179

181180
@Override
182-
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
181+
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
183182
super.onScrolled(recyclerView, dx, dy);
184183

185184
int visibleItemCount = recyclerView.getChildCount();
@@ -230,7 +229,7 @@ protected void onResume() {
230229
super.onResume();
231230

232231
setDrawerMenuItemChecked(R.id.nav_activity);
233-
232+
234233
setupContent();
235234
}
236235

src/main/java/com/owncloud/android/ui/adapter/ActivityAndVersionListAdapter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public class ActivityAndVersionListAdapter extends ActivityListAdapter {
3434
public ActivityAndVersionListAdapter(Context context, ActivityListInterface activityListInterface,
3535
VersionListInterface.View versionListInterface,
3636
FileDataStorageManager storageManager) {
37-
super(context, activityListInterface, storageManager, true);
37+
super(context, activityListInterface, true);
3838

3939
this.versionListInterface = versionListInterface;
4040
}

src/main/java/com/owncloud/android/ui/adapter/ActivityListAdapter.java

Lines changed: 27 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -52,14 +52,12 @@
5252
import com.caverock.androidsvg.SVG;
5353
import com.owncloud.android.MainApp;
5454
import com.owncloud.android.R;
55-
import com.owncloud.android.datamodel.FileDataStorageManager;
56-
import com.owncloud.android.datamodel.OCFile;
5755
import com.owncloud.android.lib.common.OwnCloudClient;
5856
import com.owncloud.android.lib.common.utils.Log_OC;
5957
import com.owncloud.android.lib.resources.activities.models.Activity;
58+
import com.owncloud.android.lib.resources.activities.models.PreviewObject;
6059
import com.owncloud.android.lib.resources.activities.models.RichElement;
6160
import com.owncloud.android.lib.resources.activities.models.RichObject;
62-
import com.owncloud.android.lib.resources.files.FileUtils;
6361
import com.owncloud.android.ui.interfaces.ActivityListInterface;
6462
import com.owncloud.android.utils.DisplayUtils;
6563
import com.owncloud.android.utils.MimeTypeUtil;
@@ -77,36 +75,33 @@
7775
*/
7876
public class ActivityListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
7977

80-
protected static final int HEADER_TYPE = 100;
81-
protected static final int ACTIVITY_TYPE = 101;
82-
protected final ActivityListInterface activityListInterface;
78+
static final int HEADER_TYPE = 100;
79+
static final int ACTIVITY_TYPE = 101;
80+
private final ActivityListInterface activityListInterface;
8381
private final int px;
8482
private static final String TAG = ActivityListAdapter.class.getSimpleName();
8583
protected OwnCloudClient client;
8684

8785
protected Context context;
88-
private FileDataStorageManager storageManager;
8986
protected List<Object> values;
9087
private boolean isDetailView;
9188

92-
public ActivityListAdapter(Context context, ActivityListInterface activityListInterface,
93-
FileDataStorageManager storageManager, boolean isDetailView) {
89+
public ActivityListAdapter(Context context, ActivityListInterface activityListInterface, boolean isDetailView) {
9490
this.values = new ArrayList<>();
9591
this.context = context;
9692
this.activityListInterface = activityListInterface;
97-
this.storageManager = storageManager;
9893
px = getThumbnailDimension();
9994
this.isDetailView = isDetailView;
10095
}
10196

10297
public void setActivityItems(List<Object> activityItems, OwnCloudClient client, boolean clear) {
10398
this.client = client;
10499
String sTime = "";
105-
100+
106101
if (clear) {
107102
values.clear();
108103
}
109-
104+
110105
for (Object o : activityItems) {
111106
Activity activity = (Activity) o;
112107
String time;
@@ -196,14 +191,13 @@ public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int positi
196191
}
197192
});
198193

199-
200-
for (RichObject richObject : activity.getRichSubjectElement().getRichObjectList()) {
201-
if (richObject.getPath() != null) {
202-
ImageView imageView = createThumbnail(richObject, isDetailView);
194+
for (PreviewObject previewObject : activity.getPreviews()) {
195+
if (!isDetailView || isDetailView && (MimeTypeUtil.isImageOrVideo(previewObject.getMimeType()) ||
196+
MimeTypeUtil.isVideo(previewObject.getMimeType()))) {
197+
ImageView imageView = createThumbnail(previewObject);
203198
activityViewHolder.list.addView(imageView);
204199
}
205200
}
206-
207201
} else {
208202
activityViewHolder.list.removeAllViews();
209203
activityViewHolder.list.setVisibility(View.GONE);
@@ -214,64 +208,26 @@ public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int positi
214208
}
215209
}
216210

217-
private ImageView createThumbnail(final RichObject richObject, boolean isDetailView) {
218-
String path = FileUtils.PATH_SEPARATOR + richObject.getPath();
219-
OCFile file = storageManager.getFileByPath(path);
220-
221-
if (file == null) {
222-
file = storageManager.getFileByPath(path + FileUtils.PATH_SEPARATOR);
223-
}
224-
if (file == null) {
225-
file = new OCFile(path);
226-
file.setRemoteId(richObject.getId());
227-
}
228-
211+
private ImageView createThumbnail(PreviewObject previewObject) {
229212
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(px, px);
230213
params.setMargins(10, 10, 10, 10);
231214
ImageView imageView = new ImageView(context);
232215
imageView.setLayoutParams(params);
233-
imageView.setOnClickListener(v -> activityListInterface.onActivityClicked(richObject));
234-
setBitmap(file, imageView, isDetailView);
235-
236-
return imageView;
237-
}
238216

239-
private void setBitmap(OCFile file, ImageView fileIcon, boolean isDetailView) {
240-
// No Folder
241-
if (!file.isFolder()) {
242-
if (MimeTypeUtil.isImage(file) || MimeTypeUtil.isVideo(file)) {
243-
int placeholder;
244-
245-
if (MimeTypeUtil.isImage(file)) {
246-
placeholder = R.drawable.file_image;
247-
} else {
248-
placeholder = R.drawable.file_movie;
249-
}
250-
251-
String uri = client.getBaseUri() + "/index.php/apps/files/api/v1/thumbnail/" + px + "/" + px +
252-
Uri.encode(file.getRemotePath(), "/");
253-
254-
Glide.with(context).using(new CustomGlideStreamLoader()).load(uri).placeholder(placeholder)
255-
.error(placeholder).into(fileIcon); // using custom fetcher
256-
257-
} else {
258-
if (isDetailView) {
259-
fileIcon.setVisibility(View.GONE);
260-
} else {
261-
fileIcon.setImageDrawable(MimeTypeUtil.getFileTypeIcon(file.getMimeType(), file.getFileName(),
262-
context));
263-
}
264-
}
217+
if (MimeTypeUtil.isImageOrVideo(previewObject.getMimeType())) {
218+
int placeholder = R.drawable.file;
219+
Glide.with(context).using(new CustomGlideStreamLoader()).load(previewObject.getSource()).
220+
placeholder(placeholder).error(placeholder).into(imageView);
265221
} else {
266-
// Folder
267-
if (isDetailView) {
268-
fileIcon.setVisibility(View.GONE);
222+
if (MimeTypeUtil.isFolder(previewObject.getMimeType())) {
223+
imageView.setImageDrawable(
224+
MimeTypeUtil.getDefaultFolderIcon(context));
269225
} else {
270-
fileIcon.setImageDrawable(
271-
MimeTypeUtil.getFolderTypeIcon(file.isSharedWithMe() || file.isSharedWithSharee(),
272-
file.isSharedViaLink(), file.isEncrypted(), file.getMountType(), context));
226+
imageView.setImageDrawable(MimeTypeUtil.getFileTypeIcon(previewObject.getMimeType(), "", context));
273227
}
274228
}
229+
230+
return imageView;
275231
}
276232

277233
private void downloadIcon(String icon, ImageView itemViewType) {
@@ -312,12 +268,12 @@ private SpannableStringBuilder addClickablePart(RichElement richElement) {
312268
idx2 = idx1 + name.length();
313269
ssb.setSpan(new ClickableSpan() {
314270
@Override
315-
public void onClick(View widget) {
271+
public void onClick(@NonNull View widget) {
316272
activityListInterface.onActivityClicked(richObject);
317273
}
318274

319275
@Override
320-
public void updateDrawState(TextPaint ds) {
276+
public void updateDrawState(@NonNull TextPaint ds) {
321277
ds.setUnderlineText(false);
322278
}
323279
}, idx1, idx2, 0);
@@ -366,7 +322,7 @@ private int getThumbnailDimension() {
366322
return d.intValue();
367323
}
368324

369-
protected CharSequence getHeaderDateString(Context context, long modificationTimestamp) {
325+
CharSequence getHeaderDateString(Context context, long modificationTimestamp) {
370326
if ((System.currentTimeMillis() - modificationTimestamp) < DateUtils.WEEK_IN_MILLIS) {
371327
return DisplayUtils.getRelativeDateTimeString(context, modificationTimestamp, DateUtils.DAY_IN_MILLIS,
372328
DateUtils.WEEK_IN_MILLIS, 0);
@@ -383,7 +339,7 @@ protected class ActivityViewHolder extends RecyclerView.ViewHolder {
383339
private final TextView dateTime;
384340
private final GridLayout list;
385341

386-
protected ActivityViewHolder(View itemView) {
342+
ActivityViewHolder(View itemView) {
387343
super(itemView);
388344
activityIcon = itemView.findViewById(R.id.activity_icon);
389345
subject = itemView.findViewById(R.id.activity_subject);
@@ -397,7 +353,7 @@ protected class ActivityViewHeaderHolder extends RecyclerView.ViewHolder {
397353

398354
private final TextView title;
399355

400-
protected ActivityViewHeaderHolder(View itemView) {
356+
ActivityViewHeaderHolder(View itemView) {
401357
super(itemView);
402358
title = itemView.findViewById(R.id.title_header);
403359

src/main/java/com/owncloud/android/utils/MimeTypeUtil.java

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ public static Drawable getFolderTypeIcon(boolean isSharedViaUsers, boolean isSha
157157
* @return Identifier of an image resource.
158158
*/
159159
public static Drawable getFolderTypeIcon(boolean isSharedViaUsers, boolean isSharedViaLink,
160-
boolean isEncrypted, Account account, WebdavEntry.MountType mountType,
160+
boolean isEncrypted, Account account, WebdavEntry.MountType mountType,
161161
Context context) {
162162
int drawableId;
163163

@@ -167,7 +167,7 @@ public static Drawable getFolderTypeIcon(boolean isSharedViaUsers, boolean isSha
167167
drawableId = R.drawable.shared_with_me_folder;
168168
} else if (isEncrypted) {
169169
drawableId = R.drawable.ic_list_encrypted_folder;
170-
} else if (WebdavEntry.MountType.EXTERNAL.equals(mountType)) {
170+
} else if (WebdavEntry.MountType.EXTERNAL == mountType) {
171171
drawableId = R.drawable.folder_external;
172172
} else {
173173
drawableId = R.drawable.folder;
@@ -196,6 +196,10 @@ public static String getBestMimeTypeByFilename(String filename) {
196196
return candidates.get(0);
197197
}
198198

199+
public static boolean isImageOrVideo(String mimeType) {
200+
return isImage(mimeType) || isVideo(mimeType);
201+
}
202+
199203
/**
200204
* @return 'True' if the mime type defines image
201205
*/
@@ -221,7 +225,7 @@ public static boolean isAudio(String mimeType) {
221225
/**
222226
* @return 'True' if mime type defines text
223227
*/
224-
public static boolean isText(String mimeType) {
228+
private static boolean isText(String mimeType) {
225229
return mimeType != null && mimeType.toLowerCase(Locale.ROOT).startsWith("text/");
226230
}
227231

@@ -298,6 +302,10 @@ public static boolean isVCard(OCFile file) {
298302
return isVCard(file.getMimeType()) || isVCard(getMimeTypeFromPath(file.getRemotePath()));
299303
}
300304

305+
public static boolean isFolder(String mimeType) {
306+
return MimeType.DIRECTORY.equalsIgnoreCase(mimeType);
307+
}
308+
301309
/**
302310
* Extracts the mime type for the given file.
303311
*

0 commit comments

Comments
 (0)