Procházet zdrojové kódy

re-addf grid_image to have two view on grid (image vs item)

Signed-off-by: tobiaskaminsky <tobias@kaminsky.me>
tobiaskaminsky před 7 roky
rodič
revize
e22374e4f1

+ 45 - 19
src/main/java/com/owncloud/android/ui/adapter/OCFileListAdapter.java

@@ -99,8 +99,9 @@ public class OCFileListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHol
     private OCFile currentDirectory;
     private static final String TAG = OCFileListAdapter.class.getSimpleName();
 
-    private static final int VIEWTYPE_ITEM = 0;
-    private static final int VIEWTYPE_FOOTER = 1;
+    private static final int VIEWTYPE_FOOTER = 0;
+    private static final int VIEWTYPE_ITEM = 1;
+    private static final int VIEWTYPE_IMAGE = 2;
 
     private ArrayList<ThumbnailsCacheManager.ThumbnailGenerationTask> asyncTasks = new ArrayList<>();
 
@@ -222,7 +223,16 @@ public class OCFileListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHol
             case VIEWTYPE_ITEM:
                 if (gridView) {
                     View itemView = LayoutInflater.from(mContext).inflate(R.layout.grid_item, parent, false);
-                    return new OCFileListGridViewHolder(itemView);
+                    return new OCFileListGridItemViewHolder(itemView);
+                } else {
+                    View itemView = LayoutInflater.from(mContext).inflate(R.layout.list_item, parent, false);
+                    return new OCFileListItemViewHolder(itemView);
+                }
+
+            case VIEWTYPE_IMAGE:
+                if (gridView) {
+                    View itemView = LayoutInflater.from(mContext).inflate(R.layout.grid_image, parent, false);
+                    return new OCFileListGridImageViewHolder(itemView);
                 } else {
                     View itemView = LayoutInflater.from(mContext).inflate(R.layout.list_item, parent, false);
                     return new OCFileListItemViewHolder(itemView);
@@ -239,7 +249,7 @@ public class OCFileListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHol
         if (holder instanceof OCFileListFooterViewHolder) {
             ((OCFileListFooterViewHolder) holder).footerText.setText(getFooterText());
         } else {
-            OCFileListGridViewHolder gridViewHolder = (OCFileListGridViewHolder) holder;
+            OCFileListGridImageViewHolder gridViewHolder = (OCFileListGridImageViewHolder) holder;
 
             OCFile file = mFiles.get(position);
 
@@ -266,8 +276,6 @@ public class OCFileListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHol
                         ocFileListFragmentInterface.onLongItemClicked(file));
             }
 
-            gridViewHolder.fileName.setText(file.getFileName());
-
             if (holder instanceof OCFileListItemViewHolder) {
                 OCFileListItemViewHolder itemViewHolder = (OCFileListItemViewHolder) holder;
                 itemViewHolder.fileSize.setText(DisplayUtils.bytesToHumanReadable(file.getFileLength()));
@@ -319,13 +327,19 @@ public class OCFileListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHol
                 gridViewHolder.checkbox.setVisibility(View.GONE);
             }
 
-            if (gridView && gridImage) {
-                gridViewHolder.fileName.setVisibility(View.GONE);
-            } else {
-                if (gridView && ocFileListFragmentInterface.getColumnSize() > showFilenameColumnThreshold) {
-                    gridViewHolder.fileName.setVisibility(View.GONE);
+            if (holder instanceof OCFileListGridItemViewHolder) {
+                OCFileListGridItemViewHolder gridItemViewHolder = (OCFileListGridItemViewHolder) holder;
+
+                gridItemViewHolder.fileName.setText(file.getFileName());
+
+                if (gridView && gridImage) {
+                    gridItemViewHolder.fileName.setVisibility(View.GONE);
                 } else {
-                    gridViewHolder.fileName.setVisibility(View.VISIBLE);
+                    if (gridView && ocFileListFragmentInterface.getColumnSize() > showFilenameColumnThreshold) {
+                        gridItemViewHolder.fileName.setVisibility(View.GONE);
+                    } else {
+                        gridItemViewHolder.fileName.setVisibility(View.VISIBLE);
+                    }
                 }
             }
 
@@ -439,11 +453,15 @@ public class OCFileListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHol
         if (position == mFiles.size()) {
             return VIEWTYPE_FOOTER;
         } else {
-            return VIEWTYPE_ITEM;
+            if (MimeTypeUtil.isImage(getItem(position))) {
+                return VIEWTYPE_IMAGE;
+            } else {
+                return VIEWTYPE_ITEM;
+            }
         }
     }
 
-    private void showShareIcon(OCFileListGridViewHolder gridViewHolder, OCFile file) {
+    private void showShareIcon(OCFileListGridImageViewHolder gridViewHolder, OCFile file) {
         ImageView sharedIconView = gridViewHolder.shared;
         sharedIconView.setVisibility(View.VISIBLE);
         
@@ -753,7 +771,7 @@ public class OCFileListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHol
         gridView = bool;
     }
 
-    static class OCFileListItemViewHolder extends OCFileListGridViewHolder {
+    static class OCFileListItemViewHolder extends OCFileListGridItemViewHolder {
         private final TextView fileSize;
         private final TextView lastModification;
         private final ImageView overflowMenu;
@@ -767,24 +785,32 @@ public class OCFileListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHol
         }
     }
 
-    static class OCFileListGridViewHolder extends RecyclerView.ViewHolder {
+    static class OCFileListGridItemViewHolder extends OCFileListGridImageViewHolder {
+        private final TextView fileName;
+
+        private OCFileListGridItemViewHolder(View itemView) {
+            super(itemView);
+
+            fileName = itemView.findViewById(R.id.Filename);
+        }
+    }
+
+    static class OCFileListGridImageViewHolder extends RecyclerView.ViewHolder {
         private final ImageView thumbnail;
         private final ImageView favorite;
         private final ImageView offlineIcon;
         private final ImageView localFileIndicator;
-        private final TextView fileName;
         private final ImageView shared;
         private final ImageView checkbox;
         private final LinearLayout itemLayout;
 
-        private OCFileListGridViewHolder(View itemView) {
+        private OCFileListGridImageViewHolder(View itemView) {
             super(itemView);
 
             thumbnail = itemView.findViewById(R.id.thumbnail);
             favorite = itemView.findViewById(R.id.favorite_action);
             offlineIcon = itemView.findViewById(R.id.keptOfflineIcon);
             localFileIndicator = itemView.findViewById(R.id.localFileIndicator);
-            fileName = itemView.findViewById(R.id.Filename);
             shared = itemView.findViewById(R.id.sharedIcon);
             checkbox = itemView.findViewById(R.id.custom_checkbox);
             itemLayout = itemView.findViewById(R.id.ListItemLayout);

+ 94 - 0
src/main/res/layout/grid_image.xml

@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+  ownCloud Android client application
+  Copyright (C) 2015 ownCloud Inc.
+
+  This program is free software: you can redistribute it and/or modify
+  it under the terms of the GNU General Public License version 2,
+  as published by the Free Software Foundation.
+
+  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 General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+  
+-->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/ListItemLayout"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:layout_gravity="center_horizontal"
+    android:background="@drawable/list_selector"
+    android:gravity="center_horizontal"
+    android:orientation="vertical">
+
+    <FrameLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content">
+
+        <com.owncloud.android.ui.SquareImageView
+            android:id="@+id/thumbnail"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:padding="2dp"
+            android:scaleType="centerCrop"
+            android:src="@drawable/folder" />
+
+
+        <ImageView
+            android:id="@+id/favorite_action"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_gravity="top|end"
+            android:layout_margin="@dimen/standard_quarter_margin"
+            android:src="@drawable/ic_favorite"
+            android:contentDescription="@string/favorite_icon" />
+
+        <ImageView
+            android:id="@+id/sharedIcon"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_gravity="top|end"
+            android:layout_marginTop="24dp"
+            android:layout_marginRight="4dp"
+            android:layout_marginEnd="4dp"
+            android:src="@drawable/shared_via_link"
+            android:contentDescription="@string/shared_via_link_icon" />
+
+        <ImageView
+            android:id="@+id/localFileIndicator"
+            android:layout_width="16dp"
+            android:layout_height="16dp"
+            android:layout_gravity="bottom|end"
+            android:layout_marginBottom="@dimen/standard_quarter_margin"
+            android:layout_marginRight="@dimen/standard_quarter_margin"
+            android:layout_marginEnd="@dimen/standard_quarter_margin"
+            android:layout_marginTop="@dimen/standard_quarter_margin"
+            android:src="@drawable/ic_synced"
+            android:contentDescription="@string/synced_icon" />
+
+        <ImageView
+            android:id="@+id/keptOfflineIcon"
+            android:layout_width="16dp"
+            android:layout_height="16dp"
+            android:layout_gravity="bottom|end"
+            android:layout_marginBottom="@dimen/standard_quarter_margin"
+            android:layout_marginRight="24dp"
+            android:layout_marginEnd="24dp"
+            android:src="@drawable/ic_available_offline"
+            android:contentDescription="@string/available_offline_icon" />
+
+        <ImageView
+            android:id="@+id/custom_checkbox"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="@dimen/standard_quarter_margin"
+            android:layout_marginRight="@dimen/standard_quarter_margin"
+            android:layout_gravity="center_vertical|top"
+            android:src="@android:drawable/checkbox_off_background"
+            android:contentDescription="@string/checkbox" />
+    </FrameLayout>
+
+</LinearLayout>

+ 1 - 1
src/main/res/layout/grid_item.xml

@@ -18,7 +18,7 @@
 <com.owncloud.android.ui.SquareLinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/ListItemLayout"
     android:layout_width="match_parent"
-    android:layout_height="match_parent"
+    android:layout_height="wrap_content"
     android:layout_gravity="center_horizontal"
     android:background="@drawable/list_selector"
     android:gravity="center"