Merge branch 'master' into theming

This commit is contained in:
Bnyro 2022-05-20 13:51:14 +02:00 committed by GitHub
commit 9e66b0353d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
26 changed files with 308 additions and 68 deletions

View File

@ -12,7 +12,7 @@ jobs:
- name: ktlint - name: ktlint
uses: ScaCap/action-ktlint@1.3 uses: ScaCap/action-ktlint@1.3
with: with:
github_token: ${{ secrets.github_token }} github_token: ${{ secrets.ACCESS_TOKEN }}
reporter: github-pr-review reporter: github-pr-review
android: true android: true
fail_on_error: true fail_on_error: true

View File

@ -8,7 +8,7 @@
[![Matrix](https://img.shields.io/matrix/LibreTube:matrix.org)](https://matrix.to/#/#LibreTube:matrix.org) [![Matrix](https://img.shields.io/matrix/LibreTube:matrix.org)](https://matrix.to/#/#LibreTube:matrix.org)
[![Telegram](https://img.shields.io/endpoint?color=neon&style=flat-square&url=https://tg.sumanjay.workers.dev/libretube)](https://t.me/libretube) [![Telegram](https://img.shields.io/endpoint?color=neon&style=flat-square&url=https://tg.sumanjay.workers.dev/libretube)](https://t.me/libretube)
[![Twitter](https://img.shields.io/twitter/follow/libretube?style=social)](https://twitter.com/libretube) [![Twitter](https://img.shields.io/twitter/follow/libretube?style=social)](https://twitter.com/libretube)
[![Reddit](https://img.shields.io/reddit/subreddit-subscribers/libretube?style=social)](https://www.reddit.com/r/Libretube/)
[<img src="https://fdroid.gitlab.io/artwork/badge/get-it-on.png" alt="Get it on F-Droid" height="80">](https://f-droid.org/en/packages/com.github.libretube/) [<img src="https://fdroid.gitlab.io/artwork/badge/get-it-on.png" alt="Get it on F-Droid" height="80">](https://f-droid.org/en/packages/com.github.libretube/)
[<img src="https://github.com/machiav3lli/oandbackupx/blob/034b226cea5c1b30eb4f6a6f313e4dadcbb0ece4/badge_github.png" alt="Get it on GitHub" height="80">](https://github.com/libre-tube/LibreTube/releases/latest) [<img src="https://github.com/machiav3lli/oandbackupx/blob/034b226cea5c1b30eb4f6a6f313e4dadcbb0ece4/badge_github.png" alt="Get it on GitHub" height="80">](https://github.com/libre-tube/LibreTube/releases/latest)

View File

@ -4,13 +4,17 @@ import android.app.Dialog
import android.content.Context import android.content.Context
import android.os.Bundle import android.os.Bundle
import android.util.Log import android.util.Log
import android.util.TypedValue
import android.view.View import android.view.View
import android.widget.* import android.widget.*
import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AlertDialog
import androidx.core.text.HtmlCompat
import androidx.fragment.app.DialogFragment import androidx.fragment.app.DialogFragment
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import com.github.libretube.obj.PlaylistId import com.github.libretube.obj.PlaylistId
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import retrofit2.HttpException
import java.io.IOException import java.io.IOException
import retrofit2.HttpException import retrofit2.HttpException
@ -23,7 +27,7 @@ class AddtoPlaylistDialog : DialogFragment() {
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
return activity?.let { return activity?.let {
videoId = arguments?.getString("videoId")!! videoId = arguments?.getString("videoId")!!
val builder = AlertDialog.Builder(it) val builder = MaterialAlertDialogBuilder(it)
// Get the layout inflater // Get the layout inflater
val inflater = requireActivity().layoutInflater val inflater = requireActivity().layoutInflater
val sharedPref = context?.getSharedPreferences("token", Context.MODE_PRIVATE) val sharedPref = context?.getSharedPreferences("token", Context.MODE_PRIVATE)
@ -34,6 +38,15 @@ class AddtoPlaylistDialog : DialogFragment() {
if (token != "") { if (token != "") {
fetchPlaylists() 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(
"Libre<span style='color:$hexColor';>Tube</span>",
HtmlCompat.FROM_HTML_MODE_COMPACT
)
view.findViewById<TextView>(R.id.title).text = appName
builder.setView(view) builder.setView(view)
builder.create() builder.create()
} ?: throw IllegalStateException("Activity cannot be null") } ?: throw IllegalStateException("Activity cannot be null")

View File

@ -1,12 +1,15 @@
package com.github.libretube package com.github.libretube
import android.os.Bundle import android.os.Bundle
import android.util.TypedValue
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.Button import android.widget.Button
import android.widget.TextView
import android.widget.Toast import android.widget.Toast
import androidx.core.os.bundleOf import androidx.core.os.bundleOf
import androidx.core.text.HtmlCompat
import androidx.fragment.app.DialogFragment import androidx.fragment.app.DialogFragment
import androidx.fragment.app.setFragmentResult import androidx.fragment.app.setFragmentResult
@ -18,6 +21,15 @@ class CreatePlaylistDialog : DialogFragment() {
): View? { ): View? {
var rootView: View = inflater.inflate(R.layout.dialog_create_playlist, container, false) var rootView: View = inflater.inflate(R.layout.dialog_create_playlist, container, false)
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(
"Libre<span style='color:$hexColor';>Tube</span>",
HtmlCompat.FROM_HTML_MODE_COMPACT
)
rootView.findViewById<TextView>(R.id.title).text = appName
val cancelBtn = rootView.findViewById<Button>(R.id.cancel_button) val cancelBtn = rootView.findViewById<Button>(R.id.cancel_button)
cancelBtn.setOnClickListener { cancelBtn.setOnClickListener {
dismiss() dismiss()

View File

@ -4,10 +4,13 @@ import android.app.Dialog
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.util.Log import android.util.Log
import android.util.TypedValue
import android.view.View import android.view.View
import android.widget.* import android.widget.*
import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AlertDialog
import androidx.core.text.HtmlCompat
import androidx.fragment.app.DialogFragment import androidx.fragment.app.DialogFragment
import com.google.android.material.dialog.MaterialAlertDialogBuilder
class DownloadDialog : DialogFragment() { class DownloadDialog : DialogFragment() {
private val TAG = "DownloadDialog" private val TAG = "DownloadDialog"
@ -28,7 +31,7 @@ class DownloadDialog : DialogFragment() {
audioUrl = arguments?.getStringArrayList("audioUrl") as ArrayList<String> audioUrl = arguments?.getStringArrayList("audioUrl") as ArrayList<String>
duration = arguments?.getInt("duration")!! duration = arguments?.getInt("duration")!!
videoId = arguments?.getString("videoId")!! videoId = arguments?.getString("videoId")!!
val builder = AlertDialog.Builder(it) val builder = MaterialAlertDialogBuilder(it)
// Get the layout inflater // Get the layout inflater
val inflater = requireActivity().layoutInflater val inflater = requireActivity().layoutInflater
var view: View = inflater.inflate(R.layout.dialog_download, null) var view: View = inflater.inflate(R.layout.dialog_download, null)
@ -81,6 +84,16 @@ class DownloadDialog : DialogFragment() {
context?.startService(intent) context?.startService(intent)
dismiss() 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(
"Libre<span style='color:$hexColor';>Tube</span>",
HtmlCompat.FROM_HTML_MODE_COMPACT
)
view.findViewById<TextView>(R.id.title).text = appName
builder.setView(view) builder.setView(view)
builder.create() builder.create()
} ?: throw IllegalStateException("Activity cannot be null") } ?: throw IllegalStateException("Activity cannot be null")

View File

@ -4,15 +4,20 @@ import android.app.Dialog
import android.content.Context import android.content.Context
import android.os.Bundle import android.os.Bundle
import android.util.Log import android.util.Log
import android.util.TypedValue
import android.view.View import android.view.View
import android.widget.Button import android.widget.Button
import android.widget.EditText import android.widget.EditText
import android.widget.TextView import android.widget.TextView
import android.widget.Toast import android.widget.Toast
import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AlertDialog
import androidx.core.text.HtmlCompat
import androidx.fragment.app.DialogFragment import androidx.fragment.app.DialogFragment
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import com.github.libretube.obj.Login import com.github.libretube.obj.Login
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import org.w3c.dom.Text
import retrofit2.HttpException
import java.io.IOException import java.io.IOException
import java.lang.Exception import java.lang.Exception
import retrofit2.HttpException import retrofit2.HttpException
@ -23,7 +28,7 @@ class LoginDialog : DialogFragment() {
lateinit var password: EditText lateinit var password: EditText
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
return activity?.let { return activity?.let {
val builder = AlertDialog.Builder(it) val builder = MaterialAlertDialogBuilder(it)
// Get the layout inflater // Get the layout inflater
val inflater = requireActivity().layoutInflater val inflater = requireActivity().layoutInflater
val sharedPref = context?.getSharedPreferences("token", Context.MODE_PRIVATE) val sharedPref = context?.getSharedPreferences("token", Context.MODE_PRIVATE)
@ -65,6 +70,17 @@ 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(
"Libre<span style='color:$hexColor';>Tube</span>",
HtmlCompat.FROM_HTML_MODE_COMPACT
)
view.findViewById<TextView>(R.id.title).text = appName
builder.setView(view) builder.setView(view)
builder.create() builder.create()
} ?: throw IllegalStateException("Activity cannot be null") } ?: throw IllegalStateException("Activity cannot be null")

View File

@ -1,11 +1,17 @@
package com.github.libretube package com.github.libretube
import android.app.Activity import android.app.Activity
import android.content.Context
import android.content.DialogInterface
import android.content.Intent
import com.google.android.material.color.DynamicColors
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle import android.os.Bundle
class Player : Activity() { class Player : Activity() {
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
DynamicColors.applyToActivityIfAvailable(this)
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setContentView(R.layout.activity_player) setContentView(R.layout.activity_player)
} }

View File

@ -24,6 +24,7 @@ import androidx.recyclerview.widget.RecyclerView
import com.github.libretube.adapters.SearchAdapter import com.github.libretube.adapters.SearchAdapter
import com.github.libretube.adapters.SearchHistoryAdapter import com.github.libretube.adapters.SearchHistoryAdapter
import java.io.IOException import java.io.IOException
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.delay import kotlinx.coroutines.delay
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
@ -77,7 +78,7 @@ class SearchFragment : Fragment() {
getString(R.string.music_playlists) getString(R.string.music_playlists)
) )
AlertDialog.Builder(view.context) MaterialAlertDialogBuilder(view.context)
.setTitle(getString(R.string.choose_filter)) .setTitle(getString(R.string.choose_filter))
.setSingleChoiceItems( .setSingleChoiceItems(
filterOptions, selectedFilter, filterOptions, selectedFilter,

View File

@ -18,12 +18,12 @@ import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.ActivityCompat import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import com.google.android.material.color.DynamicColors
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.preference.ListPreference import androidx.preference.ListPreference
import androidx.preference.Preference import androidx.preference.Preference
import androidx.preference.PreferenceFragmentCompat import androidx.preference.PreferenceFragmentCompat
import androidx.preference.PreferenceManager import androidx.preference.PreferenceManager
import com.google.android.material.color.DynamicColors
import java.io.IOException import java.io.IOException
import java.io.InputStream import java.io.InputStream
import java.util.zip.ZipEntry import java.util.zip.ZipEntry
@ -154,6 +154,8 @@ class SettingsActivity :
val login = findPreference<Preference>("login_register") val login = findPreference<Preference>("login_register")
login?.setOnPreferenceClickListener { login?.setOnPreferenceClickListener {
val newFragment = LoginDialog() val newFragment = LoginDialog()
newFragment.show(childFragmentManager, "Login") newFragment.show(childFragmentManager, "Login")
true true
@ -357,4 +359,5 @@ class SettingsActivity :
intent = Intent(this, MainActivity::class.java) intent = Intent(this, MainActivity::class.java)
startActivity(intent) startActivity(intent)
} }
} }

View File

@ -1,10 +1,11 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android" <vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp" android:height="24dp"
android:viewportWidth="24" android:viewportWidth="48"
android:viewportHeight="24" android:width="24dp"
android:viewportHeight="48"
android:tint="?attr/colorControlNormal"> android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white" <path
android:pathData="M10,20v-6h4v6h5v-8h3L12,3 2,12h3v8z"/> android:fillColor="#FF000000"
android:pathData="M11,42Q9.75,42 8.875,41.125Q8,40.25 8,39V19.5Q8,18.8 8.325,18.15Q8.65,17.5 9.2,17.1L22.2,7.35Q22.6,7.05 23.05,6.9Q23.5,6.75 24,6.75Q24.5,6.75 24.95,6.9Q25.4,7.05 25.8,7.35L38.8,17.1Q39.35,17.5 39.675,18.15Q40,18.8 40,19.5V39Q40,40.25 39.125,41.125Q38.25,42 37,42H28V28H20V42Z" />
</vector> </vector>

View File

@ -1,10 +1,11 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android" <vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp" android:height="24dp"
android:viewportWidth="24" android:viewportWidth="48"
android:viewportHeight="24" android:width="24dp"
android:viewportHeight="48"
android:tint="?attr/colorControlNormal"> android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white" <path
android:pathData="M4,6L2,6v14c0,1.1 0.9,2 2,2h14v-2L4,20L4,6zM20,2L8,2c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h12c1.1,0 2,-0.9 2,-2L22,4c0,-1.1 -0.9,-2 -2,-2zM12,14.5v-9l6,4.5 -6,4.5z"/> android:fillColor="#FF000000"
android:pathData="M23.5,27.85 L32.25,22.25Q32.95,21.8 32.95,21Q32.95,20.2 32.25,19.75L23.5,14.15Q22.75,13.65 21.975,14.075Q21.2,14.5 21.2,15.4V26.6Q21.2,27.5 21.975,27.925Q22.75,28.35 23.5,27.85ZM13,38Q11.8,38 10.9,37.1Q10,36.2 10,35V7Q10,5.8 10.9,4.9Q11.8,4 13,4H41Q42.2,4 43.1,4.9Q44,5.8 44,7V35Q44,36.2 43.1,37.1Q42.2,38 41,38ZM7,44Q5.8,44 4.9,43.1Q4,42.2 4,41V11.5Q4,10.85 4.425,10.425Q4.85,10 5.5,10Q6.15,10 6.575,10.425Q7,10.85 7,11.5V41Q7,41 7,41Q7,41 7,41H36.5Q37.15,41 37.575,41.425Q38,41.85 38,42.5Q38,43.15 37.575,43.575Q37.15,44 36.5,44Z" />
</vector> </vector>

View File

@ -1,10 +1,11 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android" <vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp" android:height="24dp"
android:viewportWidth="24" android:viewportWidth="48"
android:viewportHeight="24" android:width="24dp"
android:viewportHeight="48"
android:tint="?attr/colorControlNormal"> android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white" <path
android:pathData="M20,8L4,8L4,6h16v2zM18,2L6,2v2h12L18,2zM22,12v8c0,1.1 -0.9,2 -2,2L4,22c-1.1,0 -2,-0.9 -2,-2v-8c0,-1.1 0.9,-2 2,-2h16c1.1,0 2,0.9 2,2zM16,16l-6,-3.27v6.53L16,16z"/> android:fillColor="#FF000000"
android:pathData="M15.5,7Q14.85,7 14.425,6.575Q14,6.15 14,5.5Q14,4.85 14.425,4.425Q14.85,4 15.5,4H32.5Q33.15,4 33.575,4.425Q34,4.85 34,5.5Q34,6.15 33.575,6.575Q33.15,7 32.5,7ZM8.95,13Q8.3,13 7.875,12.575Q7.45,12.15 7.45,11.5Q7.45,10.85 7.875,10.425Q8.3,10 8.95,10H39.05Q39.7,10 40.125,10.425Q40.55,10.85 40.55,11.5Q40.55,12.15 40.125,12.575Q39.7,13 39.05,13ZM7,44Q5.8,44 4.9,43.1Q4,42.2 4,41V19Q4,17.8 4.9,16.9Q5.8,16 7,16H41Q42.2,16 43.1,16.9Q44,17.8 44,19V41Q44,42.2 43.1,43.1Q42.2,44 41,44ZM22.7,35.85 L29.55,31.25Q30.25,30.8 30.25,30Q30.25,29.2 29.55,28.75L22.7,24.15Q21.95,23.65 21.15,24.075Q20.35,24.5 20.35,25.4V34.65Q20.35,35.55 21.15,35.975Q21.95,36.4 22.7,35.85Z" />
</vector> </vector>

View File

@ -7,13 +7,17 @@
> >
<ImageView
android:src="@drawable/ic_libretube_foreground" <TextView
android:id="@+id/title"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="64dp" android:layout_height="wrap_content"
android:scaleType="center" android:text="@string/app_name"
android:background="#CD5757" android:gravity="center"
android:contentDescription="@string/app_name" /> android:layout_margin="10dp"
android:textSize="20sp"
/>
<Spinner <Spinner
android:id="@+id/playlists_spinner" android:id="@+id/playlists_spinner"
android:layout_width="match_parent" android:layout_width="match_parent"

View File

@ -7,13 +7,16 @@
> >
<ImageView
android:layout_width="300dp" <TextView
android:layout_height="64dp" android:id="@+id/title"
android:background="#CD5757" android:layout_width="match_parent"
android:contentDescription="@string/app_name" android:layout_height="wrap_content"
android:scaleType="center" android:text="@string/app_name"
android:src="@drawable/ic_libretube_foreground" /> android:gravity="center"
android:layout_margin="10dp"
android:textSize="20sp"
/>
<com.google.android.material.textfield.TextInputLayout <com.google.android.material.textfield.TextInputLayout
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox" style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"

View File

@ -6,13 +6,15 @@
> >
<ImageView <TextView
android:src="@drawable/ic_libretube_foreground" android:id="@+id/title"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="64dp" android:layout_height="wrap_content"
android:scaleType="center" android:text="@string/app_name"
android:background="#CD5757" android:gravity="center"
android:contentDescription="@string/app_name" /> android:layout_margin="10dp"
android:textSize="20sp"
/>
<Spinner <Spinner
android:id="@+id/video_spinner" android:id="@+id/video_spinner"

View File

@ -7,13 +7,17 @@
> >
<ImageView
android:src="@drawable/ic_libretube_foreground"
<TextView
android:id="@+id/title"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="64dp" android:layout_height="wrap_content"
android:scaleType="center" android:text="@string/app_name"
android:background="#CD5757" android:gravity="center"
android:contentDescription="@string/app_name" /> android:layout_margin="10dp"
android:textSize="20sp"
/>
<com.google.android.material.textfield.TextInputLayout <com.google.android.material.textfield.TextInputLayout
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox" style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
@ -24,6 +28,11 @@
android:layout_marginLeft="7dp" android:layout_marginLeft="7dp"
android:layout_marginRight="7dp" android:layout_marginRight="7dp"
android:layout_marginBottom="4dp" android:layout_marginBottom="4dp"
app:boxCornerRadiusBottomStart="15dp"
app:boxCornerRadiusBottomEnd="15dp"
app:boxCornerRadiusTopEnd="15dp"
app:boxCornerRadiusTopStart="15dp"
> >
<com.google.android.material.textfield.TextInputEditText <com.google.android.material.textfield.TextInputEditText
@ -44,6 +53,12 @@
android:layout_marginLeft="7dp" android:layout_marginLeft="7dp"
android:layout_marginRight="7dp" android:layout_marginRight="7dp"
android:layout_marginBottom="4dp" android:layout_marginBottom="4dp"
app:boxCornerRadiusBottomStart="15dp"
app:boxCornerRadiusBottomEnd="15dp"
app:boxCornerRadiusTopEnd="15dp"
app:boxCornerRadiusTopStart="15dp"
> >
<com.google.android.material.textfield.TextInputEditText <com.google.android.material.textfield.TextInputEditText

View File

@ -3,13 +3,16 @@
android:orientation="vertical" android:orientation="vertical"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content"> android:layout_height="wrap_content">
<ImageView
android:src="@drawable/ic_libretube_foreground" <TextView
android:id="@+id/title"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="64dp" android:layout_height="wrap_content"
android:scaleType="center" android:text="@string/app_name"
android:background="#CD5757" android:gravity="center"
android:contentDescription="@string/app_name" /> android:layout_margin="10dp"
android:textSize="20sp"
/>
<TextView <TextView
android:id="@+id/user" android:id="@+id/user"

View File

@ -72,4 +72,15 @@
<string name="videoCount">%1$sفيديوهات</string> <string name="videoCount">%1$sفيديوهات</string>
<string name="instance">سيرفر</string> <string name="instance">سيرفر</string>
<string name="customization">تخصيص</string> <string name="customization">تخصيص</string>
<string name="history">السجل</string>
<string name="channels">قنوات</string>
<string name="all">كل</string>
<string name="okay">حسناً</string>
<string name="search_history">سجل البحث</string>
<string name="clear_history">امح السجل</string>
<string name="music_songs">أغاني يوتيوب</string>
<string name="music_videos">فيديوهات يوتيوب الموسيقية</string>
<string name="music_albums">ألبومات يوتيوب الموسيقية</string>
<string name="sponsorblock_state">مُفَعَّل</string>
<string name="category_sponsor">راعي</string>
</resources> </resources>

View File

@ -75,20 +75,20 @@
<string name="choose_filter">Suchfilter wählen</string> <string name="choose_filter">Suchfilter wählen</string>
<string name="channels">Kanäle</string> <string name="channels">Kanäle</string>
<string name="all">Alle</string> <string name="all">Alle</string>
<string name="okay">Ok</string> <string name="okay">OK</string>
<string name="history">Verlauf</string> <string name="history">Verlauf</string>
<string name="search_history">Suchverlauf</string> <string name="search_history">Suchverlauf</string>
<string name="clear_history">Verlauf löschen</string> <string name="clear_history">Verlauf löschen</string>
<string name="music_songs">YT Musik Lieder</string> <string name="music_songs">YT Musik-Lieder</string>
<string name="music_videos">YT Musik Videos</string> <string name="music_videos">YT Musik-Videos</string>
<string name="music_albums">YT Musik Alben</string> <string name="music_albums">YT Musik-Alben</string>
<string name="music_playlists">YT Musik Playlists</string> <string name="music_playlists">YT Musik-Wiedergabelisten</string>
<string name="playlists">Wiedergabelisten</string> <string name="playlists">Wiedergabelisten</string>
<string name="category_intro">Pause/Intro-Animation</string> <string name="category_intro">Pause/Intro-Animation</string>
<string name="category_outro">Endkarten/Credits</string> <string name="category_outro">Endkarten/Credits</string>
<string name="sponsorblock_summary">Verwendet die API von https://sponsor.ajay.app/</string> <string name="sponsorblock_summary">Verwendet die API von https://sponsor.ajay.app/</string>
<string name="category_segments">Abschnitte</string> <string name="category_segments">Abschnitte</string>
<string name="category_selfpromo_description">Ähnlich wie \"Sponsor\", außer für unbezahlte Werbung oder Eigenwerbung. Dazu gehören Abschnitte über Waren, Spenden oder Informationen darüber, mit wem sie zusammengearbeitet haben.</string> <string name="category_selfpromo_description">Ähnlich wie „Sponsor“, außer für unbezahlte Werbung oder Eigenwerbung. Dazu gehören Abschnitte über Waren, Spenden oder Informationen darüber, mit wem sie zusammengearbeitet haben.</string>
<string name="defaultTab">Standardseite</string> <string name="defaultTab">Standardseite</string>
<string name="sponsorblock">SponsorBlock</string> <string name="sponsorblock">SponsorBlock</string>
<string name="segment_skipped">Abschnitt übersprungen</string> <string name="segment_skipped">Abschnitt übersprungen</string>
@ -100,4 +100,5 @@
<string name="category_outro_description">Credits oder wenn die YouTube-Endkarten erscheinen. Nicht für Schlussfolgerungen mit Informationen.</string> <string name="category_outro_description">Credits oder wenn die YouTube-Endkarten erscheinen. Nicht für Schlussfolgerungen mit Informationen.</string>
<string name="category_interaction_description">Wenn es mitten im Inhalt eine kurze Erinnerung zum Liken, Abonnieren oder Folgen gibt. Wenn es lang ist oder es um etwas Bestimmtes geht, sollte es stattdessen unter Eigenwerbung stehen.</string> <string name="category_interaction_description">Wenn es mitten im Inhalt eine kurze Erinnerung zum Liken, Abonnieren oder Folgen gibt. Wenn es lang ist oder es um etwas Bestimmtes geht, sollte es stattdessen unter Eigenwerbung stehen.</string>
<string name="category_intro_description">Ein Intervall ohne eigentlichen Inhalt. Könnte eine Pause, ein statischer Rahmen oder eine sich wiederholende Animation sein. Dies sollte nicht für Übergänge verwendet werden, die Informationen enthalten.</string> <string name="category_intro_description">Ein Intervall ohne eigentlichen Inhalt. Könnte eine Pause, ein statischer Rahmen oder eine sich wiederholende Animation sein. Dies sollte nicht für Übergänge verwendet werden, die Informationen enthalten.</string>
<string name="license">Lizenz</string>
</resources> </resources>

View File

@ -100,4 +100,5 @@
<string name="category_outro_description">Τίτλοι τέλους ή όταν εμφανίζονται οι τελικές κάρτες του YouTube. Όχι για συμπεράσματα με πληροφορίες.</string> <string name="category_outro_description">Τίτλοι τέλους ή όταν εμφανίζονται οι τελικές κάρτες του YouTube. Όχι για συμπεράσματα με πληροφορίες.</string>
<string name="category_intro_description">Ένα χρονικό διάστημα χωρίς πραγματικό περιεχόμενο. Μπορεί να είναι παύση, στατικό καρέ, επαναλαμβανόμενη κινούμενη εικόνα. Αυτό δεν πρέπει να χρησιμοποιείται για μεταβάσεις που περιέχουν πληροφορίες.</string> <string name="category_intro_description">Ένα χρονικό διάστημα χωρίς πραγματικό περιεχόμενο. Μπορεί να είναι παύση, στατικό καρέ, επαναλαμβανόμενη κινούμενη εικόνα. Αυτό δεν πρέπει να χρησιμοποιείται για μεταβάσεις που περιέχουν πληροφορίες.</string>
<string name="category_interaction_description">Όταν υπάρχει μια σύντομη υπενθύμιση για να πατήσετε μου αρέσει, να εγγραφείτε ή να ακολουθήσετε το κανάλι τους στη μέση του περιεχομένου. Εάν είναι μεγάλης διάρκειας ή για κάτι συγκεκριμένο, θα πρέπει να παρατίθεται στην επιλογή \" Μη-χορηγούμενη/Προσωπική προώθηση\".</string> <string name="category_interaction_description">Όταν υπάρχει μια σύντομη υπενθύμιση για να πατήσετε μου αρέσει, να εγγραφείτε ή να ακολουθήσετε το κανάλι τους στη μέση του περιεχομένου. Εάν είναι μεγάλης διάρκειας ή για κάτι συγκεκριμένο, θα πρέπει να παρατίθεται στην επιλογή \" Μη-χορηγούμενη/Προσωπική προώθηση\".</string>
<string name="license">Άδεια</string>
</resources> </resources>

View File

@ -63,4 +63,22 @@
<string name="videos">ویدیو ها</string> <string name="videos">ویدیو ها</string>
<string name="subscriptions">اشتراک ها</string> <string name="subscriptions">اشتراک ها</string>
<string name="systemLanguage">زبان سیستم</string> <string name="systemLanguage">زبان سیستم</string>
<string name="history">سابقه</string>
<string name="search_history">سابقه جستجو</string>
<string name="channels">کانال‌ها</string>
<string name="all">همه</string>
<string name="okay">باشه</string>
<string name="clear_history">پاک کردن سابقه</string>
<string name="settings">تنظیمات</string>
<string name="instance">نمونه</string>
<string name="customization">شخصی‌سازی</string>
<string name="website">وب‌سایت</string>
<string name="videoCount">%1$s ویدیوها</string>
<string name="noInternet">اتصال اینترنت وجود ندارد</string>
<string name="retry">دوباره امتحان کنید</string>
<string name="comments">نظرات</string>
<string name="defaultTab">زبانه پیش فرض</string>
<string name="sponsorblock">اسپانسربلاک</string>
<string name="sponsorblock_state">فعال شده</string>
<string name="category_sponsor">اسپانسر</string>
</resources> </resources>

View File

@ -72,4 +72,33 @@
<string name="settings">Paramètres</string> <string name="settings">Paramètres</string>
<string name="location">Emplacement</string> <string name="location">Emplacement</string>
<string name="customization">Personnalisation</string> <string name="customization">Personnalisation</string>
<string name="channels">Chaînes</string>
<string name="choose_filter">Choisissez le filtre de recherche</string>
<string name="all">Tout</string>
<string name="playlists">Listes de lecture</string>
<string name="okay">OK</string>
<string name="history">Historique</string>
<string name="search_history">Historique de recherche</string>
<string name="clear_history">Effacer lhistorique</string>
<string name="music_songs">Chansons YT Musique</string>
<string name="music_videos">Vidéos YT Musique</string>
<string name="music_albums">Albums YT Musique</string>
<string name="music_playlists">Listes de lecture YT Musique</string>
<string name="defaultTab">Onglet par défaut</string>
<string name="sponsorblock">SponsorBlock</string>
<string name="sponsorblock_summary">Utilise l\'API de https://sponsor.ajay.app/</string>
<string name="category_outro_description">Crédits ou quand les génériques YouTube apparaissent. Pas pour les conclusions avec des informations.</string>
<string name="category_intro_description">Un intervalle sans contenu réel. Il peut s\'agir d\'une pause, d\'une image statique ou d\'une animation répétitive. Il ne doit pas être utilisé pour les transitions contenant des informations.</string>
<string name="category_outro">Générique de fin/crédits</string>
<string name="segment_skipped">Segment sauté</string>
<string name="sponsorblock_state">Activé</string>
<string name="category_segments">Segments</string>
<string name="category_sponsor">Sponsor</string>
<string name="category_selfpromo">Promo non rémunérée/auto-promotion</string>
<string name="category_selfpromo_description">Semblable à « sponsor » sauf pour les activités non rémunérées ou l\'autopromotion. Ceci inclut les sections sur les marchandises, les dons ou les informations sur les personnes avec lesquelles ils ont collaboré.</string>
<string name="category_intro">Animation d\'intro/entracte</string>
<string name="license">Licence</string>
<string name="category_interaction_description">Lorsqu\'il y a un bref rappel pour aimer, s\'abonner ou suivre l\'entreprise au milieu du contenu. S\'il est long ou s\'il traite d\'un sujet spécifique, il doit plutôt être placé sous la rubrique « autopromotion ».</string>
<string name="category_sponsor_description">Promotion payée, références payées et publicités directes. Il ne s\'agit pas d\'autopromotion ou de citation gratuite de causes/créateurs/sites web/produits qu\'ils aiment.</string>
<string name="category_interaction">Rappel d\'interaction (S\'abonner)</string>
</resources> </resources>

View File

@ -81,7 +81,7 @@
<string name="category_interaction_description">좋아요에 대한 짧은 알림이 있으면 콘텐츠 중간에 구독하거나 팔로우하세요. 길거나 구체적인 내용이라면 자체 홍보를 해야 합니다.</string> <string name="category_interaction_description">좋아요에 대한 짧은 알림이 있으면 콘텐츠 중간에 구독하거나 팔로우하세요. 길거나 구체적인 내용이라면 자체 홍보를 해야 합니다.</string>
<string name="channels">채널</string> <string name="channels">채널</string>
<string name="history">기록</string> <string name="history">기록</string>
<string name="music_albums">음악 앨범</string> <string name="music_albums">유튜브 뮤직 앨범</string>
<string name="category_selfpromo_description">무료 또는 자체 프로모션을 제외하고 \"스폰서\"와 유사합니다. 여기에는 상품, 기부 또는 협력 대상에 대한 정보에 대한 섹션이 포함됩니다.</string> <string name="category_selfpromo_description">무료 또는 자체 프로모션을 제외하고 \"스폰서\"와 유사합니다. 여기에는 상품, 기부 또는 협력 대상에 대한 정보에 대한 섹션이 포함됩니다.</string>
<string name="all">모두</string> <string name="all">모두</string>
<string name="sponsorblock_summary">https://sponsor.ajay.app/의 API 사용</string> <string name="sponsorblock_summary">https://sponsor.ajay.app/의 API 사용</string>
@ -91,9 +91,9 @@
<string name="okay">확인</string> <string name="okay">확인</string>
<string name="clear_history">기록 지우기</string> <string name="clear_history">기록 지우기</string>
<string name="search_history">검색 기록</string> <string name="search_history">검색 기록</string>
<string name="music_songs">음악 노래</string> <string name="music_songs">유튜브 뮤직 노래</string>
<string name="music_videos">음악 비디오</string> <string name="music_videos">유튜브 뮤직 비디오</string>
<string name="music_playlists">음악 플레이리스트</string> <string name="music_playlists">유튜브 뮤직 플레이리스트</string>
<string name="sponsorblock">스폰서 차단</string> <string name="sponsorblock">스폰서 차단</string>
<string name="category_interaction">인터랙션 알림(구독)</string> <string name="category_interaction">인터랙션 알림(구독)</string>
<string name="category_intro">인터미션/인트로 애니메이션</string> <string name="category_intro">인터미션/인트로 애니메이션</string>

View File

@ -13,7 +13,7 @@
<string name="customInstance">सानुकूल उदाहरण जोडा</string> <string name="customInstance">सानुकूल उदाहरण जोडा</string>
<string name="region">एक प्रदेश निवडा</string> <string name="region">एक प्रदेश निवडा</string>
<string name="importsuccess">यशस्वीरित्या सदस्यता घेतली!</string> <string name="importsuccess">यशस्वीरित्या सदस्यता घेतली!</string>
<string name="subscribeIsEmpty">प्रथम काही चॅनेलची सदस्यता घ्या!</string> <string name="subscribeIsEmpty">प्रथम काही चॅनेलची सदस्यता घ्या.</string>
<string name="dlcomplete">डाउनलोड पूर्ण झाले!</string> <string name="dlcomplete">डाउनलोड पूर्ण झाले!</string>
<string name="downloadfailed">डाउनलोड अयशस्वी!</string> <string name="downloadfailed">डाउनलोड अयशस्वी!</string>
<string name="vlc">VLC मध्ये उघडा</string> <string name="vlc">VLC मध्ये उघडा</string>
@ -51,4 +51,54 @@
<string name="playlistCreated">प्लेलिस्ट तयार केली!</string> <string name="playlistCreated">प्लेलिस्ट तयार केली!</string>
<string name="areYouSure">तुमची खात्री आहे की तुम्ही ही प्लेलिस्ट हटवू इच्छिता\?</string> <string name="areYouSure">तुमची खात्री आहे की तुम्ही ही प्लेलिस्ट हटवू इच्छिता\?</string>
<string name="unsubscribe">सदस्यत्व रद्द करा</string> <string name="unsubscribe">सदस्यत्व रद्द करा</string>
<string name="choose_filter">शोध फिल्टर निवडा</string>
<string name="channels">चॅनेल</string>
<string name="all">सर्व</string>
<string name="playlists">प्लेलिस्ट</string>
<string name="okay">ठीक आहे</string>
<string name="history">इतिहास</string>
<string name="search_history">इतिहासात शोधा</string>
<string name="clear_history">इतिहास साफ करा</string>
<string name="music_songs">YT संगीत गाणी</string>
<string name="music_videos">YT संगीत व्हिडिओ</string>
<string name="music_albums">YT संगीत अल्बम</string>
<string name="music_playlists">YT संगीत प्लेलिस्ट</string>
<string name="defaultTab">डीफॉल्ट टॅब</string>
<string name="sponsorblock">SponsorBlock</string>
<string name="sponsorblock_summary">https://sponsor.ajay.app/ वरून API वापरते</string>
<string name="segment_skipped">विभाग वगळला</string>
<string name="sponsorblock_state">सक्षम केले</string>
<string name="category_segments">विभाग</string>
<string name="category_sponsor">प्रायोजक</string>
<string name="category_selfpromo">न भरलेली/स्वत:ची जाहिरात</string>
<string name="category_interaction">परस्परसंवाद स्मरणपत्र (सदस्यता घ्या)</string>
<string name="category_intro">इंटरमिशन/इंट्रो अॅनिमेशन</string>
<string name="category_outro">एंडकार्ड्स/क्रेडिट्स</string>
<string name="category_outro_description">क्रेडिट्स किंवा जेव्हा YouTube एंडकार्ड दिसतात. माहितीसह निष्कर्ष काढण्यासाठी नाही.</string>
<string name="license">परवाना</string>
<string name="category_interaction_description">जेव्हा सामग्रीच्या मध्यभागी लाईक करण्यासाठी, सदस्यता घेण्यासाठी किंवा त्यांचे अनुसरण करण्यासाठी एक लहान स्मरणपत्र असते. जर ते लांबलचक किंवा विशिष्ट गोष्टींबद्दल असेल, तर त्याऐवजी ते स्वत:च्या जाहिरातीखाली असावे.</string>
<string name="category_sponsor_description">सशुल्क जाहिरात, सशुल्क संदर्भ आणि थेट जाहिराती. स्वत:च्या प्रचारासाठी किंवा त्यांच्या आवडीच्या कारणांसाठी/निर्माते/वेबसाइट्स/उत्पादनांसाठी मोफत ओरडण्यासाठी नाही.</string>
<string name="category_selfpromo_description">\"प्रायोजक\" सारखेच बिनपगारी किंवा स्वत:ची जाहिरात वगळता. यामध्ये व्यापारी माल, देणग्या किंवा त्यांनी कोणासोबत सहकार्य केले याबद्दलच्या माहितीचा समावेश आहे.</string>
<string name="category_intro_description">वास्तविक सामग्रीशिवाय मध्यांतर. एक विराम, स्थिर फ्रेम, पुनरावृत्ती अॅनिमेशन असू शकते. हे माहिती असलेल्या संक्रमणांसाठी वापरले जाऊ नये.</string>
<string name="emptyPlaylistName">प्लेलिस्ट नाव रिक्त असू शकत नाही</string>
<string name="startpage">घर</string>
<string name="subscriptions">सदस्यता</string>
<string name="library">लायब्ररी</string>
<string name="videos">व्हिडिओ</string>
<string name="import_from_yt_summary">Youtube किंवा Newpipe वरून</string>
<string name="changeLanguage">भाषा बदला</string>
<string name="systemLanguage">प्रणाली भाषा</string>
<string name="systemDefault">सिस्टम डीफॉल्ट</string>
<string name="lightTheme">पांढरा थीम</string>
<string name="darkTheme">गडद थीम</string>
<string name="subscribers">%1$sसदस्य</string>
<string name="settings">सेटिंग्ज</string>
<string name="location">स्थान</string>
<string name="instance">उदाहरण</string>
<string name="customization">सानुकूलन</string>
<string name="website">संकेतस्थळ</string>
<string name="videoCount">%1$s व्हिडिओ</string>
<string name="noInternet">इंटरनेट कनेक्शन नाही</string>
<string name="retry">पुन्हा प्रयत्न करा</string>
<string name="comments">टिप्पण्या</string>
</resources> </resources>

View File

@ -33,7 +33,7 @@
<string name="server_error">Serwer napotkał problem. Spróbuj może użyć innej instancji\?</string> <string name="server_error">Serwer napotkał problem. Spróbuj może użyć innej instancji\?</string>
<string name="unknown_error">Błąd sieci!</string> <string name="unknown_error">Błąd sieci!</string>
<string name="error">Coś poszło nie tak!</string> <string name="error">Coś poszło nie tak!</string>
<string name="notgmail">To nie jest twoje stare konto gmail!</string> <string name="notgmail">To nie jest konto gmail!</string>
<string name="defres">Domyślna jakość video</string> <string name="defres">Domyślna jakość video</string>
<string name="grid">Wybierz zagęszczenie siatki filmów</string> <string name="grid">Wybierz zagęszczenie siatki filmów</string>
<string name="emptyList">Tu jeszcze nic nie ma!</string> <string name="emptyList">Tu jeszcze nic nie ma!</string>
@ -63,4 +63,39 @@
<string name="darkTheme">Tryb ciemny</string> <string name="darkTheme">Tryb ciemny</string>
<string name="subscriptions">Subskrypcje</string> <string name="subscriptions">Subskrypcje</string>
<string name="library">Biblioteka</string> <string name="library">Biblioteka</string>
<string name="defaultTab">Strona Główna</string>
<string name="sponsorblock">Blocker Sponsorów</string>
<string name="sponsorblock_summary">Używa API z
\nhttps://sponsor.ajay.app/</string>
<string name="choose_filter">Wybierz filter wyszukiwania</string>
<string name="channels">Kanały</string>
<string name="all">Wszystkie</string>
<string name="playlists">Playlisty</string>
<string name="okay">Okej</string>
<string name="history">Historia</string>
<string name="search_history">Historia wyszukiwania</string>
<string name="clear_history">Wyczyść Historie</string>
<string name="sponsorblock_state">Włączono</string>
<string name="category_selfpromo">Bezpłatna / własna promocja</string>
<string name="category_segments">Segmenty</string>
<string name="category_sponsor">Sponsor</string>
<string name="category_sponsor_description">"Płatna promocja, płatne polecenia i reklamy bezpośrednie. Nie do autopromocji lub bezpłatnych okrzyków do celów/twórców/stron internetowych/produktów, które im się podobają."</string>
<string name="segment_skipped">Pominiento segment filmu !</string>
<string name="category_selfpromo_description">"Podobny do „sponsora”, z wyjątkiem bezpłatnej lub własnej promocji. Obejmuje to sekcje dotyczące towarów, darowizn lub informacji o tym, z kim współpracowali."</string>
<string name="category_interaction">Przypomnienie o interakcji (subskrybuj)</string>
<string name="category_interaction_description">"Gdy pojawi się krótkie przypomnienie, aby polubić, zasubskrybuj lub postępuj zgodnie z nimi w środku treści. Jeśli jest długi lub dotyczy czegoś konkretnego, powinien być w ramach samo promocji."</string>
<string name="category_intro">Przerywnik / Animacja wprowadzająca</string>
<string name="category_intro_description">"Interwał bez faktycznej treści. Może to być pauza, statyczna klatka, powtarzająca się animacja. Nie należy tego używać do przejść zawierających informacje."</string>
<string name="category_outro">Karty końcowe / kredyty</string>
<string name="category_outro_description">"Kredyty lub kiedy pojawią się plansze końcowe YouTube. Nie dla wniosków z informacją."</string>
<string name="license">Licencja</string>
<string name="location">Lokalizacja</string>
<string name="settings">Ustawienia</string>
<string name="instance">Instancja</string>
<string name="customization">Dostosowywanie</string>
<string name="website">Strona Internetowa</string>
<string name="videoCount">%1$s filmy</string>
<string name="noInternet">Brak Połączenia z Internetem</string>
<string name="retry">Spróbuj Ponownie</string>
<string name="comments">Komentarze</string>
</resources> </resources>

View File

@ -100,4 +100,5 @@
<string name="music_albums">YT Müzik Albümleri</string> <string name="music_albums">YT Müzik Albümleri</string>
<string name="music_videos">YT Müzik Videoları</string> <string name="music_videos">YT Müzik Videoları</string>
<string name="music_playlists">YT Müzik Oynatma Listeleri</string> <string name="music_playlists">YT Müzik Oynatma Listeleri</string>
<string name="license">Lisans</string>
</resources> </resources>