Browse Source

use image url instead of generating previews by oneself

Signed-off-by: tobiasKaminsky <tobias@kaminsky.me>
tobiasKaminsky 6 years ago
parent
commit
52f77239f7

+ 1 - 1
src/main/java/com/owncloud/android/ui/activities/ActivitiesActivity.java

@@ -171,7 +171,7 @@ public class ActivitiesActivity extends FileActivity implements ActivityListInte
                 PorterDuff.Mode.SRC_IN);
 
         FileDataStorageManager storageManager = new FileDataStorageManager(getAccount(), getContentResolver());
-        adapter = new ActivityListAdapter(this, this, storageManager, false);
+        adapter = new ActivityListAdapter(this, this, storageManager, getCapabilities(), false);
         recyclerView.setAdapter(adapter);
 
         LinearLayoutManager layoutManager = new LinearLayoutManager(this);

+ 3 - 2
src/main/java/com/owncloud/android/ui/adapter/ActivityAndVersionListAdapter.java

@@ -13,6 +13,7 @@ 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;
@@ -33,8 +34,8 @@ public class ActivityAndVersionListAdapter extends ActivityListAdapter {
 
     public ActivityAndVersionListAdapter(Context context, ActivityListInterface activityListInterface,
                                          VersionListInterface.View versionListInterface,
-                                         FileDataStorageManager storageManager) {
-        super(context, activityListInterface, storageManager, true);
+                                         FileDataStorageManager storageManager, OCCapability capability) {
+        super(context, activityListInterface, storageManager, capability, true);
 
         this.versionListInterface = versionListInterface;
     }

+ 55 - 20
src/main/java/com/owncloud/android/ui/adapter/ActivityListAdapter.java

@@ -57,7 +57,10 @@ import com.owncloud.android.lib.common.utils.Log_OC;
 import com.owncloud.android.lib.resources.activities.model.Activity;
 import com.owncloud.android.lib.resources.activities.model.RichElement;
 import com.owncloud.android.lib.resources.activities.model.RichObject;
+import com.owncloud.android.lib.resources.activities.models.PreviewObject;
 import com.owncloud.android.lib.resources.files.FileUtils;
+import com.owncloud.android.lib.resources.status.OCCapability;
+import com.owncloud.android.lib.resources.status.OwnCloudVersion;
 import com.owncloud.android.ui.interfaces.ActivityListInterface;
 import com.owncloud.android.utils.DisplayUtils;
 import com.owncloud.android.utils.MimeTypeUtil;
@@ -78,24 +81,26 @@ import androidx.recyclerview.widget.RecyclerView;
  */
 public class ActivityListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
 
-    protected static final int HEADER_TYPE = 100;
-    protected static final int ACTIVITY_TYPE = 101;
-    protected final ActivityListInterface activityListInterface;
+    static final int HEADER_TYPE = 100;
+    static final int ACTIVITY_TYPE = 101;
+    private final ActivityListInterface activityListInterface;
     private final int px;
     private static final String TAG = ActivityListAdapter.class.getSimpleName();
     protected OwnCloudClient client;
 
     protected Context context;
     private FileDataStorageManager storageManager;
+    private OCCapability capability;
     protected List<Object> values;
     private boolean isDetailView;
 
     public ActivityListAdapter(Context context, ActivityListInterface activityListInterface,
-                               FileDataStorageManager storageManager, boolean isDetailView) {
+                               FileDataStorageManager storageManager, OCCapability capability, boolean isDetailView) {
         this.values = new ArrayList<>();
         this.context = context;
         this.activityListInterface = activityListInterface;
         this.storageManager = storageManager;
+        this.capability = capability;
         px = getThumbnailDimension();
         this.isDetailView = isDetailView;
     }
@@ -188,7 +193,7 @@ public class ActivityListAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
                 activityViewHolder.list.post(() -> {
                     int w = activityViewHolder.list.getMeasuredWidth();
                     int elPxSize = px + 20;
-                    int totalColumnCount = (int) Math.floor(w / elPxSize);
+                    int totalColumnCount = w / elPxSize;
 
                     try {
                         activityViewHolder.list.setColumnCount(totalColumnCount);
@@ -197,14 +202,22 @@ public class ActivityListAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
                     }
                 });
 
-
-                for (RichObject richObject : activity.getRichSubjectElement().getRichObjectList()) {
-                    if (richObject.getPath() != null) {
-                        ImageView imageView = createThumbnail(richObject, isDetailView);
-                        activityViewHolder.list.addView(imageView);
+                if (capability.getVersion().isNewerOrEqual(OwnCloudVersion.nextcloud_15)) {
+                    for (PreviewObject previewObject : activity.getPreviews()) {
+                        if (!isDetailView || MimeTypeUtil.isImageOrVideo(previewObject.getMimeType()) ||
+                            MimeTypeUtil.isVideo(previewObject.getMimeType())) {
+                            ImageView imageView = createThumbnailNew(previewObject);
+                            activityViewHolder.list.addView(imageView);
+                        }
+                    }
+                } else {
+                    for (RichObject richObject : activity.getRichSubjectElement().getRichObjectList()) {
+                        if (richObject.getPath() != null) {
+                            ImageView imageView = createThumbnailOld(richObject, isDetailView);
+                            activityViewHolder.list.addView(imageView);
+                        }
                     }
                 }
-
             } else {
                 activityViewHolder.list.removeAllViews();
                 activityViewHolder.list.setVisibility(View.GONE);
@@ -215,7 +228,29 @@ public class ActivityListAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
         }
     }
 
-    private ImageView createThumbnail(final RichObject richObject, boolean isDetailView) {
+    private ImageView createThumbnailNew(PreviewObject previewObject) {
+        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(px, px);
+        params.setMargins(10, 10, 10, 10);
+        ImageView imageView = new ImageView(context);
+        imageView.setLayoutParams(params);
+
+        if (MimeTypeUtil.isImageOrVideo(previewObject.getMimeType())) {
+            int placeholder = R.drawable.file;
+            Glide.with(context).using(new CustomGlideStreamLoader()).load(previewObject.getSource()).
+                placeholder(placeholder).error(placeholder).into(imageView);
+        } else {
+            if (MimeTypeUtil.isFolder(previewObject.getMimeType())) {
+                imageView.setImageDrawable(
+                    MimeTypeUtil.getDefaultFolderIcon(context));
+            } else {
+                imageView.setImageDrawable(MimeTypeUtil.getFileTypeIcon(previewObject.getMimeType(), "", context));
+            }
+        }
+
+        return imageView;
+    }
+
+    private ImageView createThumbnailOld(final RichObject richObject, boolean isDetailView) {
         String path = FileUtils.PATH_SEPARATOR + richObject.getPath();
         OCFile file = storageManager.getFileByPath(path);
 
@@ -250,17 +285,17 @@ public class ActivityListAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
                 }
 
                 String uri = client.getBaseUri() + "/index.php/apps/files/api/v1/thumbnail/" + px + "/" + px +
-                        Uri.encode(file.getRemotePath(), "/");
+                    Uri.encode(file.getRemotePath(), "/");
 
                 Glide.with(context).using(new CustomGlideStreamLoader()).load(uri).placeholder(placeholder)
-                        .error(placeholder).into(fileIcon); // using custom fetcher
+                    .error(placeholder).into(fileIcon); // using custom fetcher
 
             } else {
                 if (isDetailView) {
                     fileIcon.setVisibility(View.GONE);
                 } else {
                     fileIcon.setImageDrawable(MimeTypeUtil.getFileTypeIcon(file.getMimeType(), file.getFileName(),
-                            context));
+                                                                           context));
                 }
             }
         } else {
@@ -269,8 +304,8 @@ public class ActivityListAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
                 fileIcon.setVisibility(View.GONE);
             } else {
                 fileIcon.setImageDrawable(
-                        MimeTypeUtil.getFolderTypeIcon(file.isSharedWithMe() || file.isSharedWithSharee(),
-                                file.isSharedViaLink(), file.isEncrypted(), file.getMountType(), context));
+                    MimeTypeUtil.getFolderTypeIcon(file.isSharedWithMe() || file.isSharedWithSharee(),
+                                                   file.isSharedViaLink(), file.isEncrypted(), file.getMountType(), context));
             }
         }
     }
@@ -367,7 +402,7 @@ public class ActivityListAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
         return d.intValue();
     }
 
-    protected CharSequence getHeaderDateString(Context context, long modificationTimestamp) {
+    CharSequence getHeaderDateString(Context context, long modificationTimestamp) {
         if ((System.currentTimeMillis() - modificationTimestamp) < DateUtils.WEEK_IN_MILLIS) {
             return DisplayUtils.getRelativeDateTimeString(context, modificationTimestamp, DateUtils.DAY_IN_MILLIS,
                     DateUtils.WEEK_IN_MILLIS, 0);
@@ -384,7 +419,7 @@ public class ActivityListAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
         private final TextView dateTime;
         private final GridLayout list;
 
-        protected ActivityViewHolder(View itemView) {
+        ActivityViewHolder(View itemView) {
             super(itemView);
             activityIcon = itemView.findViewById(R.id.activity_icon);
             subject = itemView.findViewById(R.id.activity_subject);
@@ -398,7 +433,7 @@ public class ActivityListAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
 
         private final TextView title;
 
-        protected ActivityViewHeaderHolder(View itemView) {
+        ActivityViewHeaderHolder(View itemView) {
             super(itemView);
             title = itemView.findViewById(R.id.title_header);
 

+ 12 - 4
src/main/java/com/owncloud/android/ui/fragment/FileDetailActivitiesFragment.java

@@ -28,6 +28,7 @@ import android.content.Context;
 import android.graphics.PorterDuff;
 import android.os.AsyncTask;
 import android.os.Bundle;
+import android.text.Editable;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -201,9 +202,16 @@ public class FileDetailActivitiesFragment extends Fragment implements ActivityLi
 
     @OnClick(R.id.submitComment)
     public void submitComment() {
-        if (commentInput.getText().toString().trim().length() > 0) {
-            new SubmitCommentTask(commentInput.getText().toString().trim(), userId, file.getLocalId(),
-                    callback, ownCloudClient).execute();
+        Editable commentField = commentInput.getText();
+
+        if (commentField == null) {
+            return;
+        }
+
+        String trimmedComment = commentField.toString().trim();
+
+        if (trimmedComment.length() > 0) {
+            new SubmitCommentTask(trimmedComment, userId, file.getLocalId(), callback, ownCloudClient).execute();
         }
     }
 
@@ -241,7 +249,7 @@ public class FileDetailActivitiesFragment extends Fragment implements ActivityLi
                 PorterDuff.Mode.SRC_IN);
         emptyContentIcon.setImageDrawable(getResources().getDrawable(R.drawable.ic_activity_light_grey));
 
-        adapter = new ActivityAndVersionListAdapter(getContext(), this, this, storageManager);
+        adapter = new ActivityAndVersionListAdapter(getContext(), this, this, storageManager, capability);
         recyclerView.setAdapter(adapter);
 
         LinearLayoutManager layoutManager = new LinearLayoutManager(getContext());

+ 10 - 2
src/main/java/com/owncloud/android/utils/MimeTypeUtil.java

@@ -168,7 +168,7 @@ public final class MimeTypeUtil {
             drawableId = R.drawable.shared_with_me_folder;
         } else if (isEncrypted) {
             drawableId = R.drawable.ic_list_encrypted_folder;
-        } else if (WebdavEntry.MountType.EXTERNAL.equals(mountType)) {
+        } else if (WebdavEntry.MountType.EXTERNAL == mountType) {
             drawableId = R.drawable.folder_external;
         } else {
             drawableId = R.drawable.folder;
@@ -197,6 +197,10 @@ public final class MimeTypeUtil {
         return candidates.get(0);
     }
 
+    public static boolean isImageOrVideo(String mimeType) {
+        return isImage(mimeType) || isVideo(mimeType);
+    }
+
     /**
      * @return 'True' if the mime type defines image
      */
@@ -222,7 +226,7 @@ public final class MimeTypeUtil {
     /**
      * @return 'True' if mime type defines text
      */
-    public static boolean isText(String mimeType) {
+    private static boolean isText(String mimeType) {
         return mimeType != null && mimeType.toLowerCase(Locale.ROOT).startsWith("text/");
     }
 
@@ -299,6 +303,10 @@ public final class MimeTypeUtil {
         return isVCard(file.getMimeType()) || isVCard(getMimeTypeFromPath(file.getRemotePath()));
     }
 
+    public static boolean isFolder(String mimeType) {
+        return MimeType.DIRECTORY.equalsIgnoreCase(mimeType);
+    }
+
     /**
      * Extracts the mime type for the given file.
      *