diff --git a/drawable_resources/ic_people.svg b/drawable_resources/ic_people.svg
new file mode 100644
index 000000000000..a03024bde6ad
--- /dev/null
+++ b/drawable_resources/ic_people.svg
@@ -0,0 +1,5 @@
+
diff --git a/src/main/java/com/owncloud/android/datamodel/FileDataStorageManager.java b/src/main/java/com/owncloud/android/datamodel/FileDataStorageManager.java
index 7112e814fc41..09366886607b 100644
--- a/src/main/java/com/owncloud/android/datamodel/FileDataStorageManager.java
+++ b/src/main/java/com/owncloud/android/datamodel/FileDataStorageManager.java
@@ -209,6 +209,7 @@ public boolean saveFile(OCFile file) {
cv.put(ProviderTableMeta.FILE_OWNER_ID, file.getOwnerId());
cv.put(ProviderTableMeta.FILE_OWNER_DISPLAY_NAME, file.getOwnerDisplayName());
cv.put(ProviderTableMeta.FILE_NOTE, file.getNote());
+ cv.put(ProviderTableMeta.FILE_SHAREES, TextUtils.join(",", file.getSharees()));
boolean sameRemotePath = fileExists(file.getRemotePath());
if (sameRemotePath ||
@@ -452,6 +453,7 @@ private ContentValues createContentValueForFile(OCFile folder) {
cv.put(ProviderTableMeta.FILE_OWNER_ID, folder.getOwnerId());
cv.put(ProviderTableMeta.FILE_OWNER_DISPLAY_NAME, folder.getOwnerDisplayName());
cv.put(ProviderTableMeta.FILE_NOTE, folder.getNote());
+ cv.put(ProviderTableMeta.FILE_SHAREES, TextUtils.join(",", folder.getSharees()));
return cv;
}
@@ -491,6 +493,7 @@ private ContentValues createContentValueForFile(OCFile file, OCFile folder) {
cv.put(ProviderTableMeta.FILE_OWNER_ID, file.getOwnerId());
cv.put(ProviderTableMeta.FILE_OWNER_DISPLAY_NAME, file.getOwnerDisplayName());
cv.put(ProviderTableMeta.FILE_NOTE, file.getNote());
+ cv.put(ProviderTableMeta.FILE_SHAREES, TextUtils.join(",", file.getSharees()));
return cv;
}
@@ -989,6 +992,14 @@ private OCFile createFileInstance(Cursor c) {
file.setOwnerId(c.getString(c.getColumnIndex(ProviderTableMeta.FILE_OWNER_ID)));
file.setOwnerDisplayName(c.getString(c.getColumnIndex(ProviderTableMeta.FILE_OWNER_DISPLAY_NAME)));
file.setNote(c.getString(c.getColumnIndex(ProviderTableMeta.FILE_NOTE)));
+
+ String sharees = c.getString(c.getColumnIndex(ProviderTableMeta.FILE_SHAREES));
+
+ if (sharees == null || sharees.isEmpty()) {
+ file.setSharees(new ArrayList<>());
+ } else {
+ file.setSharees(new ArrayList<>(Arrays.asList(sharees.split(","))));
+ }
}
return file;
@@ -1217,7 +1228,7 @@ private OCShare createShareInstance(Cursor c) {
share.setSharedWithDisplayName(
c.getString(c.getColumnIndex(ProviderTableMeta.OCSHARES_SHARE_WITH_DISPLAY_NAME)));
share.setFolder(c.getInt(c.getColumnIndex(ProviderTableMeta.OCSHARES_IS_DIRECTORY)) == 1);
- share.setUserId(c.getLong(c.getColumnIndex(ProviderTableMeta.OCSHARES_USER_ID)));
+ share.setUserId(c.getString(c.getColumnIndex(ProviderTableMeta.OCSHARES_USER_ID)));
share.setRemoteId(c.getLong(c.getColumnIndex(ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED)));
share.setPasswordProtected(c.getInt(c.getColumnIndex(ProviderTableMeta.OCSHARES_IS_PASSWORD_PROTECTED)) == 1);
share.setNote(c.getString(c.getColumnIndex(ProviderTableMeta.OCSHARES_NOTE)));
diff --git a/src/main/java/com/owncloud/android/datamodel/OCFile.java b/src/main/java/com/owncloud/android/datamodel/OCFile.java
index f7e7c9dc4f27..dbb5d7972e85 100644
--- a/src/main/java/com/owncloud/android/datamodel/OCFile.java
+++ b/src/main/java/com/owncloud/android/datamodel/OCFile.java
@@ -28,22 +28,22 @@
import android.net.Uri;
import android.os.Parcel;
import android.os.Parcelable;
-
+import androidx.annotation.NonNull;
+import androidx.core.content.FileProvider;
import com.owncloud.android.R;
import com.owncloud.android.lib.common.network.WebdavEntry;
import com.owncloud.android.lib.common.network.WebdavUtils;
import com.owncloud.android.lib.common.utils.Log_OC;
import com.owncloud.android.lib.resources.files.model.ServerFileInterface;
import com.owncloud.android.utils.MimeType;
-
-import java.io.File;
-
-import androidx.annotation.NonNull;
-import androidx.core.content.FileProvider;
import lombok.Getter;
import lombok.Setter;
import third_parties.daveKoeller.AlphanumComparator;
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
public class OCFile implements Parcelable, Comparable, ServerFileInterface {
private final static String PERMISSION_SHARED_WITH_ME = "S";
private final static String PERMISSION_CAN_RESHARE = "R";
@@ -88,6 +88,7 @@ public class OCFile implements Parcelable, Comparable, ServerFileInterfa
@Getter @Setter private String ownerId;
@Getter @Setter private String ownerDisplayName;
@Getter @Setter String note;
+ @Getter @Setter private List sharees = new ArrayList<>();
/**
* URI to the local path of the file contents, if stored in the device; cached after first call
diff --git a/src/main/java/com/owncloud/android/datamodel/ThumbnailsCacheManager.java b/src/main/java/com/owncloud/android/datamodel/ThumbnailsCacheManager.java
index 03e2bd5845f4..4ec98d15f3e7 100644
--- a/src/main/java/com/owncloud/android/datamodel/ThumbnailsCacheManager.java
+++ b/src/main/java/com/owncloud/android/datamodel/ThumbnailsCacheManager.java
@@ -44,6 +44,7 @@
import android.view.MenuItem;
import android.view.WindowManager;
import android.widget.ImageView;
+
import com.owncloud.android.MainApp;
import com.owncloud.android.R;
import com.owncloud.android.lib.common.OwnCloudAccount;
@@ -62,7 +63,7 @@
import com.owncloud.android.utils.DisplayUtils.AvatarGenerationListener;
import com.owncloud.android.utils.FileStorageUtils;
import com.owncloud.android.utils.MimeTypeUtil;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.GetMethod;
import org.jetbrains.annotations.NotNull;
@@ -74,6 +75,8 @@
import java.net.URLEncoder;
import java.util.List;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+
/**
* Manager for concurrent access to thumbnails cache.
*/
diff --git a/src/main/java/com/owncloud/android/db/ProviderMeta.java b/src/main/java/com/owncloud/android/db/ProviderMeta.java
index 81a9f3f655bd..22031b01d138 100644
--- a/src/main/java/com/owncloud/android/db/ProviderMeta.java
+++ b/src/main/java/com/owncloud/android/db/ProviderMeta.java
@@ -31,7 +31,7 @@
*/
public class ProviderMeta {
public static final String DB_NAME = "filelist";
- public static final int DB_VERSION = 44;
+ public static final int DB_VERSION = 45;
private ProviderMeta() {
// No instance
@@ -109,6 +109,7 @@ static public class ProviderTableMeta implements BaseColumns {
public static final String FILE_OWNER_ID = "owner_id";
public static final String FILE_OWNER_DISPLAY_NAME = "owner_display_name";
public static final String FILE_NOTE = "note";
+ public static final String FILE_SHAREES = "sharees";
public static final String[] FILE_ALL_COLUMNS = {
_ID, FILE_PARENT, FILE_NAME, FILE_CREATION, FILE_MODIFIED,
@@ -116,7 +117,7 @@ static public class ProviderTableMeta implements BaseColumns {
FILE_PATH, FILE_ACCOUNT_OWNER, FILE_LAST_SYNC_DATE, FILE_LAST_SYNC_DATE_FOR_DATA, FILE_ETAG,
FILE_ETAG_ON_SERVER, FILE_SHARED_VIA_LINK, FILE_SHARED_WITH_SHAREE, FILE_PUBLIC_LINK, FILE_PERMISSIONS,
FILE_REMOTE_ID, FILE_UPDATE_THUMBNAIL, FILE_IS_DOWNLOADING, FILE_ETAG_IN_CONFLICT, FILE_FAVORITE,
- FILE_IS_ENCRYPTED, FILE_MOUNT_TYPE, FILE_HAS_PREVIEW, FILE_UNREAD_COMMENTS_COUNT
+ FILE_IS_ENCRYPTED, FILE_MOUNT_TYPE, FILE_HAS_PREVIEW, FILE_UNREAD_COMMENTS_COUNT, FILE_SHAREES
};
public static final String FILE_DEFAULT_SORT_ORDER = FILE_NAME + " collate nocase asc";
diff --git a/src/main/java/com/owncloud/android/providers/FileContentProvider.java b/src/main/java/com/owncloud/android/providers/FileContentProvider.java
index 4649e6458df1..29562bc22acb 100644
--- a/src/main/java/com/owncloud/android/providers/FileContentProvider.java
+++ b/src/main/java/com/owncloud/android/providers/FileContentProvider.java
@@ -701,7 +701,8 @@ private void createFilesTable(SQLiteDatabase db) {
+ ProviderTableMeta.FILE_UNREAD_COMMENTS_COUNT + INTEGER
+ ProviderTableMeta.FILE_OWNER_ID + TEXT
+ ProviderTableMeta.FILE_OWNER_DISPLAY_NAME + TEXT
- + ProviderTableMeta.FILE_NOTE + " TEXT);"
+ + ProviderTableMeta.FILE_NOTE + TEXT
+ + ProviderTableMeta.FILE_SHAREES + " TEXT);"
);
}
@@ -1874,9 +1875,9 @@ public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.beginTransaction();
try {
db.execSQL(ALTER_TABLE + ProviderTableMeta.FILE_TABLE_NAME +
- ADD_COLUMN + ProviderTableMeta.FILE_OWNER_ID + " TEXT ");
+ ADD_COLUMN + ProviderTableMeta.FILE_OWNER_ID + " TEXT ");
db.execSQL(ALTER_TABLE + ProviderTableMeta.FILE_TABLE_NAME +
- ADD_COLUMN + ProviderTableMeta.FILE_OWNER_DISPLAY_NAME + " TEXT ");
+ ADD_COLUMN + ProviderTableMeta.FILE_OWNER_DISPLAY_NAME + " TEXT ");
upgraded = true;
db.setTransactionSuccessful();
@@ -1906,6 +1907,24 @@ public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if (!upgraded) {
Log_OC.i(SQL, String.format(Locale.ENGLISH, UPGRADE_VERSION_MSG, oldVersion, newVersion));
}
+
+ if (oldVersion < 45 && newVersion >= 45) {
+ Log_OC.i(SQL, "Entering in the #45 add sharees to file table");
+ db.beginTransaction();
+ try {
+ db.execSQL(ALTER_TABLE + ProviderTableMeta.FILE_TABLE_NAME +
+ ADD_COLUMN + ProviderTableMeta.FILE_SHAREES + " TEXT ");
+
+ upgraded = true;
+ db.setTransactionSuccessful();
+ } finally {
+ db.endTransaction();
+ }
+ }
+
+ if (!upgraded) {
+ Log_OC.i(SQL, String.format(Locale.ENGLISH, UPGRADE_VERSION_MSG, oldVersion, newVersion));
+ }
}
@Override
diff --git a/src/main/java/com/owncloud/android/ui/adapter/OCFileListAdapter.java b/src/main/java/com/owncloud/android/ui/adapter/OCFileListAdapter.java
index a52f7c235b33..38d6d9ee860a 100644
--- a/src/main/java/com/owncloud/android/ui/adapter/OCFileListAdapter.java
+++ b/src/main/java/com/owncloud/android/ui/adapter/OCFileListAdapter.java
@@ -25,6 +25,7 @@
package com.owncloud.android.ui.adapter;
import android.accounts.Account;
+import android.accounts.AccountManager;
import android.content.ContentValues;
import android.content.Context;
import android.content.res.Resources;
@@ -40,6 +41,7 @@
import android.widget.Filter;
import android.widget.ImageView;
import android.widget.LinearLayout;
+import android.widget.RelativeLayout;
import android.widget.TextView;
import com.bumptech.glide.Glide;
@@ -77,6 +79,7 @@
import java.io.File;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Locale;
@@ -100,6 +103,7 @@ public class OCFileListAdapter extends RecyclerView.Adapter mFiles = new ArrayList<>();
@@ -123,6 +127,7 @@ public class OCFileListAdapter extends RecyclerView.Adapter asyncTasks = new ArrayList<>();
private boolean onlyOnDevice;
+ private boolean showShareAvatar;
public OCFileListAdapter(
Context context,
@@ -146,6 +151,17 @@ public OCFileListAdapter(
uploaderBinder = transferServiceGetter.getFileUploaderBinder();
operationsServiceBinder = transferServiceGetter.getOperationsServiceBinder();
+ if (account != null) {
+ AccountManager accountManager = AccountManager.get(mContext);
+ userId = accountManager.getUserData(account,
+ com.owncloud.android.lib.common.accounts.AccountUtils.Constants.KEY_USER_ID);
+ } else {
+ userId = "";
+ }
+
+ // TODO change when https://github.com/nextcloud/server/pull/14429 is merged
+ showShareAvatar = false;
+
// initialise thumbnails cache on background thread
new ThumbnailsCacheManager.InitDiskCacheTask().execute();
}
@@ -328,26 +344,65 @@ public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int positi
if (holder instanceof OCFileListItemViewHolder) {
OCFileListItemViewHolder itemViewHolder = (OCFileListItemViewHolder) holder;
- if (file.isSharedWithMe() && file.getOwnerId() != null && !multiSelect && !gridView &&
- !mHideItemOptions) {
- itemViewHolder.sharedAvatar.setVisibility(View.VISIBLE);
+ Resources resources = mContext.getResources();
+ float avatarRadius = resources.getDimension(R.dimen.list_item_avatar_icon_radius);
- Resources resources = mContext.getResources();
+ if ((file.isSharedWithMe() || file.isSharedWithSharee()) && !multiSelect && !gridView &&
+ !mHideItemOptions) {
+ itemViewHolder.sharedAvatars.setVisibility(View.VISIBLE);
+ itemViewHolder.sharedAvatars.removeAllViews();
- float avatarRadius = resources.getDimension(R.dimen.list_item_avatar_icon_radius);
+ String fileOwner = file.getOwnerId();
+ ArrayList sharees = (ArrayList) file.getSharees();
- if (file.getOwnerId().contains("@")) {
- showFederatedShareAvatar(file, avatarRadius, resources, itemViewHolder);
- } else {
- itemViewHolder.sharedAvatar.setTag(file.getOwnerId());
- DisplayUtils.setAvatar(account, file.getOwnerId(), this, avatarRadius, resources,
- itemViewHolder.sharedAvatar, mContext);
+ // use fileOwner if not oneself, then add at first
+ if (!fileOwner.equals(userId) && !sharees.contains(fileOwner)) {
+ sharees.add(fileOwner);
}
- itemViewHolder.sharedAvatar.setOnClickListener(view ->
- ocFileListFragmentInterface.showShareDetailView(file));
+ Collections.reverse(sharees);
+
+ Log_OC.d(this, "sharees of " + file.getFileName() + ": " + sharees);
+
+ int shareeSize = Math.min(sharees.size(), 3);
+ int w = DisplayUtils.convertDpToPixel(40, mContext);
+ int margin = DisplayUtils.convertDpToPixel(24, mContext);
+ int size = 60 * (shareeSize - 1) + w;
+
+ for (int i = 0; i < shareeSize; i++) {
+ String sharee = file.getSharees().get(i);
+
+ ImageView avatar = new ImageView(mContext);
+
+ if (i == 0 && sharees.size() > 3) {
+ avatar.setImageResource(R.drawable.ic_people);
+ } else {
+ if (sharee.contains("@")) {
+ showFederatedShareAvatar(sharee, avatarRadius, resources, avatar);
+ } else {
+ avatar.setTag(sharee);
+ DisplayUtils.setAvatar(account, sharee, this, avatarRadius, resources,
+ avatar, mContext);
+ Log_OC.d(TAG, "avatar: " + sharee);
+ }
+ }
+
+ avatar.setOnClickListener(view -> ocFileListFragmentInterface.showShareDetailView(file));
+
+ RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(w, w);
+ layoutParams.setMargins(0, 0, i * margin, 0);
+ layoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
+ avatar.setLayoutParams(layoutParams);
+ itemViewHolder.sharedAvatars.addView(avatar);
+
+ ViewGroup.LayoutParams rememberParam = itemViewHolder.sharedAvatars.getLayoutParams();
+ rememberParam.width = size;
+
+ itemViewHolder.sharedAvatars.setLayoutParams(rememberParam);
+ }
} else {
- itemViewHolder.sharedAvatar.setVisibility(View.GONE);
+ itemViewHolder.sharedAvatars.setVisibility(View.GONE);
+ itemViewHolder.sharedAvatars.removeAllViews();
}
if (onlyOnDevice) {
@@ -435,13 +490,13 @@ public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int positi
}
}
- private void showFederatedShareAvatar(OCFile file, float avatarRadius, Resources resources,
- OCFileListItemViewHolder itemViewHolder) {
+ private void showFederatedShareAvatar(String user, float avatarRadius, Resources resources, ImageView avatar) {
// maybe federated share
- String userId = file.getOwnerId().split("@")[0];
- String server = file.getOwnerId().split("@")[1];
+ String[] split = user.split("@");
+ String userId = split[0];
+ String server = split[1];
- String url = "https://" + server + "/avatar/" + userId + "/" +
+ String url = "https://" + server + "/index.php/avatar/" + userId + "/" +
DisplayUtils.convertDpToPixel(avatarRadius, mContext);
Drawable placeholder;
@@ -452,21 +507,21 @@ private void showFederatedShareAvatar(OCFile file, float avatarRadius, Resources
placeholder = resources.getDrawable(R.drawable.account_circle_white);
}
- itemViewHolder.sharedAvatar.setTag(null);
+ avatar.setTag(null);
Glide.with(mContext).load(url)
.asBitmap()
.placeholder(placeholder)
.error(placeholder)
- .into(new BitmapImageViewTarget(itemViewHolder.sharedAvatar) {
+ .into(new BitmapImageViewTarget(avatar) {
@Override
protected void setResource(Bitmap resource) {
RoundedBitmapDrawable circularBitmapDrawable =
RoundedBitmapDrawableFactory.create(mContext.getResources(), resource);
circularBitmapDrawable.setCircular(true);
- itemViewHolder.sharedAvatar.setImageDrawable(circularBitmapDrawable);
+ avatar.setImageDrawable(circularBitmapDrawable);
}
});
- }
+ }
private void setThumbnail(OCFile file, ImageView thumbnailView) {
if (file.isFolder()) {
@@ -586,11 +641,14 @@ private void showShareIcon(OCFileListGridImageViewHolder gridViewHolder, OCFile
if (gridViewHolder instanceof OCFileListItemViewHolder || file.getUnreadCommentsCount() == 0) {
sharedIconView.setVisibility(View.VISIBLE);
- if (file.isSharedWithSharee()) {
- sharedIconView.setImageResource(R.drawable.shared_via_users);
- sharedIconView.setContentDescription(mContext.getString(R.string.shared_icon_shared));
- } else if (file.isSharedWithMe()) {
- sharedIconView.setVisibility(View.GONE);
+ if (file.isSharedWithSharee() || file.isSharedWithMe()) {
+ if (showShareAvatar) {
+ sharedIconView.setVisibility(View.GONE);
+ } else {
+ sharedIconView.setVisibility(View.VISIBLE);
+ sharedIconView.setImageResource(R.drawable.shared_via_users);
+ sharedIconView.setContentDescription(mContext.getString(R.string.shared_icon_shared));
+ }
} else if (file.isSharedViaLink()) {
sharedIconView.setImageResource(R.drawable.shared_via_link);
sharedIconView.setContentDescription(mContext.getString(R.string.shared_icon_shared_via_link));
@@ -925,8 +983,8 @@ static class OCFileListItemViewHolder extends OCFileListGridItemViewHolder {
@BindView(R.id.overflow_menu)
public ImageView overflowMenu;
- @BindView(R.id.sharedAvatar)
- public ImageView sharedAvatar;
+ @BindView(R.id.sharedAvatars)
+ public RelativeLayout sharedAvatars;
private OCFileListItemViewHolder(View itemView) {
super(itemView);
diff --git a/src/main/java/com/owncloud/android/ui/adapter/UserListAdapter.java b/src/main/java/com/owncloud/android/ui/adapter/UserListAdapter.java
index 0c9765d5ae0a..2ac47fb9ca8c 100644
--- a/src/main/java/com/owncloud/android/ui/adapter/UserListAdapter.java
+++ b/src/main/java/com/owncloud/android/ui/adapter/UserListAdapter.java
@@ -32,7 +32,13 @@
import android.widget.ImageView;
import android.widget.PopupMenu;
import android.widget.TextView;
-
+import androidx.annotation.DrawableRes;
+import androidx.annotation.NonNull;
+import androidx.appcompat.widget.AppCompatCheckBox;
+import androidx.fragment.app.FragmentManager;
+import androidx.recyclerview.widget.RecyclerView;
+import butterknife.BindView;
+import butterknife.ButterKnife;
import com.owncloud.android.R;
import com.owncloud.android.datamodel.FileDataStorageManager;
import com.owncloud.android.datamodel.OCFile;
@@ -50,14 +56,6 @@
import java.security.NoSuchAlgorithmException;
import java.util.List;
-import androidx.annotation.DrawableRes;
-import androidx.annotation.NonNull;
-import androidx.appcompat.widget.AppCompatCheckBox;
-import androidx.fragment.app.FragmentManager;
-import androidx.recyclerview.widget.RecyclerView;
-import butterknife.BindView;
-import butterknife.ButterKnife;
-
/**
* Adapter to show a user/group/email/remote in Sharing list in file details view.
*/
@@ -72,14 +70,16 @@ public class UserListAdapter extends RecyclerView.Adapter shares;
private float avatarRadiusDimension;
private OCFile file;
+ private String userId;
public UserListAdapter(FragmentManager fragmentManager, Context context, List shares, Account account,
- OCFile file, ShareeListAdapterListener listener) {
+ OCFile file, ShareeListAdapterListener listener, String userId) {
this.context = context;
this.fragmentManager = fragmentManager;
this.shares = shares;
this.listener = listener;
this.file = file;
+ this.userId = userId;
accentColor = ThemeUtils.primaryAccentColor(context);
capabilities = new FileDataStorageManager(account, context.getContentResolver()).getCapability(account.name);
@@ -120,12 +120,20 @@ public void onBindViewHolder(@NonNull UserViewHolder holder, int position) {
holder.name.setText(name);
- ThemeUtils.tintCheckbox(holder.allowEditing, accentColor);
- holder.allowEditing.setChecked(canEdit(share));
- holder.allowEditing.setOnClickListener(v -> allowEditClick(holder.allowEditing, share));
+ if (share.getShareWith().equalsIgnoreCase(userId) || share.getUserId().equalsIgnoreCase(userId)) {
+ holder.allowEditing.setVisibility(View.VISIBLE);
+ holder.editShareButton.setVisibility(View.VISIBLE);
+
+ ThemeUtils.tintCheckbox(holder.allowEditing, accentColor);
+ holder.allowEditing.setChecked(canEdit(share));
+ holder.allowEditing.setOnClickListener(v -> allowEditClick(holder.allowEditing, share));
- // bind listener to edit privileges
- holder.editShareButton.setOnClickListener(v -> onOverflowIconClicked(v, holder.allowEditing, share));
+ // bind listener to edit privileges
+ holder.editShareButton.setOnClickListener(v -> onOverflowIconClicked(v, holder.allowEditing, share));
+ } else {
+ holder.allowEditing.setVisibility(View.GONE);
+ holder.editShareButton.setVisibility(View.GONE);
+ }
}
}
diff --git a/src/main/java/com/owncloud/android/ui/fragment/FileDetailFragment.java b/src/main/java/com/owncloud/android/ui/fragment/FileDetailFragment.java
index e6b21394f239..75aeee9fa477 100644
--- a/src/main/java/com/owncloud/android/ui/fragment/FileDetailFragment.java
+++ b/src/main/java/com/owncloud/android/ui/fragment/FileDetailFragment.java
@@ -39,12 +39,7 @@
import android.widget.PopupMenu;
import android.widget.ProgressBar;
import android.widget.TextView;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.viewpager.widget.ViewPager;
-import butterknife.BindView;
-import butterknife.ButterKnife;
-import butterknife.Unbinder;
+
import com.google.android.material.tabs.TabLayout;
import com.nextcloud.client.di.Injectable;
import com.nextcloud.client.preferences.AppPreferences;
@@ -68,9 +63,17 @@
import com.owncloud.android.utils.MimeTypeUtil;
import com.owncloud.android.utils.ThemeUtils;
-import javax.inject.Inject;
import java.lang.ref.WeakReference;
+import javax.inject.Inject;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.viewpager.widget.ViewPager;
+import butterknife.BindView;
+import butterknife.ButterKnife;
+import butterknife.Unbinder;
+
/**
* This Fragment is used to display the details about a file.
*/
diff --git a/src/main/java/com/owncloud/android/ui/fragment/FileDetailSharingFragment.java b/src/main/java/com/owncloud/android/ui/fragment/FileDetailSharingFragment.java
index 76b968cdbbe2..38a0dba2e386 100644
--- a/src/main/java/com/owncloud/android/ui/fragment/FileDetailSharingFragment.java
+++ b/src/main/java/com/owncloud/android/ui/fragment/FileDetailSharingFragment.java
@@ -21,6 +21,7 @@
package com.owncloud.android.ui.fragment;
import android.accounts.Account;
+import android.accounts.AccountManager;
import android.app.SearchManager;
import android.content.Context;
import android.content.res.Resources;
@@ -36,7 +37,17 @@
import android.widget.LinearLayout;
import android.widget.PopupMenu;
import android.widget.TextView;
-
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.appcompat.widget.AppCompatCheckBox;
+import androidx.appcompat.widget.SearchView;
+import androidx.fragment.app.Fragment;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+import butterknife.BindView;
+import butterknife.ButterKnife;
+import butterknife.OnClick;
+import butterknife.Unbinder;
import com.google.android.material.snackbar.Snackbar;
import com.owncloud.android.R;
import com.owncloud.android.authentication.AccountUtils;
@@ -63,18 +74,6 @@
import java.util.List;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.appcompat.widget.AppCompatCheckBox;
-import androidx.appcompat.widget.SearchView;
-import androidx.fragment.app.Fragment;
-import androidx.recyclerview.widget.LinearLayoutManager;
-import androidx.recyclerview.widget.RecyclerView;
-import butterknife.BindView;
-import butterknife.ButterKnife;
-import butterknife.OnClick;
-import butterknife.Unbinder;
-
public class FileDetailSharingFragment extends Fragment implements UserListAdapter.ShareeListAdapterListener,
DisplayUtils.AvatarGenerationListener {
@@ -222,6 +221,7 @@ private void setupView() {
ThemeUtils.themeSearchView(getContext(), searchView, false);
} else {
searchView.setVisibility(View.GONE);
+ shareByLinkContainer.setVisibility(View.GONE);
noList.setText(R.string.reshare_not_allowed);
}
}
@@ -296,9 +296,13 @@ private void updateListOfUserGroups() {
// TODO Refactoring: create a new {@link ShareUserListAdapter} instance with every call should not be needed
if (shares.size() > 0) {
+ AccountManager accountManager = AccountManager.get(getContext());
+ String userId = accountManager.getUserData(account,
+ com.owncloud.android.lib.common.accounts.AccountUtils.Constants.KEY_USER_ID);
+
usersList.setVisibility(View.VISIBLE);
- usersList.setAdapter(new UserListAdapter(fileDisplayActivity.getSupportFragmentManager(), fileDisplayActivity, shares,
- account, file, this));
+ usersList.setAdapter(new UserListAdapter(fileDisplayActivity.getSupportFragmentManager(),
+ fileDisplayActivity, shares, account, file, this, userId));
usersList.setLayoutManager(new LinearLayoutManager(getContext()));
usersList.addItemDecoration(new SimpleListItemDividerDecoration(getContext()));
noList.setVisibility(View.GONE);
diff --git a/src/main/java/com/owncloud/android/utils/FileStorageUtils.java b/src/main/java/com/owncloud/android/utils/FileStorageUtils.java
index b51119321dd5..47085f3106dc 100644
--- a/src/main/java/com/owncloud/android/utils/FileStorageUtils.java
+++ b/src/main/java/com/owncloud/android/utils/FileStorageUtils.java
@@ -210,6 +210,7 @@ public static OCFile fillOCFile(RemoteFile remote) {
file.setOwnerId(remote.getOwnerId());
file.setOwnerDisplayName(remote.getOwnerDisplayName());
file.setNote(remote.getNote());
+ file.setSharees(remote.getSharees());
return file;
}
diff --git a/src/main/res/drawable/ic_people.xml b/src/main/res/drawable/ic_people.xml
new file mode 100644
index 000000000000..c7f2c78afb71
--- /dev/null
+++ b/src/main/res/drawable/ic_people.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/src/main/res/layout/list_item.xml b/src/main/res/layout/list_item.xml
index b9d67284e294..d03e57ed822a 100644
--- a/src/main/res/layout/list_item.xml
+++ b/src/main/res/layout/list_item.xml
@@ -17,14 +17,14 @@
along with this program. If not, see .
-->
+ android:id="@+id/ListItemLayout"
+ android:layout_width="match_parent"
+ android:layout_height="@dimen/standard_list_item_size"
+ android:background="@drawable/list_selector"
+ android:descendantFocusability="blocksDescendants"
+ android:foreground="?android:attr/selectableItemBackground"
+ android:baselineAligned="false"
+ android:orientation="horizontal">
+ android:src="@drawable/folder"/>
-
+
@@ -90,7 +90,7 @@
android:singleLine="true"
android:text="@string/placeholder_filename"
android:textColor="@color/textColor"
- android:textSize="@dimen/two_line_primary_text_size" />
+ android:textSize="@dimen/two_line_primary_text_size"/>
+ android:textSize="@dimen/two_line_secondary_text_size"/>
+ android:textSize="@dimen/two_line_secondary_text_size"/>
+ android:textSize="@dimen/two_line_secondary_text_size"/>
@@ -133,7 +133,7 @@
+ android:src="@drawable/ic_unshared"/>
-
+ android:visibility="visible"/>
+ android:src="@drawable/ic_checkbox_blank_outline"/>
+ android:src="@drawable/ic_dots_vertical"/>