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