diff --git a/screenshots/gplay/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testEnforcedPasswordDialog.png b/screenshots/gplay/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testEnforcedPasswordDialog.png
new file mode 100644
index 0000000000..a12ea9f52e
Binary files /dev/null and b/screenshots/gplay/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testEnforcedPasswordDialog.png differ
diff --git a/screenshots/gplay/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testOptionalPasswordDialog.png b/screenshots/gplay/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testOptionalPasswordDialog.png
new file mode 100644
index 0000000000..b6faaba8fe
Binary files /dev/null and b/screenshots/gplay/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testOptionalPasswordDialog.png differ
diff --git a/src/androidTest/java/com/owncloud/android/ui/dialog/DialogFragmentIT.java b/src/androidTest/java/com/owncloud/android/ui/dialog/DialogFragmentIT.java
index f79c71384d..68ed246d1a 100644
--- a/src/androidTest/java/com/owncloud/android/ui/dialog/DialogFragmentIT.java
+++ b/src/androidTest/java/com/owncloud/android/ui/dialog/DialogFragmentIT.java
@@ -136,6 +136,26 @@ public class DialogFragmentIT extends AbstractIT {
showDialog(sut);
}
+ @Test
+ @ScreenshotTest
+ public void testEnforcedPasswordDialog() {
+ if (Looper.myLooper() == null) {
+ Looper.prepare();
+ }
+ SharePasswordDialogFragment sut = SharePasswordDialogFragment.newInstance(new OCFile("/"), true, false);
+ showDialog(sut);
+ }
+
+ @Test
+ @ScreenshotTest
+ public void testOptionalPasswordDialog() {
+ if (Looper.myLooper() == null) {
+ Looper.prepare();
+ }
+ SharePasswordDialogFragment sut = SharePasswordDialogFragment.newInstance(new OCFile("/"), true, true);
+ showDialog(sut);
+ }
+
@Test
@ScreenshotTest
public void testAccountChooserDialog() throws AccountUtils.AccountNotFoundException {
diff --git a/src/main/java/com/owncloud/android/ui/dialog/SendShareDialog.java b/src/main/java/com/owncloud/android/ui/dialog/SendShareDialog.java
index aac91af25b..f6f62c5b34 100644
--- a/src/main/java/com/owncloud/android/ui/dialog/SendShareDialog.java
+++ b/src/main/java/com/owncloud/android/ui/dialog/SendShareDialog.java
@@ -175,7 +175,7 @@ public class SendShareDialog extends BottomSheetDialogFragment {
private void shareByLink() {
if (file.isSharedViaLink()) {
((FileActivity) getActivity()).getFileOperationsHelper().getFileWithLink(file);
- } else if (sharingPublicPasswordEnforced) {
+ } else if (sharingPublicPasswordEnforced || sharingPublicAskForPassword) {
// password enforced by server, request to the user before trying to create
requestPasswordForShareViaLink();
} else {
diff --git a/src/main/java/com/owncloud/android/ui/dialog/SharePasswordDialogFragment.java b/src/main/java/com/owncloud/android/ui/dialog/SharePasswordDialogFragment.java
index 2d46a9db5f..b362f7ac16 100644
--- a/src/main/java/com/owncloud/android/ui/dialog/SharePasswordDialogFragment.java
+++ b/src/main/java/com/owncloud/android/ui/dialog/SharePasswordDialogFragment.java
@@ -72,6 +72,23 @@ public class SharePasswordDialogFragment extends DialogFragment implements Dialo
alertDialog.getButton(AlertDialog.BUTTON_NEGATIVE));
ThemeButtonUtils.themeBorderlessButton(getResources().getColor(R.color.highlight_textColor_Warning),
alertDialog.getButton(AlertDialog.BUTTON_NEUTRAL));
+
+ alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(v -> {
+ String password = binding.sharePassword.getText().toString();
+
+ if (!askForPassword && TextUtils.isEmpty(password)) {
+ DisplayUtils.showSnackMessage(binding.getRoot(), R.string.share_link_empty_password);
+ return;
+ }
+
+ if (share == null) {
+ setPassword(createShare, file, password);
+ } else {
+ setPassword(share, password);
+ }
+
+ alertDialog.dismiss();
+ });
}
}
@@ -143,19 +160,22 @@ public class SharePasswordDialogFragment extends DialogFragment implements Dialo
ThemeColorUtils.primaryColor(getActivity()));
binding.sharePassword.requestFocus();
+ int negativeButtonCaption;
int title;
if (askForPassword) {
title = R.string.share_link_optional_password_title;
+ negativeButtonCaption = R.string.common_skip;
} else {
title = R.string.share_link_password_title;
+ negativeButtonCaption = R.string.common_cancel;
}
// Build the dialog
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setView(view)
- .setPositiveButton(R.string.common_ok, this)
- .setNegativeButton(R.string.common_cancel, this)
+ .setPositiveButton(R.string.common_ok, null)
+ .setNegativeButton(negativeButtonCaption, this)
.setNeutralButton(R.string.common_delete, this)
.setTitle(title);
Dialog d = builder.create();
@@ -170,20 +190,7 @@ public class SharePasswordDialogFragment extends DialogFragment implements Dialo
@Override
public void onClick(DialogInterface dialog, int which) {
- if (which == AlertDialog.BUTTON_POSITIVE) {
- String password = binding.sharePassword.getText().toString();
-
- if (!askForPassword && TextUtils.isEmpty(password)) {
- DisplayUtils.showSnackMessage(binding.getRoot(), R.string.share_link_empty_password);
- return;
- }
-
- if (share == null) {
- setPassword(createShare, file, password);
- } else {
- setPassword(share, password);
- }
- } else if (which == AlertDialog.BUTTON_NEUTRAL) {
+ if (which == AlertDialog.BUTTON_NEUTRAL) {
if (share == null) {
setPassword(createShare, file, null);
} else {
diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml
index 83a8ba7d03..cd91cb0e2b 100644
--- a/src/main/res/values/strings.xml
+++ b/src/main/res/values/strings.xml
@@ -126,6 +126,7 @@
Delete
Send
Share
+ Skip
About
Remove account
Remove account %s and delete all local files?\n\nDeletion cannot be undone.