Browse Source

Merge pull request #7271 from nextcloud/differentAvatars

Show generated avatars is file detail sharing list
Andy Scherzinger 4 years ago
parent
commit
2db40c36ca

+ 18 - 1
src/main/java/com/owncloud/android/ui/adapter/ShareViewHolder.java

@@ -26,10 +26,12 @@ import android.content.Context;
 import android.view.View;
 import android.widget.ImageView;
 
+import com.nextcloud.client.account.User;
 import com.owncloud.android.R;
 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 androidx.annotation.DrawableRes;
 import androidx.annotation.NonNull;
@@ -38,24 +40,28 @@ import androidx.recyclerview.widget.RecyclerView;
 class ShareViewHolder extends RecyclerView.ViewHolder {
     private FileDetailsShareShareItemBinding binding;
     private float avatarRadiusDimension;
+    private User user;
     private Context context;
 
     public ShareViewHolder(@NonNull View itemView) {
         super(itemView);
     }
 
-    public ShareViewHolder(FileDetailsShareShareItemBinding binding, Context context) {
+    public ShareViewHolder(FileDetailsShareShareItemBinding binding, User user, Context context) {
         this(binding.getRoot());
         this.binding = binding;
+        this.user = user;
         this.context = context;
     }
 
     public void bind(OCShare share,
                      ShareeListAdapterListener listener,
+                     DisplayUtils.AvatarGenerationListener avatarListener,
                      String userId,
                      float avatarRadiusDimension) {
         this.avatarRadiusDimension = avatarRadiusDimension;
         String name = share.getSharedWithDisplayName();
+        binding.icon.setTag(null);
 
         switch (share.getShareType()) {
             case GROUP:
@@ -73,6 +79,17 @@ class ShareViewHolder extends RecyclerView.ViewHolder {
                 name = context.getString(R.string.share_remote_clarification, name);
                 setImage(binding.icon, share.getSharedWithDisplayName(), R.drawable.ic_user);
                 break;
+            case USER:
+                binding.icon.setTag(share.getShareWith());
+                float avatarRadius = context.getResources().getDimension(R.dimen.list_item_avatar_icon_radius);
+                DisplayUtils.setAvatar(user,
+                                       share.getShareWith(),
+                                       share.getSharedWithDisplayName(),
+                                       avatarListener,
+                                       avatarRadius,
+                                       context.getResources(),
+                                       binding.icon,
+                                       context);
             default:
                 setImage(binding.icon, name, R.drawable.ic_user);
                 break;

+ 9 - 3
src/main/java/com/owncloud/android/ui/adapter/ShareeListAdapter.java

@@ -31,6 +31,7 @@ import android.view.LayoutInflater;
 import android.view.ViewGroup;
 import android.widget.ImageView;
 
+import com.nextcloud.client.account.User;
 import com.owncloud.android.R;
 import com.owncloud.android.databinding.FileDetailsShareInternalShareLinkBinding;
 import com.owncloud.android.databinding.FileDetailsShareLinkShareItemBinding;
@@ -58,15 +59,18 @@ public class ShareeListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHol
     private List<OCShare> shares;
     private float avatarRadiusDimension;
     private String userId;
+    private User user;
 
     public ShareeListAdapter(Context context,
                              List<OCShare> shares,
                              ShareeListAdapterListener listener,
-                             String userId) {
+                             String userId,
+                             User user) {
         this.context = context;
         this.shares = shares;
         this.listener = listener;
         this.userId = userId;
+        this.user = user;
 
         avatarRadiusDimension = context.getResources().getDimension(R.dimen.user_icon_radius);
 
@@ -103,6 +107,7 @@ public class ShareeListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHol
                 return new ShareViewHolder(FileDetailsShareShareItemBinding.inflate(LayoutInflater.from(context),
                                                                                     parent,
                                                                                     false),
+                                           user,
                                            context);
         }
     }
@@ -126,7 +131,7 @@ public class ShareeListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHol
             newLinkShareViewHolder.bind(listener);
         } else {
             ShareViewHolder userViewHolder = (ShareViewHolder) holder;
-            userViewHolder.bind(share, listener, userId, avatarRadiusDimension);
+            userViewHolder.bind(share, listener, this, userId, avatarRadiusDimension);
         }
     }
 
@@ -158,7 +163,8 @@ public class ShareeListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHol
     public boolean shouldCallGeneratedCallback(String tag, Object callContext) {
         if (callContext instanceof ImageView) {
             ImageView iv = (ImageView) callContext;
-            return String.valueOf(iv.getTag()).equals(tag);
+            // needs to be changed once federated users have avatars
+            return String.valueOf(iv.getTag()).equals(tag.split("@")[0]);
         }
         return false;
     }

+ 3 - 1
src/main/java/com/owncloud/android/ui/fragment/FileDetailActivitiesFragment.java

@@ -307,7 +307,9 @@ public class FileDetailActivitiesFragment extends Fragment implements
 
                     RemoteOperationResult result1 = readFileVersionsOperation.execute(ownCloudClient);
 
-                    versions = result1.getData();
+                    if (result1.isSuccess()) {
+                        versions = result1.getData();
+                    }
                 }
 
                 if (result.isSuccess() && result.getData() != null) {

+ 2 - 1
src/main/java/com/owncloud/android/ui/fragment/FileDetailSharingFragment.java

@@ -171,7 +171,8 @@ public class FileDetailSharingFragment extends Fragment implements ShareeListAda
         binding.sharesList.setAdapter(new ShareeListAdapter(fileActivity,
                                                             new ArrayList<>(),
                                                             this,
-                                                            userId));
+                                                            userId,
+                                                            user));
         binding.sharesList.setLayoutManager(new LinearLayoutManager(getContext()));
 
         setupView();

+ 3 - 1
src/test/java/com/owncloud/android/ui/adapter/ShareeListAdapterTest.kt

@@ -23,6 +23,7 @@ package com.owncloud.android.ui.adapter
 
 import android.content.Context
 import android.content.res.Resources
+import com.nextcloud.client.account.AnonymousUser
 import com.owncloud.android.lib.resources.shares.OCShare
 import com.owncloud.android.lib.resources.shares.ShareType
 import org.junit.Assert
@@ -81,7 +82,8 @@ class ShareeListAdapterTest {
 
         val randomOrder: MutableList<OCShare?> = ArrayList(expectedSortOrder)
         randomOrder.shuffle()
-        val sut = ShareeListAdapter(context, randomOrder, null, null)
+        val user = AnonymousUser("nextcloud")
+        val sut = ShareeListAdapter(context, randomOrder, null, null, user)
         sut.sortShares()
 
         // compare