simplified share layout
Signed-off-by: tobiasKaminsky <tobias@kaminsky.me>
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
@ -288,7 +288,6 @@ class FileDetailSharingFragmentIT : AbstractIT() {
|
||||
onView(ViewMatchers.withId(R.id.menu_share_send_new_email)).check(matches(isDisplayed()))
|
||||
onView(ViewMatchers.withId(R.id.menu_share_send_link)).check(matches(isDisplayed()))
|
||||
onView(ViewMatchers.withId(R.id.menu_share_unshare)).check(matches(isDisplayed()))
|
||||
onView(ViewMatchers.withId(R.id.menu_share_add_another_link)).check(matches(isDisplayed()))
|
||||
|
||||
// click event
|
||||
onView(ViewMatchers.withId(R.id.menu_share_advanced_permissions)).perform(ViewActions.click())
|
||||
@ -416,7 +415,6 @@ class FileDetailSharingFragmentIT : AbstractIT() {
|
||||
onView(ViewMatchers.withId(R.id.menu_share_send_new_email)).check(matches(isDisplayed()))
|
||||
onView(ViewMatchers.withId(R.id.menu_share_send_link)).check(matches(isDisplayed()))
|
||||
onView(ViewMatchers.withId(R.id.menu_share_unshare)).check(matches(isDisplayed()))
|
||||
onView(ViewMatchers.withId(R.id.menu_share_add_another_link)).check(matches(isDisplayed()))
|
||||
|
||||
// click event
|
||||
onView(ViewMatchers.withId(R.id.menu_share_advanced_permissions)).perform(ViewActions.click())
|
||||
@ -531,7 +529,6 @@ class FileDetailSharingFragmentIT : AbstractIT() {
|
||||
onView(ViewMatchers.withId(R.id.menu_share_send_new_email)).check(matches(isDisplayed()))
|
||||
onView(ViewMatchers.withId(R.id.menu_share_send_link)).check(matches(not(isDisplayed())))
|
||||
onView(ViewMatchers.withId(R.id.menu_share_unshare)).check(matches(isDisplayed()))
|
||||
onView(ViewMatchers.withId(R.id.menu_share_add_another_link)).check(matches(not(isDisplayed())))
|
||||
|
||||
// click event
|
||||
onView(ViewMatchers.withId(R.id.menu_share_advanced_permissions)).perform(ViewActions.click())
|
||||
@ -657,7 +654,6 @@ class FileDetailSharingFragmentIT : AbstractIT() {
|
||||
onView(ViewMatchers.withId(R.id.menu_share_send_new_email)).check(matches(isDisplayed()))
|
||||
onView(ViewMatchers.withId(R.id.menu_share_send_link)).check(matches(not(isDisplayed())))
|
||||
onView(ViewMatchers.withId(R.id.menu_share_unshare)).check(matches(isDisplayed()))
|
||||
onView(ViewMatchers.withId(R.id.menu_share_add_another_link)).check(matches(not(isDisplayed())))
|
||||
|
||||
// click event
|
||||
onView(ViewMatchers.withId(R.id.menu_share_advanced_permissions)).perform(ViewActions.click())
|
||||
|
@ -0,0 +1,13 @@
|
||||
/*
|
||||
* Nextcloud - Android Client
|
||||
*
|
||||
* SPDX-FileCopyrightText: 2025 Tobias Kaminsky <tobias.kaminsky@nextcloud.com>
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
package com.owncloud.android.datamodel
|
||||
|
||||
enum class SharesType {
|
||||
INTERNAL,
|
||||
EXTERNAL
|
||||
}
|
@ -60,6 +60,11 @@ class ShareViewHolder extends RecyclerView.ViewHolder {
|
||||
float avatarRadiusDimension) {
|
||||
this.avatarRadiusDimension = avatarRadiusDimension;
|
||||
String name = share.getSharedWithDisplayName();
|
||||
|
||||
if ("".equals(name) && !"".equals(share.getShareWith())) {
|
||||
name = share.getShareWith();
|
||||
}
|
||||
|
||||
binding.icon.setTag(null);
|
||||
|
||||
switch (share.getShareType()) {
|
||||
|
@ -14,7 +14,6 @@ package com.owncloud.android.ui.adapter;
|
||||
import android.annotation.SuppressLint;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ImageView;
|
||||
|
||||
@ -26,6 +25,7 @@ import com.owncloud.android.databinding.FileDetailsShareLinkShareItemBinding;
|
||||
import com.owncloud.android.databinding.FileDetailsSharePublicLinkAddNewItemBinding;
|
||||
import com.owncloud.android.databinding.FileDetailsShareSecureFileDropAddNewItemBinding;
|
||||
import com.owncloud.android.databinding.FileDetailsShareShareItemBinding;
|
||||
import com.owncloud.android.datamodel.SharesType;
|
||||
import com.owncloud.android.lib.resources.shares.OCShare;
|
||||
import com.owncloud.android.lib.resources.shares.ShareType;
|
||||
import com.owncloud.android.ui.activity.FileActivity;
|
||||
@ -52,6 +52,8 @@ public class ShareeListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHol
|
||||
private final User user;
|
||||
private final ViewThemeUtils viewThemeUtils;
|
||||
private final boolean encrypted;
|
||||
private final SharesType sharesType;
|
||||
private boolean showAll = false;
|
||||
|
||||
public ShareeListAdapter(FileActivity fileActivity,
|
||||
List<OCShare> shares,
|
||||
@ -59,7 +61,8 @@ public class ShareeListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHol
|
||||
String userId,
|
||||
User user,
|
||||
final ViewThemeUtils viewThemeUtils,
|
||||
boolean encrypted) {
|
||||
boolean encrypted,
|
||||
SharesType sharesType) {
|
||||
this.fileActivity = fileActivity;
|
||||
this.shares = shares;
|
||||
this.listener = listener;
|
||||
@ -67,6 +70,7 @@ public class ShareeListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHol
|
||||
this.user = user;
|
||||
this.viewThemeUtils = viewThemeUtils;
|
||||
this.encrypted = encrypted;
|
||||
this.sharesType = sharesType;
|
||||
|
||||
avatarRadiusDimension = fileActivity.getResources().getDimension(R.dimen.user_icon_radius);
|
||||
|
||||
@ -170,12 +174,26 @@ public class ShareeListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHol
|
||||
public int getItemCount() {
|
||||
boolean shareViaLink = MDMConfig.INSTANCE.shareViaLink(fileActivity);
|
||||
if (shareViaLink) {
|
||||
return shares.size();
|
||||
if (showAll) {
|
||||
return shares.size();
|
||||
} else {
|
||||
return Math.min(shares.size(), 3);
|
||||
}
|
||||
} else {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressLint("NotifyDataSetChanged")
|
||||
public void toggleShowAll() {
|
||||
this.showAll = !this.showAll;
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
||||
public boolean isShowAll() {
|
||||
return showAll;
|
||||
}
|
||||
|
||||
@SuppressLint("NotifyDataSetChanged")
|
||||
public void addShares(List<OCShare> sharesToAdd) {
|
||||
shares.addAll(sharesToAdd);
|
||||
@ -227,7 +245,7 @@ public class ShareeListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHol
|
||||
shares.addAll(users);
|
||||
|
||||
// add internal share link at end
|
||||
if (!encrypted) {
|
||||
if (!encrypted && sharesType == SharesType.INTERNAL) {
|
||||
final OCShare ocShare = new OCShare();
|
||||
ocShare.setShareType(ShareType.INTERNAL);
|
||||
shares.add(ocShare);
|
||||
|
@ -37,11 +37,13 @@ import com.nextcloud.client.di.Injectable;
|
||||
import com.nextcloud.client.network.ClientFactory;
|
||||
import com.nextcloud.utils.extensions.BundleExtensionsKt;
|
||||
import com.nextcloud.utils.extensions.FileExtensionsKt;
|
||||
import com.nextcloud.utils.extensions.ViewExtensionsKt;
|
||||
import com.nextcloud.utils.mdm.MDMConfig;
|
||||
import com.owncloud.android.R;
|
||||
import com.owncloud.android.databinding.FileDetailsSharingFragmentBinding;
|
||||
import com.owncloud.android.datamodel.FileDataStorageManager;
|
||||
import com.owncloud.android.datamodel.OCFile;
|
||||
import com.owncloud.android.datamodel.SharesType;
|
||||
import com.owncloud.android.lib.common.OwnCloudAccount;
|
||||
import com.owncloud.android.lib.common.operations.RemoteOperationResult;
|
||||
import com.owncloud.android.lib.common.utils.Log_OC;
|
||||
@ -77,6 +79,7 @@ import androidx.annotation.VisibleForTesting;
|
||||
import androidx.appcompat.widget.SearchView;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
|
||||
|
||||
public class FileDetailSharingFragment extends Fragment implements ShareeListAdapterListener,
|
||||
DisplayUtils.AvatarGenerationListener,
|
||||
@ -97,6 +100,10 @@ public class FileDetailSharingFragment extends Fragment implements ShareeListAda
|
||||
private FileDetailsSharingFragmentBinding binding;
|
||||
|
||||
private OnEditShareListener onEditShareListener;
|
||||
|
||||
private ShareeListAdapter internalShareeListAdapter;
|
||||
|
||||
private ShareeListAdapter externalShareeListAdapter;
|
||||
|
||||
@Inject UserAccountManager accountManager;
|
||||
@Inject ClientFactory clientFactory;
|
||||
@ -162,15 +169,31 @@ public class FileDetailSharingFragment extends Fragment implements ShareeListAda
|
||||
String userId = accountManager.getUserData(user.toPlatformAccount(),
|
||||
com.owncloud.android.lib.common.accounts.AccountUtils.Constants.KEY_USER_ID);
|
||||
|
||||
binding.sharesList.setAdapter(new ShareeListAdapter(fileActivity,
|
||||
new ArrayList<>(),
|
||||
this,
|
||||
userId,
|
||||
user,
|
||||
viewThemeUtils,
|
||||
file.isEncrypted()));
|
||||
internalShareeListAdapter = new ShareeListAdapter(fileActivity,
|
||||
new ArrayList<>(),
|
||||
this,
|
||||
userId,
|
||||
user,
|
||||
viewThemeUtils,
|
||||
file.isEncrypted(),
|
||||
SharesType.INTERNAL);
|
||||
|
||||
binding.sharesList.setLayoutManager(new LinearLayoutManager(requireContext()));
|
||||
binding.sharesListInternal.setAdapter(internalShareeListAdapter);
|
||||
|
||||
binding.sharesListInternal.setLayoutManager(new LinearLayoutManager(requireContext()));
|
||||
|
||||
externalShareeListAdapter = new ShareeListAdapter(fileActivity,
|
||||
new ArrayList<>(),
|
||||
this,
|
||||
userId,
|
||||
user,
|
||||
viewThemeUtils,
|
||||
file.isEncrypted(),
|
||||
SharesType.EXTERNAL);
|
||||
|
||||
binding.sharesListExternal.setAdapter(externalShareeListAdapter);
|
||||
|
||||
binding.sharesListExternal.setLayoutManager(new LinearLayoutManager(requireContext()));
|
||||
|
||||
binding.pickContactEmailBtn.setOnClickListener(v -> checkContactPermission());
|
||||
|
||||
@ -221,13 +244,36 @@ public class FileDetailSharingFragment extends Fragment implements ShareeListAda
|
||||
fileActivity.getComponentName());
|
||||
viewThemeUtils.androidx.themeToolbarSearchView(binding.searchView);
|
||||
|
||||
viewThemeUtils.material.colorMaterialTextButton(binding.sharesListInternalShowAll);
|
||||
binding.sharesListInternalShowAll.setOnClickListener(view -> {
|
||||
internalShareeListAdapter.toggleShowAll();
|
||||
|
||||
if (file.canReshare()) {
|
||||
if (internalShareeListAdapter.isShowAll()) {
|
||||
binding.sharesListInternalShowAll.setText(R.string.show_less);
|
||||
} else {
|
||||
binding.sharesListInternalShowAll.setText(R.string.show_all);
|
||||
}
|
||||
});
|
||||
|
||||
viewThemeUtils.material.colorMaterialTextButton(binding.sharesListExternalShowAll);
|
||||
binding.sharesListExternalShowAll.setOnClickListener(view -> {
|
||||
externalShareeListAdapter.toggleShowAll();
|
||||
|
||||
if (internalShareeListAdapter.isShowAll()) {
|
||||
binding.sharesListExternalShowAll.setText(R.string.show_less);
|
||||
} else {
|
||||
binding.sharesListExternalShowAll.setText(R.string.show_all);
|
||||
}
|
||||
});
|
||||
|
||||
if (file.canReshare() && !FileDetailSharingFragmentHelper.isPublicShareDisabled(capabilities)) {
|
||||
if (file.isEncrypted() || (parentFile != null && parentFile.isEncrypted())) {
|
||||
if (file.getE2eCounter() == -1) {
|
||||
// V1 cannot share
|
||||
binding.searchContainer.setVisibility(View.GONE);
|
||||
binding.createLink.setVisibility(View.GONE);
|
||||
} else {
|
||||
binding.createLink.setText(R.string.add_new_secure_file_drop);
|
||||
binding.searchView.setQueryHint(getResources().getString(R.string.secure_share_search));
|
||||
|
||||
if (file.isSharedViaLink()) {
|
||||
@ -237,13 +283,20 @@ public class FileDetailSharingFragment extends Fragment implements ShareeListAda
|
||||
}
|
||||
}
|
||||
} else {
|
||||
binding.searchView.setQueryHint(getResources().getString(R.string.share_search));
|
||||
binding.createLink.setText(R.string.create_link);
|
||||
binding.searchView.setQueryHint(getResources().getString(R.string.share_search_internal));
|
||||
}
|
||||
|
||||
binding.createLink.setOnClickListener(v -> createPublicShareLink());
|
||||
|
||||
} else {
|
||||
binding.searchView.setQueryHint(getResources().getString(R.string.resharing_is_not_allowed));
|
||||
binding.createLink.setVisibility(View.GONE);
|
||||
binding.externalSharesHeadline.setVisibility(View.GONE);
|
||||
binding.searchView.setInputType(InputType.TYPE_NULL);
|
||||
binding.pickContactEmailBtn.setVisibility(View.GONE);
|
||||
disableSearchView(binding.searchView);
|
||||
binding.createLink.setOnClickListener(null);
|
||||
}
|
||||
|
||||
checkShareViaUser();
|
||||
@ -453,45 +506,63 @@ public class FileDetailSharingFragment extends Fragment implements ShareeListAda
|
||||
* Get public link from the DB to fill in the "Share link" section in the UI. Takes into account server capabilities
|
||||
* before reading database.
|
||||
*/
|
||||
@SuppressFBWarnings("PSC")
|
||||
public void refreshSharesFromDB() {
|
||||
OCFile newFile = fileDataStorageManager.getFileById(file.getFileId());
|
||||
if (newFile != null) {
|
||||
file = newFile;
|
||||
}
|
||||
|
||||
ShareeListAdapter adapter = (ShareeListAdapter) binding.sharesList.getAdapter();
|
||||
|
||||
if (adapter == null) {
|
||||
if (internalShareeListAdapter == null) {
|
||||
DisplayUtils.showSnackMessage(getView(), getString(R.string.could_not_retrieve_shares));
|
||||
return;
|
||||
}
|
||||
adapter.getShares().clear();
|
||||
internalShareeListAdapter.getShares().clear();
|
||||
|
||||
// to show share with users/groups info
|
||||
List<OCShare> shares = fileDataStorageManager.getSharesWithForAFile(file.getRemotePath(),
|
||||
user.getAccountName());
|
||||
|
||||
adapter.addShares(shares);
|
||||
List<OCShare> internalShares = new ArrayList<>();
|
||||
List<OCShare> externalShares = new ArrayList<>();
|
||||
|
||||
if (FileDetailSharingFragmentHelper.isPublicShareDisabled(capabilities) || !file.canReshare()) {
|
||||
return;
|
||||
for (OCShare share : shares) {
|
||||
if (share.getShareType() != null) {
|
||||
switch (share.getShareType()) {
|
||||
case PUBLIC_LINK:
|
||||
case FEDERATED_GROUP:
|
||||
case FEDERATED:
|
||||
case EMAIL:
|
||||
externalShares.add(share);
|
||||
break;
|
||||
|
||||
default:
|
||||
internalShares.add(share);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
internalShareeListAdapter.addShares(internalShares);
|
||||
|
||||
ViewExtensionsKt.setVisibleIf(binding.sharesListInternalShowAll,
|
||||
internalShareeListAdapter.getShares().size() > 3
|
||||
);
|
||||
|
||||
externalShareeListAdapter.getShares().clear();
|
||||
|
||||
// Get public share
|
||||
List<OCShare> publicShares = fileDataStorageManager.getSharesByPathAndType(file.getRemotePath(),
|
||||
ShareType.PUBLIC_LINK,
|
||||
"");
|
||||
|
||||
if (publicShares.isEmpty() && containsNoNewPublicShare(adapter.getShares()) &&
|
||||
(!file.isEncrypted() || capabilities.getEndToEndEncryption().isTrue())) {
|
||||
final OCShare ocShare = new OCShare();
|
||||
ocShare.setShareType(ShareType.NEW_PUBLIC_LINK);
|
||||
publicShares.add(ocShare);
|
||||
} else {
|
||||
adapter.removeNewPublicShare();
|
||||
}
|
||||
externalShareeListAdapter.addShares(externalShares);
|
||||
|
||||
adapter.addShares(publicShares);
|
||||
externalShareeListAdapter.addShares(publicShares);
|
||||
|
||||
ViewExtensionsKt.setVisibleIf(binding.sharesListExternalShowAll,
|
||||
externalShareeListAdapter.getShares().size() > 3
|
||||
);
|
||||
}
|
||||
|
||||
private void checkContactPermission() {
|
||||
@ -545,16 +616,6 @@ public class FileDetailSharingFragment extends Fragment implements ShareeListAda
|
||||
}
|
||||
}
|
||||
|
||||
private boolean containsNoNewPublicShare(List<OCShare> shares) {
|
||||
for (OCShare share : shares) {
|
||||
if (share.getShareType() == ShareType.NEW_PUBLIC_LINK) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSaveInstanceState(@NonNull Bundle outState) {
|
||||
super.onSaveInstanceState(outState);
|
||||
@ -598,7 +659,7 @@ public class FileDetailSharingFragment extends Fragment implements ShareeListAda
|
||||
@Override
|
||||
public void unShare(OCShare share) {
|
||||
unshareWith(share);
|
||||
ShareeListAdapter adapter = (ShareeListAdapter) binding.sharesList.getAdapter();
|
||||
ShareeListAdapter adapter = (ShareeListAdapter) binding.sharesListInternal.getAdapter();
|
||||
if (adapter == null) {
|
||||
DisplayUtils.showSnackMessage(getView(), getString(R.string.failed_update_ui));
|
||||
return;
|
||||
|
@ -54,7 +54,6 @@ public class FileDetailSharingMenuBottomSheetDialog extends BottomSheetDialog {
|
||||
|
||||
viewThemeUtils.platform.themeDialog(binding.getRoot());
|
||||
|
||||
viewThemeUtils.platform.colorImageView(binding.menuIconAddAnotherLink);
|
||||
viewThemeUtils.platform.colorImageView(binding.menuIconAdvancedPermissions);
|
||||
viewThemeUtils.platform.colorImageView(binding.menuIconSendLink);
|
||||
viewThemeUtils.platform.colorImageView(binding.menuIconUnshare);
|
||||
@ -72,19 +71,15 @@ public class FileDetailSharingMenuBottomSheetDialog extends BottomSheetDialog {
|
||||
|
||||
private void updateUI() {
|
||||
if (ocShare.getShareType() == ShareType.PUBLIC_LINK) {
|
||||
binding.menuShareAddAnotherLink.setVisibility(View.VISIBLE);
|
||||
|
||||
if (MDMConfig.INSTANCE.sendFilesSupport(getContext())) {
|
||||
binding.menuShareSendLink.setVisibility(View.VISIBLE);
|
||||
}
|
||||
} else {
|
||||
binding.menuShareAddAnotherLink.setVisibility(View.GONE);
|
||||
binding.menuShareSendLink.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
if (SharingMenuHelper.isSecureFileDrop(ocShare)) {
|
||||
binding.menuShareAdvancedPermissions.setVisibility(View.GONE);
|
||||
binding.menuShareAddAnotherLink.setVisibility(View.GONE);
|
||||
}
|
||||
}
|
||||
|
||||
@ -108,11 +103,6 @@ public class FileDetailSharingMenuBottomSheetDialog extends BottomSheetDialog {
|
||||
actions.sendLink(ocShare);
|
||||
dismiss();
|
||||
});
|
||||
|
||||
binding.menuShareAddAnotherLink.setOnClickListener(v -> {
|
||||
actions.addAnotherLink(ocShare);
|
||||
dismiss();
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -1,125 +1,193 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
<?xml version="1.0" encoding="utf-8"?><!--
|
||||
~ Nextcloud - Android Client
|
||||
~
|
||||
~ SPDX-FileCopyrightText: 2021 TSI-mc
|
||||
~ SPDX-FileCopyrightText: 2018 Andy Scherzinger <info@andy-scherzinger.de>
|
||||
~ SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
|
||||
-->
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
<androidx.core.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/shareContainer"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical"
|
||||
android:paddingTop="@dimen/standard_eight_padding">
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/search_container"
|
||||
android:id="@+id/shareContainer"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal"
|
||||
android:paddingStart="@dimen/standard_padding"
|
||||
android:paddingEnd="@dimen/zero">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/searchViewIcon"
|
||||
android:layout_width="@dimen/user_icon_size"
|
||||
android:layout_height="@dimen/user_icon_size"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:contentDescription="@string/avatar"
|
||||
android:padding="@dimen/standard_half_padding"
|
||||
android:src="@drawable/ic_search_grey" />
|
||||
|
||||
<androidx.appcompat.widget.SearchView
|
||||
android:id="@+id/searchView"
|
||||
style="@style/ownCloud.SearchView"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="@dimen/zero"
|
||||
android:layout_marginEnd="@dimen/standard_quarter_margin"
|
||||
android:layout_weight="1"
|
||||
android:hint="@string/share_search"
|
||||
app:searchIcon="@null" />
|
||||
|
||||
<androidx.appcompat.widget.AppCompatImageView
|
||||
android:id="@+id/pick_contact_email_btn"
|
||||
android:layout_width="@dimen/minimum_size_for_touchable_area"
|
||||
android:layout_height="@dimen/minimum_size_for_touchable_area"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginEnd="@dimen/standard_quarter_margin"
|
||||
android:contentDescription="@string/pick_contact_to_share_with"
|
||||
android:padding="12dp"
|
||||
android:src="@drawable/ic_contact_book" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/shared_with_you_container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="@dimen/standard_half_margin"
|
||||
android:orientation="horizontal"
|
||||
android:paddingLeft="@dimen/standard_padding"
|
||||
android:paddingTop="@dimen/standard_padding"
|
||||
android:paddingRight="@dimen/standard_padding">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/shared_with_you_avatar"
|
||||
android:layout_width="@dimen/user_icon_size"
|
||||
android:layout_height="@dimen/user_icon_size"
|
||||
android:contentDescription="@string/avatar"
|
||||
android:src="@drawable/ic_user" />
|
||||
android:orientation="vertical">
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/shared_with_you_container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
android:layout_marginBottom="@dimen/standard_half_margin"
|
||||
android:orientation="horizontal"
|
||||
android:paddingLeft="@dimen/standard_padding"
|
||||
android:paddingTop="@dimen/standard_half_padding"
|
||||
android:paddingTop="@dimen/standard_padding"
|
||||
android:paddingRight="@dimen/standard_padding">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/shared_with_you_username"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/shared_with_you_by"
|
||||
android:textSize="@dimen/two_line_primary_text_size" />
|
||||
<ImageView
|
||||
android:id="@+id/shared_with_you_avatar"
|
||||
android:layout_width="@dimen/user_icon_size"
|
||||
android:layout_height="@dimen/user_icon_size"
|
||||
android:contentDescription="@string/avatar"
|
||||
android:src="@drawable/ic_user" />
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/shared_with_you_note_container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="horizontal"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
android:paddingLeft="@dimen/standard_padding"
|
||||
android:paddingTop="@dimen/standard_half_padding"
|
||||
tools:ignore="UseCompoundDrawables">
|
||||
|
||||
<ImageView
|
||||
android:layout_width="16dp"
|
||||
android:layout_height="16dp"
|
||||
android:contentDescription="@string/note_icon_hint"
|
||||
android:src="@drawable/file_text" />
|
||||
android:paddingRight="@dimen/standard_padding">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/shared_with_you_note"
|
||||
android:layout_width="0dp"
|
||||
android:id="@+id/shared_with_you_username"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:paddingStart="@dimen/standard_half_padding"
|
||||
android:paddingEnd="@dimen/standard_half_padding"
|
||||
android:textSize="16sp" />
|
||||
android:text="@string/shared_with_you_by"
|
||||
android:textSize="@dimen/two_line_primary_text_size" />
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/shared_with_you_note_container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="horizontal"
|
||||
android:paddingTop="@dimen/standard_half_padding"
|
||||
tools:ignore="UseCompoundDrawables">
|
||||
|
||||
<ImageView
|
||||
android:layout_width="16dp"
|
||||
android:layout_height="16dp"
|
||||
android:contentDescription="@string/note_icon_hint"
|
||||
android:src="@drawable/file_text" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/shared_with_you_note"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:paddingStart="@dimen/standard_half_padding"
|
||||
android:paddingEnd="@dimen/standard_half_padding"
|
||||
android:textSize="16sp" />
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/search_container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal"
|
||||
android:paddingStart="@dimen/standard_padding"
|
||||
android:paddingEnd="@dimen/zero">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/searchViewIcon"
|
||||
android:layout_width="@dimen/user_icon_size"
|
||||
android:layout_height="@dimen/user_icon_size"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:contentDescription="@string/avatar"
|
||||
android:padding="@dimen/standard_half_padding"
|
||||
android:src="@drawable/ic_search_grey" />
|
||||
|
||||
<androidx.appcompat.widget.SearchView
|
||||
android:id="@+id/searchView"
|
||||
style="@style/ownCloud.SearchView"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="@dimen/zero"
|
||||
android:layout_marginEnd="@dimen/standard_quarter_margin"
|
||||
android:layout_weight="1"
|
||||
android:hint="@string/share_search"
|
||||
app:searchIcon="@null" />
|
||||
|
||||
<androidx.appcompat.widget.AppCompatImageView
|
||||
android:id="@+id/pick_contact_email_btn"
|
||||
android:layout_width="@dimen/minimum_size_for_touchable_area"
|
||||
android:layout_height="@dimen/minimum_size_for_touchable_area"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginEnd="@dimen/standard_quarter_margin"
|
||||
android:contentDescription="@string/pick_contact_to_share_with"
|
||||
android:padding="12dp"
|
||||
android:src="@drawable/ic_contact_book" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<TextView
|
||||
android:paddingStart="@dimen/standard_padding"
|
||||
android:paddingEnd="@dimen/zero"
|
||||
android:paddingTop="@dimen/standard_half_padding"
|
||||
android:paddingBottom="@dimen/standard_half_padding"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/internal_shares"
|
||||
android:textAppearance="?android:attr/textAppearanceMedium" />
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/sharesList_internal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:divider="@drawable/divider"
|
||||
android:dividerHeight="1dp"
|
||||
tools:listitem="@layout/file_details_share_link_share_item">
|
||||
|
||||
</androidx.recyclerview.widget.RecyclerView>
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/sharesList_internal_show_all"
|
||||
style="@style/Nextcloud.Material.TextButton"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/show_all" />
|
||||
|
||||
<View
|
||||
android:id="@+id/divider2"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1dp"
|
||||
android:background="?android:attr/listDivider" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/external_shares_headline"
|
||||
android:paddingStart="@dimen/standard_padding"
|
||||
android:paddingEnd="@dimen/zero"
|
||||
android:paddingTop="@dimen/standard_half_padding"
|
||||
android:paddingBottom="@dimen/standard_half_padding"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/external_shares"
|
||||
android:textAppearance="?android:attr/textAppearanceMedium" />
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/create_link"
|
||||
style="@style/Widget.Material3.Button.OutlinedButton"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="@dimen/standard_double_margin"
|
||||
android:layout_marginEnd="@dimen/standard_double_margin"
|
||||
app:icon="@drawable/file_link"
|
||||
app:iconGravity="textStart"
|
||||
android:text="@string/create_link" />
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/sharesList_external"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:divider="@drawable/divider"
|
||||
android:dividerHeight="1dp"
|
||||
tools:listitem="@layout/file_details_share_link_share_item">
|
||||
|
||||
</androidx.recyclerview.widget.RecyclerView>
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/sharesList_external_show_all"
|
||||
style="@style/Nextcloud.Material.TextButton"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/show_all" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/sharesList"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:divider="@drawable/divider"
|
||||
android:dividerHeight="1dp"
|
||||
tools:listitem="@layout/file_details_share_link_share_item" />
|
||||
|
||||
</LinearLayout>
|
||||
</androidx.core.widget.NestedScrollView>
|
||||
|
@ -147,38 +147,4 @@
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/menu_share_add_another_link"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/bottom_sheet_item_height"
|
||||
android:background="?android:attr/selectableItemBackground"
|
||||
android:orientation="horizontal"
|
||||
android:paddingLeft="@dimen/standard_padding"
|
||||
android:paddingTop="@dimen/standard_half_padding"
|
||||
android:paddingRight="@dimen/standard_padding"
|
||||
android:paddingBottom="@dimen/standard_half_padding"
|
||||
android:visibility="gone"
|
||||
tools:ignore="UseCompoundDrawables"
|
||||
tools:visibility="visible">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/menu_icon_add_another_link"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:contentDescription="@null"
|
||||
android:src="@drawable/ic_plus"
|
||||
app:tint="@color/primary" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginStart="@dimen/bottom_sheet_text_start_margin"
|
||||
android:text="@string/add_another_public_share_link"
|
||||
android:textColor="@color/text_color"
|
||||
android:textSize="@dimen/bottom_sheet_text_size" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
@ -7,7 +7,7 @@
|
||||
-->
|
||||
<resources>
|
||||
<!-- Beta indicator -->
|
||||
<bool name="is_beta">false</bool>
|
||||
<bool name="is_beta">true</bool>
|
||||
<bool name="dev_version_direct_download_enabled">false</bool>
|
||||
|
||||
<!-- App name and other strings-->
|
||||
|
@ -630,6 +630,7 @@
|
||||
<string name="share_via_link_unset_password">Unset</string>
|
||||
|
||||
<string name="share_search">Name, Federated Cloud ID or email address…</string>
|
||||
<string name="share_search_internal">Add users and teams</string>
|
||||
<string name="secure_share_search">Secure share…</string>
|
||||
|
||||
<string name="share_group_clarification">%1$s (group)</string>
|
||||
@ -1088,7 +1089,6 @@
|
||||
<string name="conflict_dialog_error">Conflict resolver dialog cannot be created</string>
|
||||
<string name="qr_could_not_be_read">QR code could not be read!</string>
|
||||
<string name="note_icon_hint">Note icon</string>
|
||||
<string name="add_another_public_share_link">Add another link</string>
|
||||
<string name="add_new_public_share">Add new public share link</string>
|
||||
<string name="public_share_name">New name</string>
|
||||
<string name="share_link_with_label">Share link (%1$s)</string>
|
||||
@ -1339,4 +1339,9 @@
|
||||
<string name="sign_tos_failed">Please manually check terms of service!</string>
|
||||
<string name="terms_of_service_title">Terms of service</string>
|
||||
<string name="terms_of_services_agree">I agree to the above ToS</string>
|
||||
<string name="show_all">Show all</string>
|
||||
<string name="show_less">Show less</string>
|
||||
<string name="internal_shares">Internal shares</string>
|
||||
<string name="external_shares">External shares</string>
|
||||
<string name="create_link">Create link</string>
|
||||
</resources>
|
||||
|
@ -10,6 +10,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.datamodel.SharesType
|
||||
import com.owncloud.android.lib.resources.shares.OCShare
|
||||
import com.owncloud.android.lib.resources.shares.ShareType
|
||||
import com.owncloud.android.ui.activity.FileActivity
|
||||
@ -74,7 +75,8 @@ class ShareeListAdapterTest {
|
||||
user.accountName,
|
||||
user,
|
||||
viewThemeUtils,
|
||||
false
|
||||
false,
|
||||
SharesType.INTERNAL
|
||||
)
|
||||
sut.sortShares()
|
||||
|
||||
|
@ -78,7 +78,7 @@ fi
|
||||
if [[ $4 = "all" ]]; then
|
||||
scripts/runAllScreenshotCombinations "noCI" "$1" "-Pandroid.testInstrumentationRunnerArguments.class=$class$method"
|
||||
else
|
||||
SHOT_TEST=true ./gradlew --offline gplayDebugExecuteScreenshotTests $record \
|
||||
SHOT_TEST=true ./gradlew gplayDebugExecuteScreenshotTests $record \
|
||||
-Dorg.gradle.jvmargs="--add-opens java.base/java.nio=ALL-UNNAMED --add-opens java.base/java.nio.channels=ALL-UNNAMED --add-exports java.base/sun.nio.ch=ALL-UNNAMED" \
|
||||
-Pscreenshot=true \
|
||||
-Pandroid.testInstrumentationRunnerArguments.annotation=com.owncloud.android.utils.ScreenshotTest \
|
||||
|