From 8817a8ab43bd5757f7e58d4234c40b90dface44a Mon Sep 17 00:00:00 2001 From: Bnyro Date: Mon, 15 Aug 2022 11:05:43 +0200 Subject: [PATCH] improve about snackbar --- .../java/com/github/libretube/Constants.kt | 1 + .../libretube/activities/AboutActivity.kt | 34 +++++++++++++++---- .../activities/NoInternetActivity.kt | 4 +-- .../{ShowSnackBar.kt => GetStyledSnackBar.kt} | 4 +-- .../libretube/preferences/MainSettings.kt | 8 ++--- app/src/main/res/values/strings.xml | 2 ++ 6 files changed, 38 insertions(+), 15 deletions(-) rename app/src/main/java/com/github/libretube/extensions/{ShowSnackBar.kt => GetStyledSnackBar.kt} (90%) 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