diff --git a/app/src/main/java/com/github/libretube/activities/MainActivity.kt b/app/src/main/java/com/github/libretube/activities/MainActivity.kt
index 66007f124..967ab1cfc 100644
--- a/app/src/main/java/com/github/libretube/activities/MainActivity.kt
+++ b/app/src/main/java/com/github/libretube/activities/MainActivity.kt
@@ -13,7 +13,6 @@ import android.os.Bundle
import android.os.Handler
import android.os.Looper
import android.util.Log
-import android.util.TypedValue
import android.view.View
import android.view.WindowInsets
import android.view.WindowInsetsController
@@ -24,7 +23,6 @@ import androidx.appcompat.app.AppCompatActivity
import androidx.constraintlayout.motion.widget.MotionLayout
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.os.bundleOf
-import androidx.core.text.HtmlCompat
import androidx.fragment.app.Fragment
import androidx.navigation.NavController
import androidx.navigation.findNavController
@@ -124,14 +122,7 @@ class MainActivity : AppCompatActivity() {
false
}
- val typedValue = TypedValue()
- this.theme.resolveAttribute(R.attr.colorPrimary, typedValue, true)
- val hexColor = String.format("#%06X", (0xFFFFFF and typedValue.data))
- val appName = HtmlCompat.fromHtml(
- "LibreTube",
- HtmlCompat.FROM_HTML_MODE_COMPACT
- )
- binding.toolbar.title = appName
+ binding.toolbar.title = ThemeHelper.getStyledAppName(this)
binding.toolbar.setNavigationOnClickListener {
// settings activity stuff
diff --git a/app/src/main/java/com/github/libretube/dialogs/AddtoPlaylistDialog.kt b/app/src/main/java/com/github/libretube/dialogs/AddtoPlaylistDialog.kt
index fb993a514..14ab1ef30 100644
--- a/app/src/main/java/com/github/libretube/dialogs/AddtoPlaylistDialog.kt
+++ b/app/src/main/java/com/github/libretube/dialogs/AddtoPlaylistDialog.kt
@@ -3,10 +3,8 @@ package com.github.libretube.dialogs
import android.app.Dialog
import android.os.Bundle
import android.util.Log
-import android.util.TypedValue
import android.widget.ArrayAdapter
import android.widget.Toast
-import androidx.core.text.HtmlCompat
import androidx.fragment.app.DialogFragment
import androidx.fragment.app.Fragment
import androidx.lifecycle.lifecycleScope
@@ -15,6 +13,7 @@ import com.github.libretube.databinding.DialogAddtoplaylistBinding
import com.github.libretube.obj.PlaylistId
import com.github.libretube.preferences.PreferenceHelper
import com.github.libretube.util.RetrofitInstance
+import com.github.libretube.util.ThemeHelper
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import retrofit2.HttpException
import java.io.IOException
@@ -37,14 +36,7 @@ class AddtoPlaylistDialog : DialogFragment() {
if (token != "") fetchPlaylists()
- val typedValue = TypedValue()
- this.requireActivity().theme.resolveAttribute(R.attr.colorPrimaryDark, typedValue, true)
- val hexColor = String.format("#%06X", (0xFFFFFF and typedValue.data))
- val appName = HtmlCompat.fromHtml(
- "LibreTube",
- HtmlCompat.FROM_HTML_MODE_COMPACT
- )
- binding.title.text = appName
+ binding.title.text = ThemeHelper.getStyledAppName(requireContext())
builder.setView(binding.root)
builder.create()
diff --git a/app/src/main/java/com/github/libretube/dialogs/CreatePlaylistDialog.kt b/app/src/main/java/com/github/libretube/dialogs/CreatePlaylistDialog.kt
index 3d58aa99f..fe316ed02 100644
--- a/app/src/main/java/com/github/libretube/dialogs/CreatePlaylistDialog.kt
+++ b/app/src/main/java/com/github/libretube/dialogs/CreatePlaylistDialog.kt
@@ -3,9 +3,7 @@ package com.github.libretube.dialogs
import android.app.Dialog
import android.os.Bundle
import android.util.Log
-import android.util.TypedValue
import android.widget.Toast
-import androidx.core.text.HtmlCompat
import androidx.fragment.app.DialogFragment
import androidx.lifecycle.lifecycleScope
import com.github.libretube.R
@@ -14,6 +12,7 @@ import com.github.libretube.fragments.LibraryFragment
import com.github.libretube.obj.Playlists
import com.github.libretube.preferences.PreferenceHelper
import com.github.libretube.util.RetrofitInstance
+import com.github.libretube.util.ThemeHelper
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import retrofit2.HttpException
import java.io.IOException
@@ -28,14 +27,7 @@ class CreatePlaylistDialog : DialogFragment() {
val builder = MaterialAlertDialogBuilder(it)
binding = DialogCreatePlaylistBinding.inflate(layoutInflater)
- val typedValue = TypedValue()
- this.requireActivity().theme.resolveAttribute(R.attr.colorPrimaryDark, typedValue, true)
- val hexColor = String.format("#%06X", (0xFFFFFF and typedValue.data))
- val appName = HtmlCompat.fromHtml(
- "LibreTube",
- HtmlCompat.FROM_HTML_MODE_COMPACT
- )
- binding.title.text = appName
+ binding.title.text = ThemeHelper.getStyledAppName(requireContext())
binding.cancelButton.setOnClickListener {
dismiss()
diff --git a/app/src/main/java/com/github/libretube/dialogs/CustomInstanceDialog.kt b/app/src/main/java/com/github/libretube/dialogs/CustomInstanceDialog.kt
index 2e6575532..07fd1f043 100644
--- a/app/src/main/java/com/github/libretube/dialogs/CustomInstanceDialog.kt
+++ b/app/src/main/java/com/github/libretube/dialogs/CustomInstanceDialog.kt
@@ -2,14 +2,13 @@ package com.github.libretube.dialogs
import android.app.Dialog
import android.os.Bundle
-import android.util.TypedValue
import android.widget.Toast
-import androidx.core.text.HtmlCompat
import androidx.fragment.app.DialogFragment
import com.github.libretube.R
import com.github.libretube.databinding.DialogCustomInstanceBinding
import com.github.libretube.obj.CustomInstance
import com.github.libretube.preferences.PreferenceHelper
+import com.github.libretube.util.ThemeHelper
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import java.net.URL
@@ -63,14 +62,7 @@ class CustomInstanceDialog : DialogFragment() {
}
}
- val typedValue = TypedValue()
- this.requireActivity().theme.resolveAttribute(R.attr.colorPrimaryDark, typedValue, true)
- val hexColor = String.format("#%06X", (0xFFFFFF and typedValue.data))
- val appName = HtmlCompat.fromHtml(
- "LibreTube",
- HtmlCompat.FROM_HTML_MODE_COMPACT
- )
- binding.title.text = appName
+ binding.title.text = ThemeHelper.getStyledAppName(requireContext())
builder.setView(binding.root)
builder.create()
diff --git a/app/src/main/java/com/github/libretube/dialogs/DeleteAccountDialog.kt b/app/src/main/java/com/github/libretube/dialogs/DeleteAccountDialog.kt
index dc97cd978..a04ec1af8 100644
--- a/app/src/main/java/com/github/libretube/dialogs/DeleteAccountDialog.kt
+++ b/app/src/main/java/com/github/libretube/dialogs/DeleteAccountDialog.kt
@@ -3,9 +3,7 @@ package com.github.libretube.dialogs
import android.app.Dialog
import android.os.Bundle
import android.util.Log
-import android.util.TypedValue
import android.widget.Toast
-import androidx.core.text.HtmlCompat
import androidx.fragment.app.DialogFragment
import androidx.lifecycle.lifecycleScope
import com.github.libretube.R
@@ -14,6 +12,7 @@ import com.github.libretube.databinding.DialogDeleteAccountBinding
import com.github.libretube.obj.DeleteUserRequest
import com.github.libretube.preferences.PreferenceHelper
import com.github.libretube.util.RetrofitInstance
+import com.github.libretube.util.ThemeHelper
import com.google.android.material.dialog.MaterialAlertDialogBuilder
class DeleteAccountDialog : DialogFragment() {
@@ -37,14 +36,7 @@ class DeleteAccountDialog : DialogFragment() {
}
}
- val typedValue = TypedValue()
- this.requireActivity().theme.resolveAttribute(R.attr.colorPrimaryDark, typedValue, true)
- val hexColor = String.format("#%06X", (0xFFFFFF and typedValue.data))
- val appName = HtmlCompat.fromHtml(
- "LibreTube",
- HtmlCompat.FROM_HTML_MODE_COMPACT
- )
- binding.title.text = appName
+ binding.title.text = ThemeHelper.getStyledAppName(requireContext())
builder.setView(binding.root)
builder.create()
diff --git a/app/src/main/java/com/github/libretube/dialogs/DownloadDialog.kt b/app/src/main/java/com/github/libretube/dialogs/DownloadDialog.kt
index 394ed4b6a..e7042b789 100644
--- a/app/src/main/java/com/github/libretube/dialogs/DownloadDialog.kt
+++ b/app/src/main/java/com/github/libretube/dialogs/DownloadDialog.kt
@@ -8,16 +8,15 @@ import android.os.Build
import android.os.Bundle
import android.os.Environment
import android.util.Log
-import android.util.TypedValue
import android.widget.ArrayAdapter
import androidx.core.app.ActivityCompat
-import androidx.core.text.HtmlCompat
import androidx.fragment.app.DialogFragment
import com.github.libretube.R
import com.github.libretube.activities.MainActivity
import com.github.libretube.databinding.DialogDownloadBinding
import com.github.libretube.obj.Streams
import com.github.libretube.services.DownloadService
+import com.github.libretube.util.ThemeHelper
import com.google.android.material.dialog.MaterialAlertDialogBuilder
class DownloadDialog : DialogFragment() {
@@ -130,14 +129,7 @@ class DownloadDialog : DialogFragment() {
dismiss()
}
- val typedValue = TypedValue()
- this.requireActivity().theme.resolveAttribute(R.attr.colorPrimaryDark, typedValue, true)
- val hexColor = String.format("#%06X", (0xFFFFFF and typedValue.data))
- val appName = HtmlCompat.fromHtml(
- "LibreTube",
- HtmlCompat.FROM_HTML_MODE_COMPACT
- )
- binding.title.text = appName
+ binding.title.text = ThemeHelper.getStyledAppName(requireContext())
builder.setView(binding.root)
builder.create()
diff --git a/app/src/main/java/com/github/libretube/dialogs/LoginDialog.kt b/app/src/main/java/com/github/libretube/dialogs/LoginDialog.kt
index ed86ccef6..ce75cde27 100644
--- a/app/src/main/java/com/github/libretube/dialogs/LoginDialog.kt
+++ b/app/src/main/java/com/github/libretube/dialogs/LoginDialog.kt
@@ -3,9 +3,7 @@ package com.github.libretube.dialogs
import android.app.Dialog
import android.os.Bundle
import android.util.Log
-import android.util.TypedValue
import android.widget.Toast
-import androidx.core.text.HtmlCompat
import androidx.fragment.app.DialogFragment
import androidx.lifecycle.lifecycleScope
import com.github.libretube.R
@@ -14,6 +12,7 @@ import com.github.libretube.databinding.DialogLoginBinding
import com.github.libretube.obj.Login
import com.github.libretube.preferences.PreferenceHelper
import com.github.libretube.util.RetrofitInstance
+import com.github.libretube.util.ThemeHelper
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import retrofit2.HttpException
import java.io.IOException
@@ -52,14 +51,7 @@ class LoginDialog : DialogFragment() {
}
}
- val typedValue = TypedValue()
- this.requireActivity().theme.resolveAttribute(R.attr.colorPrimaryDark, typedValue, true)
- val hexColor = String.format("#%06X", (0xFFFFFF and typedValue.data))
- val appName = HtmlCompat.fromHtml(
- "LibreTube",
- HtmlCompat.FROM_HTML_MODE_COMPACT
- )
- binding.title.text = appName
+ binding.title.text = ThemeHelper.getStyledAppName(requireContext())
builder.setView(binding.root)
builder.create()
diff --git a/app/src/main/java/com/github/libretube/dialogs/LogoutDialog.kt b/app/src/main/java/com/github/libretube/dialogs/LogoutDialog.kt
index 52584435a..b039f1a57 100644
--- a/app/src/main/java/com/github/libretube/dialogs/LogoutDialog.kt
+++ b/app/src/main/java/com/github/libretube/dialogs/LogoutDialog.kt
@@ -2,14 +2,13 @@ package com.github.libretube.dialogs
import android.app.Dialog
import android.os.Bundle
-import android.util.TypedValue
import android.widget.Toast
-import androidx.core.text.HtmlCompat
import androidx.fragment.app.DialogFragment
import com.github.libretube.R
import com.github.libretube.activities.requireMainActivityRestart
import com.github.libretube.databinding.DialogLogoutBinding
import com.github.libretube.preferences.PreferenceHelper
+import com.github.libretube.util.ThemeHelper
import com.google.android.material.dialog.MaterialAlertDialogBuilder
class LogoutDialog : DialogFragment() {
@@ -32,14 +31,7 @@ class LogoutDialog : DialogFragment() {
dialog?.dismiss()
}
- val typedValue = TypedValue()
- this.requireActivity().theme.resolveAttribute(R.attr.colorPrimaryDark, typedValue, true)
- val hexColor = String.format("#%06X", (0xFFFFFF and typedValue.data))
- val appName = HtmlCompat.fromHtml(
- "LibreTube",
- HtmlCompat.FROM_HTML_MODE_COMPACT
- )
- binding.title.text = appName
+ binding.title.text = ThemeHelper.getStyledAppName(requireContext())
builder.setView(binding.root)
builder.create()
diff --git a/app/src/main/java/com/github/libretube/preferences/AboutFragment.kt b/app/src/main/java/com/github/libretube/preferences/AboutFragment.kt
index 77483ce33..a881b4e6c 100644
--- a/app/src/main/java/com/github/libretube/preferences/AboutFragment.kt
+++ b/app/src/main/java/com/github/libretube/preferences/AboutFragment.kt
@@ -15,8 +15,10 @@ import com.github.libretube.databinding.FragmentAboutBinding
import com.github.libretube.util.DONATE_URL
import com.github.libretube.util.GITHUB_URL
import com.github.libretube.util.PIPED_GITHUB_URL
+import com.github.libretube.util.ThemeHelper.getThemeColor
import com.github.libretube.util.WEBSITE_URL
import com.google.android.material.dialog.MaterialAlertDialogBuilder
+import com.google.android.material.snackbar.Snackbar
class AboutFragment : Fragment() {
private lateinit var binding: FragmentAboutBinding
@@ -39,31 +41,46 @@ class AboutFragment : Fragment() {
binding.website.setOnClickListener {
openLinkFromHref(WEBSITE_URL)
}
+ binding.website.setOnLongClickListener {
+ val text = context?.getString(R.string.website_summary)!!
+ showSnackBar(text)
+ true
+ }
+
binding.piped.setOnClickListener {
openLinkFromHref(PIPED_GITHUB_URL)
}
+ binding.piped.setOnLongClickListener {
+ val text = context?.getString(R.string.piped_summary)!!
+ showSnackBar(text)
+ true
+ }
+
binding.donate.setOnClickListener {
openLinkFromHref(DONATE_URL)
}
+ binding.donate.setOnLongClickListener {
+ val text = context?.getString(R.string.donate_summary)!!
+ showSnackBar(text)
+ true
+ }
+
binding.github.setOnClickListener {
openLinkFromHref(GITHUB_URL)
}
- binding.license.setOnClickListener {
- val licenseString = view.context.assets
- .open("gpl3.html").bufferedReader().use {
- it.readText()
- }
- val licenseHtml = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
- Html.fromHtml(licenseString, 1)
- } else {
- Html.fromHtml(licenseString)
- }
+ binding.github.setOnLongClickListener {
+ val text = context?.getString(R.string.contributing_summary)!!
+ showSnackBar(text)
+ true
+ }
- MaterialAlertDialogBuilder(view.context!!)
- .setPositiveButton(getString(R.string.okay)) { _, _ -> }
- .setMessage(licenseHtml)
- .create()
- .show()
+ binding.license.setOnClickListener {
+ showLicense()
+ }
+ binding.license.setOnLongClickListener {
+ val text = context?.getString(R.string.license_summary)!!
+ showSnackBar(text)
+ true
}
}
@@ -72,4 +89,34 @@ class AboutFragment : Fragment() {
val intent = Intent(Intent.ACTION_VIEW).setData(uri)
startActivity(intent)
}
+
+ private fun showSnackBar(text: String) {
+ val snackBar = Snackbar
+ .make(binding.root, text, Snackbar.LENGTH_LONG)
+ snackBar.setBackgroundTint(getThemeColor(requireContext(), R.attr.colorSurface))
+ snackBar.setTextColor(getThemeColor(requireContext(), R.attr.colorPrimary))
+ snackBar.show()
+ }
+
+ private fun showLicense() {
+ val assets = view?.context?.assets
+ val licenseString = assets
+ ?.open("gpl3.html")
+ ?.bufferedReader()
+ .use {
+ it?.readText()
+ }
+
+ val licenseHtml = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
+ Html.fromHtml(licenseString.toString(), 1)
+ } else {
+ Html.fromHtml(licenseString.toString())
+ }
+
+ MaterialAlertDialogBuilder(requireContext())
+ .setPositiveButton(getString(R.string.okay)) { _, _ -> }
+ .setMessage(licenseHtml)
+ .create()
+ .show()
+ }
}
diff --git a/app/src/main/java/com/github/libretube/util/ThemeHelper.kt b/app/src/main/java/com/github/libretube/util/ThemeHelper.kt
index af3fd368b..4860b93d9 100644
--- a/app/src/main/java/com/github/libretube/util/ThemeHelper.kt
+++ b/app/src/main/java/com/github/libretube/util/ThemeHelper.kt
@@ -5,8 +5,11 @@ import android.content.ComponentName
import android.content.Context
import android.content.Intent
import android.content.pm.PackageManager
+import android.text.Spanned
+import android.util.TypedValue
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.app.AppCompatDelegate
+import androidx.core.text.HtmlCompat
import com.github.libretube.R
import com.github.libretube.preferences.PreferenceHelper
@@ -70,4 +73,19 @@ object ThemeHelper {
intent?.flags = Intent.FLAG_ACTIVITY_CLEAR_TASK
context.startActivity(intent)
}
+
+ fun getThemeColor(context: Context, colorCode: Int): Int {
+ val value = TypedValue()
+ context.theme.resolveAttribute(colorCode, value, true)
+ return value.data
+ }
+
+ fun getStyledAppName(context: Context): Spanned {
+ val colorPrimary = getThemeColor(context, R.attr.colorPrimaryDark)
+ val hexColor = String.format("#%06X", (0xFFFFFF and colorPrimary))
+ return HtmlCompat.fromHtml(
+ "LibreTube",
+ HtmlCompat.FROM_HTML_MODE_COMPACT
+ )
+ }
}
diff --git a/app/src/main/res/values/drawables.xml b/app/src/main/res/values/drawables.xml
new file mode 100644
index 000000000..8534441e6
--- /dev/null
+++ b/app/src/main/res/values/drawables.xml
@@ -0,0 +1,8 @@
+
+
+
+
+ @drawable/ic_play
+ @drawable/ic_pause
+
+
\ No newline at end of file