diff --git a/app/src/main/java/com/github/libretube/Constants.kt b/app/src/main/java/com/github/libretube/Constants.kt
index fa4085808..06a6e3d3a 100644
--- a/app/src/main/java/com/github/libretube/Constants.kt
+++ b/app/src/main/java/com/github/libretube/Constants.kt
@@ -13,6 +13,7 @@ const val DONATE_URL = "https://github.com/libre-tube/LibreTube#donate"
const val GITHUB_URL = "https://github.com/libre-tube/LibreTube"
const val PIPED_GITHUB_URL = "https://github.com/TeamPiped/Piped"
const val WEBLATE_URL = "https://hosted.weblate.org/projects/libretube/libretube/"
+const val LICENSE_URL = "https://gnu.org/"
/**
* Social media links for the community fragment
diff --git a/app/src/main/java/com/github/libretube/activities/AboutActivity.kt b/app/src/main/java/com/github/libretube/activities/AboutActivity.kt
index 6504f5c3d..0f686b483 100644
--- a/app/src/main/java/com/github/libretube/activities/AboutActivity.kt
+++ b/app/src/main/java/com/github/libretube/activities/AboutActivity.kt
@@ -1,5 +1,8 @@
package com.github.libretube.activities
+import android.content.ClipData
+import android.content.ClipboardManager
+import android.content.Context
import android.content.Intent
import android.net.Uri
import android.os.Build
@@ -7,14 +10,16 @@ import android.os.Bundle
import android.text.Html
import com.github.libretube.DONATE_URL
import com.github.libretube.GITHUB_URL
+import com.github.libretube.LICENSE_URL
import com.github.libretube.PIPED_GITHUB_URL
import com.github.libretube.R
import com.github.libretube.WEBLATE_URL
import com.github.libretube.WEBSITE_URL
import com.github.libretube.databinding.ActivityAboutBinding
import com.github.libretube.extensions.BaseActivity
-import com.github.libretube.extensions.showSnackBar
+import com.github.libretube.extensions.getStyledSnackBar
import com.google.android.material.dialog.MaterialAlertDialogBuilder
+import com.google.android.material.snackbar.Snackbar
class AboutActivity : BaseActivity() {
private lateinit var binding: ActivityAboutBinding
@@ -29,7 +34,7 @@ class AboutActivity : BaseActivity() {
openLinkFromHref(WEBSITE_URL)
}
binding.website.setOnLongClickListener {
- binding.root.showSnackBar(R.string.website_summary)
+ onLongClick(WEBSITE_URL)
true
}
@@ -37,7 +42,7 @@ class AboutActivity : BaseActivity() {
openLinkFromHref(PIPED_GITHUB_URL)
}
binding.piped.setOnLongClickListener {
- binding.root.showSnackBar(R.string.piped_summary)
+ onLongClick(PIPED_GITHUB_URL)
true
}
@@ -45,7 +50,7 @@ class AboutActivity : BaseActivity() {
openLinkFromHref(WEBLATE_URL)
}
binding.translate.setOnLongClickListener {
- binding.root.showSnackBar(R.string.translate_summary)
+ onLongClick(WEBLATE_URL)
true
}
@@ -53,7 +58,7 @@ class AboutActivity : BaseActivity() {
openLinkFromHref(DONATE_URL)
}
binding.donate.setOnLongClickListener {
- binding.root.showSnackBar(R.string.donate_summary)
+ onLongClick(DONATE_URL)
true
}
@@ -61,7 +66,7 @@ class AboutActivity : BaseActivity() {
openLinkFromHref(GITHUB_URL)
}
binding.github.setOnLongClickListener {
- binding.root.showSnackBar(R.string.contributing_summary)
+ onLongClick(GITHUB_URL)
true
}
@@ -69,7 +74,7 @@ class AboutActivity : BaseActivity() {
showLicense()
}
binding.license.setOnLongClickListener {
- binding.root.showSnackBar(R.string.license_summary)
+ onLongClick(LICENSE_URL)
true
}
}
@@ -80,6 +85,21 @@ class AboutActivity : BaseActivity() {
startActivity(intent)
}
+ private fun onLongClick(href: String) {
+ // copy the link to the clipboard
+ val clipboard: ClipboardManager =
+ getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
+ val clip = ClipData.newPlainText(getString(R.string.copied), href)
+ clipboard.setPrimaryClip(clip)
+ // show the snackBar with open action
+ val snackBar = binding.root.getStyledSnackBar(R.string.copied_to_clipboard)
+ snackBar.setAction(R.string.open_copied) {
+ openLinkFromHref(href)
+ }
+ snackBar.animationMode = Snackbar.ANIMATION_MODE_FADE
+ snackBar.show()
+ }
+
private fun showLicense() {
val licenseString = assets
?.open("gpl3.html")
diff --git a/app/src/main/java/com/github/libretube/activities/NoInternetActivity.kt b/app/src/main/java/com/github/libretube/activities/NoInternetActivity.kt
index 17cb13b97..60d9dcf56 100644
--- a/app/src/main/java/com/github/libretube/activities/NoInternetActivity.kt
+++ b/app/src/main/java/com/github/libretube/activities/NoInternetActivity.kt
@@ -5,7 +5,7 @@ import android.os.Bundle
import com.github.libretube.R
import com.github.libretube.databinding.ActivityNointernetBinding
import com.github.libretube.extensions.BaseActivity
-import com.github.libretube.extensions.showSnackBar
+import com.github.libretube.extensions.getStyledSnackBar
import com.github.libretube.util.NetworkHelper
import com.github.libretube.util.ThemeHelper
@@ -21,7 +21,7 @@ class NoInternetActivity : BaseActivity() {
if (NetworkHelper.isNetworkAvailable(this)) {
ThemeHelper.restartMainActivity(this)
} else {
- binding.root.showSnackBar(R.string.turnInternetOn)
+ binding.root.getStyledSnackBar(R.string.turnInternetOn).show()
}
}
binding.noInternetSettingsImageView.setOnClickListener {
diff --git a/app/src/main/java/com/github/libretube/extensions/ShowSnackBar.kt b/app/src/main/java/com/github/libretube/extensions/GetStyledSnackBar.kt
similarity index 90%
rename from app/src/main/java/com/github/libretube/extensions/ShowSnackBar.kt
rename to app/src/main/java/com/github/libretube/extensions/GetStyledSnackBar.kt
index 1fa11b86c..4ec13f654 100644
--- a/app/src/main/java/com/github/libretube/extensions/ShowSnackBar.kt
+++ b/app/src/main/java/com/github/libretube/extensions/GetStyledSnackBar.kt
@@ -5,7 +5,7 @@ import android.widget.FrameLayout
import com.github.libretube.R
import com.google.android.material.snackbar.Snackbar
-fun View.showSnackBar(text: Int) {
+fun View.getStyledSnackBar(text: Int): Snackbar {
val snackBar = Snackbar.make(this, text, Snackbar.LENGTH_SHORT)
snackBar.setTextMaxLines(3)
snackBar.animationMode = Snackbar.ANIMATION_MODE_SLIDE
@@ -22,5 +22,5 @@ fun View.showSnackBar(text: Int) {
snackBar.view.layoutParams = params
snackBar.view.background = resources.getDrawable(R.drawable.snackbar_shape, null)
- snackBar.show()
+ return snackBar
}
diff --git a/app/src/main/java/com/github/libretube/preferences/MainSettings.kt b/app/src/main/java/com/github/libretube/preferences/MainSettings.kt
index 20c0d5bfd..572ad7b01 100644
--- a/app/src/main/java/com/github/libretube/preferences/MainSettings.kt
+++ b/app/src/main/java/com/github/libretube/preferences/MainSettings.kt
@@ -7,7 +7,7 @@ import com.github.libretube.BuildConfig
import com.github.libretube.R
import com.github.libretube.activities.SettingsActivity
import com.github.libretube.dialogs.UpdateDialog
-import com.github.libretube.extensions.showSnackBar
+import com.github.libretube.extensions.getStyledSnackBar
import com.github.libretube.update.UpdateChecker
import com.github.libretube.util.NetworkHelper
import com.github.libretube.views.MaterialPreferenceFragment
@@ -87,14 +87,14 @@ class MainSettings : MaterialPreferenceFragment() {
update?.setOnPreferenceClickListener {
CoroutineScope(Dispatchers.IO).launch {
if (!NetworkHelper.isNetworkAvailable(requireContext())) {
- (activity as SettingsActivity).binding.root.showSnackBar(R.string.unknown_error)
+ (activity as SettingsActivity).binding.root.getStyledSnackBar(R.string.unknown_error).show()
return@launch
}
// check for update
val updateInfo = UpdateChecker.getLatestReleaseInfo()
if (updateInfo?.name == null) {
// request failed
- (activity as SettingsActivity).binding.root.showSnackBar(R.string.unknown_error)
+ (activity as SettingsActivity).binding.root.getStyledSnackBar(R.string.unknown_error).show()
} else if (BuildConfig.VERSION_NAME != updateInfo.name) {
// show the UpdateAvailableDialog if there's an update available
val updateAvailableDialog = UpdateDialog(updateInfo)
@@ -104,7 +104,7 @@ class MainSettings : MaterialPreferenceFragment() {
)
} else {
// otherwise show the no update available snackBar
- (activity as SettingsActivity).binding.root.showSnackBar(R.string.app_uptodate)
+ (activity as SettingsActivity).binding.root.getStyledSnackBar(R.string.app_uptodate).show()
}
}
true
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index cb567d137..81e7e90c3 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -315,4 +315,6 @@
Picture in Picture
Resize mode
Max image cache size
+ Copied to clipboard
+ Open