Merge pull request #1368 from Bnyro/master

Show a snackbar when trending unavailable for region
This commit is contained in:
Bnyro 2022-09-24 13:33:38 +02:00 committed by GitHub
commit b4e8ee5989
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 110 additions and 418 deletions

View File

@ -0,0 +1,6 @@
package com.github.libretube.obj
data class Country(
val name: String,
val code: String
)

View File

@ -1,11 +1,13 @@
package com.github.libretube.ui.fragments package com.github.libretube.ui.fragments
import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.util.Log import android.util.Log
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.Toast import android.widget.Toast
import android.widget.Toast.makeText
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
@ -14,6 +16,8 @@ import com.github.libretube.api.RetrofitInstance
import com.github.libretube.constants.PreferenceKeys import com.github.libretube.constants.PreferenceKeys
import com.github.libretube.databinding.FragmentHomeBinding import com.github.libretube.databinding.FragmentHomeBinding
import com.github.libretube.extensions.TAG import com.github.libretube.extensions.TAG
import com.github.libretube.extensions.getStyledSnackBar
import com.github.libretube.ui.activities.SettingsActivity
import com.github.libretube.ui.adapters.ChannelAdapter import com.github.libretube.ui.adapters.ChannelAdapter
import com.github.libretube.ui.adapters.TrendingAdapter import com.github.libretube.ui.adapters.TrendingAdapter
import com.github.libretube.ui.base.BaseFragment import com.github.libretube.ui.base.BaseFragment
@ -79,6 +83,26 @@ class HomeFragment : BaseFragment() {
} }
runOnUiThread { runOnUiThread {
binding.progressBar.visibility = View.GONE binding.progressBar.visibility = View.GONE
// show a [SnackBar] if there are no trending videos available
if (response.isEmpty()) {
binding.root.getStyledSnackBar(
R.string.change_region
)
.setAction(
R.string.settings
) {
startActivity(
Intent(
context,
SettingsActivity::class.java
)
)
}
.show()
return@runOnUiThread
}
if ( if (
PreferenceHelper.getBoolean( PreferenceHelper.getBoolean(
PreferenceKeys.ALTERNATIVE_TRENDING_LAYOUT, PreferenceKeys.ALTERNATIVE_TRENDING_LAYOUT,

View File

@ -11,6 +11,7 @@ import com.github.libretube.ui.activities.SettingsActivity
import com.github.libretube.ui.base.BasePreferenceFragment import com.github.libretube.ui.base.BasePreferenceFragment
import com.github.libretube.ui.dialogs.NavBarOptionsDialog import com.github.libretube.ui.dialogs.NavBarOptionsDialog
import com.github.libretube.ui.dialogs.RequireRestartDialog import com.github.libretube.ui.dialogs.RequireRestartDialog
import com.github.libretube.util.LocaleHelper
import com.github.libretube.util.PreferenceHelper import com.github.libretube.util.PreferenceHelper
class GeneralSettings : BasePreferenceFragment() { class GeneralSettings : BasePreferenceFragment() {
@ -28,6 +29,9 @@ class GeneralSettings : BasePreferenceFragment() {
true true
} }
val region = findPreference<ListPreference>("region")
region?.let { setupRegionPref(it) }
val autoRotation = findPreference<SwitchPreferenceCompat>(PreferenceKeys.AUTO_ROTATION) val autoRotation = findPreference<SwitchPreferenceCompat>(PreferenceKeys.AUTO_ROTATION)
autoRotation?.setOnPreferenceChangeListener { _, _ -> autoRotation?.setOnPreferenceChangeListener { _, _ ->
val restartDialog = RequireRestartDialog() val restartDialog = RequireRestartDialog()
@ -57,4 +61,21 @@ class GeneralSettings : BasePreferenceFragment() {
true true
} }
} }
private fun setupRegionPref(preference: ListPreference) {
val countries = LocaleHelper.getAvailableCountries()
val countryNames = countries.map { it.name }
.toMutableList()
countryNames.add(0, requireContext().getString(R.string.systemLanguage))
val countryCodes = countries.map { it.code }
.toMutableList()
countryCodes.add(0, "sys")
preference.entries = countryNames.toTypedArray()
preference.entryValues = countryCodes.toTypedArray()
preference.summaryProvider = Preference.SummaryProvider<ListPreference> {
it.entry
}
}
} }

View File

@ -8,6 +8,7 @@ import com.github.libretube.R
import com.github.libretube.constants.PreferenceKeys import com.github.libretube.constants.PreferenceKeys
import com.github.libretube.ui.activities.SettingsActivity import com.github.libretube.ui.activities.SettingsActivity
import com.github.libretube.ui.base.BasePreferenceFragment import com.github.libretube.ui.base.BasePreferenceFragment
import com.github.libretube.util.LocaleHelper
import com.github.libretube.util.PreferenceHelper import com.github.libretube.util.PreferenceHelper
import java.util.* import java.util.*
@ -36,24 +37,24 @@ class PlayerSettings : BasePreferenceFragment() {
} }
val defaultSubtitle = findPreference<ListPreference>(PreferenceKeys.DEFAULT_SUBTITLE) val defaultSubtitle = findPreference<ListPreference>(PreferenceKeys.DEFAULT_SUBTITLE)
val locales: Array<Locale> = Locale.getAvailableLocales() defaultSubtitle?.let { setupSubtitlePref(it) }
val localeNames = ArrayList<String>() }
val localeCodes = ArrayList<String>()
localeNames.add(context?.getString(R.string.none)!!) private fun setupSubtitlePref(preference: ListPreference) {
localeCodes.add("") val locales = LocaleHelper.getAvailableLocales()
val localeNames = locales.map { it.name }
.toMutableList()
localeNames.add(0, requireContext().getString(R.string.none))
locales.forEach { val localeCodes = locales.map { it.code }
if (!localeNames.contains(it.getDisplayLanguage())) { .toMutableList()
localeNames.add(it.getDisplayLanguage()) localeCodes.add(0, "")
localeCodes.add(it.language)
} preference.entries = localeNames.toTypedArray()
} preference.entryValues = localeCodes.toTypedArray()
defaultSubtitle?.entries = localeNames.toTypedArray() preference.summaryProvider =
defaultSubtitle?.entryValues = localeCodes.toTypedArray() Preference.SummaryProvider<ListPreference> {
defaultSubtitle?.summaryProvider = it.entry
Preference.SummaryProvider<ListPreference> { preference ->
preference.entry
} }
} }
} }

View File

@ -4,6 +4,7 @@ import android.content.Context
import android.os.Build import android.os.Build
import android.telephony.TelephonyManager import android.telephony.TelephonyManager
import com.github.libretube.constants.PreferenceKeys import com.github.libretube.constants.PreferenceKeys
import com.github.libretube.obj.Country
import java.util.* import java.util.*
object LocaleHelper { object LocaleHelper {
@ -33,11 +34,7 @@ object LocaleHelper {
val res = context.resources val res = context.resources
val dm = res.displayMetrics val dm = res.displayMetrics
val conf = res.configuration val conf = res.configuration
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { conf.setLocale(locale)
conf.setLocale(locale)
} else {
conf.locale = locale
}
res.updateConfiguration(conf, dm) res.updateConfiguration(conf, dm)
} }
@ -81,10 +78,46 @@ object LocaleHelper {
private fun detectLocaleCountry(context: Context): String? { private fun detectLocaleCountry(context: Context): String? {
try { try {
return context.resources.configuration.locales[0].country if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
return context.resources.configuration.locales[0].country
}
} catch (e: Exception) { } catch (e: Exception) {
e.printStackTrace() e.printStackTrace()
} }
return null return null
} }
fun getAvailableCountries(): List<Country> {
val isoCountries = Locale.getISOCountries()
val countries = mutableListOf<Country>()
isoCountries.forEach { countryCode ->
val locale = Locale("", countryCode)
val countryName = locale.displayCountry
countries.add(
Country(
countryName,
countryCode
)
)
}
countries.sortBy { it.name }
return countries
}
fun getAvailableLocales(): List<Country> {
val availableLocales: Array<Locale> = Locale.getAvailableLocales()
val locales = mutableListOf<Country>()
availableLocales.forEach { locale ->
if (locales.filter { it.code == locale.language }.isEmpty()) {
locales.add(
Country(
locale.displayLanguage,
locale.language
)
)
}
}
return locales
}
} }

View File

@ -24,6 +24,7 @@
<item>https://api.yt.jae.fi/</item> <item>https://api.yt.jae.fi/</item>
<item>https://piped-api.privacy.com.de/</item> <item>https://piped-api.privacy.com.de/</item>
</string-array> </string-array>
<string-array name="shareHostsList"> <string-array name="shareHostsList">
<item>youtube.com"</item> <item>youtube.com"</item>
<item>m.youtube.com"</item> <item>m.youtube.com"</item>
@ -64,398 +65,6 @@
<item>piped.mint.lgbt"</item> <item>piped.mint.lgbt"</item>
<item>il.ax"</item> <item>il.ax"</item>
</string-array> </string-array>
<string-array name="regions">
<item>@string/systemDefault</item>
<item>Afghanistan</item>
<item>Albania</item>
<item>Algeria</item>
<item>Andorra</item>
<item>Angola</item>
<item>Antigua and Barbuda</item>
<item>Argentina</item>
<item>Armenia</item>
<item>Australia</item>
<item>Austria</item>
<item>Azerbaijan</item>
<item>Bahamas</item>
<item>Bahrain</item>
<item>Bangladesh</item>
<item>Barbados</item>
<item>Belarus</item>
<item>Belgium</item>
<item>Belize</item>
<item>Benin</item>
<item>Bhutan</item>
<item>Bolivia (Plurinational State of)</item>
<item>Bosnia and Herzegovina</item>
<item>Botswana</item>
<item>Brazil</item>
<item>Brunei Darussalam</item>
<item>Bulgaria</item>
<item>Burkina Faso</item>
<item>Burundi</item>
<item>Cabo Verde</item>
<item>Cambodia</item>
<item>Cameroon</item>
<item>Canada</item>
<item>Central African Republic</item>
<item>Chad</item>
<item>Chile</item>
<item>China</item>
<item>Colombia</item>
<item>Comoros</item>
<item>Congo</item>
<item>Congo, Democratic Republic of the</item>
<item>Costa Rica</item>
<item>Côte d\'Ivoire</item>
<item>Croatia</item>
<item>Cuba</item>
<item>Cyprus</item>
<item>Czechia</item>
<item>Denmark</item>
<item>Djibouti</item>
<item>Dominica</item>
<item>Dominican Republic</item>
<item>Ecuador</item>
<item>Egypt</item>
<item>El Salvador</item>
<item>Equatorial Guinea</item>
<item>Eritrea</item>
<item>Estonia</item>
<item>Eswatini</item>
<item>Ethiopia</item>
<item>Fiji</item>
<item>Finland</item>
<item>France</item>
<item>Gabon</item>
<item>Gambia</item>
<item>Georgia</item>
<item>Germany</item>
<item>Ghana</item>
<item>Greece</item>
<item>Grenada</item>
<item>Guatemala</item>
<item>Guinea</item>
<item>Guinea-Bissau</item>
<item>Guyana</item>
<item>Haiti</item>
<item>Honduras</item>
<item>Hungary</item>
<item>Iceland</item>
<item>India</item>
<item>Indonesia</item>
<item>Iran (Islamic Republic of)</item>
<item>Iraq</item>
<item>Ireland</item>
<item>Israel</item>
<item>Italy</item>
<item>Jamaica</item>
<item>Japan</item>
<item>Jordan</item>
<item>Kazakhstan</item>
<item>Kenya</item>
<item>Kiribati</item>
<item>Korea (Democratic People\'s Republic of)</item>
<item>Korea, Republic of</item>
<item>Kuwait</item>
<item>Kyrgyzstan</item>
<item>Lao People\'s Democratic Republic</item>
<item>Latvia</item>
<item>Lebanon</item>
<item>Lesotho</item>
<item>Liberia</item>
<item>Libya</item>
<item>Liechtenstein</item>
<item>Lithuania</item>
<item>Luxembourg</item>
<item>Madagascar</item>
<item>Malawi</item>
<item>Malaysia</item>
<item>Maldives</item>
<item>Mali</item>
<item>Malta</item>
<item>Marshall Islands</item>
<item>Mauritania</item>
<item>Mauritius</item>
<item>Mexico</item>
<item>Micronesia (Federated States of)</item>
<item>Moldova, Republic of</item>
<item>Monaco</item>
<item>Mongolia</item>
<item>Montenegro</item>
<item>Morocco</item>
<item>Mozambique</item>
<item>Myanmar</item>
<item>Namibia</item>
<item>Nauru</item>
<item>Nepal</item>
<item>Netherlands</item>
<item>New Zealand</item>
<item>Nicaragua</item>
<item>Niger</item>
<item>Nigeria</item>
<item>North Macedonia</item>
<item>Norway</item>
<item>Oman</item>
<item>Pakistan</item>
<item>Palau</item>
<item>Panama</item>
<item>Papua New Guinea</item>
<item>Paraguay</item>
<item>Peru</item>
<item>Philippines</item>
<item>Poland</item>
<item>Portugal</item>
<item>Qatar</item>
<item>Romania</item>
<item>Russian Federation</item>
<item>Rwanda</item>
<item>Saint Kitts and Nevis</item>
<item>Saint Lucia</item>
<item>Saint Vincent and the Grenadines</item>
<item>Samoa</item>
<item>San Marino</item>
<item>Sao Tome and Principe</item>
<item>Saudi Arabia</item>
<item>Senegal</item>
<item>Serbia</item>
<item>Seychelles</item>
<item>Sierra Leone</item>
<item>Singapore</item>
<item>Slovakia</item>
<item>Slovenia</item>
<item>Solomon Islands</item>
<item>Somalia</item>
<item>South Africa</item>
<item>South Sudan</item>
<item>Spain</item>
<item>Sri Lanka</item>
<item>Sudan</item>
<item>Suriname</item>
<item>Sweden</item>
<item>Switzerland</item>
<item>Syrian Arab Republic</item>
<item>Tajikistan</item>
<item>Tanzania, United Republic of</item>
<item>Thailand</item>
<item>Timor-Leste</item>
<item>Togo</item>
<item>Tonga</item>
<item>Trinidad and Tobago</item>
<item>Tunisia</item>
<item>Turkey</item>
<item>Turkmenistan</item>
<item>Tuvalu</item>
<item>Uganda</item>
<item>Ukraine</item>
<item>United Arab Emirates</item>
<item>United Kingdom of Great Britain and Northern Ireland</item>
<item>United States of America</item>
<item>Uruguay</item>
<item>Uzbekistan</item>
<item>Vanuatu</item>
<item>Venezuela (Bolivarian Republic of)</item>
<item>Viet Nam</item>
<item>Yemen</item>
<item>Zambia</item>
<item>Zimbabwe</item>
</string-array>
<string-array name="regionsValue">
<item>sys</item>
<item>AF</item>
<item>AL</item>
<item>DZ</item>
<item>AD</item>
<item>AO</item>
<item>AG</item>
<item>AR</item>
<item>AM</item>
<item>AU</item>
<item>AT</item>
<item>AZ</item>
<item>BS</item>
<item>BH</item>
<item>BD</item>
<item>BB</item>
<item>BY</item>
<item>BE</item>
<item>BZ</item>
<item>BJ</item>
<item>BT</item>
<item>BO</item>
<item>BA</item>
<item>BW</item>
<item>BR</item>
<item>BN</item>
<item>BG</item>
<item>BF</item>
<item>BI</item>
<item>CV</item>
<item>KH</item>
<item>CM</item>
<item>CA</item>
<item>CF</item>
<item>TD</item>
<item>CL</item>
<item>CN</item>
<item>CO</item>
<item>KM</item>
<item>CG</item>
<item>CD</item>
<item>CR</item>
<item>CI</item>
<item>HR</item>
<item>CU</item>
<item>CY</item>
<item>CZ</item>
<item>DK</item>
<item>DJ</item>
<item>DM</item>
<item>DO</item>
<item>EC</item>
<item>EG</item>
<item>SV</item>
<item>GQ</item>
<item>ER</item>
<item>EE</item>
<item>SZ</item>
<item>ET</item>
<item>FJ</item>
<item>FI</item>
<item>FR</item>
<item>GA</item>
<item>GM</item>
<item>GE</item>
<item>DE</item>
<item>GH</item>
<item>GR</item>
<item>GD</item>
<item>GT</item>
<item>GN</item>
<item>GW</item>
<item>GY</item>
<item>HT</item>
<item>HN</item>
<item>HU</item>
<item>IS</item>
<item>IN</item>
<item>ID</item>
<item>IR</item>
<item>IQ</item>
<item>IE</item>
<item>IL</item>
<item>IT</item>
<item>JM</item>
<item>JP</item>
<item>JO</item>
<item>KZ</item>
<item>KE</item>
<item>KI</item>
<item>KP</item>
<item>KR</item>
<item>KW</item>
<item>KG</item>
<item>LA</item>
<item>LV</item>
<item>LB</item>
<item>LS</item>
<item>LR</item>
<item>LY</item>
<item>LI</item>
<item>LT</item>
<item>LU</item>
<item>MG</item>
<item>MW</item>
<item>MY</item>
<item>MV</item>
<item>ML</item>
<item>MT</item>
<item>MH</item>
<item>MR</item>
<item>MU</item>
<item>MX</item>
<item>FM</item>
<item>MD</item>
<item>MC</item>
<item>MN</item>
<item>ME</item>
<item>MA</item>
<item>MZ</item>
<item>MM</item>
<item>NA</item>
<item>NR</item>
<item>NP</item>
<item>NL</item>
<item>NZ</item>
<item>NI</item>
<item>NE</item>
<item>NG</item>
<item>MK</item>
<item>NO</item>
<item>OM</item>
<item>PK</item>
<item>PW</item>
<item>PA</item>
<item>PG</item>
<item>PY</item>
<item>PE</item>
<item>PH</item>
<item>PL</item>
<item>PT</item>
<item>QA</item>
<item>RO</item>
<item>RU</item>
<item>RW</item>
<item>KN</item>
<item>LC</item>
<item>VC</item>
<item>WS</item>
<item>SM</item>
<item>ST</item>
<item>SA</item>
<item>SN</item>
<item>RS</item>
<item>SC</item>
<item>SL</item>
<item>SG</item>
<item>SK</item>
<item>SI</item>
<item>SB</item>
<item>SO</item>
<item>ZA</item>
<item>SS</item>
<item>ES</item>
<item>LK</item>
<item>SD</item>
<item>SR</item>
<item>SE</item>
<item>CH</item>
<item>SY</item>
<item>TJ</item>
<item>TZ</item>
<item>TH</item>
<item>TL</item>
<item>TG</item>
<item>TO</item>
<item>TT</item>
<item>TN</item>
<item>TR</item>
<item>TM</item>
<item>TV</item>
<item>UG</item>
<item>UA</item>
<item>AE</item>
<item>GB</item>
<item>US</item>
<item>UY</item>
<item>UZ</item>
<item>VU</item>
<item>VE</item>
<item>VN</item>
<item>YE</item>
<item>ZM</item>
<item>ZW</item>
</string-array>
<string-array name="languages"> <string-array name="languages">
<item>@string/systemLanguage</item> <item>@string/systemLanguage</item>

View File

@ -332,6 +332,7 @@
<string name="play_next">Play next</string> <string name="play_next">Play next</string>
<string name="navigation_bar">Navigation bar</string> <string name="navigation_bar">Navigation bar</string>
<string name="select_at_least_one">Please select at least one item</string> <string name="select_at_least_one">Please select at least one item</string>
<string name="change_region">Trending seems to be unavailable for the current region. Please select another in the settings.</string>
<!-- Notification channel strings --> <!-- Notification channel strings -->
<string name="download_channel_name">Download Service</string> <string name="download_channel_name">Download Service</string>

View File

@ -7,11 +7,8 @@
<ListPreference <ListPreference
android:icon="@drawable/ic_region" android:icon="@drawable/ic_region"
app:defaultValue="sys" app:defaultValue="sys"
app:entries="@array/regions"
app:entryValues="@array/regionsValue"
app:key="region" app:key="region"
app:title="@string/region" app:title="@string/region" />
app:useSimpleSummaryProvider="true" />
<ListPreference <ListPreference
android:icon="@drawable/ic_translate" android:icon="@drawable/ic_translate"