Browse Source

Rebase fix

Signed-off-by: alperozturk <alper_ozturk@proton.me>
alperozturk 1 năm trước cách đây
mục cha
commit
a1ca1fef05

+ 6 - 2
app/src/main/java/com/owncloud/android/ui/adapter/ListGridImageViewHolder.kt

@@ -22,13 +22,16 @@
 package com.owncloud.android.ui.adapter
 
 import android.view.View
+import android.widget.ImageButton
 import android.widget.ImageView
+import android.widget.LinearLayout
 import android.widget.TextView
 import com.elyeproj.loaderviewlibrary.LoaderImageView
 
 interface ListGridImageViewHolder {
     val thumbnail: ImageView
     fun showVideoOverlay()
+    fun checkVisibilityOfFileFeaturesLayout()
     val shimmerThumbnail: LoaderImageView
     val favorite: ImageView
     val localFileIndicator: ImageView
@@ -36,8 +39,9 @@ interface ListGridImageViewHolder {
     val checkbox: ImageView
     val itemLayout: View
     val unreadComments: ImageView
-
-    val gridLivePhotoIndicator: TextView?
+    val more: ImageButton?
+    val fileFeaturesLayout: LinearLayout?
+    val gridLivePhotoIndicator: ImageView?
     val livePhotoIndicator: TextView?
     val livePhotoIndicatorSeparator: TextView?
 }

+ 1 - 0
app/src/main/java/com/owncloud/android/ui/adapter/OCFileListAdapter.java

@@ -430,6 +430,7 @@ public class OCFileListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHol
             }
 
             ocFileListDelegate.bindGridViewHolder(gridViewHolder, file, searchType);
+            gridViewHolder.checkVisibilityOfFileFeaturesLayout();
 
             if (holder instanceof ListItemViewHolder) {
                 bindListItemViewHolder((ListItemViewHolder) gridViewHolder, file);

+ 5 - 1
app/src/main/java/com/owncloud/android/ui/adapter/OCFileListDelegate.kt

@@ -232,7 +232,7 @@ class OCFileListDelegate(
         }
 
         // download state
-        gridViewHolder.localFileIndicator.visibility = View.INVISIBLE // default first
+        gridViewHolder.localFileIndicator.visibility = View.GONE // default first
 
         // metadata (downloaded, favorite)
         bindGridMetadataViews(file, gridViewHolder)
@@ -289,6 +289,10 @@ class OCFileListDelegate(
                 )
             }
         }
+
+        gridViewHolder.more?.setOnClickListener {
+            ocFileListFragmentInterface.onOverflowIconClicked(file, it)
+        }
     }
 
     private fun bindGridMetadataViews(file: OCFile, gridViewHolder: ListGridImageViewHolder) {

+ 21 - 2
app/src/main/java/com/owncloud/android/ui/adapter/OCFileListGridImageViewHolder.kt

@@ -22,7 +22,9 @@
 package com.owncloud.android.ui.adapter
 
 import android.view.View
+import android.widget.ImageButton
 import android.widget.ImageView
+import android.widget.LinearLayout
 import android.widget.TextView
 import androidx.recyclerview.widget.RecyclerView
 import com.elyeproj.loaderviewlibrary.LoaderImageView
@@ -54,8 +56,11 @@ internal class OCFileListGridImageViewHolder(var binding: GridImageBinding) :
         get() = binding.ListItemLayout
     override val unreadComments: ImageView
         get() = binding.unreadComments
-
-    override val gridLivePhotoIndicator: TextView
+    override val more: ImageButton
+        get() = binding.more
+    override val fileFeaturesLayout: LinearLayout
+        get() = binding.fileFeaturesLayout
+    override val gridLivePhotoIndicator: ImageView
         get() = binding.gridLivePhotoIndicator
     override val livePhotoIndicator: TextView?
         get() = null
@@ -65,4 +70,18 @@ internal class OCFileListGridImageViewHolder(var binding: GridImageBinding) :
     init {
         binding.favoriteAction.drawable.mutate()
     }
+
+    @Suppress("ComplexCondition")
+    override fun checkVisibilityOfFileFeaturesLayout() {
+        if (favorite.visibility == View.GONE &&
+            shared.visibility == View.GONE &&
+            unreadComments.visibility == View.GONE &&
+            localFileIndicator.visibility == View.GONE &&
+            checkbox.visibility == View.GONE
+        ) {
+            fileFeaturesLayout.visibility = View.GONE
+        } else {
+            fileFeaturesLayout.visibility = View.VISIBLE
+        }
+    }
 }

+ 22 - 1
app/src/main/java/com/owncloud/android/ui/adapter/OCFileListGridItemViewHolder.kt

@@ -22,7 +22,9 @@
 package com.owncloud.android.ui.adapter
 
 import android.view.View
+import android.widget.ImageButton
 import android.widget.ImageView
+import android.widget.LinearLayout
 import android.widget.TextView
 import androidx.recyclerview.widget.RecyclerView
 import com.elyeproj.loaderviewlibrary.LoaderImageView
@@ -57,14 +59,33 @@ internal class OCFileListGridItemViewHolder(var binding: GridItemBinding) :
     override val unreadComments: ImageView
         get() = binding.unreadComments
 
-    override val gridLivePhotoIndicator: TextView?
+    override val gridLivePhotoIndicator: ImageView?
         get() = null
     override val livePhotoIndicator: TextView?
         get() = null
     override val livePhotoIndicatorSeparator: TextView?
         get() = null
+    override val fileFeaturesLayout: LinearLayout
+        get() = binding.fileFeaturesLayout
+    override val more: ImageButton
+        get() = binding.more
 
     init {
         binding.favoriteAction.drawable.mutate()
     }
+
+    @Suppress("ComplexCondition")
+    override fun checkVisibilityOfFileFeaturesLayout() {
+        if (favorite.visibility == View.GONE &&
+            binding.videoOverlay.visibility == View.GONE &&
+            shared.visibility == View.GONE &&
+            unreadComments.visibility == View.GONE &&
+            localFileIndicator.visibility == View.GONE &&
+            checkbox.visibility == View.GONE
+        ) {
+            fileFeaturesLayout.visibility = View.GONE
+        } else {
+            fileFeaturesLayout.visibility = View.VISIBLE
+        }
+    }
 }

+ 10 - 1
app/src/main/java/com/owncloud/android/ui/adapter/OCFileListItemViewHolder.kt

@@ -22,6 +22,7 @@
 package com.owncloud.android.ui.adapter
 
 import android.view.View
+import android.widget.ImageButton
 import android.widget.ImageView
 import android.widget.LinearLayout
 import android.widget.TextView
@@ -37,7 +38,7 @@ internal class OCFileListItemViewHolder(private var binding: ListItemBinding) :
         binding.root
     ),
     ListItemViewHolder {
-    override val gridLivePhotoIndicator: TextView?
+    override val gridLivePhotoIndicator: ImageView?
         get() = null
     override val livePhotoIndicator: TextView
         get() = binding.livePhotoIndicator
@@ -73,6 +74,10 @@ internal class OCFileListItemViewHolder(private var binding: ListItemBinding) :
         binding.thumbnailLayout.videoOverlay.visibility = View.VISIBLE
     }
 
+    override val more: ImageButton?
+        get() = null
+    override val fileFeaturesLayout: LinearLayout?
+        get() = null
     override val shimmerThumbnail: LoaderImageView
         get() = binding.thumbnailLayout.thumbnailShimmer
     override val favorite: ImageView
@@ -91,4 +96,8 @@ internal class OCFileListItemViewHolder(private var binding: ListItemBinding) :
     init {
         binding.favoriteAction.drawable.mutate()
     }
+
+    @Suppress("EmptyFunctionBlock")
+    override fun checkVisibilityOfFileFeaturesLayout() {
+    }
 }

+ 2 - 2
app/src/main/java/com/owncloud/android/utils/DisplayUtils.java

@@ -978,9 +978,9 @@ public final class DisplayUtils {
     }
 
     private static void configShimmerGridImageSize(LoaderImageView thumbnailShimmer, float gridColumns) {
-        FrameLayout.LayoutParams targetLayoutParams = (FrameLayout.LayoutParams) thumbnailShimmer.getLayoutParams();
-
         try {
+            FrameLayout.LayoutParams targetLayoutParams = (FrameLayout.LayoutParams) thumbnailShimmer.getLayoutParams();
+
             final Point screenSize = getScreenSize(thumbnailShimmer.getContext());
             final int marginLeftAndRight = targetLayoutParams.leftMargin + targetLayoutParams.rightMargin;
             final int size = Math.round(screenSize.x / gridColumns - marginLeftAndRight);

+ 137 - 120
app/src/main/res/layout/grid_image.xml

@@ -15,129 +15,146 @@
   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 -->
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
+<LinearLayout
     xmlns:tools="http://schemas.android.com/tools"
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
     android:id="@+id/ListItemLayout"
+    android:orientation="vertical"
+    android:gravity="center"
     android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:layout_gravity="center_horizontal"
-    android:foreground="?android:attr/selectableItemBackground"
-    android:gravity="center_horizontal"
-    android:orientation="vertical">
-
-    <com.elyeproj.loaderviewlibrary.LoaderImageView
-        android:id="@+id/thumbnail_shimmer"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:layout_margin="@dimen/grid_image_icon_margin"
-        android:contentDescription="@null"
-        android:visibility="gone"
-        app:corners="6"
-        app:height_weight="0.6"
-        app:width_weight="0.4" />
-
-    <com.owncloud.android.ui.SquareImageView
-        android:id="@+id/thumbnail"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:contentDescription="@null"
-        android:padding="@dimen/grid_image_icon_padding"
-        android:scaleType="centerCrop"
-        android:src="@drawable/file_image" />
-
-    <ImageView
-        tools:visibility="visible"
-        android:id="@+id/favorite_action"
-        android:layout_width="16dp"
-        android:layout_height="16dp"
-        android:layout_gravity="top|end"
-        android:layout_margin="@dimen/standard_quarter_margin"
-        android:contentDescription="@string/favorite_icon"
-        android:visibility="gone"
-        android:src="@drawable/favorite" />
-
-    <ImageView
-        tools:visibility="visible"
-        android:id="@+id/unreadComments"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_gravity="top|end"
-        android:layout_marginTop="70dp"
-        android:layout_marginEnd="@dimen/standard_quarter_margin"
-        android:clickable="true"
-        android:contentDescription="@string/unread_comments"
-        android:focusable="true"
-        android:src="@drawable/ic_comment_grid"
-        android:visibility="gone" />
-
-    <ImageView
-        tools:visibility="visible"
-        android:id="@+id/localFileIndicator"
-        android:layout_width="16dp"
-        android:layout_height="16dp"
-        android:layout_gravity="bottom|end"
-        android:layout_marginTop="@dimen/standard_quarter_margin"
-        android:layout_marginEnd="@dimen/standard_quarter_margin"
-        android:layout_marginBottom="@dimen/standard_quarter_margin"
-        android:contentDescription="@string/synced_icon"
-        android:src="@drawable/ic_synced" />
-
-    <FrameLayout
-        android:layout_width="28dp"
-        android:layout_height="28dp"
-        android:layout_gravity="top|end"
-        android:layout_marginTop="32dp"
-        android:layout_marginEnd="@dimen/standard_quarter_margin"
-        android:background="@drawable/rounded_rect"
-        android:backgroundTint="#F6F6F6">
-
-        <ImageView
-            android:id="@+id/sharedIcon"
+    android:layout_height="@dimen/grid_container_height">
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_width="@dimen/grid_container_width"
+        android:layout_height="@dimen/grid_container_height">
+
+        <com.elyeproj.loaderviewlibrary.LoaderImageView
+            android:id="@+id/thumbnail_shimmer"
+            android:visibility="gone"
+            android:layout_width="@dimen/standard_list_item_size"
+            android:layout_height="@dimen/standard_list_item_size"
+            android:contentDescription="@null"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent"
+            tools:visibility="visible" />
+
+        <com.owncloud.android.ui.SquareImageView
+            android:id="@+id/thumbnail"
+            android:layout_width="@dimen/standard_list_item_size"
+            android:layout_height="@dimen/standard_list_item_size"
+            android:contentDescription="@null"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent"
+            android:scaleType="centerCrop"
             tools:visibility="visible"
-            android:layout_gravity="center"
+            android:src="@drawable/file_image" />
+
+        <LinearLayout
+            android:id="@+id/file_features_layout"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:contentDescription="@string/shared_icon_shared_via_link"
-            android:src="@drawable/shared_via_link" />
-
-    </FrameLayout>
-
-    <TextView
-        android:id="@+id/grid_live_photo_indicator"
-        tools:visibility="visible"
-        android:visibility="gone"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        app:drawableTint="@color/list_item_lastmod_and_filesize_text"
-        android:background="@drawable/rounded_rect"
-        android:backgroundTint="#F6F6F6"
-        android:paddingVertical="10dp"
-        android:paddingHorizontal="2dp"
-        android:layout_marginLeft="@dimen/standard_quarter_margin"
-        android:layout_marginRight="@dimen/standard_quarter_margin"
-        android:text="@string/file_list_live"
-        android:drawablePadding="@dimen/standard_eight_padding"
-        android:gravity="center"
-        android:layout_gravity="start|bottom"
-        android:textColor="@color/list_item_lastmod_and_filesize_text"
-        android:textSize="@dimen/two_line_secondary_text_size"
-        app:drawableTopCompat="@drawable/ic_live_photo" />
-
-    <TextView
-        android:id="@+id/live_photo_indicator_separator"
-        android:visibility="gone"
-        android:layout_width="0dp"
-        android:layout_height="0dp"/>
-
-    <ImageView
-        tools:visibility="visible"
-        android:id="@+id/custom_checkbox"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_gravity="center_vertical|top"
-        android:layout_marginLeft="@dimen/standard_quarter_margin"
-        android:layout_marginRight="@dimen/standard_quarter_margin"
-        android:contentDescription="@string/checkbox"
-        android:src="@android:drawable/checkbox_off_background" />
-</FrameLayout>
+            android:gravity="center"
+            android:layout_marginEnd="@dimen/grid_layout_file_features_margin_end"
+            android:layout_marginBottom="@dimen/grid_layout_margin_bottom"
+            android:alpha="0.9"
+            android:background="@drawable/rounded_rect"
+            android:backgroundTint="@color/grid_background_color"
+            android:orientation="horizontal"
+            android:padding="@dimen/standard_quarter_padding"
+            android:translationZ="4dp"
+            app:layout_constraintBottom_toBottomOf="@+id/thumbnail"
+            app:layout_constraintEnd_toEndOf="parent">
+
+            <ImageView
+                android:id="@+id/favorite_action"
+                android:layout_width="@dimen/grid_layout_item_size"
+                android:layout_height="@dimen/grid_layout_item_size"
+                android:layout_marginEnd="@dimen/grid_layout_margin_end"
+                android:contentDescription="@string/favorite_icon"
+                android:src="@drawable/favorite" />
+
+            <ImageView
+                android:id="@+id/videoOverlay"
+                android:layout_width="@dimen/grid_layout_item_size"
+                android:layout_height="@dimen/grid_layout_item_size"
+                android:layout_marginEnd="@dimen/grid_layout_margin_end"
+                android:contentDescription="@string/video_overlay_icon"
+                android:src="@drawable/video_white"
+                android:visibility="gone"
+                app:tint="@color/grid_icon_color"
+                tools:visibility="visible" />
+
+            <ImageView
+                android:id="@+id/sharedIcon"
+                android:layout_width="@dimen/grid_layout_item_size"
+                android:layout_height="@dimen/grid_layout_item_size"
+                android:layout_marginEnd="@dimen/grid_layout_margin_end"
+                android:contentDescription="@string/shared_icon_shared_via_link"
+                android:src="@drawable/shared_via_link"
+                app:tint="@color/grid_icon_color"
+                tools:visibility="visible" />
+
+            <ImageView
+                android:id="@+id/unreadComments"
+                android:layout_width="@dimen/grid_layout_item_size"
+                android:layout_height="@dimen/grid_layout_item_size"
+                android:layout_marginEnd="@dimen/grid_layout_margin_end"
+                android:clickable="true"
+                android:contentDescription="@string/unread_comments"
+                android:focusable="true"
+                android:src="@drawable/ic_comment_grid"
+                android:visibility="gone"
+                app:tint="@color/grid_icon_color"
+                tools:visibility="visible" />
+
+            <ImageView
+                android:id="@+id/grid_live_photo_indicator"
+                android:layout_width="@dimen/grid_layout_item_size"
+                android:layout_height="@dimen/grid_layout_item_size"
+                android:layout_marginEnd="@dimen/grid_layout_margin_end"
+                android:clickable="true"
+                android:contentDescription="@string/unread_comments"
+                android:focusable="true"
+                android:src="@drawable/ic_live_photo"
+                android:visibility="gone"
+                app:tint="@color/grid_icon_color"
+                tools:visibility="visible" />
+
+            <ImageView
+                android:id="@+id/localFileIndicator"
+                android:layout_width="@dimen/grid_layout_item_size"
+                android:layout_height="@dimen/grid_layout_item_size"
+                android:layout_marginEnd="@dimen/grid_layout_margin_end"
+                android:contentDescription="@string/synced_icon"
+                android:src="@drawable/ic_synced"
+                tools:visibility="visible" />
+
+            <ImageView
+                android:id="@+id/custom_checkbox"
+                android:layout_width="@dimen/grid_layout_item_size"
+                android:layout_height="@dimen/grid_layout_item_size"
+                android:contentDescription="@string/checkbox"
+                android:src="@android:drawable/checkbox_off_background"
+                tools:visibility="visible" />
+
+        </LinearLayout>
+
+        <ImageButton
+            android:id="@+id/more"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center"
+            android:background="@color/transparent"
+            android:contentDescription="@string/ecosystem_apps_display_more"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:srcCompat="@drawable/ic_dots_vertical" />
+
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+</LinearLayout>

+ 115 - 95
app/src/main/res/layout/grid_item.xml

@@ -15,130 +15,150 @@
   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 -->
-<com.owncloud.android.ui.SquareLinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
+<LinearLayout
     xmlns:tools="http://schemas.android.com/tools"
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
     android:id="@+id/ListItemLayout"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:layout_gravity="center_horizontal"
+    android:orientation="vertical"
     android:gravity="center"
-    android:orientation="vertical">
+    android:layout_width="match_parent"
+    android:layout_height="@dimen/grid_container_height">
 
     <androidx.constraintlayout.widget.ConstraintLayout
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content">
+        android:layout_width="@dimen/grid_container_width"
+        android:layout_height="@dimen/grid_container_height">
+
+        <com.elyeproj.loaderviewlibrary.LoaderImageView
+            android:id="@+id/thumbnail_shimmer"
+            android:visibility="gone"
+            android:layout_width="@dimen/standard_list_item_size"
+            android:layout_height="@dimen/standard_list_item_size"
+            android:contentDescription="@null"
+            android:src="@drawable/folder"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent"
+            tools:visibility="visible" />
 
         <ImageView
-            android:id="@+id/favorite_action"
+            android:id="@+id/thumbnail"
+            android:layout_width="@dimen/standard_list_item_size"
+            android:layout_height="@dimen/standard_list_item_size"
+            android:contentDescription="@null"
+            android:src="@drawable/folder"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent"
+            tools:visibility="visible" />
+
+        <LinearLayout
+            android:id="@+id/file_features_layout"
             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/favorite"
-            android:contentDescription="@string/favorite_icon"
-            app:layout_constraintEnd_toEndOf="@+id/frameLayout"
-            app:layout_constraintTop_toTopOf="@id/frameLayout"
-            app:layout_constraintBottom_toTopOf="@id/frameLayout"/>
-
-        <FrameLayout
-            android:id="@+id/frameLayout"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:layout_gravity="center_horizontal"
-            app:layout_constraintBottom_toBottomOf="parent">
-
-            <com.elyeproj.loaderviewlibrary.LoaderImageView
-                android:id="@+id/thumbnail_shimmer"
-                android:layout_width="@dimen/standard_list_item_size"
-                android:layout_height="@dimen/standard_list_item_size"
-                android:layout_gravity="center"
-                android:visibility="gone"
-                app:corners="8" />
-
-            <FrameLayout
-                android:layout_width="@dimen/standard_list_item_size"
-                android:layout_height="@dimen/standard_list_item_size"
-                android:layout_gravity="center">
-
-                <ImageView
-                    android:id="@+id/thumbnail"
-                    android:layout_width="@dimen/standard_list_item_size"
-                    android:layout_height="@dimen/standard_list_item_size"
-                    android:contentDescription="@null"
-                    android:src="@drawable/folder" />
-
-                <ImageView
-                    android:id="@+id/videoOverlay"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:layout_marginStart="4dp"
-                    android:layout_marginTop="4dp"
-                    android:contentDescription="@string/video_overlay_icon"
-                    android:src="@drawable/video_white"
-                    android:visibility="gone"
-                    tools:visibility="visible" />
-            </FrameLayout>
+            android:gravity="center"
+            android:layout_marginEnd="@dimen/grid_layout_file_features_margin_end"
+            android:layout_marginBottom="@dimen/grid_layout_margin_bottom"
+            android:alpha="0.9"
+            android:background="@drawable/rounded_rect"
+            android:backgroundTint="@color/grid_background_color"
+            android:orientation="horizontal"
+            android:padding="@dimen/standard_quarter_padding"
+            android:translationZ="4dp"
+            app:layout_constraintBottom_toBottomOf="@+id/thumbnail"
+            app:layout_constraintEnd_toEndOf="parent">
+
+            <ImageView
+                tools:visibility="visible"
+                android:id="@+id/favorite_action"
+                android:layout_width="@dimen/grid_layout_item_size"
+                android:layout_height="@dimen/grid_layout_item_size"
+                android:layout_marginEnd="@dimen/grid_layout_margin_end"
+                android:contentDescription="@string/favorite_icon"
+                android:src="@drawable/favorite" />
 
+            <ImageView
+                android:id="@+id/videoOverlay"
+                android:layout_width="@dimen/grid_layout_item_size"
+                android:layout_height="@dimen/grid_layout_item_size"
+                android:layout_marginEnd="@dimen/grid_layout_margin_end"
+                android:contentDescription="@string/video_overlay_icon"
+                android:src="@drawable/video_white"
+                android:visibility="gone"
+                app:tint="@color/grid_icon_color"
+                tools:visibility="visible" />
 
             <ImageView
                 android:id="@+id/sharedIcon"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_gravity="top|end"
-                android:layout_marginTop="@dimen/grid_item_shared_icon_layout_top_margin"
-                android:layout_marginEnd="@dimen/standard_quarter_margin"
+                android:layout_width="@dimen/grid_layout_item_size"
+                android:layout_height="@dimen/grid_layout_item_size"
+                android:layout_marginEnd="@dimen/grid_layout_margin_end"
                 android:contentDescription="@string/shared_icon_shared_via_link"
-                android:src="@drawable/shared_via_link" />
+                android:src="@drawable/shared_via_link"
+                app:tint="@color/grid_icon_color"
+                tools:visibility="visible" />
 
             <ImageView
                 android:id="@+id/unreadComments"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_gravity="top|end"
-                android:layout_marginTop="@dimen/grid_item_shared_icon_layout_top_margin"
-                android:layout_marginEnd="@dimen/standard_quarter_margin"
+                android:layout_width="@dimen/grid_layout_item_size"
+                android:layout_height="@dimen/grid_layout_item_size"
+                android:layout_marginEnd="@dimen/grid_layout_margin_end"
                 android:clickable="true"
                 android:contentDescription="@string/unread_comments"
                 android:focusable="true"
                 android:src="@drawable/ic_comment_grid"
-                android:visibility="gone" />
+                android:visibility="gone"
+                app:tint="@color/grid_icon_color"
+                tools:visibility="visible" />
 
             <ImageView
                 android:id="@+id/localFileIndicator"
-                android:layout_width="@dimen/grid_item_local_file_indicator_layout_width"
-                android:layout_height="@dimen/grid_item_local_file_indicator_layout_height"
-                android:layout_gravity="bottom|end"
-                android:layout_marginTop="@dimen/standard_quarter_margin"
-                android:layout_marginEnd="@dimen/standard_quarter_margin"
-                android:layout_marginBottom="@dimen/standard_quarter_margin"
+                android:layout_width="@dimen/grid_layout_item_size"
+                android:layout_height="@dimen/grid_layout_item_size"
+                android:layout_marginEnd="@dimen/grid_layout_margin_end"
                 android:contentDescription="@string/synced_icon"
-                android:src="@drawable/ic_synced" />
+                android:src="@drawable/ic_synced"
+                tools:visibility="visible" />
 
             <ImageView
                 android:id="@+id/custom_checkbox"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_gravity="center_vertical|top"
-                android:layout_marginLeft="@dimen/standard_quarter_margin"
-                android:layout_marginRight="@dimen/standard_quarter_margin"
+                android:layout_width="@dimen/grid_layout_item_size"
+                android:layout_height="@dimen/grid_layout_item_size"
                 android:contentDescription="@string/checkbox"
-                android:src="@android:drawable/checkbox_off_background" />
+                android:src="@android:drawable/checkbox_off_background"
+                tools:visibility="visible" />
+
+        </LinearLayout>
+
+        <TextView
+            android:id="@+id/Filename"
+            android:layout_width="@dimen/grid_filename_width"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center"
+            android:ellipsize="middle"
+            android:gravity="center"
+            android:singleLine="true"
+            android:text="@string/placeholder_filename"
+            android:textColor="@color/text_color"
+            android:textSize="@dimen/grid_item_text_size"
+            app:layout_constraintEnd_toStartOf="@+id/more"
+            app:layout_constraintTop_toBottomOf="@+id/thumbnail"
+            tools:visibility="visible" />
+
+        <ImageButton
+            android:id="@+id/more"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:translationZ="2dp"
+            android:layout_gravity="center"
+            android:background="@color/transparent"
+            android:contentDescription="@string/ecosystem_apps_display_more"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:srcCompat="@drawable/ic_dots_vertical" />
 
-        </FrameLayout>
     </androidx.constraintlayout.widget.ConstraintLayout>
 
-    <TextView
-        android:id="@+id/Filename"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_marginLeft="@dimen/standard_quarter_margin"
-        android:layout_marginRight="@dimen/standard_quarter_margin"
-        android:ellipsize="middle"
-        android:gravity="center_horizontal"
-        android:singleLine="true"
-        android:text="@string/placeholder_filename"
-        android:textColor="@color/text_color"
-        android:textSize="@dimen/grid_item_text_size" />
-
-</com.owncloud.android.ui.SquareLinearLayout>
+</LinearLayout>

+ 2 - 0
app/src/main/res/values/colors.xml

@@ -23,6 +23,8 @@
     <color name="white">#ffffff</color>
     <color name="white_helper_text">#B3FFFFFF</color>
     <color name="text_color">#333333</color>
+    <color name="grid_icon_color">#303034</color>
+    <color name="grid_background_color">#E9E8EB</color>
     <color name="drawer_text_color">@color/secondary_text_color</color>
     <color name="text_color_inverse">#ffffff</color>
     <color name="disabled_text">#ff888888</color>

+ 8 - 6
app/src/main/res/values/dims.xml

@@ -40,6 +40,11 @@
     <dimen name="standard_double_margin">32dp</dimen>
     <dimen name="standard_half_margin">8dp</dimen>
     <dimen name="standard_quarter_margin">4dp</dimen>
+    <dimen name="grid_layout_item_size">10dp</dimen>
+    <dimen name="grid_layout_file_features_margin_end">24dp</dimen>
+    <dimen name="grid_layout_margin_end">2dp</dimen>
+    <dimen name="grid_layout_margin_bottom">16dp</dimen>
+    <dimen name="grid_sync_item_layout_next_text_size">22sp</dimen>
     <dimen name="button_width">140dp</dimen>
     <dimen name="button_extra_width">180dp</dimen>
     <dimen name="standard_eighth_margin">2dp</dimen>
@@ -103,6 +108,9 @@
     <dimen name="activity_row_layout_height">48dp</dimen>
     <dimen name="notification_icon_width">24dp</dimen>
     <dimen name="notification_icon_height">24dp</dimen>
+    <dimen name="grid_container_width">130dp</dimen>
+    <dimen name="grid_container_height">120dp</dimen>
+    <dimen name="grid_filename_width">80dp</dimen>
     <dimen name="notification_icon_layout_right_end_margin">21dp</dimen>
     <dimen name="notification_list_item_grid_layout_left_start_margin">-8dp</dimen>
     <dimen name="uploader_list_separator_height">1dp</dimen>
@@ -110,12 +118,6 @@
     <dimen name="contactlist_item_icon_layout_height">40dp</dimen>
     <dimen name="empty_list_icon_layout_width">72dp</dimen>
     <dimen name="empty_list_icon_layout_height">72dp</dimen>
-    <dimen name="grid_image_icon_margin">14dp</dimen>
-    <dimen name="grid_image_icon_padding">14dp</dimen>
-    <dimen name="grid_item_shared_icon_layout_top_margin">24dp</dimen>
-    <dimen name="grid_item_local_file_indicator_layout_width">16dp</dimen>
-    <dimen name="grid_item_local_file_indicator_layout_height">16dp</dimen>
-    <dimen name="grid_sync_item_layout_next_text_size">22sp</dimen>
     <dimen name="grid_sync_item_layout_counter_text_size">22sp</dimen>
     <dimen name="list_item_favorite_action_layout_width">14dp</dimen>
     <dimen name="list_item_favorite_action_layout_height">14dp</dimen>