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.