forked from recloudstream/cloudstream
		
	Added setup screen :)
This commit is contained in:
		
							parent
							
								
									65f9c71c44
								
							
						
					
					
						commit
						510dd9c358
					
				
					 15 changed files with 1141 additions and 410 deletions
				
			
		|  | @ -36,6 +36,7 @@ import com.lagradost.cloudstream3.CommonActivity.onUserLeaveHint | |||
| import com.lagradost.cloudstream3.CommonActivity.showToast | ||||
| import com.lagradost.cloudstream3.CommonActivity.updateLocale | ||||
| import com.lagradost.cloudstream3.mvvm.logError | ||||
| import com.lagradost.cloudstream3.mvvm.normalSafeApiCall | ||||
| import com.lagradost.cloudstream3.network.initClient | ||||
| import com.lagradost.cloudstream3.receivers.VideoDownloadRestartReceiver | ||||
| import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.OAuth2Apis | ||||
|  | @ -49,6 +50,7 @@ import com.lagradost.cloudstream3.ui.search.SearchResultBuilder | |||
| import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.isEmulatorSettings | ||||
| import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.isTvSettings | ||||
| import com.lagradost.cloudstream3.ui.settings.SettingsGeneral | ||||
| import com.lagradost.cloudstream3.ui.setup.HAS_DONE_SETUP_KEY | ||||
| import com.lagradost.cloudstream3.utils.AppUtils.isCastApiAvailable | ||||
| import com.lagradost.cloudstream3.utils.AppUtils.loadCache | ||||
| import com.lagradost.cloudstream3.utils.AppUtils.loadResult | ||||
|  | @ -56,6 +58,7 @@ import com.lagradost.cloudstream3.utils.AppUtils.tryParseJson | |||
| import com.lagradost.cloudstream3.utils.BackupUtils.setUpBackup | ||||
| import com.lagradost.cloudstream3.utils.Coroutines.ioSafe | ||||
| import com.lagradost.cloudstream3.utils.Coroutines.main | ||||
| import com.lagradost.cloudstream3.utils.DataStore | ||||
| import com.lagradost.cloudstream3.utils.DataStore.getKey | ||||
| import com.lagradost.cloudstream3.utils.DataStore.removeKey | ||||
| import com.lagradost.cloudstream3.utils.DataStore.setKey | ||||
|  | @ -743,7 +746,18 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { | |||
|         ioSafe { | ||||
|             migrateResumeWatching() | ||||
|         } | ||||
| 
 | ||||
|         try { | ||||
|             if (getKey(HAS_DONE_SETUP_KEY, false) != true) { | ||||
|                 navController.navigate(R.id.navigation_setup_language) | ||||
|             } | ||||
|         } catch (e: Exception) { | ||||
|             logError(e) | ||||
|         } finally { | ||||
|             setKey(HAS_DONE_SETUP_KEY, true) | ||||
|         } | ||||
| /* | ||||
| 
 | ||||
|         val relativePath = (Environment.DIRECTORY_DOWNLOADS) + File.separatorChar | ||||
|         val displayName = "output.dex" //""output.dex" | ||||
|         val file =  getExternalFilesDir(null)?.absolutePath + File.separatorChar + displayName//"${Environment.getExternalStorageDirectory()}${File.separatorChar}$relativePath$displayName" | ||||
|  |  | |||
|  | @ -1,5 +1,6 @@ | |||
| package com.lagradost.cloudstream3.ui.settings | ||||
| 
 | ||||
| import android.content.Context | ||||
| import android.os.Bundle | ||||
| import android.view.View | ||||
| import androidx.preference.PreferenceFragmentCompat | ||||
|  | @ -7,6 +8,7 @@ import androidx.preference.PreferenceManager | |||
| import com.lagradost.cloudstream3.* | ||||
| import com.lagradost.cloudstream3.APIHolder.getApiDubstatusSettings | ||||
| import com.lagradost.cloudstream3.APIHolder.getApiProviderLangSettings | ||||
| import com.lagradost.cloudstream3.AcraApplication.Companion.removeKey | ||||
| import com.lagradost.cloudstream3.mvvm.logError | ||||
| import com.lagradost.cloudstream3.network.initClient | ||||
| import com.lagradost.cloudstream3.ui.APIRepository | ||||
|  | @ -19,45 +21,45 @@ import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showMultiDialog | |||
| import com.lagradost.cloudstream3.utils.SubtitleHelper | ||||
| import com.lagradost.cloudstream3.utils.UIHelper.hideKeyboard | ||||
| 
 | ||||
| fun getCurrentLocale(context: Context): String { | ||||
|     val res = context.resources | ||||
|     // Change locale settings in the app. | ||||
|     // val dm = res.displayMetrics | ||||
|     val conf = res.configuration | ||||
|     return conf?.locale?.language ?: "en" | ||||
| } | ||||
| 
 | ||||
| // idk, if you find a way of automating this it would be great | ||||
| // https://www.iemoji.com/view/emoji/1794/flags/antarctica | ||||
| // Emoji Character Encoding Data --> C/C++/Java Src | ||||
| // https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes leave blank for auto | ||||
| val appLanguages = arrayListOf( | ||||
|     Triple("", "Spanish", "es"), | ||||
|     Triple("", "English", "en"), | ||||
|     Triple("", "Viet Nam", "vi"), | ||||
|     Triple("", "Dutch", "nl"), | ||||
|     Triple("", "French", "fr"), | ||||
|     Triple("", "Greek", "el"), | ||||
|     Triple("", "Swedish", "sv"), | ||||
|     Triple("", "Tagalog", "tl"), | ||||
|     Triple("", "Polish", "pl"), | ||||
|     Triple("", "Hindi", "hi"), | ||||
|     Triple("", "Malayalam", "ml"), | ||||
|     Triple("", "Norsk", "no"), | ||||
|     Triple("", "German", "de"), | ||||
|     Triple("", "Arabic", "ar"), | ||||
|     Triple("", "Turkish", "tr"), | ||||
|     Triple("", "Macedonian", "mk"), | ||||
|     Triple("\uD83C\uDDF5\uD83C\uDDF9", "Portuguese", "pt"), | ||||
|     Triple("\uD83C\uDDE7\uD83C\uDDF7", "Brazilian Portuguese", "bp"), | ||||
|     Triple("", "Romanian", "ro"), | ||||
|     Triple("", "Italian", "it"), | ||||
|     Triple("", "Chinese", "zh"), | ||||
|     Triple("", "Indonesian", "id"), | ||||
|     Triple("", "Czech", "cs"), | ||||
| ).sortedBy { it.second } //ye, we go alphabetical, so ppl don't put their lang on top | ||||
| 
 | ||||
| class SettingsLang : PreferenceFragmentCompat() { | ||||
|     // idk, if you find a way of automating this it would be great | ||||
|     // https://www.iemoji.com/view/emoji/1794/flags/antarctica | ||||
|     // Emoji Character Encoding Data --> C/C++/Java Src | ||||
|     // https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes leave blank for auto | ||||
|     private val languages = arrayListOf( | ||||
|         Triple("", "Spanish", "es"), | ||||
|         Triple("", "English", "en"), | ||||
|         Triple("", "Viet Nam", "vi"), | ||||
|         Triple("", "Dutch", "nl"), | ||||
|         Triple("", "French", "fr"), | ||||
|         Triple("", "Greek", "el"), | ||||
|         Triple("", "Swedish", "sv"), | ||||
|         Triple("", "Tagalog", "tl"), | ||||
|         Triple("", "Polish", "pl"), | ||||
|         Triple("", "Hindi", "hi"), | ||||
|         Triple("", "Malayalam", "ml"), | ||||
|         Triple("", "Norsk", "no"), | ||||
|         Triple("", "German", "de"), | ||||
|         Triple("", "Arabic", "ar"), | ||||
|         Triple("", "Turkish", "tr"), | ||||
|         Triple("", "Macedonian", "mk"), | ||||
|         Triple("\uD83C\uDDF5\uD83C\uDDF9", "Portuguese", "pt"), | ||||
|         Triple("\uD83C\uDDE7\uD83C\uDDF7", "Brazilian Portuguese", "bp"), | ||||
|         Triple("", "Romanian", "ro"), | ||||
|         Triple("", "Italian", "it"), | ||||
|         Triple("", "Chinese", "zh"), | ||||
|         Triple("", "Indonesian", "id"), | ||||
|         Triple("", "Czech", "cs"), | ||||
|     ).sortedBy { it.second } //ye, we go alphabetical, so ppl don't put their lang on top | ||||
| 
 | ||||
|     private fun getCurrentLocale(): String { | ||||
|         val res = requireContext().resources | ||||
|         // Change locale settings in the app. | ||||
|         // val dm = res.displayMetrics | ||||
|         val conf = res.configuration | ||||
|         return conf?.locale?.language ?: "en" | ||||
|     } | ||||
| 
 | ||||
|     override fun onViewCreated(view: View, savedInstanceState: Bundle?) { | ||||
|         super.onViewCreated(view, savedInstanceState) | ||||
|         setUpToolbar(R.string.category_preferred_media_and_lang) | ||||
|  | @ -112,22 +114,21 @@ class SettingsLang : PreferenceFragmentCompat() { | |||
|                     .putInt(getString(R.string.prefer_media_type_key), prefValues[it]) | ||||
|                     .apply() | ||||
| 
 | ||||
|                 AcraApplication.removeKey(HOMEPAGE_API) | ||||
|                 (context ?: AcraApplication.context)?.let { ctx -> app.initClient(ctx) } | ||||
|                 removeKey(HOMEPAGE_API) | ||||
| //                (context ?: AcraApplication.context)?.let { ctx -> app.initClient(ctx) } | ||||
|             } | ||||
|             return@setOnPreferenceClickListener true | ||||
|         } | ||||
| 
 | ||||
|         getPref(R.string.locale_key)?.setOnPreferenceClickListener { | ||||
|             val tempLangs = languages.toMutableList() | ||||
|             val tempLangs = appLanguages.toMutableList() | ||||
|             //if (beneneCount > 100) { | ||||
|             //    tempLangs.add(Triple("\uD83E\uDD8D", "mmmm... monke", "mo")) | ||||
|             //} | ||||
|             val current = getCurrentLocale() | ||||
|             val current = getCurrentLocale(requireContext()) | ||||
|             val languageCodes = tempLangs.map { it.third } | ||||
|             val languageNames = tempLangs.map { (emoji, name, iso) -> | ||||
|                 val flag = emoji.ifBlank { SubtitleHelper.getFlagFromIso(iso) ?: "ERROR" } | ||||
| 
 | ||||
|                 "$flag $name" | ||||
|             } | ||||
|             val index = languageCodes.indexOf(current) | ||||
|  | @ -149,7 +150,8 @@ class SettingsLang : PreferenceFragmentCompat() { | |||
| 
 | ||||
|         getPref(R.string.provider_lang_key)?.setOnPreferenceClickListener { | ||||
|             activity?.getApiProviderLangSettings()?.let { current -> | ||||
|                 val langs = APIHolder.apis.map { it.lang }.toSet().sortedBy { SubtitleHelper.fromTwoLettersToLanguage(it) } | ||||
|                 val langs = APIHolder.apis.map { it.lang }.toSet() | ||||
|                     .sortedBy { SubtitleHelper.fromTwoLettersToLanguage(it) } | ||||
| 
 | ||||
|                 val currentList = ArrayList<Int>() | ||||
|                 for (i in current) { | ||||
|  |  | |||
|  | @ -7,6 +7,7 @@ import android.os.Bundle | |||
| import android.view.View | ||||
| import android.widget.Toast | ||||
| import androidx.appcompat.app.AlertDialog | ||||
| import androidx.navigation.fragment.findNavController | ||||
| import androidx.preference.PreferenceFragmentCompat | ||||
| import com.lagradost.cloudstream3.CommonActivity | ||||
| import com.lagradost.cloudstream3.R | ||||
|  | @ -31,6 +32,7 @@ class SettingsUpdates : PreferenceFragmentCompat() { | |||
|         super.onViewCreated(view, savedInstanceState) | ||||
|         setUpToolbar(R.string.category_updates) | ||||
|     } | ||||
| 
 | ||||
|     override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { | ||||
|         hideKeyboard() | ||||
|         setPreferencesFromResource(R.xml.settings_updates, rootKey) | ||||
|  | @ -41,6 +43,11 @@ class SettingsUpdates : PreferenceFragmentCompat() { | |||
|             return@setOnPreferenceClickListener true | ||||
|         } | ||||
| 
 | ||||
|         getPref(R.string.redo_setup_key)?.setOnPreferenceClickListener { | ||||
|             findNavController().navigate(R.id.navigation_setup_language) | ||||
|             return@setOnPreferenceClickListener true | ||||
|         } | ||||
| 
 | ||||
|         getPref(R.string.restore_key)?.setOnPreferenceClickListener { | ||||
|             activity?.restorePrompt() | ||||
|             return@setOnPreferenceClickListener true | ||||
|  | @ -112,7 +119,11 @@ class SettingsUpdates : PreferenceFragmentCompat() { | |||
|             thread { | ||||
|                 if (!requireActivity().runAutoUpdate(false)) { | ||||
|                     activity?.runOnUiThread { | ||||
|                         CommonActivity.showToast(activity, R.string.no_update_found, Toast.LENGTH_SHORT) | ||||
|                         CommonActivity.showToast( | ||||
|                             activity, | ||||
|                             R.string.no_update_found, | ||||
|                             Toast.LENGTH_SHORT | ||||
|                         ) | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|  |  | |||
|  | @ -0,0 +1,90 @@ | |||
| package com.lagradost.cloudstream3.ui.setup | ||||
| 
 | ||||
| import android.os.Bundle | ||||
| import android.view.LayoutInflater | ||||
| import android.view.View | ||||
| import android.view.ViewGroup | ||||
| import android.widget.AbsListView | ||||
| import android.widget.ArrayAdapter | ||||
| import androidx.core.content.ContextCompat | ||||
| import androidx.fragment.app.Fragment | ||||
| import androidx.navigation.fragment.findNavController | ||||
| import androidx.preference.PreferenceManager | ||||
| import com.lagradost.cloudstream3.BuildConfig | ||||
| import com.lagradost.cloudstream3.CommonActivity | ||||
| import com.lagradost.cloudstream3.R | ||||
| import com.lagradost.cloudstream3.mvvm.normalSafeApiCall | ||||
| import com.lagradost.cloudstream3.ui.settings.appLanguages | ||||
| import com.lagradost.cloudstream3.ui.settings.getCurrentLocale | ||||
| import com.lagradost.cloudstream3.utils.SubtitleHelper | ||||
| import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbar | ||||
| import kotlinx.android.synthetic.main.fragment_setup_language.* | ||||
| import kotlinx.android.synthetic.main.fragment_setup_media.listview1 | ||||
| import kotlinx.android.synthetic.main.fragment_setup_media.next_btt | ||||
| 
 | ||||
| const val HAS_DONE_SETUP_KEY = "HAS_DONE_SETUP" | ||||
| class SetupFragmentLanguage : Fragment() { | ||||
|     override fun onCreateView( | ||||
|         inflater: LayoutInflater, container: ViewGroup?, | ||||
|         savedInstanceState: Bundle? | ||||
|     ): View? { | ||||
|         // Inflate the layout for this fragment | ||||
|         return inflater.inflate(R.layout.fragment_setup_language, container, false) | ||||
|     } | ||||
| 
 | ||||
|     override fun onViewCreated(view: View, savedInstanceState: Bundle?) { | ||||
|         super.onViewCreated(view, savedInstanceState) | ||||
|         context?.fixPaddingStatusbar(setup_root) | ||||
| 
 | ||||
|         // We don't want a crash for all users | ||||
|         normalSafeApiCall { | ||||
|             with(context) { | ||||
|                 if (this == null) return@normalSafeApiCall | ||||
|                 val settingsManager = PreferenceManager.getDefaultSharedPreferences(this) | ||||
| 
 | ||||
|                 val arrayAdapter = | ||||
|                     ArrayAdapter<String>(this, R.layout.sort_bottom_single_choice) | ||||
| 
 | ||||
|                 // Icons may crash on some weird android versions? | ||||
|                 normalSafeApiCall { | ||||
|                     val drawable = when { | ||||
|                         BuildConfig.DEBUG -> R.drawable.cloud_2_gradient_debug | ||||
|                         BuildConfig.BUILD_TYPE == "prerelease" -> R.drawable.cloud_2_gradient_beta | ||||
|                         else -> R.drawable.cloud_2_gradient | ||||
|                     } | ||||
|                     app_icon_image?.setImageDrawable(ContextCompat.getDrawable(this, drawable)) | ||||
|                 } | ||||
| 
 | ||||
|                 val current = getCurrentLocale(this) | ||||
|                 val languageCodes = appLanguages.map { it.third } | ||||
|                 val languageNames = appLanguages.map { (emoji, name, iso) -> | ||||
|                     val flag = emoji.ifBlank { SubtitleHelper.getFlagFromIso(iso) ?: "ERROR" } | ||||
|                     "$flag $name" | ||||
|                 } | ||||
|                 val index = languageCodes.indexOf(current) | ||||
| 
 | ||||
|                 arrayAdapter.addAll(languageNames) | ||||
|                 listview1?.adapter = arrayAdapter | ||||
|                 listview1?.choiceMode = AbsListView.CHOICE_MODE_SINGLE | ||||
|                 listview1?.setItemChecked(index, true) | ||||
| 
 | ||||
|                 listview1?.setOnItemClickListener { _, _, position, _ -> | ||||
|                     val code = languageCodes[position] | ||||
|                     CommonActivity.setLocale(activity, code) | ||||
|                     settingsManager.edit().putString(getString(R.string.locale_key), code).apply() | ||||
|                     activity?.recreate() | ||||
|                 } | ||||
| 
 | ||||
|                 next_btt?.setOnClickListener { | ||||
|                     findNavController().navigate(R.id.action_navigation_setup_language_to_navigation_setup_provider_languages) | ||||
|                 } | ||||
| 
 | ||||
|                 skip_btt?.setOnClickListener { | ||||
|                     findNavController().navigate(R.id.navigation_home) | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,89 @@ | |||
| package com.lagradost.cloudstream3.ui.setup | ||||
| 
 | ||||
| import android.os.Bundle | ||||
| import android.view.LayoutInflater | ||||
| import android.view.View | ||||
| import android.view.ViewGroup | ||||
| import android.widget.AbsListView | ||||
| import android.widget.ArrayAdapter | ||||
| import androidx.fragment.app.Fragment | ||||
| import androidx.navigation.fragment.findNavController | ||||
| import androidx.preference.PreferenceManager | ||||
| import com.lagradost.cloudstream3.R | ||||
| import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbar | ||||
| import kotlinx.android.synthetic.main.fragment_setup_layout.* | ||||
| import kotlinx.android.synthetic.main.fragment_setup_media.listview1 | ||||
| import kotlinx.android.synthetic.main.fragment_setup_media.next_btt | ||||
| import kotlinx.android.synthetic.main.fragment_setup_media.prev_btt | ||||
| import kotlinx.android.synthetic.main.fragment_setup_media.setup_root | ||||
| import org.acra.ACRA | ||||
| 
 | ||||
| 
 | ||||
| class SetupFragmentLayout : Fragment() { | ||||
|     override fun onCreateView( | ||||
|         inflater: LayoutInflater, container: ViewGroup?, | ||||
|         savedInstanceState: Bundle? | ||||
|     ): View? { | ||||
|         return inflater.inflate(R.layout.fragment_setup_layout, container, false) | ||||
|     } | ||||
| 
 | ||||
|     override fun onViewCreated(view: View, savedInstanceState: Bundle?) { | ||||
|         super.onViewCreated(view, savedInstanceState) | ||||
|         context?.fixPaddingStatusbar(setup_root) | ||||
| 
 | ||||
|         with(context) { | ||||
|             if (this == null) return | ||||
|             val settingsManager = PreferenceManager.getDefaultSharedPreferences(this) | ||||
| 
 | ||||
|             val prefNames = resources.getStringArray(R.array.app_layout) | ||||
|             val prefValues = resources.getIntArray(R.array.app_layout_values) | ||||
| 
 | ||||
|             val currentLayout = | ||||
|                 settingsManager.getInt(getString(R.string.app_layout_key), -1) | ||||
| 
 | ||||
|             val arrayAdapter = | ||||
|                 ArrayAdapter<String>(this, R.layout.sort_bottom_single_choice) | ||||
| 
 | ||||
|             arrayAdapter.addAll(prefNames.toList()) | ||||
|             listview1?.adapter = arrayAdapter | ||||
|             listview1?.choiceMode = AbsListView.CHOICE_MODE_SINGLE | ||||
|             listview1?.setItemChecked( | ||||
|                 prefValues.indexOf(currentLayout), true | ||||
|             ) | ||||
| 
 | ||||
|             listview1?.setOnItemClickListener { _, _, position, _ -> | ||||
|                 settingsManager.edit() | ||||
|                     .putInt(getString(R.string.app_layout_key), prefValues[position]) | ||||
|                     .apply() | ||||
|                 activity?.recreate() | ||||
|             } | ||||
| 
 | ||||
|             acra_switch?.setOnCheckedChangeListener { _, enableCrashReporting -> | ||||
|                 // Use same pref as in settings | ||||
|                 settingsManager.edit().putBoolean(ACRA.PREF_DISABLE_ACRA, !enableCrashReporting) | ||||
|                     .apply() | ||||
|                 val text = | ||||
|                     if (enableCrashReporting) R.string.bug_report_settings_off else R.string.bug_report_settings_on | ||||
|                 crash_reporting_text?.text = getText(text) | ||||
|             } | ||||
| 
 | ||||
|             val enableCrashReporting = !settingsManager.getBoolean(ACRA.PREF_DISABLE_ACRA, false) | ||||
|             acra_switch.isChecked = enableCrashReporting | ||||
|             crash_reporting_text.text = | ||||
|                 getText( | ||||
|                     if (enableCrashReporting) R.string.bug_report_settings_off else R.string.bug_report_settings_on | ||||
|                 ) | ||||
| 
 | ||||
| 
 | ||||
|             next_btt?.setOnClickListener { | ||||
|                 findNavController().navigate(R.id.navigation_home) | ||||
|             } | ||||
| 
 | ||||
|             prev_btt?.setOnClickListener { | ||||
|                 findNavController().popBackStack() | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,69 @@ | |||
| package com.lagradost.cloudstream3.ui.setup | ||||
| 
 | ||||
| import android.os.Bundle | ||||
| import android.view.LayoutInflater | ||||
| import android.view.View | ||||
| import android.view.ViewGroup | ||||
| import android.widget.AbsListView | ||||
| import android.widget.ArrayAdapter | ||||
| import androidx.fragment.app.Fragment | ||||
| import androidx.navigation.fragment.findNavController | ||||
| import androidx.preference.PreferenceManager | ||||
| import com.lagradost.cloudstream3.R | ||||
| import com.lagradost.cloudstream3.utils.DataStore.removeKey | ||||
| import com.lagradost.cloudstream3.utils.HOMEPAGE_API | ||||
| import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbar | ||||
| import kotlinx.android.synthetic.main.fragment_setup_media.* | ||||
| 
 | ||||
| 
 | ||||
| class SetupFragmentMedia : Fragment() { | ||||
|     override fun onCreateView( | ||||
|         inflater: LayoutInflater, container: ViewGroup?, | ||||
|         savedInstanceState: Bundle? | ||||
|     ): View? { | ||||
|         return inflater.inflate(R.layout.fragment_setup_media, container, false) | ||||
|     } | ||||
| 
 | ||||
|     override fun onViewCreated(view: View, savedInstanceState: Bundle?) { | ||||
|         super.onViewCreated(view, savedInstanceState) | ||||
|         context?.fixPaddingStatusbar(setup_root) | ||||
| 
 | ||||
|         with(context) { | ||||
|             if (this == null) return | ||||
|             val settingsManager = PreferenceManager.getDefaultSharedPreferences(this) | ||||
| 
 | ||||
|             val arrayAdapter = | ||||
|                 ArrayAdapter<String>(this, R.layout.sort_bottom_single_choice) | ||||
| 
 | ||||
|             val currentPrefMedia = | ||||
|                 settingsManager.getInt(getString(R.string.prefer_media_type_key), 0) | ||||
| 
 | ||||
|             val prefNames = resources.getStringArray(R.array.media_type_pref) | ||||
|             val prefValues = resources.getIntArray(R.array.media_type_pref_values) | ||||
| 
 | ||||
|             arrayAdapter.addAll(prefNames.toList()) | ||||
|             listview1?.adapter = arrayAdapter | ||||
|             listview1?.choiceMode = AbsListView.CHOICE_MODE_SINGLE | ||||
|             listview1?.setItemChecked(currentPrefMedia, true) | ||||
| 
 | ||||
|             listview1?.setOnItemClickListener { _, _, position, _ -> | ||||
|                 settingsManager.edit() | ||||
|                     .putInt(getString(R.string.prefer_media_type_key), prefValues[position]) | ||||
|                     .apply() | ||||
| 
 | ||||
|                 // Regenerate set homepage | ||||
|                 removeKey(HOMEPAGE_API) | ||||
|             } | ||||
| 
 | ||||
|             next_btt?.setOnClickListener { | ||||
|                 findNavController().navigate(R.id.navigation_setup_media_to_navigation_setup_layout) | ||||
|             } | ||||
| 
 | ||||
|             prev_btt?.setOnClickListener { | ||||
|                 findNavController().popBackStack() | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,80 @@ | |||
| package com.lagradost.cloudstream3.ui.setup | ||||
| 
 | ||||
| import android.os.Bundle | ||||
| import android.view.LayoutInflater | ||||
| import android.view.View | ||||
| import android.view.ViewGroup | ||||
| import android.widget.AbsListView | ||||
| import android.widget.ArrayAdapter | ||||
| import androidx.core.util.forEach | ||||
| import androidx.fragment.app.Fragment | ||||
| import androidx.navigation.fragment.findNavController | ||||
| import androidx.preference.PreferenceManager | ||||
| import com.lagradost.cloudstream3.APIHolder | ||||
| import com.lagradost.cloudstream3.APIHolder.getApiProviderLangSettings | ||||
| import com.lagradost.cloudstream3.R | ||||
| import com.lagradost.cloudstream3.utils.SubtitleHelper | ||||
| import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbar | ||||
| import kotlinx.android.synthetic.main.fragment_setup_media.* | ||||
| 
 | ||||
| class SetupFragmentProviderLanguage : Fragment() { | ||||
|     override fun onCreateView( | ||||
|         inflater: LayoutInflater, container: ViewGroup?, | ||||
|         savedInstanceState: Bundle? | ||||
|     ): View? { | ||||
|         // Inflate the layout for this fragment | ||||
|         return inflater.inflate(R.layout.fragment_setup_provider_languages, container, false) | ||||
|     } | ||||
| 
 | ||||
|     override fun onViewCreated(view: View, savedInstanceState: Bundle?) { | ||||
|         super.onViewCreated(view, savedInstanceState) | ||||
|         context?.fixPaddingStatusbar(setup_root) | ||||
| 
 | ||||
|         with(context) { | ||||
|             if (this == null) return | ||||
|             val settingsManager = PreferenceManager.getDefaultSharedPreferences(this) | ||||
| 
 | ||||
|             val arrayAdapter = | ||||
|                 ArrayAdapter<String>(this, R.layout.sort_bottom_single_choice) | ||||
| 
 | ||||
|             val current = this.getApiProviderLangSettings() | ||||
|             val langs = APIHolder.apis.map { it.lang }.toSet() | ||||
|                 .sortedBy { SubtitleHelper.fromTwoLettersToLanguage(it) } | ||||
| 
 | ||||
|             val currentList = current.map { langs.indexOf(it) } | ||||
|             val languageNames = langs.map { | ||||
|                 val emoji = SubtitleHelper.getFlagFromIso(it) | ||||
|                 val name = SubtitleHelper.fromTwoLettersToLanguage(it) | ||||
|                 "$emoji $name" | ||||
|             } | ||||
|             arrayAdapter.addAll(languageNames) | ||||
| 
 | ||||
|             listview1?.adapter = arrayAdapter | ||||
|             listview1?.choiceMode = AbsListView.CHOICE_MODE_MULTIPLE | ||||
|             currentList.forEach { | ||||
|                 listview1.setItemChecked(it, true) | ||||
|             } | ||||
| 
 | ||||
|             listview1?.setOnItemClickListener { _, _, _, _ -> | ||||
|                 val currentLanguages = mutableListOf<String>() | ||||
|                 listview1?.checkedItemPositions?.forEach { key, value -> | ||||
|                     if (value) currentLanguages.add(langs[key]) | ||||
|                 } | ||||
|                 settingsManager.edit().putStringSet( | ||||
|                     this.getString(R.string.provider_lang_key), | ||||
|                     currentLanguages.toSet() | ||||
|                 ).apply() | ||||
|             } | ||||
| 
 | ||||
|             next_btt?.setOnClickListener { | ||||
|                 findNavController().navigate(R.id.navigation_setup_provider_languages_to_navigation_setup_media) | ||||
|             } | ||||
| 
 | ||||
|             prev_btt?.setOnClickListener { | ||||
|                 findNavController().popBackStack() | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,6 @@ | |||
| <vector android:height="24dp" android:tint="?attr/white" | ||||
|     android:viewportHeight="24" android:viewportWidth="24" | ||||
|     android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> | ||||
|     <path android:fillColor="@android:color/white" android:pathData="M13.783,15.172l2.121,-2.121l5.996,5.996l-2.121,2.121z"/> | ||||
|     <path android:fillColor="@android:color/white" android:pathData="M17.5,10c1.93,0 3.5,-1.57 3.5,-3.5c0,-0.58 -0.16,-1.12 -0.41,-1.6l-2.7,2.7L16.4,6.11l2.7,-2.7C18.62,3.16 18.08,3 17.5,3C15.57,3 14,4.57 14,6.5c0,0.41 0.08,0.8 0.21,1.16l-1.85,1.85l-1.78,-1.78l0.71,-0.71L9.88,5.61L12,3.49c-1.17,-1.17 -3.07,-1.17 -4.24,0L4.22,7.03l1.41,1.41H2.81L2.1,9.15l3.54,3.54l0.71,-0.71V9.15l1.41,1.41l0.71,-0.71l1.78,1.78l-7.41,7.41l2.12,2.12L16.34,9.79C16.7,9.92 17.09,10 17.5,10z"/> | ||||
| </vector> | ||||
							
								
								
									
										66
									
								
								app/src/main/res/layout/fragment_setup_language.xml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								app/src/main/res/layout/fragment_setup_language.xml
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,66 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" | ||||
|     xmlns:tools="http://schemas.android.com/tools" | ||||
|     android:layout_width="match_parent" | ||||
|     android:id="@+id/setup_root" | ||||
|     android:layout_height="match_parent" | ||||
|     android:orientation="vertical"> | ||||
| 
 | ||||
|     <LinearLayout | ||||
|         android:layout_width="match_parent" | ||||
|         android:layout_height="wrap_content" | ||||
|         android:gravity="center"> | ||||
| 
 | ||||
|         <ImageView | ||||
|             android:id="@+id/app_icon_image" | ||||
|             android:layout_width="50dp" | ||||
|             android:layout_height="50dp" /> | ||||
| 
 | ||||
|         <TextView | ||||
|             android:layout_width="wrap_content" | ||||
|             android:layout_height="wrap_content" | ||||
|             android:layout_margin="20dp" | ||||
|             android:gravity="center" | ||||
|             android:text="@string/app_language" | ||||
|             android:textSize="18sp" /> | ||||
|     </LinearLayout> | ||||
| 
 | ||||
|     <ListView | ||||
|         android:id="@+id/listview1" | ||||
|         android:layout_width="match_parent" | ||||
|         android:layout_height="match_parent" | ||||
|         android:layout_rowWeight="1" | ||||
|         android:layout_marginBottom="60dp" | ||||
|         android:paddingTop="10dp" | ||||
|         android:requiresFadingEdge="vertical" | ||||
|         tools:listitem="@layout/sort_bottom_single_choice" /> | ||||
| 
 | ||||
|     <LinearLayout | ||||
|         android:id="@+id/apply_btt_holder" | ||||
|         android:layout_width="match_parent" | ||||
|         android:layout_height="60dp" | ||||
|         android:layout_gravity="bottom" | ||||
|         android:layout_marginTop="-60dp" | ||||
|         android:gravity="bottom|end" | ||||
|         android:orientation="horizontal"> | ||||
| 
 | ||||
|         <com.google.android.material.button.MaterialButton | ||||
|             android:id="@+id/next_btt" | ||||
|             style="@style/WhiteButton" | ||||
|             android:layout_width="wrap_content" | ||||
|             android:layout_gravity="center_vertical|end" | ||||
|             android:text="@string/next" /> | ||||
| 
 | ||||
|         <com.google.android.material.button.MaterialButton | ||||
|             android:id="@+id/skip_btt" | ||||
|             style="@style/BlackButton" | ||||
|             android:layout_width="wrap_content" | ||||
|             android:layout_gravity="center_vertical|end" | ||||
|             android:text="@string/skip_setup"> | ||||
| 
 | ||||
|             <requestFocus /> | ||||
|         </com.google.android.material.button.MaterialButton> | ||||
|     </LinearLayout> | ||||
| 
 | ||||
| 
 | ||||
| </LinearLayout> | ||||
							
								
								
									
										102
									
								
								app/src/main/res/layout/fragment_setup_layout.xml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										102
									
								
								app/src/main/res/layout/fragment_setup_layout.xml
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,102 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" | ||||
|     xmlns:tools="http://schemas.android.com/tools" | ||||
|     android:id="@+id/setup_root" | ||||
|     android:layout_width="match_parent" | ||||
|     android:layout_height="match_parent" | ||||
|     android:orientation="vertical"> | ||||
| 
 | ||||
|     <FrameLayout | ||||
|         android:layout_width="match_parent" | ||||
|         android:layout_height="wrap_content" | ||||
|         android:layout_margin="20dp" | ||||
|         android:orientation="horizontal"> | ||||
| 
 | ||||
|         <LinearLayout | ||||
|             android:layout_width="match_parent" | ||||
|             android:layout_height="match_parent" | ||||
|             android:layout_gravity="center" | ||||
|             android:layout_marginHorizontal="50dp" | ||||
|             android:orientation="vertical"> | ||||
| 
 | ||||
|             <TextView | ||||
|                 android:layout_width="match_parent" | ||||
|                 android:layout_height="wrap_content" | ||||
|                 android:gravity="center" | ||||
|                 android:text="@string/crash_reporting_title" | ||||
|                 android:textSize="18sp" /> | ||||
| 
 | ||||
|             <TextView | ||||
|                 android:id="@+id/crash_reporting_text" | ||||
|                 android:layout_width="match_parent" | ||||
|                 android:layout_height="wrap_content" | ||||
|                 android:gravity="center" | ||||
|                 android:text="@string/bug_report_settings_off" /> | ||||
|         </LinearLayout> | ||||
| 
 | ||||
| 
 | ||||
|         <androidx.appcompat.widget.SwitchCompat | ||||
|             android:id="@+id/acra_switch" | ||||
|             android:layout_width="wrap_content" | ||||
|             android:layout_height="wrap_content" | ||||
|             android:layout_gravity="end|center_vertical" | ||||
|             android:checked="true"> | ||||
| 
 | ||||
|         </androidx.appcompat.widget.SwitchCompat> | ||||
|     </FrameLayout> | ||||
| 
 | ||||
|     <TextView | ||||
|         android:layout_width="match_parent" | ||||
|         android:layout_height="wrap_content" | ||||
|         android:layout_marginTop="20dp" | ||||
|         android:gravity="center" | ||||
|         android:text="@string/app_layout" | ||||
|         android:textSize="18sp" /> | ||||
| 
 | ||||
|     <TextView | ||||
|         android:layout_width="match_parent" | ||||
|         android:layout_height="wrap_content" | ||||
|         android:gravity="center" | ||||
|         android:text="@string/app_layout_subtext"> | ||||
| 
 | ||||
|     </TextView> | ||||
| 
 | ||||
|     <ListView | ||||
|         android:id="@+id/listview1" | ||||
|         android:layout_width="match_parent" | ||||
| 
 | ||||
|         android:layout_height="match_parent" | ||||
|         android:layout_rowWeight="1" | ||||
|         android:layout_marginBottom="60dp" | ||||
|         android:nextFocusLeft="@id/apply_btt" | ||||
|         android:nextFocusRight="@id/cancel_btt" | ||||
|         android:paddingTop="10dp" | ||||
|         android:requiresFadingEdge="vertical" | ||||
|         tools:listitem="@layout/sort_bottom_single_choice" /> | ||||
| 
 | ||||
|     <LinearLayout | ||||
|         android:id="@+id/apply_btt_holder" | ||||
|         android:layout_width="match_parent" | ||||
|         android:layout_height="60dp" | ||||
|         android:layout_gravity="bottom" | ||||
|         android:layout_marginTop="-60dp" | ||||
|         android:gravity="bottom|end" | ||||
|         android:orientation="horizontal"> | ||||
| 
 | ||||
|         <com.google.android.material.button.MaterialButton | ||||
|             android:id="@+id/next_btt" | ||||
|             style="@style/WhiteButton" | ||||
|             android:layout_width="wrap_content" | ||||
|             android:layout_gravity="center_vertical|end" | ||||
|             android:text="@string/setup_done" /> | ||||
| 
 | ||||
|         <com.google.android.material.button.MaterialButton | ||||
|             android:id="@+id/prev_btt" | ||||
|             style="@style/BlackButton" | ||||
|             android:layout_width="wrap_content" | ||||
|             android:layout_gravity="center_vertical|end" | ||||
|             android:text="@string/previous" /> | ||||
|     </LinearLayout> | ||||
| 
 | ||||
| 
 | ||||
| </LinearLayout> | ||||
							
								
								
									
										60
									
								
								app/src/main/res/layout/fragment_setup_media.xml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								app/src/main/res/layout/fragment_setup_media.xml
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,60 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" | ||||
|     xmlns:tools="http://schemas.android.com/tools" | ||||
|     android:id="@+id/setup_root" | ||||
|     android:layout_width="match_parent" | ||||
|     android:layout_height="match_parent" | ||||
|     android:orientation="vertical"> | ||||
| 
 | ||||
|     <TextView | ||||
|         android:layout_width="match_parent" | ||||
|         android:layout_height="wrap_content" | ||||
|         android:layout_marginTop="20dp" | ||||
|         android:gravity="center" | ||||
|         android:text="@string/preferred_media_settings" | ||||
|         android:textSize="18sp" /> | ||||
| 
 | ||||
|     <TextView | ||||
|         android:layout_width="match_parent" | ||||
|         android:layout_height="wrap_content" | ||||
|         android:gravity="center" | ||||
|         android:text="@string/preferred_media_subtext" /> | ||||
| 
 | ||||
|     <ListView | ||||
|         android:id="@+id/listview1" | ||||
|         android:layout_width="match_parent" | ||||
|         android:layout_height="match_parent" | ||||
|         android:layout_rowWeight="1" | ||||
|         android:layout_marginBottom="60dp" | ||||
|         android:nextFocusLeft="@id/apply_btt" | ||||
|         android:nextFocusRight="@id/cancel_btt" | ||||
|         android:paddingTop="10dp" | ||||
|         android:requiresFadingEdge="vertical" | ||||
|         tools:listitem="@layout/sort_bottom_single_choice" /> | ||||
| 
 | ||||
|     <LinearLayout | ||||
|         android:id="@+id/apply_btt_holder" | ||||
|         android:layout_width="match_parent" | ||||
|         android:layout_height="60dp" | ||||
|         android:layout_gravity="bottom" | ||||
|         android:layout_marginTop="-60dp" | ||||
|         android:gravity="bottom|end" | ||||
|         android:orientation="horizontal"> | ||||
| 
 | ||||
|         <com.google.android.material.button.MaterialButton | ||||
|             android:id="@+id/next_btt" | ||||
|             style="@style/WhiteButton" | ||||
|             android:layout_width="wrap_content" | ||||
|             android:layout_gravity="center_vertical|end" | ||||
|             android:text="@string/next" /> | ||||
| 
 | ||||
|         <com.google.android.material.button.MaterialButton | ||||
|             android:id="@+id/prev_btt" | ||||
|             style="@style/BlackButton" | ||||
|             android:layout_width="wrap_content" | ||||
|             android:layout_gravity="center_vertical|end" | ||||
|             android:text="@string/previous" /> | ||||
|     </LinearLayout> | ||||
| 
 | ||||
| 
 | ||||
| </LinearLayout> | ||||
|  | @ -0,0 +1,63 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" | ||||
|     xmlns:tools="http://schemas.android.com/tools" | ||||
|     android:id="@+id/setup_root" | ||||
|     android:layout_width="match_parent" | ||||
|     android:layout_height="match_parent" | ||||
|     android:orientation="vertical"> | ||||
| 
 | ||||
|     <TextView | ||||
|         android:layout_width="match_parent" | ||||
|         android:layout_height="wrap_content" | ||||
|         android:layout_marginTop="20dp" | ||||
|         android:gravity="center" | ||||
|         android:text="@string/provider_lang_settings" | ||||
|         android:textSize="18sp" /> | ||||
| 
 | ||||
|     <TextView | ||||
|         android:layout_width="match_parent" | ||||
|         android:layout_height="wrap_content" | ||||
|         android:gravity="center" | ||||
|         android:text="@string/provider_languages_tip"> | ||||
| 
 | ||||
|     </TextView> | ||||
| 
 | ||||
|     <ListView | ||||
|         android:id="@+id/listview1" | ||||
|         android:layout_width="match_parent" | ||||
| 
 | ||||
|         android:layout_height="match_parent" | ||||
|         android:layout_rowWeight="1" | ||||
|         android:layout_marginBottom="60dp" | ||||
|         android:nextFocusLeft="@id/apply_btt" | ||||
|         android:nextFocusRight="@id/cancel_btt" | ||||
|         android:paddingTop="10dp" | ||||
|         android:requiresFadingEdge="vertical" | ||||
|         tools:listitem="@layout/sort_bottom_single_choice" /> | ||||
| 
 | ||||
|     <LinearLayout | ||||
|         android:id="@+id/apply_btt_holder" | ||||
|         android:layout_width="match_parent" | ||||
|         android:layout_height="60dp" | ||||
|         android:layout_gravity="bottom" | ||||
|         android:layout_marginTop="-60dp" | ||||
|         android:gravity="bottom|end" | ||||
|         android:orientation="horizontal"> | ||||
| 
 | ||||
|         <com.google.android.material.button.MaterialButton | ||||
|             android:id="@+id/next_btt" | ||||
|             style="@style/WhiteButton" | ||||
|             android:layout_width="wrap_content" | ||||
|             android:layout_gravity="center_vertical|end" | ||||
|             android:text="@string/next" /> | ||||
| 
 | ||||
|         <com.google.android.material.button.MaterialButton | ||||
|             android:id="@+id/prev_btt" | ||||
|             style="@style/BlackButton" | ||||
|             android:layout_width="wrap_content" | ||||
|             android:layout_gravity="center_vertical|end" | ||||
|             android:text="@string/previous" /> | ||||
|     </LinearLayout> | ||||
| 
 | ||||
| 
 | ||||
| </LinearLayout> | ||||
|  | @ -1,396 +1,460 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <navigation xmlns:android="http://schemas.android.com/apk/res/android" | ||||
|         xmlns:app="http://schemas.android.com/apk/res-auto" | ||||
|         xmlns:tools="http://schemas.android.com/tools" | ||||
|         android:id="@+id/mobile_navigation" | ||||
|         app:startDestination="@+id/navigation_home"> | ||||
|     xmlns:app="http://schemas.android.com/apk/res-auto" | ||||
|     xmlns:tools="http://schemas.android.com/tools" | ||||
|     android:id="@+id/mobile_navigation" | ||||
|     app:startDestination="@+id/navigation_home"> | ||||
| 
 | ||||
|     <action | ||||
|             android:id="@+id/global_to_navigation_results" | ||||
|             app:destination="@id/navigation_results" | ||||
|             app:enterAnim="@anim/enter_anim" | ||||
|             app:exitAnim="@anim/exit_anim" | ||||
|             app:popEnterAnim="@anim/enter_anim" | ||||
|             app:popExitAnim="@anim/exit_anim"> | ||||
|         android:id="@+id/global_to_navigation_results" | ||||
|         app:destination="@id/navigation_results" | ||||
|         app:enterAnim="@anim/enter_anim" | ||||
|         app:exitAnim="@anim/exit_anim" | ||||
|         app:popEnterAnim="@anim/enter_anim" | ||||
|         app:popExitAnim="@anim/exit_anim"> | ||||
|         <argument | ||||
|                 android:name="url" | ||||
|                 app:argType="string" /> | ||||
|             android:name="url" | ||||
|             app:argType="string" /> | ||||
|         <argument | ||||
|                 android:name="apiName" | ||||
|                 app:argType="string" /> | ||||
|             android:name="apiName" | ||||
|             app:argType="string" /> | ||||
|         <argument | ||||
|                 android:name="startAction" | ||||
|                 app:argType="integer" | ||||
|                 android:defaultValue="0" /> | ||||
|             android:name="startAction" | ||||
|             android:defaultValue="0" | ||||
|             app:argType="integer" /> | ||||
|         <argument | ||||
|                 android:name="startValue" | ||||
|                 app:argType="integer" | ||||
|                 android:defaultValue="0" /> | ||||
|             android:name="startValue" | ||||
|             android:defaultValue="0" | ||||
|             app:argType="integer" /> | ||||
|         <argument | ||||
|                 android:name="restart" | ||||
|                 app:argType="boolean" | ||||
|                 android:defaultValue="false" /> | ||||
|             android:name="restart" | ||||
|             android:defaultValue="false" | ||||
|             app:argType="boolean" /> | ||||
|     </action> | ||||
|     <action | ||||
|             android:id="@+id/global_to_navigation_player" | ||||
|             app:destination="@id/navigation_player" | ||||
|             app:enterAnim="@anim/enter_anim" | ||||
|             app:exitAnim="@anim/exit_anim" | ||||
|             app:popEnterAnim="@anim/enter_anim" | ||||
|             app:popExitAnim="@anim/exit_anim"> | ||||
|         android:id="@+id/global_to_navigation_player" | ||||
|         app:destination="@id/navigation_player" | ||||
|         app:enterAnim="@anim/enter_anim" | ||||
|         app:exitAnim="@anim/exit_anim" | ||||
|         app:popEnterAnim="@anim/enter_anim" | ||||
|         app:popExitAnim="@anim/exit_anim"> | ||||
|         <argument | ||||
|                 android:name="data" | ||||
|                 app:argType="string" | ||||
|                 android:defaultValue="@null" /> | ||||
|             android:name="data" | ||||
|             android:defaultValue="@null" | ||||
|             app:argType="string" /> | ||||
|         <argument | ||||
|                 android:name="uriData" | ||||
|                 app:argType="string" | ||||
|                 android:defaultValue="@null" /> | ||||
|             android:name="uriData" | ||||
|             android:defaultValue="@null" | ||||
|             app:argType="string" /> | ||||
|         <argument | ||||
|                 android:name="resumePosition" | ||||
|                 app:argType="long" | ||||
|                 android:defaultValue="0L" /> | ||||
|             android:name="resumePosition" | ||||
|             android:defaultValue="0L" | ||||
|             app:argType="long" /> | ||||
|     </action> | ||||
| 
 | ||||
|     <action | ||||
|             android:id="@+id/global_to_navigation_home" | ||||
|             app:destination="@id/navigation_home" | ||||
|             app:enterAnim="@anim/enter_anim" | ||||
|             app:exitAnim="@anim/exit_anim" | ||||
|             app:popEnterAnim="@anim/enter_anim" | ||||
|             app:popExitAnim="@anim/exit_anim" /> | ||||
|         android:id="@+id/global_to_navigation_home" | ||||
|         app:destination="@id/navigation_home" | ||||
|         app:enterAnim="@anim/enter_anim" | ||||
|         app:exitAnim="@anim/exit_anim" | ||||
|         app:popEnterAnim="@anim/enter_anim" | ||||
|         app:popExitAnim="@anim/exit_anim" /> | ||||
| 
 | ||||
|     <action | ||||
|             android:id="@+id/global_to_navigation_subtitles" | ||||
|         android:id="@+id/global_to_navigation_subtitles" | ||||
|         app:destination="@id/navigation_subtitles" | ||||
|         app:enterAnim="@anim/enter_anim" | ||||
|         app:exitAnim="@anim/exit_anim" | ||||
|         app:popEnterAnim="@anim/enter_anim" | ||||
|         app:popExitAnim="@anim/exit_anim"> | ||||
|         <argument | ||||
|             android:name="hide" | ||||
|             android:defaultValue="true" | ||||
|             app:argType="boolean" /> | ||||
|     </action> | ||||
| 
 | ||||
|     <action | ||||
|         android:id="@+id/global_to_navigation_chrome_subtitles" | ||||
|         app:destination="@id/navigation_chrome_subtitles" | ||||
|         app:enterAnim="@anim/enter_anim" | ||||
|         app:exitAnim="@anim/exit_anim" | ||||
|         app:popEnterAnim="@anim/enter_anim" | ||||
|         app:popExitAnim="@anim/exit_anim"> | ||||
|         <argument | ||||
|             android:name="hide" | ||||
|             android:defaultValue="true" | ||||
|             app:argType="boolean" /> | ||||
|     </action> | ||||
| 
 | ||||
|     <fragment | ||||
|         android:id="@+id/navigation_settings_player" | ||||
|         android:name="com.lagradost.cloudstream3.ui.settings.SettingsPlayer" | ||||
|         android:label="@string/title_settings" | ||||
|         app:enterAnim="@anim/enter_anim" | ||||
|         app:exitAnim="@anim/exit_anim" | ||||
|         app:popEnterAnim="@anim/enter_anim" | ||||
|         app:popExitAnim="@anim/exit_anim"> | ||||
|         <action | ||||
|             android:id="@+id/action_navigation_settings_player_to_navigation_subtitles" | ||||
|             app:destination="@id/navigation_subtitles" | ||||
|             app:enterAnim="@anim/enter_anim" | ||||
|             app:exitAnim="@anim/exit_anim" | ||||
|             app:popEnterAnim="@anim/enter_anim" | ||||
|             app:popExitAnim="@anim/exit_anim"> | ||||
|         <argument | ||||
|                 android:name="hide" | ||||
|                 app:argType="boolean" | ||||
|                 android:defaultValue="true" /> | ||||
|     </action> | ||||
| 
 | ||||
|     <action | ||||
|             android:id="@+id/global_to_navigation_chrome_subtitles" | ||||
|             app:popExitAnim="@anim/exit_anim" /> | ||||
|         <action | ||||
|             android:id="@+id/action_navigation_settings_player_to_navigation_chrome_subtitles" | ||||
|             app:destination="@id/navigation_chrome_subtitles" | ||||
|             app:enterAnim="@anim/enter_anim" | ||||
|             app:exitAnim="@anim/exit_anim" | ||||
|             app:popEnterAnim="@anim/enter_anim" | ||||
|             app:popExitAnim="@anim/exit_anim"> | ||||
|         <argument | ||||
|                 android:name="hide" | ||||
|                 app:argType="boolean" | ||||
|                 android:defaultValue="true" /> | ||||
|     </action> | ||||
| 
 | ||||
|     <fragment | ||||
|             android:id="@+id/navigation_settings_player" | ||||
|             android:label="@string/title_settings" | ||||
|             android:name="com.lagradost.cloudstream3.ui.settings.SettingsPlayer" | ||||
|             app:enterAnim="@anim/enter_anim" | ||||
|             app:exitAnim="@anim/exit_anim" | ||||
|             app:popEnterAnim="@anim/enter_anim" | ||||
|             app:popExitAnim="@anim/exit_anim"> | ||||
|         <action | ||||
|                 android:id="@+id/action_navigation_settings_player_to_navigation_subtitles" | ||||
|                 app:destination="@id/navigation_subtitles" | ||||
|                 app:enterAnim="@anim/enter_anim" | ||||
|                 app:exitAnim="@anim/exit_anim" | ||||
|                 app:popEnterAnim="@anim/enter_anim" | ||||
|                 app:popExitAnim="@anim/exit_anim" /> | ||||
|         <action | ||||
|                 android:id="@+id/action_navigation_settings_player_to_navigation_chrome_subtitles" | ||||
|                 app:destination="@id/navigation_chrome_subtitles" | ||||
|                 app:enterAnim="@anim/enter_anim" | ||||
|                 app:exitAnim="@anim/exit_anim" | ||||
|                 app:popEnterAnim="@anim/enter_anim" | ||||
|                 app:popExitAnim="@anim/exit_anim" /> | ||||
|             app:popExitAnim="@anim/exit_anim" /> | ||||
|     </fragment> | ||||
| 
 | ||||
|     <fragment | ||||
|             android:id="@+id/navigation_settings_ui" | ||||
|             android:label="@string/title_settings" | ||||
|             android:name="com.lagradost.cloudstream3.ui.settings.SettingsUI" | ||||
|             app:enterAnim="@anim/enter_anim" | ||||
|             app:exitAnim="@anim/exit_anim" | ||||
|             app:popEnterAnim="@anim/enter_anim" | ||||
|             app:popExitAnim="@anim/exit_anim" /> | ||||
|         android:id="@+id/navigation_settings_ui" | ||||
|         android:name="com.lagradost.cloudstream3.ui.settings.SettingsUI" | ||||
|         android:label="@string/title_settings" | ||||
|         app:enterAnim="@anim/enter_anim" | ||||
|         app:exitAnim="@anim/exit_anim" | ||||
|         app:popEnterAnim="@anim/enter_anim" | ||||
|         app:popExitAnim="@anim/exit_anim" /> | ||||
| 
 | ||||
|     <fragment | ||||
|             android:id="@+id/navigation_settings_general" | ||||
|             android:label="@string/title_settings" | ||||
|             android:name="com.lagradost.cloudstream3.ui.settings.SettingsGeneral" | ||||
|             app:enterAnim="@anim/enter_anim" | ||||
|             app:exitAnim="@anim/exit_anim" | ||||
|             app:popEnterAnim="@anim/enter_anim" | ||||
|             app:popExitAnim="@anim/exit_anim" /> | ||||
|         android:id="@+id/navigation_settings_general" | ||||
|         android:name="com.lagradost.cloudstream3.ui.settings.SettingsGeneral" | ||||
|         android:label="@string/title_settings" | ||||
|         app:enterAnim="@anim/enter_anim" | ||||
|         app:exitAnim="@anim/exit_anim" | ||||
|         app:popEnterAnim="@anim/enter_anim" | ||||
|         app:popExitAnim="@anim/exit_anim" /> | ||||
| 
 | ||||
|     <fragment | ||||
|             android:id="@+id/navigation_settings_lang" | ||||
|             android:label="@string/title_settings" | ||||
|             android:name="com.lagradost.cloudstream3.ui.settings.SettingsLang" | ||||
|             app:enterAnim="@anim/enter_anim" | ||||
|             app:exitAnim="@anim/exit_anim" | ||||
|             app:popEnterAnim="@anim/enter_anim" | ||||
|             app:popExitAnim="@anim/exit_anim" /> | ||||
|         android:id="@+id/navigation_settings_lang" | ||||
|         android:name="com.lagradost.cloudstream3.ui.settings.SettingsLang" | ||||
|         android:label="@string/title_settings" | ||||
|         app:enterAnim="@anim/enter_anim" | ||||
|         app:exitAnim="@anim/exit_anim" | ||||
|         app:popEnterAnim="@anim/enter_anim" | ||||
|         app:popExitAnim="@anim/exit_anim" /> | ||||
| 
 | ||||
|     <fragment | ||||
|             android:id="@+id/navigation_settings_updates" | ||||
|             android:label="@string/title_settings" | ||||
|             android:name="com.lagradost.cloudstream3.ui.settings.SettingsUpdates" | ||||
|             app:enterAnim="@anim/enter_anim" | ||||
|             app:exitAnim="@anim/exit_anim" | ||||
|             app:popEnterAnim="@anim/enter_anim" | ||||
|             app:popExitAnim="@anim/exit_anim" /> | ||||
|         android:id="@+id/navigation_settings_updates" | ||||
|         android:name="com.lagradost.cloudstream3.ui.settings.SettingsUpdates" | ||||
|         android:label="@string/title_settings" | ||||
|         app:enterAnim="@anim/enter_anim" | ||||
|         app:exitAnim="@anim/exit_anim" | ||||
|         app:popEnterAnim="@anim/enter_anim" | ||||
|         app:popExitAnim="@anim/exit_anim" /> | ||||
| 
 | ||||
|     <fragment | ||||
|             android:id="@+id/navigation_settings_account" | ||||
|             android:label="@string/title_settings" | ||||
|             android:name="com.lagradost.cloudstream3.ui.settings.SettingsAccount" | ||||
|             app:enterAnim="@anim/enter_anim" | ||||
|             app:exitAnim="@anim/exit_anim" | ||||
|             app:popEnterAnim="@anim/enter_anim" | ||||
|             app:popExitAnim="@anim/exit_anim" /> | ||||
|         android:id="@+id/navigation_settings_account" | ||||
|         android:name="com.lagradost.cloudstream3.ui.settings.SettingsAccount" | ||||
|         android:label="@string/title_settings" | ||||
|         app:enterAnim="@anim/enter_anim" | ||||
|         app:exitAnim="@anim/exit_anim" | ||||
|         app:popEnterAnim="@anim/enter_anim" | ||||
|         app:popExitAnim="@anim/exit_anim" /> | ||||
| 
 | ||||
|     <action | ||||
|             android:id="@+id/global_to_navigation_quick_search" | ||||
|         android:id="@+id/global_to_navigation_quick_search" | ||||
|         app:destination="@id/navigation_quick_search" | ||||
|         app:enterAnim="@anim/enter_anim" | ||||
|         app:exitAnim="@anim/exit_anim" | ||||
|         app:popEnterAnim="@anim/enter_anim" | ||||
|         app:popExitAnim="@anim/exit_anim"> | ||||
|         <argument | ||||
|             android:name="mainapi" | ||||
|             android:defaultValue="true" | ||||
|             app:argType="boolean" /> | ||||
|         <argument | ||||
|             android:name="autosearch" | ||||
|             android:defaultValue="@null" | ||||
|             app:argType="string" /> | ||||
|     </action> | ||||
| 
 | ||||
|     <fragment | ||||
|         android:id="@+id/navigation_home" | ||||
|         android:name="com.lagradost.cloudstream3.ui.home.HomeFragment" | ||||
|         android:label="@string/title_home" | ||||
|         app:enterAnim="@anim/enter_anim" | ||||
|         app:exitAnim="@anim/exit_anim" | ||||
|         app:popEnterAnim="@anim/enter_anim" | ||||
|         app:popExitAnim="@anim/exit_anim" | ||||
|         tools:layout="@layout/fragment_home"> | ||||
|         <action | ||||
|             android:id="@+id/action_navigation_home_to_navigation_results" | ||||
|             app:destination="@id/navigation_results" | ||||
|             app:enterAnim="@anim/enter_anim" | ||||
|             app:exitAnim="@anim/exit_anim" | ||||
|             app:popEnterAnim="@anim/enter_anim" | ||||
|             app:popExitAnim="@anim/exit_anim" /> | ||||
|         <action | ||||
|             android:id="@+id/action_navigation_home_to_navigation_quick_search" | ||||
|             app:destination="@id/navigation_quick_search" | ||||
|             app:enterAnim="@anim/enter_anim" | ||||
|             app:exitAnim="@anim/exit_anim" | ||||
|             app:popEnterAnim="@anim/enter_anim" | ||||
|             app:popExitAnim="@anim/exit_anim"> | ||||
|         <argument | ||||
|                 android:name="mainapi" | ||||
|                 app:argType="boolean" | ||||
|                 android:defaultValue="true" /> | ||||
|         <argument | ||||
|                 android:name="autosearch" | ||||
|                 app:argType="string" | ||||
|                 android:defaultValue="@null" /> | ||||
|     </action> | ||||
| 
 | ||||
|     <fragment | ||||
|             android:id="@+id/navigation_home" | ||||
|             android:name="com.lagradost.cloudstream3.ui.home.HomeFragment" | ||||
|             android:label="@string/title_home" | ||||
|             tools:layout="@layout/fragment_home" | ||||
|             app:enterAnim="@anim/enter_anim" | ||||
|             app:exitAnim="@anim/exit_anim" | ||||
|             app:popEnterAnim="@anim/enter_anim" | ||||
|             app:popExitAnim="@anim/exit_anim"> | ||||
|         <action | ||||
|                 android:id="@+id/action_navigation_home_to_navigation_results" | ||||
|                 app:destination="@id/navigation_results" | ||||
|                 app:enterAnim="@anim/enter_anim" | ||||
|                 app:exitAnim="@anim/exit_anim" | ||||
|                 app:popEnterAnim="@anim/enter_anim" | ||||
|                 app:popExitAnim="@anim/exit_anim" /> | ||||
|         <action | ||||
|                 android:id="@+id/action_navigation_home_to_navigation_quick_search" | ||||
|                 app:destination="@id/navigation_quick_search" | ||||
|                 app:enterAnim="@anim/enter_anim" | ||||
|                 app:exitAnim="@anim/exit_anim" | ||||
|                 app:popEnterAnim="@anim/enter_anim" | ||||
|                 app:popExitAnim="@anim/exit_anim" /> | ||||
|             app:popExitAnim="@anim/exit_anim" /> | ||||
|     </fragment> | ||||
| 
 | ||||
|     <fragment | ||||
|             android:id="@+id/navigation_search" | ||||
|             android:name="com.lagradost.cloudstream3.ui.search.SearchFragment" | ||||
|             android:label="@string/title_search" | ||||
|             tools:layout="@layout/fragment_search" | ||||
|         android:id="@+id/navigation_search" | ||||
|         android:name="com.lagradost.cloudstream3.ui.search.SearchFragment" | ||||
|         android:label="@string/title_search" | ||||
|         app:enterAnim="@anim/enter_anim" | ||||
|         app:exitAnim="@anim/exit_anim" | ||||
|         app:popEnterAnim="@anim/enter_anim" | ||||
|         app:popExitAnim="@anim/exit_anim" | ||||
|         tools:layout="@layout/fragment_search"> | ||||
|         <action | ||||
|             android:id="@+id/action_navigation_search_to_navigation_results" | ||||
|             app:destination="@id/navigation_results" | ||||
|             app:enterAnim="@anim/enter_anim" | ||||
|             app:exitAnim="@anim/exit_anim" | ||||
|             app:popEnterAnim="@anim/enter_anim" | ||||
|             app:popExitAnim="@anim/exit_anim"> | ||||
|         <action | ||||
|                 android:id="@+id/action_navigation_search_to_navigation_results" | ||||
|                 app:destination="@id/navigation_results" | ||||
|                 app:enterAnim="@anim/enter_anim" | ||||
|                 app:exitAnim="@anim/exit_anim" | ||||
|                 app:popEnterAnim="@anim/enter_anim" | ||||
|                 app:popExitAnim="@anim/exit_anim" /> | ||||
|             app:popExitAnim="@anim/exit_anim" /> | ||||
|     </fragment> | ||||
| 
 | ||||
|     <fragment | ||||
|             android:id="@+id/navigation_downloads" | ||||
|             android:name="com.lagradost.cloudstream3.ui.download.DownloadFragment" | ||||
|             android:label="@string/title_downloads" | ||||
|             tools:layout="@layout/fragment_downloads" | ||||
|         android:id="@+id/navigation_downloads" | ||||
|         android:name="com.lagradost.cloudstream3.ui.download.DownloadFragment" | ||||
|         android:label="@string/title_downloads" | ||||
|         app:enterAnim="@anim/enter_anim" | ||||
|         app:exitAnim="@anim/exit_anim" | ||||
|         app:popEnterAnim="@anim/enter_anim" | ||||
|         app:popExitAnim="@anim/exit_anim" | ||||
|         tools:layout="@layout/fragment_downloads"> | ||||
| 
 | ||||
|         <action | ||||
|             android:id="@+id/action_navigation_downloads_to_navigation_download_child" | ||||
|             app:destination="@id/navigation_download_child" | ||||
|             app:enterAnim="@anim/enter_anim" | ||||
|             app:exitAnim="@anim/exit_anim" | ||||
|             app:popEnterAnim="@anim/enter_anim" | ||||
|             app:popExitAnim="@anim/exit_anim"> | ||||
| 
 | ||||
|         <action | ||||
|                 android:id="@+id/action_navigation_downloads_to_navigation_download_child" | ||||
|                 app:destination="@id/navigation_download_child" | ||||
|                 app:enterAnim="@anim/enter_anim" | ||||
|                 app:exitAnim="@anim/exit_anim" | ||||
|                 app:popEnterAnim="@anim/enter_anim" | ||||
|                 app:popExitAnim="@anim/exit_anim"> | ||||
|             <argument | ||||
|                     android:name="name" | ||||
|                     app:argType="string" /> | ||||
|                 android:name="name" | ||||
|                 app:argType="string" /> | ||||
|             <argument | ||||
|                     android:name="folder" | ||||
|                     app:argType="string" /> | ||||
|                 android:name="folder" | ||||
|                 app:argType="string" /> | ||||
|         </action> | ||||
|         <action | ||||
|                 android:id="@+id/action_navigation_downloads_to_navigation_results" | ||||
|                 app:destination="@id/navigation_results" | ||||
|                 app:enterAnim="@anim/enter_anim" | ||||
|                 app:exitAnim="@anim/exit_anim" | ||||
|                 app:popEnterAnim="@anim/enter_anim" | ||||
|                 app:popExitAnim="@anim/exit_anim" /> | ||||
|         <action | ||||
|                 android:id="@+id/action_navigation_downloads_to_navigation_player" | ||||
|                 app:destination="@id/navigation_player" | ||||
|                 app:enterAnim="@anim/enter_anim" | ||||
|                 app:exitAnim="@anim/exit_anim" | ||||
|                 app:popEnterAnim="@anim/enter_anim" | ||||
|                 app:popExitAnim="@anim/exit_anim" /> | ||||
|     </fragment> | ||||
|     <fragment | ||||
|             android:id="@+id/navigation_settings" | ||||
|             android:layout_height="match_parent" | ||||
|             android:name="com.lagradost.cloudstream3.ui.settings.SettingsFragment" | ||||
|             tools:layout="@layout/main_settings" | ||||
|             android:label="@string/title_settings" | ||||
|             app:enterAnim="@anim/enter_anim" | ||||
|             app:exitAnim="@anim/exit_anim" | ||||
|             app:popEnterAnim="@anim/enter_anim" | ||||
|             app:popExitAnim="@anim/exit_anim"> | ||||
|         <action | ||||
|                 android:id="@+id/action_navigation_settings_to_navigation_settings_ui" | ||||
|                 app:destination="@id/navigation_settings_ui" | ||||
|                 app:enterAnim="@anim/enter_anim" | ||||
|                 app:exitAnim="@anim/exit_anim" | ||||
|                 app:popEnterAnim="@anim/enter_anim" | ||||
|                 app:popExitAnim="@anim/exit_anim" /> | ||||
|         <action | ||||
|                 android:id="@+id/action_navigation_settings_to_navigation_settings_lang" | ||||
|                 app:destination="@id/navigation_settings_lang" | ||||
|                 app:enterAnim="@anim/enter_anim" | ||||
|                 app:exitAnim="@anim/exit_anim" | ||||
|                 app:popEnterAnim="@anim/enter_anim" | ||||
|                 app:popExitAnim="@anim/exit_anim" /> | ||||
|         <action | ||||
|                 android:id="@+id/action_navigation_settings_to_navigation_settings_player" | ||||
|                 app:destination="@id/navigation_settings_player" | ||||
|                 app:enterAnim="@anim/enter_anim" | ||||
|                 app:exitAnim="@anim/exit_anim" | ||||
|                 app:popEnterAnim="@anim/enter_anim" | ||||
|                 app:popExitAnim="@anim/exit_anim" /> | ||||
|         <action | ||||
|                 android:id="@+id/action_navigation_settings_to_navigation_settings_updates" | ||||
|                 app:destination="@id/navigation_settings_updates" | ||||
|                 app:enterAnim="@anim/enter_anim" | ||||
|                 app:exitAnim="@anim/exit_anim" | ||||
|                 app:popEnterAnim="@anim/enter_anim" | ||||
|                 app:popExitAnim="@anim/exit_anim" /> | ||||
|         <action | ||||
|                 android:id="@+id/action_navigation_settings_to_navigation_settings_account" | ||||
|                 app:destination="@id/navigation_settings_account" | ||||
|                 app:enterAnim="@anim/enter_anim" | ||||
|                 app:exitAnim="@anim/exit_anim" | ||||
|                 app:popEnterAnim="@anim/enter_anim" | ||||
|                 app:popExitAnim="@anim/exit_anim" /> | ||||
|         <action | ||||
|                 app:enterAnim="@anim/enter_anim" | ||||
|                 app:exitAnim="@anim/exit_anim" | ||||
|                 app:popEnterAnim="@anim/enter_anim" | ||||
|                 app:popExitAnim="@anim/exit_anim" | ||||
|                 android:id="@+id/action_navigation_settings_to_navigation_settings_general" | ||||
|                 app:destination="@id/navigation_settings_general" /> | ||||
|     </fragment> | ||||
| 
 | ||||
|     <fragment | ||||
|             android:id="@+id/navigation_subtitles" | ||||
|             android:layout_height="match_parent" | ||||
|             android:name="com.lagradost.cloudstream3.ui.subtitles.SubtitlesFragment" | ||||
|             tools:layout="@layout/subtitle_settings" | ||||
|             android:label="@string/subtitles_settings" | ||||
|             android:id="@+id/action_navigation_downloads_to_navigation_results" | ||||
|             app:destination="@id/navigation_results" | ||||
|             app:enterAnim="@anim/enter_anim" | ||||
|             app:exitAnim="@anim/exit_anim" | ||||
|             app:popEnterAnim="@anim/enter_anim" | ||||
|             app:popExitAnim="@anim/exit_anim" /> | ||||
| 
 | ||||
|     <fragment | ||||
|             android:id="@+id/navigation_chrome_subtitles" | ||||
|             android:layout_height="match_parent" | ||||
|             android:name="com.lagradost.cloudstream3.ui.subtitles.ChromecastSubtitlesFragment" | ||||
|             tools:layout="@layout/chromecast_subtitle_settings" | ||||
|             android:label="@string/chromecast_subtitles_settings" | ||||
|         <action | ||||
|             android:id="@+id/action_navigation_downloads_to_navigation_player" | ||||
|             app:destination="@id/navigation_player" | ||||
|             app:enterAnim="@anim/enter_anim" | ||||
|             app:exitAnim="@anim/exit_anim" | ||||
|             app:popEnterAnim="@anim/enter_anim" | ||||
|             app:popExitAnim="@anim/exit_anim" /> | ||||
| 
 | ||||
|     <fragment | ||||
|             android:id="@+id/navigation_quick_search" | ||||
|             android:layout_height="match_parent" | ||||
|             android:name="com.lagradost.cloudstream3.ui.quicksearch.QuickSearchFragment" | ||||
|             tools:layout="@layout/quick_search" | ||||
|             app:enterAnim="@anim/enter_anim" | ||||
|             app:exitAnim="@anim/exit_anim" | ||||
|             app:popEnterAnim="@anim/enter_anim" | ||||
|             app:popExitAnim="@anim/exit_anim" | ||||
|             android:label="@string/search" /> | ||||
| 
 | ||||
|     <fragment | ||||
|             android:id="@+id/navigation_download_child" | ||||
|             android:layout_height="match_parent" | ||||
|             android:name="com.lagradost.cloudstream3.ui.download.DownloadChildFragment" | ||||
|             tools:layout="@layout/fragment_child_downloads" | ||||
|             app:enterAnim="@anim/enter_anim" | ||||
|             app:exitAnim="@anim/exit_anim" | ||||
|             app:popEnterAnim="@anim/enter_anim" | ||||
|             app:popExitAnim="@anim/exit_anim"> | ||||
|         <action | ||||
|                 android:id="@+id/action_navigation_download_child_to_navigation_player" | ||||
|                 app:destination="@id/navigation_player" | ||||
|                 app:enterAnim="@anim/enter_anim" | ||||
|                 app:exitAnim="@anim/exit_anim" | ||||
|                 app:popEnterAnim="@anim/enter_anim" | ||||
|                 app:popExitAnim="@anim/exit_anim" /> | ||||
|     </fragment> | ||||
| 
 | ||||
|     <fragment | ||||
|             android:id="@+id/navigation_results" | ||||
|             android:layout_height="match_parent" | ||||
|             android:name="com.lagradost.cloudstream3.ui.result.ResultFragment" | ||||
|             tools:layout="@layout/fragment_result_swipe" | ||||
|             app:enterAnim="@anim/enter_anim" | ||||
|             app:exitAnim="@anim/exit_anim" | ||||
|             app:popEnterAnim="@anim/enter_anim" | ||||
|             app:popExitAnim="@anim/exit_anim"> | ||||
|         android:id="@+id/navigation_settings" | ||||
|         android:name="com.lagradost.cloudstream3.ui.settings.SettingsFragment" | ||||
|         android:layout_height="match_parent" | ||||
|         android:label="@string/title_settings" | ||||
|         app:enterAnim="@anim/enter_anim" | ||||
|         app:exitAnim="@anim/exit_anim" | ||||
|         app:popEnterAnim="@anim/enter_anim" | ||||
|         app:popExitAnim="@anim/exit_anim" | ||||
|         tools:layout="@layout/main_settings"> | ||||
|         <action | ||||
|                 android:id="@+id/action_navigation_results_to_navigation_quick_search" | ||||
|                 app:destination="@id/navigation_quick_search" | ||||
|                 app:enterAnim="@anim/enter_anim" | ||||
|                 app:exitAnim="@anim/exit_anim" | ||||
|                 app:popEnterAnim="@anim/enter_anim" | ||||
|                 app:popExitAnim="@anim/exit_anim" /> | ||||
|         <action | ||||
|                 android:id="@+id/action_navigation_results_to_navigation_player" | ||||
|                 app:destination="@id/navigation_player" | ||||
|                 app:enterAnim="@anim/enter_anim" | ||||
|                 app:exitAnim="@anim/exit_anim" | ||||
|                 app:popEnterAnim="@anim/enter_anim" | ||||
|                 app:popExitAnim="@anim/exit_anim" /> | ||||
|     </fragment> | ||||
| 
 | ||||
|     <fragment | ||||
|             tools:layout="@layout/fragment_player" | ||||
|             android:id="@+id/navigation_player" | ||||
|             android:layout_height="match_parent" | ||||
|             android:name="com.lagradost.cloudstream3.ui.player.GeneratorPlayer" | ||||
|             android:id="@+id/action_navigation_settings_to_navigation_settings_ui" | ||||
|             app:destination="@id/navigation_settings_ui" | ||||
|             app:enterAnim="@anim/enter_anim" | ||||
|             app:exitAnim="@anim/exit_anim" | ||||
|             app:popEnterAnim="@anim/enter_anim" | ||||
|             app:popExitAnim="@anim/exit_anim" /> | ||||
|         <action | ||||
|             android:id="@+id/action_navigation_settings_to_navigation_settings_lang" | ||||
|             app:destination="@id/navigation_settings_lang" | ||||
|             app:enterAnim="@anim/enter_anim" | ||||
|             app:exitAnim="@anim/exit_anim" | ||||
|             app:popEnterAnim="@anim/enter_anim" | ||||
|             app:popExitAnim="@anim/exit_anim" /> | ||||
|         <action | ||||
|             android:id="@+id/action_navigation_settings_to_navigation_settings_player" | ||||
|             app:destination="@id/navigation_settings_player" | ||||
|             app:enterAnim="@anim/enter_anim" | ||||
|             app:exitAnim="@anim/exit_anim" | ||||
|             app:popEnterAnim="@anim/enter_anim" | ||||
|             app:popExitAnim="@anim/exit_anim" /> | ||||
|         <action | ||||
|             android:id="@+id/action_navigation_settings_to_navigation_settings_updates" | ||||
|             app:destination="@id/navigation_settings_updates" | ||||
|             app:enterAnim="@anim/enter_anim" | ||||
|             app:exitAnim="@anim/exit_anim" | ||||
|             app:popEnterAnim="@anim/enter_anim" | ||||
|             app:popExitAnim="@anim/exit_anim" /> | ||||
|         <action | ||||
|             android:id="@+id/action_navigation_settings_to_navigation_settings_account" | ||||
|             app:destination="@id/navigation_settings_account" | ||||
|             app:enterAnim="@anim/enter_anim" | ||||
|             app:exitAnim="@anim/exit_anim" | ||||
|             app:popEnterAnim="@anim/enter_anim" | ||||
|             app:popExitAnim="@anim/exit_anim" /> | ||||
|         <action | ||||
|             android:id="@+id/action_navigation_settings_to_navigation_settings_general" | ||||
|             app:destination="@id/navigation_settings_general" | ||||
|             app:enterAnim="@anim/enter_anim" | ||||
|             app:exitAnim="@anim/exit_anim" | ||||
|             app:popEnterAnim="@anim/enter_anim" | ||||
|             app:popExitAnim="@anim/exit_anim" /> | ||||
|     </fragment> | ||||
| 
 | ||||
|     <fragment | ||||
|         android:id="@+id/navigation_subtitles" | ||||
|         android:name="com.lagradost.cloudstream3.ui.subtitles.SubtitlesFragment" | ||||
|         android:layout_height="match_parent" | ||||
|         android:label="@string/subtitles_settings" | ||||
|         app:enterAnim="@anim/enter_anim" | ||||
|         app:exitAnim="@anim/exit_anim" | ||||
|         app:popEnterAnim="@anim/enter_anim" | ||||
|         app:popExitAnim="@anim/exit_anim" | ||||
|         tools:layout="@layout/subtitle_settings" /> | ||||
| 
 | ||||
|     <fragment | ||||
|         android:id="@+id/navigation_chrome_subtitles" | ||||
|         android:name="com.lagradost.cloudstream3.ui.subtitles.ChromecastSubtitlesFragment" | ||||
|         android:layout_height="match_parent" | ||||
|         android:label="@string/chromecast_subtitles_settings" | ||||
|         app:enterAnim="@anim/enter_anim" | ||||
|         app:exitAnim="@anim/exit_anim" | ||||
|         app:popEnterAnim="@anim/enter_anim" | ||||
|         app:popExitAnim="@anim/exit_anim" | ||||
|         tools:layout="@layout/chromecast_subtitle_settings" /> | ||||
| 
 | ||||
|     <fragment | ||||
|         android:id="@+id/navigation_quick_search" | ||||
|         android:name="com.lagradost.cloudstream3.ui.quicksearch.QuickSearchFragment" | ||||
|         android:layout_height="match_parent" | ||||
|         android:label="@string/search" | ||||
|         app:enterAnim="@anim/enter_anim" | ||||
|         app:exitAnim="@anim/exit_anim" | ||||
|         app:popEnterAnim="@anim/enter_anim" | ||||
|         app:popExitAnim="@anim/exit_anim" | ||||
|         tools:layout="@layout/quick_search" /> | ||||
| 
 | ||||
|     <fragment | ||||
|         android:id="@+id/navigation_download_child" | ||||
|         android:name="com.lagradost.cloudstream3.ui.download.DownloadChildFragment" | ||||
|         android:layout_height="match_parent" | ||||
|         app:enterAnim="@anim/enter_anim" | ||||
|         app:exitAnim="@anim/exit_anim" | ||||
|         app:popEnterAnim="@anim/enter_anim" | ||||
|         app:popExitAnim="@anim/exit_anim" | ||||
|         tools:layout="@layout/fragment_child_downloads"> | ||||
|         <action | ||||
|             android:id="@+id/action_navigation_download_child_to_navigation_player" | ||||
|             app:destination="@id/navigation_player" | ||||
|             app:enterAnim="@anim/enter_anim" | ||||
|             app:exitAnim="@anim/exit_anim" | ||||
|             app:popEnterAnim="@anim/enter_anim" | ||||
|             app:popExitAnim="@anim/exit_anim" /> | ||||
|     </fragment> | ||||
| 
 | ||||
|     <fragment | ||||
|         android:id="@+id/navigation_results" | ||||
|         android:name="com.lagradost.cloudstream3.ui.result.ResultFragment" | ||||
|         android:layout_height="match_parent" | ||||
|         app:enterAnim="@anim/enter_anim" | ||||
|         app:exitAnim="@anim/exit_anim" | ||||
|         app:popEnterAnim="@anim/enter_anim" | ||||
|         app:popExitAnim="@anim/exit_anim" | ||||
|         tools:layout="@layout/fragment_result_swipe"> | ||||
|         <action | ||||
|             android:id="@+id/action_navigation_results_to_navigation_quick_search" | ||||
|             app:destination="@id/navigation_quick_search" | ||||
|             app:enterAnim="@anim/enter_anim" | ||||
|             app:exitAnim="@anim/exit_anim" | ||||
|             app:popEnterAnim="@anim/enter_anim" | ||||
|             app:popExitAnim="@anim/exit_anim" /> | ||||
|         <action | ||||
|             android:id="@+id/action_navigation_results_to_navigation_player" | ||||
|             app:destination="@id/navigation_player" | ||||
|             app:enterAnim="@anim/enter_anim" | ||||
|             app:exitAnim="@anim/exit_anim" | ||||
|             app:popEnterAnim="@anim/enter_anim" | ||||
|             app:popExitAnim="@anim/exit_anim" /> | ||||
|     </fragment> | ||||
| 
 | ||||
|     <fragment | ||||
|         android:id="@+id/navigation_player" | ||||
|         android:name="com.lagradost.cloudstream3.ui.player.GeneratorPlayer" | ||||
|         android:layout_height="match_parent" | ||||
|         app:enterAnim="@anim/enter_anim" | ||||
|         app:exitAnim="@anim/exit_anim" | ||||
|         app:popEnterAnim="@anim/enter_anim" | ||||
|         app:popExitAnim="@anim/exit_anim" | ||||
|         tools:layout="@layout/fragment_player" /> | ||||
| 
 | ||||
| 
 | ||||
|     <fragment | ||||
|         android:id="@+id/navigation_setup_language" | ||||
|         android:name="com.lagradost.cloudstream3.ui.setup.SetupFragmentLanguage" | ||||
|         android:layout_height="match_parent" | ||||
|         app:enterAnim="@anim/enter_anim" | ||||
|         app:exitAnim="@anim/exit_anim" | ||||
|         app:popEnterAnim="@anim/enter_anim" | ||||
|         app:popExitAnim="@anim/exit_anim" | ||||
|         tools:layout="@layout/fragment_setup_language"> | ||||
|         <action | ||||
|             android:id="@+id/action_navigation_setup_language_to_navigation_setup_provider_languages" | ||||
|             app:destination="@id/navigation_setup_provider_languages" | ||||
|             app:enterAnim="@anim/enter_anim" | ||||
|             app:exitAnim="@anim/exit_anim" | ||||
|             app:popEnterAnim="@anim/enter_anim" | ||||
|             app:popExitAnim="@anim/exit_anim" /> | ||||
|     </fragment> | ||||
|     <fragment | ||||
|         android:id="@+id/navigation_setup_provider_languages" | ||||
|         android:name="com.lagradost.cloudstream3.ui.setup.SetupFragmentProviderLanguage" | ||||
|         android:layout_height="match_parent" | ||||
|         app:enterAnim="@anim/enter_anim" | ||||
|         app:exitAnim="@anim/exit_anim" | ||||
|         app:popEnterAnim="@anim/enter_anim" | ||||
|         app:popExitAnim="@anim/exit_anim" | ||||
|         tools:layout="@layout/fragment_setup_provider_languages"> | ||||
|         <action | ||||
|             android:id="@+id/navigation_setup_provider_languages_to_navigation_setup_media" | ||||
|             app:destination="@id/navigation_setup_media" | ||||
|             app:enterAnim="@anim/enter_anim" | ||||
|             app:exitAnim="@anim/exit_anim" | ||||
|             app:popEnterAnim="@anim/enter_anim" | ||||
|             app:popExitAnim="@anim/exit_anim" /> | ||||
|     </fragment> | ||||
| 
 | ||||
|     <fragment | ||||
|         android:id="@+id/navigation_setup_media" | ||||
|         android:name="com.lagradost.cloudstream3.ui.setup.SetupFragmentMedia" | ||||
|         android:layout_height="match_parent" | ||||
|         app:enterAnim="@anim/enter_anim" | ||||
|         app:exitAnim="@anim/exit_anim" | ||||
|         app:popEnterAnim="@anim/enter_anim" | ||||
|         app:popExitAnim="@anim/exit_anim" | ||||
|         tools:layout="@layout/fragment_setup_media"> | ||||
|         <action | ||||
|             android:id="@+id/navigation_setup_media_to_navigation_setup_layout" | ||||
|             app:destination="@id/navigation_setup_layout" | ||||
|             app:enterAnim="@anim/enter_anim" | ||||
|             app:exitAnim="@anim/exit_anim" | ||||
|             app:popEnterAnim="@anim/enter_anim" | ||||
|             app:popExitAnim="@anim/exit_anim" /> | ||||
|     </fragment> | ||||
| 
 | ||||
|     <fragment | ||||
|         android:id="@+id/navigation_setup_layout" | ||||
|         android:name="com.lagradost.cloudstream3.ui.setup.SetupFragmentLayout" | ||||
|         android:layout_height="match_parent" | ||||
|         app:enterAnim="@anim/enter_anim" | ||||
|         app:exitAnim="@anim/exit_anim" | ||||
|         app:popEnterAnim="@anim/enter_anim" | ||||
|         app:popExitAnim="@anim/exit_anim" | ||||
|         tools:layout="@layout/fragment_setup_media" /> | ||||
| </navigation> | ||||
|  | @ -52,19 +52,20 @@ | |||
|     <string name="poster_ui_key" translatable="false">poster_ui_key</string> | ||||
|     <string name="subtitles_encoding_key" translatable="false">subtitles_encoding_key</string> | ||||
|     <string name="override_site_key" translatable="false">override_site_key</string> | ||||
|     <string name="redo_setup_key" translatable="false">redo_setup_key</string> | ||||
| 
 | ||||
|     <!-- FORMAT MIGHT TRANSLATE, WILL CAUSE CRASH IF APPLIED WRONG --> | ||||
|     <string name="extra_info_format" translatable="false" formatted="true">%d %s | %sMB</string> | ||||
|     <string name="storage_size_format" translatable="false" formatted="true">%s • %sGB</string> | ||||
|     <string name="download_size_format" translatable="false" formatted="true">%sMB / %sMB</string> | ||||
|     <string name="mb_format" translatable="false" formatted="true">%dMB</string> | ||||
|     <string name="episode_name_format" translatable="false" formatted="true">%s %s</string> | ||||
|     <string name="ffw_text_format" translatable="false" formatted="true">+%d</string> | ||||
|     <string name="rew_text_format" translatable="false" formatted="true">-%d</string> | ||||
|     <string name="ffw_text_regular_format" translatable="false" formatted="true">%d</string> | ||||
|     <string name="rew_text_regular_format" translatable="false" formatted="true">%d</string> | ||||
|     <string name="rating_format" translatable="false" formatted="true">%.1f/10.0</string> | ||||
|     <string name="year_format" translatable="false" formatted="true">%d</string> | ||||
|     <string name="extra_info_format" formatted="true" translatable="false">%d %s | %sMB</string> | ||||
|     <string name="storage_size_format" formatted="true" translatable="false">%s • %sGB</string> | ||||
|     <string name="download_size_format" formatted="true" translatable="false">%sMB / %sMB</string> | ||||
|     <string name="mb_format" formatted="true" translatable="false">%dMB</string> | ||||
|     <string name="episode_name_format" formatted="true" translatable="false">%s %s</string> | ||||
|     <string name="ffw_text_format" formatted="true" translatable="false">+%d</string> | ||||
|     <string name="rew_text_format" formatted="true" translatable="false">-%d</string> | ||||
|     <string name="ffw_text_regular_format" formatted="true" translatable="false">%d</string> | ||||
|     <string name="rew_text_regular_format" formatted="true" translatable="false">%d</string> | ||||
|     <string name="rating_format" formatted="true" translatable="false">%.1f/10.0</string> | ||||
|     <string name="year_format" formatted="true" translatable="false">%d</string> | ||||
|     <string name="app_dub_sub_episode_text_format" formatted="true">%s Ep %d</string> | ||||
|     <string name="cast_format" formatted="true">Cast: %s</string> | ||||
|     <string name="next_episode_format" formatted="true">Episode %d will be released in</string> | ||||
|  | @ -558,4 +559,14 @@ | |||
|     <string name="trailer">Trailer</string> | ||||
|     <string name="network_adress_example">Link to stream</string> | ||||
|     <string name="referer">Referer</string> | ||||
|     <string name="next">Next</string> | ||||
|     <string name="provider_languages_tip">Watch videos in these languages</string> | ||||
|     <string name="previous">Previous</string> | ||||
|     <string name="skip_setup">Skip setup</string> | ||||
|     <!-- TODO: Remove or change this placeholder text --> | ||||
|     <string name="hello_blank_fragment">Hello blank fragment</string> | ||||
|     <string name="app_layout_subtext">Change the look of the app to suit your device</string> | ||||
|     <string name="crash_reporting_title">Crash reporting</string> | ||||
|     <string name="preferred_media_subtext">What do you want to see</string> | ||||
|     <string name="setup_done">Done</string> | ||||
| </resources> | ||||
|  |  | |||
|  | @ -1,49 +1,53 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" | ||||
|         xmlns:app="http://schemas.android.com/apk/res-auto"> | ||||
|     xmlns:app="http://schemas.android.com/apk/res-auto"> | ||||
|     <Preference | ||||
|             android:title="@string/check_for_update" | ||||
|             app:summary="@string/app_version" | ||||
|             app:key="@string/manual_check_update_key" | ||||
|             app:icon="@drawable/ic_baseline_system_update_24" /> | ||||
|         android:title="@string/check_for_update" | ||||
|         app:icon="@drawable/ic_baseline_system_update_24" | ||||
|         app:key="@string/manual_check_update_key" | ||||
|         app:summary="@string/app_version" /> | ||||
| 
 | ||||
|     <Preference | ||||
|             android:icon="@drawable/baseline_save_as_24" | ||||
|             android:key="@string/backup_key" | ||||
|             android:title="@string/backup_settings" /> | ||||
|         android:icon="@drawable/baseline_save_as_24" | ||||
|         android:key="@string/backup_key" | ||||
|         android:title="@string/backup_settings" /> | ||||
| 
 | ||||
|     <Preference | ||||
|             android:icon="@drawable/baseline_restore_page_24" | ||||
|             android:key="@string/restore_key" | ||||
|             android:title="@string/restore_settings" /> | ||||
|         android:icon="@drawable/baseline_restore_page_24" | ||||
|         android:key="@string/restore_key" | ||||
|         android:title="@string/restore_settings" /> | ||||
| 
 | ||||
|     <Preference | ||||
|             android:key="@string/show_logcat_key" | ||||
|             android:title="@string/show_log_cat" | ||||
|             android:icon="@drawable/baseline_description_24" /> | ||||
|         android:icon="@drawable/baseline_description_24" | ||||
|         android:key="@string/show_logcat_key" | ||||
|         android:title="@string/show_log_cat" /> | ||||
|     <SwitchPreference | ||||
|             android:key="acra.disable" | ||||
|             android:icon="@drawable/ic_baseline_bug_report_24" | ||||
|             android:title="@string/pref_disable_acra" | ||||
|             android:summaryOff="@string/bug_report_settings_off" | ||||
|             android:summaryOn="@string/bug_report_settings_on" | ||||
|             android:defaultValue="false" /> | ||||
|         android:defaultValue="false" | ||||
|         android:icon="@drawable/ic_baseline_bug_report_24" | ||||
|         android:key="acra.disable" | ||||
|         android:summaryOff="@string/bug_report_settings_off" | ||||
|         android:summaryOn="@string/bug_report_settings_on" | ||||
|         android:title="@string/pref_disable_acra" /> | ||||
|     <SwitchPreference | ||||
|             app:key="@string/auto_update_key" | ||||
|             android:title="@string/updates_settings" | ||||
|             android:summary="@string/updates_settings_des" | ||||
|             app:defaultValue="true" | ||||
|             android:icon="@drawable/ic_baseline_notifications_active_24" /> | ||||
|         android:icon="@drawable/ic_baseline_notifications_active_24" | ||||
|         android:summary="@string/updates_settings_des" | ||||
|         android:title="@string/updates_settings" | ||||
|         app:defaultValue="true" | ||||
|         app:key="@string/auto_update_key" /> | ||||
|     <SwitchPreference | ||||
|             app:key="@string/prerelease_update_key" | ||||
|             android:title="@string/uprereleases_settings" | ||||
|             android:summary="@string/uprereleases_settings_des" | ||||
|             app:defaultValue="false" | ||||
|             android:icon="@drawable/ic_baseline_developer_mode_24" /> | ||||
|         android:icon="@drawable/ic_baseline_developer_mode_24" | ||||
|         android:summary="@string/uprereleases_settings_des" | ||||
|         android:title="@string/uprereleases_settings" | ||||
|         app:defaultValue="false" | ||||
|         app:key="@string/prerelease_update_key" /> | ||||
|     <SwitchPreference | ||||
|             android:icon="@drawable/netflix_download" | ||||
|             android:key="@string/killswitch_key" | ||||
|             android:defaultValue="true" | ||||
|             android:summary="@string/killswitch_settings_des" | ||||
|             android:title="@string/killswitch_settings" /> | ||||
|         android:defaultValue="true" | ||||
|         android:icon="@drawable/netflix_download" | ||||
|         android:key="@string/killswitch_key" | ||||
|         android:summary="@string/killswitch_settings_des" | ||||
|         android:title="@string/killswitch_settings" /> | ||||
|     <Preference | ||||
|         app:key="@string/redo_setup_key" | ||||
|         android:icon="@drawable/ic_baseline_construction_24" | ||||
|         android:title="Redo setup process" /> | ||||
| </PreferenceScreen> | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue