Эх сурвалжийг харах

Merge pull request #7098 from nextcloud/avatars

Updated avatar handling
Andy Scherzinger 4 жил өмнө
parent
commit
4de0123784
17 өөрчлөгдсөн 238 нэмэгдсэн , 71 устгасан
  1. BIN
      screenshots/gplay/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsSharing_dark_blue.png
  2. BIN
      screenshots/gplay/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showFileDetailSharingFragment_dark_blue.png
  3. BIN
      screenshots/gplay/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listSharesFileAllShareTypes_dark_blue.png
  4. BIN
      screenshots/gplay/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listSharesFileNone_dark_blue.png
  5. BIN
      screenshots/gplay/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listSharesFileResharingNotAllowed_dark_blue.png
  6. BIN
      screenshots/gplay/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showSharedFiles_dark_blue.png
  7. 42 3
      src/androidTest/java/com/owncloud/android/ui/fragment/FileDetailSharingFragmentIT.kt
  8. 55 23
      src/androidTest/java/com/owncloud/android/ui/fragment/OCFileListFragmentStaticServerIT.kt
  9. 2 2
      src/main/java/com/owncloud/android/ui/adapter/InternalShareViewHolder.java
  10. 8 2
      src/main/java/com/owncloud/android/ui/adapter/LinkShareViewHolder.java
  11. 2 27
      src/main/java/com/owncloud/android/ui/adapter/OCFileListAdapter.java
  12. 4 3
      src/main/java/com/owncloud/android/ui/adapter/ShareViewHolder.java
  13. 55 1
      src/main/java/com/owncloud/android/utils/ThemeUtils.java
  14. 0 9
      src/main/res/drawable/ic_chat_bubble.xml
  15. 66 0
      src/main/res/layout/file_details_share_group.xml
  16. 2 0
      src/main/res/values-night/colors.xml
  17. 2 1
      src/main/res/values/colors.xml

BIN
screenshots/gplay/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsSharing_dark_blue.png


BIN
screenshots/gplay/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showFileDetailSharingFragment_dark_blue.png


BIN
screenshots/gplay/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listSharesFileAllShareTypes_dark_blue.png


BIN
screenshots/gplay/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listSharesFileNone_dark_blue.png


BIN
screenshots/gplay/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listSharesFileResharingNotAllowed_dark_blue.png


BIN
screenshots/gplay/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showSharedFiles_dark_blue.png


+ 42 - 3
src/androidTest/java/com/owncloud/android/ui/fragment/FileDetailSharingFragmentIT.kt

@@ -85,6 +85,9 @@ class FileDetailSharingFragmentIT : AbstractIT() {
     @Test
     @ScreenshotTest
     @Suppress("MagicNumber")
+    /**
+     * Use same values as {@link OCFileListFragmentStaticServerIT showSharedFiles }
+     */
     fun listSharesFileAllShareTypes() {
         OCShare(file.decryptedRemotePath).apply {
             remoteId = 1
@@ -115,14 +118,14 @@ class FileDetailSharingFragmentIT : AbstractIT() {
         OCShare(file.decryptedRemotePath).apply {
             remoteId = 4
             shareType = ShareType.PUBLIC_LINK
-            sharedWithDisplayName = "Customer"
+            label = "Customer"
             activity.storageManager.saveShare(this)
         }
 
         OCShare(file.decryptedRemotePath).apply {
             remoteId = 5
             shareType = ShareType.PUBLIC_LINK
-            sharedWithDisplayName = "Colleagues"
+            label = "Colleagues"
             activity.storageManager.saveShare(this)
         }
 
@@ -138,7 +141,7 @@ class FileDetailSharingFragmentIT : AbstractIT() {
         OCShare(file.decryptedRemotePath).apply {
             remoteId = 7
             shareType = ShareType.CIRCLE
-            sharedWithDisplayName = "Private circle"
+            sharedWithDisplayName = "Personal circle"
             permissions = SHARE_PERMISSION_FLAG
             userId = getUserId(user)
             activity.storageManager.saveShare(this)
@@ -146,6 +149,42 @@ class FileDetailSharingFragmentIT : AbstractIT() {
 
         OCShare(file.decryptedRemotePath).apply {
             remoteId = 8
+            shareType = ShareType.CIRCLE
+            sharedWithDisplayName = "Public circle"
+            permissions = SHARE_PERMISSION_FLAG
+            userId = getUserId(user)
+            activity.storageManager.saveShare(this)
+        }
+
+        OCShare(file.decryptedRemotePath).apply {
+            remoteId = 9
+            shareType = ShareType.CIRCLE
+            sharedWithDisplayName = "Closed circle"
+            permissions = SHARE_PERMISSION_FLAG
+            userId = getUserId(user)
+            activity.storageManager.saveShare(this)
+        }
+
+        OCShare(file.decryptedRemotePath).apply {
+            remoteId = 10
+            shareType = ShareType.CIRCLE
+            sharedWithDisplayName = "Secret circle"
+            permissions = SHARE_PERMISSION_FLAG
+            userId = getUserId(user)
+            activity.storageManager.saveShare(this)
+        }
+
+        OCShare(file.decryptedRemotePath).apply {
+            remoteId = 11
+            shareType = ShareType.ROOM
+            sharedWithDisplayName = "Admin"
+            permissions = SHARE_PERMISSION_FLAG
+            userId = getUserId(user)
+            activity.storageManager.saveShare(this)
+        }
+
+        OCShare(file.decryptedRemotePath).apply {
+            remoteId = 12
             shareType = ShareType.ROOM
             sharedWithDisplayName = "Meeting"
             permissions = SHARE_PERMISSION_FLAG

+ 55 - 23
src/androidTest/java/com/owncloud/android/ui/fragment/OCFileListFragmentStaticServerIT.kt

@@ -80,37 +80,39 @@ class OCFileListFragmentStaticServerIT : AbstractIT() {
 
     @Test
     @ScreenshotTest
+    /**
+     * Use same values as {@link FileDetailSharingFragmentIT listSharesFileAllShareTypes }
+     */
     fun showSharedFiles() {
         val sut = testActivityRule.launchActivity(null)
         val fragment = OCFileListFragment()
 
-        val groupShare = OCFile("/sharedToGroup.jpg").apply {
+        val userShare = OCFile("/sharedToUser.jpg").apply {
             parentId = sut.storageManager.getFileByEncryptedRemotePath("/").fileId
             isSharedWithSharee = true
-            sharees = listOf(ShareeUser("group", "Group", ShareType.GROUP))
+            sharees = listOf(ShareeUser("Admin", "Server Admin", ShareType.USER))
         }
-        sut.storageManager.saveFile(groupShare)
+        sut.storageManager.saveFile(userShare)
 
-        val roomShare = OCFile("/sharedToRoom.jpg").apply {
+        val groupShare = OCFile("/sharedToGroup.jpg").apply {
             parentId = sut.storageManager.getFileByEncryptedRemotePath("/").fileId
             isSharedWithSharee = true
-            sharees = listOf(ShareeUser("Conversation", "Meeting", ShareType.ROOM))
+            sharees = listOf(ShareeUser("group", "Group", ShareType.GROUP))
         }
-        sut.storageManager.saveFile(roomShare)
+        sut.storageManager.saveFile(groupShare)
 
-        val circleShare = OCFile("/sharedToCircle.jpg").apply {
+        val emailShare = OCFile("/sharedToEmail.jpg").apply {
             parentId = sut.storageManager.getFileByEncryptedRemotePath("/").fileId
             isSharedWithSharee = true
-            sharees = listOf(ShareeUser("circle", "Circle (Public circle)", ShareType.CIRCLE))
+            sharees = listOf(ShareeUser("admin@nextcloud.server.com", "admin@nextcloud.server.com", ShareType.EMAIL))
         }
-        sut.storageManager.saveFile(circleShare)
+        sut.storageManager.saveFile(emailShare)
 
-        val userShare = OCFile("/sharedToUser.jpg").apply {
+        val publicLink = OCFile("/publicLink.jpg").apply {
             parentId = sut.storageManager.getFileByEncryptedRemotePath("/").fileId
-            isSharedWithSharee = true
-            sharees = listOf(ShareeUser("Admin", "Server Admin", ShareType.USER))
+            isSharedViaLink = true
         }
-        sut.storageManager.saveFile(userShare)
+        sut.storageManager.saveFile(publicLink)
 
         val federatedUserShare = OCFile("/sharedToFederatedUser.jpg").apply {
             parentId = sut.storageManager.getFileByEncryptedRemotePath("/").fileId
@@ -121,25 +123,50 @@ class OCFileListFragmentStaticServerIT : AbstractIT() {
         }
         sut.storageManager.saveFile(federatedUserShare)
 
-        val emailShare = OCFile("/sharedToEmail.jpg").apply {
+        val personalCircleShare = OCFile("/sharedToPersonalCircle.jpg").apply {
             parentId = sut.storageManager.getFileByEncryptedRemotePath("/").fileId
             isSharedWithSharee = true
-            sharees = listOf(ShareeUser("test@remote.nextcloud.com", "test@remote.nextcloud.com", ShareType.EMAIL))
+            sharees = listOf(ShareeUser("circle", "Circle (Personal circle)", ShareType.CIRCLE))
         }
-        sut.storageManager.saveFile(emailShare)
-
-        val publicLink = OCFile("/publicLink.jpg").apply {
+        sut.storageManager.saveFile(personalCircleShare)
+
+        // as we cannot distinguish circle types, we do not need them right now
+//        val publicCircleShare = OCFile("/sharedToPublicCircle.jpg").apply {
+//            parentId = sut.storageManager.getFileByEncryptedRemotePath("/").fileId
+//            isSharedWithSharee = true
+//            sharees = listOf(ShareeUser("circle", "Circle (Public circle)", ShareType.CIRCLE))
+//        }
+//        sut.storageManager.saveFile(publicCircleShare)
+//
+//        val closedCircleShare = OCFile("/sharedToClosedCircle.jpg").apply {
+//            parentId = sut.storageManager.getFileByEncryptedRemotePath("/").fileId
+//            isSharedWithSharee = true
+//            sharees = listOf(ShareeUser("circle", "Circle (Closed circle)", ShareType.CIRCLE))
+//        }
+//        sut.storageManager.saveFile(closedCircleShare)
+//
+//        val secretCircleShare = OCFile("/sharedToSecretCircle.jpg").apply {
+//            parentId = sut.storageManager.getFileByEncryptedRemotePath("/").fileId
+//            isSharedWithSharee = true
+//            sharees = listOf(ShareeUser("circle", "Circle (Secret circle)", ShareType.CIRCLE))
+//        }
+//        sut.storageManager.saveFile(secretCircleShare)
+
+        val userRoomShare = OCFile("/sharedToUserRoom.jpg").apply {
             parentId = sut.storageManager.getFileByEncryptedRemotePath("/").fileId
-            isSharedViaLink = true
+            isSharedWithSharee = true
+            sharees = listOf(ShareeUser("Conversation", "Admin", ShareType.ROOM))
         }
-        sut.storageManager.saveFile(publicLink)
+        sut.storageManager.saveFile(userRoomShare)
 
-        val noShare = OCFile("/notShared.jpg").apply {
+        val groupRoomShare = OCFile("/sharedToGroupRoom.jpg").apply {
             parentId = sut.storageManager.getFileByEncryptedRemotePath("/").fileId
+            isSharedWithSharee = true
+            sharees = listOf(ShareeUser("Conversation", "Meeting", ShareType.ROOM))
         }
-        sut.storageManager.saveFile(noShare)
+        sut.storageManager.saveFile(groupRoomShare)
 
-        val usersShare = OCFile("/sharedToUser.jpg").apply {
+        val usersShare = OCFile("/sharedToUsers.jpg").apply {
             parentId = sut.storageManager.getFileByEncryptedRemotePath("/").fileId
             isSharedWithSharee = true
             sharees = listOf(
@@ -150,6 +177,11 @@ class OCFileListFragmentStaticServerIT : AbstractIT() {
         }
         sut.storageManager.saveFile(usersShare)
 
+        val noShare = OCFile("/notShared.jpg").apply {
+            parentId = sut.storageManager.getFileByEncryptedRemotePath("/").fileId
+        }
+        sut.storageManager.saveFile(noShare)
+
         sut.addFragment(fragment)
 
         shortSleep()

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

@@ -52,14 +52,14 @@ class InternalShareViewHolder extends RecyclerView.ViewHolder {
         binding.copyInternalLinkIcon
             .getBackground()
             .setColorFilter(ResourcesCompat.getColor(context.getResources(),
-                                                     R.color.grey_db,
+                                                     R.color.nc_grey,
                                                      null),
                             PorterDuff.Mode.SRC_IN);
         binding.copyInternalLinkIcon
             .getDrawable()
             .mutate()
             .setColorFilter(ResourcesCompat.getColor(context.getResources(),
-                                                     R.color.black,
+                                                     R.color.icon_on_nc_grey,
                                                      null),
                             PorterDuff.Mode.SRC_IN);
 

+ 8 - 2
src/main/java/com/owncloud/android/ui/adapter/LinkShareViewHolder.java

@@ -23,6 +23,7 @@
 package com.owncloud.android.ui.adapter;
 
 import android.content.Context;
+import android.graphics.PorterDuff;
 import android.text.TextUtils;
 import android.view.View;
 
@@ -57,6 +58,11 @@ class LinkShareViewHolder extends RecyclerView.ViewHolder {
                                                                       R.drawable.ic_email,
                                                                       null));
             binding.copyLink.setVisibility(View.GONE);
+
+            binding.icon.getBackground().setColorFilter(context.getResources().getColor(R.color.nc_grey),
+                                                        PorterDuff.Mode.SRC_IN);
+            binding.icon.getDrawable().mutate().setColorFilter(context.getResources().getColor(R.color.icon_on_nc_grey),
+                                                               PorterDuff.Mode.SRC_IN);
         } else {
             if (!TextUtils.isEmpty(publicShare.getLabel())) {
                 String text = String.format(context.getString(R.string.share_link_with_label), publicShare.getLabel());
@@ -64,9 +70,9 @@ class LinkShareViewHolder extends RecyclerView.ViewHolder {
             } else {
                 binding.name.setText(R.string.share_link);
             }
-        }
 
-        ThemeUtils.colorIconImageViewWithBackground(binding.icon, context);
+            ThemeUtils.colorIconImageViewWithBackground(binding.icon, context);
+        }
 
         binding.copyLink.setOnClickListener(v -> listener.copyLink(publicShare));
         binding.overflowMenu.setOnClickListener(v -> listener.showLinkOverflowMenu(publicShare, binding.overflowMenu));

+ 2 - 27
src/main/java/com/owncloud/android/ui/adapter/OCFileListAdapter.java

@@ -436,35 +436,10 @@ public class OCFileListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHol
                         } else {
                             switch (sharee.getShareType()) {
                                 case GROUP:
-                                    try {
-                                        avatar.setImageDrawable(TextDrawable.createAvatarByUserId(sharee.getUserId(),
-                                                                                                  avatarRadius));
-                                    } catch (Exception e) {
-                                        Log_OC.e(TAG, "Error calculating RGB value for active account icon.", e);
-                                        avatar.setImageResource(R.drawable.ic_people);
-                                        ThemeUtils.setIconColor(avatar.getDrawable());
-                                    }
-                                    break;
-
+                                case EMAIL:
                                 case ROOM:
-                                    try {
-                                        if (!TextUtils.isEmpty(sharee.getDisplayName())) {
-                                            avatar.setImageDrawable(
-                                                TextDrawable.createNamedAvatar(sharee.getDisplayName(), avatarRadius));
-                                        } else {
-                                            avatar.setImageDrawable(
-                                                TextDrawable.createAvatarByUserId(sharee.getUserId(), avatarRadius));
-                                        }
-                                    } catch (Exception e) {
-                                        Log_OC.e(TAG, "Error calculating RGB value for active account icon.", e);
-                                        avatar.setImageResource(R.drawable.ic_people);
-                                        ThemeUtils.setIconColor(avatar.getDrawable());
-                                    }
-                                    break;
-
                                 case CIRCLE:
-                                    avatar.setImageResource(R.drawable.ic_circles);
-                                    ThemeUtils.setIconColor(avatar.getDrawable());
+                                    ThemeUtils.createAvatar(sharee.getShareType(), avatar, activity);
                                     break;
 
                                 default:

+ 4 - 3
src/main/java/com/owncloud/android/ui/adapter/ShareViewHolder.java

@@ -32,6 +32,7 @@ import com.owncloud.android.databinding.FileDetailsShareShareItemBinding;
 import com.owncloud.android.lib.resources.shares.OCShare;
 import com.owncloud.android.ui.TextDrawable;
 import com.owncloud.android.utils.DisplayUtils;
+import com.owncloud.android.utils.ThemeUtils;
 
 import androidx.annotation.DrawableRes;
 import androidx.annotation.NonNull;
@@ -66,14 +67,14 @@ class ShareViewHolder extends RecyclerView.ViewHolder {
         switch (share.getShareType()) {
             case GROUP:
                 name = context.getString(R.string.share_group_clarification, name);
-                setImage(binding.icon, share.getSharedWithDisplayName(), R.drawable.ic_group);
+                ThemeUtils.createAvatar(share.getShareType(), binding.icon, context);
                 break;
             case ROOM:
                 name = context.getString(R.string.share_room_clarification, name);
-                setImage(binding.icon, share.getSharedWithDisplayName(), R.drawable.ic_chat_bubble);
+                ThemeUtils.createAvatar(share.getShareType(), binding.icon, context);
                 break;
             case CIRCLE:
-                binding.icon.setImageResource(R.drawable.ic_circles);
+                ThemeUtils.createAvatar(share.getShareType(), binding.icon, context);
                 break;
             case FEDERATED:
                 name = context.getString(R.string.share_remote_clarification, name);

+ 55 - 1
src/main/java/com/owncloud/android/utils/ThemeUtils.java

@@ -56,6 +56,7 @@ import com.owncloud.android.MainApp;
 import com.owncloud.android.R;
 import com.owncloud.android.datamodel.FileDataStorageManager;
 import com.owncloud.android.lib.common.utils.Log_OC;
+import com.owncloud.android.lib.resources.shares.ShareType;
 import com.owncloud.android.lib.resources.status.OCCapability;
 
 import java.lang.reflect.Field;
@@ -720,7 +721,7 @@ public final class ThemeUtils {
      *
      * @param primaryColor the primary color
      */
-    private static int getColorForPrimary(int primaryColor, Context context) {
+    public static int getColorForPrimary(int primaryColor, Context context) {
         if (Color.BLACK == primaryColor) {
             return Color.WHITE;
         } else if (Color.WHITE == primaryColor) {
@@ -872,4 +873,57 @@ public final class ThemeUtils {
 
         return Configuration.UI_MODE_NIGHT_YES == nightModeFlag;
     }
+
+    @SuppressFBWarnings(
+        value = "SF_SWITCH_NO_DEFAULT",
+        justification = "We only create avatars for a subset of share types")
+    public static void createAvatar(ShareType type, ImageView avatar, Context context) {
+        switch (type) {
+            case GROUP:
+                avatar.setImageResource(R.drawable.ic_group);
+                avatar.setBackground(ResourcesCompat.getDrawable(context.getResources(),
+                                                                 R.drawable.round_bgnd,
+                                                                 null));
+                avatar.setCropToPadding(true);
+                avatar.setPadding(4, 4, 4, 4);
+                ThemeUtils.colorIconImageViewWithBackground(avatar, context);
+                break;
+
+            case ROOM:
+                avatar.setImageResource(R.drawable.first_run_talk);
+                avatar.setBackground(ResourcesCompat.getDrawable(context.getResources(),
+                                                                 R.drawable.round_bgnd,
+                                                                 null));
+                avatar.setCropToPadding(true);
+                avatar.setPadding(8, 8, 8, 8);
+                ThemeUtils.colorIconImageViewWithBackground(avatar, context);
+                break;
+
+            case CIRCLE:
+                avatar.setImageResource(R.drawable.ic_circles);
+                avatar.setBackground(ResourcesCompat.getDrawable(context.getResources(),
+                                                                 R.drawable.round_bgnd,
+                                                                 null));
+                avatar.getBackground().setColorFilter(context.getResources().getColor(R.color.nc_grey),
+                                                      PorterDuff.Mode.SRC_IN);
+                avatar.getDrawable().mutate().setColorFilter(context.getResources().getColor(R.color.icon_on_nc_grey),
+                                                             PorterDuff.Mode.SRC_IN);
+                avatar.setCropToPadding(true);
+                avatar.setPadding(4, 4, 4, 4);
+                break;
+
+            case EMAIL:
+                avatar.setImageResource(R.drawable.ic_email);
+                avatar.setBackground(ResourcesCompat.getDrawable(context.getResources(),
+                                                                 R.drawable.round_bgnd,
+                                                                 null));
+                avatar.setCropToPadding(true);
+                avatar.setPadding(8, 8, 8, 8);
+                avatar.getBackground().setColorFilter(context.getResources().getColor(R.color.nc_grey),
+                                                      PorterDuff.Mode.SRC_IN);
+                avatar.getDrawable().mutate().setColorFilter(context.getResources().getColor(R.color.icon_on_nc_grey),
+                                                             PorterDuff.Mode.SRC_IN);
+                break;
+        }
+    }
 }

+ 0 - 9
src/main/res/drawable/ic_chat_bubble.xml

@@ -1,9 +0,0 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-        android:width="24dp"
-        android:height="24dp"
-        android:viewportWidth="24"
-        android:viewportHeight="24">
-    <path
-        android:fillColor="#FF000000"
-        android:pathData="M20,2H4c-1.1,0 -2,0.9 -2,2v18l4,-4h14c1.1,0 2,-0.9 2,-2V4c0,-1.1 -0.9,-2 -2,-2z"/>
-</vector>

+ 66 - 0
src/main/res/layout/file_details_share_group.xml

@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+ Nextcloud Android client application
+
+  @author Tobias Kaminsky
+  Copyright (C) 2020 Tobias Kaminsky
+  Copyright (C) 2020 Nextcloud GmbH.
+
+  This program is free software: you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation, either version 3 of the License, or
+  (at your option) any later version.
+
+  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 <https://www.gnu.org/licenses/>.
+-->
+
+<LinearLayout android:id="@+id/copy_internal_container"
+    android:layout_height="wrap_content"
+    android:layout_width="match_parent"
+    android:orientation="horizontal"
+    android:paddingBottom="@dimen/standard_half_padding"
+    android:paddingEnd="@dimen/standard_padding"
+    android:paddingStart="@dimen/zero"
+    android:paddingTop="@dimen/standard_half_padding"
+    android:layout_weight="1"
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools">
+
+    <ImageView
+        android:background="@drawable/round_bgnd"
+        android:contentDescription="@string/share"
+        android:id="@+id/copy_internal_link_icon"
+        android:layout_gravity="top"
+        android:layout_height="@dimen/share_icon_size"
+        android:layout_marginEnd="@dimen/standard_margin"
+        android:layout_marginStart="@dimen/standard_margin"
+        android:layout_width="@dimen/share_icon_size"
+        android:padding="@dimen/standard_half_padding"
+        android:src="@drawable/ic_external" />
+
+    <LinearLayout
+        android:layout_height="wrap_content"
+        android:layout_marginTop="@dimen/standard_half_margin"
+        android:layout_width="match_parent"
+        android:orientation="vertical">
+
+        <TextView
+            android:id="@+id/shareInternalLink"
+            android:layout_height="wrap_content"
+            android:layout_width="wrap_content"
+            android:text="@string/share_internal_link"
+            android:textColor="@color/text_color" />
+
+        <TextView
+            android:id="@+id/shareInternalLinkText"
+            android:layout_height="wrap_content"
+            android:layout_width="wrap_content"
+            tools:text="@string/share_internal_link_to_folder_text" />
+    </LinearLayout>
+
+</LinearLayout>

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

@@ -32,6 +32,8 @@
     <color name="primary_button_text_color">#000000</color>
     <color name="bg_elevation_one">#2D2D2D</color>
     <color name="grey_200">#818181</color>
+    <color name="nc_grey">#222222</color>
+    <color name="icon_on_nc_grey">#ffffff</color>
 
     <!-- Multiselect backgrounds -->
     <color name="action_mode_background">@color/appbar</color>

+ 2 - 1
src/main/res/values/colors.xml

@@ -37,7 +37,6 @@
 
     <!-- Colors -->
     <color name="standard_grey">#757575</color>
-    <color name="grey_db">#dbdbdb</color>
     <color name="actionbar_shadow">#222222</color>
     <color name="grey_200">#EEEEEE</color>
 
@@ -57,6 +56,8 @@
     <color name="primary_button_text_color">#ffffff</color>
     <color name="secondary_button_background_color">#D6D7D7</color>
     <color name="secondary_button_text_color">#000000</color>
+    <color name="nc_grey">#ededed</color>
+    <color name="icon_on_nc_grey">#000000</color>
 
     <color name="process_dialog_background">#ffffff</color>
     <color name="indicator_dot_selected">#ffffff</color>