diff --git a/app/src/main/java/fr/free/nrw/commons/media/MediaDetailPagerFragment.java b/app/src/main/java/fr/free/nrw/commons/media/MediaDetailPagerFragment.java
index 8f52b1ced..0de29a3bf 100644
--- a/app/src/main/java/fr/free/nrw/commons/media/MediaDetailPagerFragment.java
+++ b/app/src/main/java/fr/free/nrw/commons/media/MediaDetailPagerFragment.java
@@ -31,6 +31,7 @@ import com.google.android.material.snackbar.Snackbar;
import fr.free.nrw.commons.CommonsApplication;
import fr.free.nrw.commons.Media;
import fr.free.nrw.commons.R;
+import fr.free.nrw.commons.Utils;
import fr.free.nrw.commons.auth.SessionManager;
import fr.free.nrw.commons.bookmarks.models.Bookmark;
import fr.free.nrw.commons.bookmarks.pictures.BookmarkPicturesContentProvider;
@@ -211,6 +212,13 @@ public class MediaDetailPagerFragment extends CommonsDaggerSupportFragment imple
snackbar.show();
updateBookmarkState(item);
return true;
+ case R.id.menu_copy_link:
+ String uri = m.getPageTitle().getCanonicalUri();
+ Utils.copy("shareLink", uri, requireContext());
+ Timber.d("Copied share link to clipboard: %s", uri);
+ Toast.makeText(requireContext(), getString(R.string.menu_link_copied),
+ Toast.LENGTH_SHORT).show();
+ return true;
case R.id.menu_share_current_image:
Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.setType("text/plain");
@@ -390,6 +398,7 @@ public class MediaDetailPagerFragment extends CommonsDaggerSupportFragment imple
if (m != null) {
// Enable default set of actions, then re-enable different set of actions only if it is a failed contrib
menu.findItem(R.id.menu_browser_current_image).setEnabled(true).setVisible(true);
+ menu.findItem(R.id.menu_copy_link).setEnabled(true).setVisible(true);
menu.findItem(R.id.menu_share_current_image).setEnabled(true).setVisible(true);
menu.findItem(R.id.menu_download_current_image).setEnabled(true).setVisible(true);
menu.findItem(R.id.menu_bookmark_current_image).setEnabled(true).setVisible(true);
@@ -423,6 +432,8 @@ public class MediaDetailPagerFragment extends CommonsDaggerSupportFragment imple
case Contribution.STATE_QUEUED:
menu.findItem(R.id.menu_browser_current_image).setEnabled(false)
.setVisible(false);
+ menu.findItem(R.id.menu_copy_link).setEnabled(false)
+ .setVisible(false);
menu.findItem(R.id.menu_share_current_image).setEnabled(false)
.setVisible(false);
menu.findItem(R.id.menu_download_current_image).setEnabled(false)
@@ -440,6 +451,8 @@ public class MediaDetailPagerFragment extends CommonsDaggerSupportFragment imple
} else {
menu.findItem(R.id.menu_browser_current_image).setEnabled(false)
.setVisible(false);
+ menu.findItem(R.id.menu_copy_link).setEnabled(false)
+ .setVisible(false);
menu.findItem(R.id.menu_share_current_image).setEnabled(false)
.setVisible(false);
menu.findItem(R.id.menu_download_current_image).setEnabled(false)
diff --git a/app/src/main/res/drawable/menu_ic_copy_link_24dp.xml b/app/src/main/res/drawable/menu_ic_copy_link_24dp.xml
new file mode 100644
index 000000000..ab6cb4a96
--- /dev/null
+++ b/app/src/main/res/drawable/menu_ic_copy_link_24dp.xml
@@ -0,0 +1,7 @@
+
+
+
diff --git a/app/src/main/res/menu/fragment_image_detail.xml b/app/src/main/res/menu/fragment_image_detail.xml
index 7ab77b686..b4239ef9d 100644
--- a/app/src/main/res/menu/fragment_image_detail.xml
+++ b/app/src/main/res/menu/fragment_image_detail.xml
@@ -7,6 +7,11 @@
android:icon="@drawable/menu_ic_round_star_border_24px"
android:title="@string/menu_bookmark"
app:showAsAction="always" />
+
- 从图库
拍照
我的上传
+ 复制链接
+ 链接已复制到剪贴板
分享
在浏览器中查看
标题
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 6b5829359..4bf76c405 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -99,6 +99,8 @@
Take photo
Nearby
My uploads
+ Copy link
+ The link has been copied to the clipboard
Share
View file page
Caption (Required)