mirror of
https://github.com/recloudstream/cloudstream.git
synced 2024-08-15 01:53:11 +00:00
Merge branch 'master' into master
This commit is contained in:
commit
8e9c11db4b
92 changed files with 1720 additions and 455 deletions
|
@ -1,10 +1,12 @@
|
||||||
# CloudStream-3
|
# CloudStream-3
|
||||||
|
|
||||||
|
![GitHub release](https://img.shields.io/github/v/release/LagradOst/cloudstream-3?sort=semver&style=for-the-badge)
|
||||||
|
[![Discord](https://img.shields.io/discord/737724143126052974?style=for-the-badge)](https://discord.gg/5Hus6fM)
|
||||||
|
|
||||||
|
|
||||||
**DOWNLOAD:**
|
**DOWNLOAD:**
|
||||||
https://github.com/LagradOst/CloudStream-3/releases
|
https://github.com/LagradOst/CloudStream-3/releases
|
||||||
|
|
||||||
**Discord:**
|
|
||||||
https://discord.gg/5Hus6fM
|
|
||||||
|
|
||||||
***Features:***
|
***Features:***
|
||||||
+ **AdFree**, No ads whatsoever
|
+ **AdFree**, No ads whatsoever
|
||||||
|
@ -27,6 +29,7 @@ https://discord.gg/5Hus6fM
|
||||||
* 🇪🇸 Spanish
|
* 🇪🇸 Spanish
|
||||||
* 🇳🇴 Norsk
|
* 🇳🇴 Norsk
|
||||||
* 🇩🇪 German
|
* 🇩🇪 German
|
||||||
|
* 🇹🇷 Turkish
|
||||||
|
|
||||||
***SCREENSHOTS:***
|
***SCREENSHOTS:***
|
||||||
|
|
||||||
|
@ -49,6 +52,7 @@ It merely scrapes 3rd-party websites that are publicly accessable via any regula
|
||||||
<!-- Do not remove those two comments -->
|
<!-- Do not remove those two comments -->
|
||||||
<!--SITE LIST START-->
|
<!--SITE LIST START-->
|
||||||
- [gogoanime.vc](https://gogoanime.vc)
|
- [gogoanime.vc](https://gogoanime.vc)
|
||||||
|
- [allanime.site](https://allanime.site)
|
||||||
- [animeflick.net](https://animeflick.net)
|
- [animeflick.net](https://animeflick.net)
|
||||||
- [kawaiifu.com](https://kawaiifu.com)
|
- [kawaiifu.com](https://kawaiifu.com)
|
||||||
- [tenshi.moe](https://tenshi.moe)
|
- [tenshi.moe](https://tenshi.moe)
|
||||||
|
|
|
@ -34,8 +34,9 @@ android {
|
||||||
applicationId "com.lagradost.cloudstream3"
|
applicationId "com.lagradost.cloudstream3"
|
||||||
minSdkVersion 21
|
minSdkVersion 21
|
||||||
targetSdkVersion 31
|
targetSdkVersion 31
|
||||||
versionCode 31
|
|
||||||
versionName "2.1.2"
|
versionCode 33
|
||||||
|
versionName "2.2.2"
|
||||||
|
|
||||||
resValue "string", "app_version",
|
resValue "string", "app_version",
|
||||||
"${defaultConfig.versionName}${versionNameSuffix ?: ""}"
|
"${defaultConfig.versionName}${versionNameSuffix ?: ""}"
|
||||||
|
|
|
@ -10,10 +10,16 @@
|
||||||
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
|
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
|
||||||
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
|
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
|
||||||
|
|
||||||
|
<uses-feature android:name="android.hardware.touchscreen"
|
||||||
|
android:required="false"/>
|
||||||
|
<uses-feature android:name="android.software.leanback"
|
||||||
|
android:required="false"/>
|
||||||
|
|
||||||
<application
|
<application
|
||||||
android:name=".AcraApplication"
|
android:name=".AcraApplication"
|
||||||
android:allowBackup="true"
|
android:allowBackup="true"
|
||||||
android:icon="@mipmap/ic_launcher"
|
android:icon="@mipmap/ic_launcher"
|
||||||
|
android:banner="@mipmap/ic_banner"
|
||||||
android:label="@string/app_name"
|
android:label="@string/app_name"
|
||||||
android:usesCleartextTraffic="true"
|
android:usesCleartextTraffic="true"
|
||||||
android:roundIcon="@mipmap/ic_launcher_round"
|
android:roundIcon="@mipmap/ic_launcher_round"
|
||||||
|
@ -33,6 +39,7 @@
|
||||||
android:exported="true">
|
android:exported="true">
|
||||||
<action android:name="android.intent.action.MAIN"/>
|
<action android:name="android.intent.action.MAIN"/>
|
||||||
<category android:name="android.intent.category.LAUNCHER"/>
|
<category android:name="android.intent.category.LAUNCHER"/>
|
||||||
|
<category android:name="android.intent.category.LEANBACK_LAUNCHER"/>
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
<intent-filter
|
<intent-filter
|
||||||
android:exported="true">
|
android:exported="true">
|
||||||
|
@ -63,7 +70,7 @@
|
||||||
android:enabled="false"
|
android:enabled="false"
|
||||||
android:exported="true">
|
android:exported="true">
|
||||||
<intent-filter android:exported="true">
|
<intent-filter android:exported="true">
|
||||||
<action android:name="restart_service" />
|
<action android:name="restart_service"/>
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</receiver>
|
</receiver>
|
||||||
<service
|
<service
|
||||||
|
|
|
@ -28,6 +28,7 @@ object APIHolder {
|
||||||
|
|
||||||
val apis = arrayListOf(
|
val apis = arrayListOf(
|
||||||
GogoanimeProvider(),
|
GogoanimeProvider(),
|
||||||
|
AllAnimeProvider(),
|
||||||
//ShiroProvider(), // v2 fucked me
|
//ShiroProvider(), // v2 fucked me
|
||||||
//AnimePaheProvider(), //ddos guard
|
//AnimePaheProvider(), //ddos guard
|
||||||
AnimeFlickProvider(),
|
AnimeFlickProvider(),
|
||||||
|
@ -253,11 +254,9 @@ fun sortSubs(urls: List<SubtitleFile>): List<SubtitleFile> {
|
||||||
}
|
}
|
||||||
|
|
||||||
/** https://www.imdb.com/title/tt2861424/ -> tt2861424 */
|
/** https://www.imdb.com/title/tt2861424/ -> tt2861424 */
|
||||||
fun imdbUrlToId(url: String): String {
|
fun imdbUrlToId(url: String): String? {
|
||||||
return url
|
return Regex("/title/(tt[0-9]*)").find(url)?.groupValues?.get(1)
|
||||||
.removePrefix("https://www.imdb.com/title/")
|
?: Regex("tt[0-9]{5,}").find(url)?.groupValues?.get(0)
|
||||||
.removePrefix("https://imdb.com/title/tt2861424/")
|
|
||||||
.replace("/", "")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun imdbUrlToIdNullable(url: String?): String? {
|
fun imdbUrlToIdNullable(url: String?): String? {
|
||||||
|
@ -392,12 +391,12 @@ fun LoadResponse?.isAnimeBased(): Boolean {
|
||||||
|
|
||||||
data class AnimeEpisode(
|
data class AnimeEpisode(
|
||||||
val url: String,
|
val url: String,
|
||||||
val name: String? = null,
|
var name: String? = null,
|
||||||
val posterUrl: String? = null,
|
var posterUrl: String? = null,
|
||||||
val date: String? = null,
|
var date: String? = null,
|
||||||
val rating: Int? = null,
|
var rating: Int? = null,
|
||||||
val descript: String? = null,
|
var description: String? = null,
|
||||||
val episode: Int? = null,
|
var episode: Int? = null,
|
||||||
)
|
)
|
||||||
|
|
||||||
data class TorrentLoadResponse(
|
data class TorrentLoadResponse(
|
||||||
|
@ -418,32 +417,47 @@ data class TorrentLoadResponse(
|
||||||
) : LoadResponse
|
) : LoadResponse
|
||||||
|
|
||||||
data class AnimeLoadResponse(
|
data class AnimeLoadResponse(
|
||||||
val engName: String?,
|
var engName: String? = null,
|
||||||
val japName: String?,
|
var japName: String? = null,
|
||||||
override val name: String,
|
override val name: String,
|
||||||
override val url: String,
|
override val url: String,
|
||||||
override val apiName: String,
|
override val apiName: String,
|
||||||
override val type: TvType,
|
override val type: TvType,
|
||||||
|
|
||||||
override val posterUrl: String?,
|
override var posterUrl: String? = null,
|
||||||
override val year: Int?,
|
override var year: Int? = null,
|
||||||
|
|
||||||
val dubEpisodes: List<AnimeEpisode>?,
|
var episodes: HashMap<DubStatus, List<AnimeEpisode>> = hashMapOf(),
|
||||||
val subEpisodes: List<AnimeEpisode>?,
|
var showStatus: ShowStatus? = null,
|
||||||
val showStatus: ShowStatus?,
|
|
||||||
|
|
||||||
override val plot: String?,
|
override var plot: String? = null,
|
||||||
override val tags: List<String>? = null,
|
override var tags: List<String>? = null,
|
||||||
val synonyms: List<String>? = null,
|
var synonyms: List<String>? = null,
|
||||||
|
|
||||||
val malId: Int? = null,
|
var malId: Int? = null,
|
||||||
val anilistId: Int? = null,
|
var anilistId: Int? = null,
|
||||||
override val rating: Int? = null,
|
override var rating: Int? = null,
|
||||||
override val duration: String? = null,
|
override var duration: String? = null,
|
||||||
override val trailerUrl: String? = null,
|
override var trailerUrl: String? = null,
|
||||||
override val recommendations: List<SearchResponse>? = null,
|
override var recommendations: List<SearchResponse>? = null,
|
||||||
) : LoadResponse
|
) : LoadResponse
|
||||||
|
|
||||||
|
fun AnimeLoadResponse.addEpisodes(status : DubStatus, episodes : List<AnimeEpisode>?) {
|
||||||
|
if(episodes == null) return
|
||||||
|
this.episodes[status] = episodes
|
||||||
|
}
|
||||||
|
|
||||||
|
fun MainAPI.newAnimeLoadResponse(
|
||||||
|
name: String,
|
||||||
|
url: String,
|
||||||
|
type: TvType,
|
||||||
|
initializer: AnimeLoadResponse.() -> Unit = { }
|
||||||
|
): AnimeLoadResponse {
|
||||||
|
val builder = AnimeLoadResponse(name = name, url = url, apiName = this.name, type = type)
|
||||||
|
builder.initializer()
|
||||||
|
return builder
|
||||||
|
}
|
||||||
|
|
||||||
data class MovieLoadResponse(
|
data class MovieLoadResponse(
|
||||||
override val name: String,
|
override val name: String,
|
||||||
override val url: String,
|
override val url: String,
|
||||||
|
@ -451,11 +465,11 @@ data class MovieLoadResponse(
|
||||||
override val type: TvType,
|
override val type: TvType,
|
||||||
val dataUrl: String,
|
val dataUrl: String,
|
||||||
|
|
||||||
override val posterUrl: String?,
|
override val posterUrl: String? = null,
|
||||||
override val year: Int?,
|
override val year: Int? = null,
|
||||||
override val plot: String?,
|
override val plot: String? = null,
|
||||||
|
|
||||||
val imdbId: String?,
|
val imdbId: String? = null,
|
||||||
override val rating: Int? = null,
|
override val rating: Int? = null,
|
||||||
override val tags: List<String>? = null,
|
override val tags: List<String>? = null,
|
||||||
override val duration: String? = null,
|
override val duration: String? = null,
|
||||||
|
@ -464,9 +478,9 @@ data class MovieLoadResponse(
|
||||||
) : LoadResponse
|
) : LoadResponse
|
||||||
|
|
||||||
data class TvSeriesEpisode(
|
data class TvSeriesEpisode(
|
||||||
val name: String?,
|
val name: String? = null,
|
||||||
val season: Int?,
|
val season: Int? = null,
|
||||||
val episode: Int?,
|
val episode: Int? = null,
|
||||||
val data: String,
|
val data: String,
|
||||||
val posterUrl: String? = null,
|
val posterUrl: String? = null,
|
||||||
val date: String? = null,
|
val date: String? = null,
|
||||||
|
@ -481,12 +495,12 @@ data class TvSeriesLoadResponse(
|
||||||
override val type: TvType,
|
override val type: TvType,
|
||||||
val episodes: List<TvSeriesEpisode>,
|
val episodes: List<TvSeriesEpisode>,
|
||||||
|
|
||||||
override val posterUrl: String?,
|
override val posterUrl: String? = null,
|
||||||
override val year: Int?,
|
override val year: Int? = null,
|
||||||
override val plot: String?,
|
override val plot: String? = null,
|
||||||
|
|
||||||
val showStatus: ShowStatus?,
|
val showStatus: ShowStatus? = null,
|
||||||
val imdbId: String?,
|
val imdbId: String? = null,
|
||||||
override val rating: Int? = null,
|
override val rating: Int? = null,
|
||||||
override val tags: List<String>? = null,
|
override val tags: List<String>? = null,
|
||||||
override val duration: String? = null,
|
override val duration: String? = null,
|
||||||
|
|
|
@ -31,6 +31,7 @@ import com.lagradost.cloudstream3.receivers.VideoDownloadRestartReceiver
|
||||||
import com.lagradost.cloudstream3.ui.APIRepository
|
import com.lagradost.cloudstream3.ui.APIRepository
|
||||||
import com.lagradost.cloudstream3.ui.download.DOWNLOAD_NAVIGATE_TO
|
import com.lagradost.cloudstream3.ui.download.DOWNLOAD_NAVIGATE_TO
|
||||||
import com.lagradost.cloudstream3.ui.player.PlayerEventType
|
import com.lagradost.cloudstream3.ui.player.PlayerEventType
|
||||||
|
import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.isTvSettings
|
||||||
import com.lagradost.cloudstream3.utils.AppUtils.isCastApiAvailable
|
import com.lagradost.cloudstream3.utils.AppUtils.isCastApiAvailable
|
||||||
import com.lagradost.cloudstream3.utils.AppUtils.loadResult
|
import com.lagradost.cloudstream3.utils.AppUtils.loadResult
|
||||||
import com.lagradost.cloudstream3.utils.DataStore.getKey
|
import com.lagradost.cloudstream3.utils.DataStore.getKey
|
||||||
|
@ -160,16 +161,16 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener {
|
||||||
KeyEvent.KEYCODE_BACK, KeyEvent.KEYCODE_A, KeyEvent.KEYCODE_MEDIA_SKIP_BACKWARD, KeyEvent.KEYCODE_MEDIA_REWIND -> {
|
KeyEvent.KEYCODE_BACK, KeyEvent.KEYCODE_A, KeyEvent.KEYCODE_MEDIA_SKIP_BACKWARD, KeyEvent.KEYCODE_MEDIA_REWIND -> {
|
||||||
PlayerEventType.SeekBack
|
PlayerEventType.SeekBack
|
||||||
}
|
}
|
||||||
KeyEvent.KEYCODE_MEDIA_NEXT -> {
|
KeyEvent.KEYCODE_MEDIA_NEXT, KeyEvent.KEYCODE_BUTTON_R1 -> {
|
||||||
PlayerEventType.NextEpisode
|
PlayerEventType.NextEpisode
|
||||||
}
|
}
|
||||||
KeyEvent.KEYCODE_MEDIA_PREVIOUS -> {
|
KeyEvent.KEYCODE_MEDIA_PREVIOUS, KeyEvent.KEYCODE_BUTTON_L1 -> {
|
||||||
PlayerEventType.PrevEpisode
|
PlayerEventType.PrevEpisode
|
||||||
}
|
}
|
||||||
KeyEvent.KEYCODE_MEDIA_PAUSE -> {
|
KeyEvent.KEYCODE_MEDIA_PAUSE -> {
|
||||||
PlayerEventType.Pause
|
PlayerEventType.Pause
|
||||||
}
|
}
|
||||||
KeyEvent.KEYCODE_MEDIA_PLAY -> {
|
KeyEvent.KEYCODE_MEDIA_PLAY, KeyEvent.KEYCODE_BUTTON_START -> {
|
||||||
PlayerEventType.Play
|
PlayerEventType.Play
|
||||||
}
|
}
|
||||||
KeyEvent.KEYCODE_L, KeyEvent.KEYCODE_NUMPAD_7 -> {
|
KeyEvent.KEYCODE_L, KeyEvent.KEYCODE_NUMPAD_7 -> {
|
||||||
|
@ -184,13 +185,13 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener {
|
||||||
KeyEvent.KEYCODE_S, KeyEvent.KEYCODE_NUMPAD_9 -> {
|
KeyEvent.KEYCODE_S, KeyEvent.KEYCODE_NUMPAD_9 -> {
|
||||||
PlayerEventType.ShowMirrors
|
PlayerEventType.ShowMirrors
|
||||||
}
|
}
|
||||||
KeyEvent.KEYCODE_E, KeyEvent.KEYCODE_NUMPAD_3 -> {
|
KeyEvent.KEYCODE_E, KeyEvent.KEYCODE_NUMPAD_3 -> {
|
||||||
PlayerEventType.ShowSpeed
|
PlayerEventType.ShowSpeed
|
||||||
}
|
}
|
||||||
KeyEvent.KEYCODE_R, KeyEvent.KEYCODE_NUMPAD_0 -> {
|
KeyEvent.KEYCODE_R, KeyEvent.KEYCODE_NUMPAD_0 -> {
|
||||||
PlayerEventType.Resize
|
PlayerEventType.Resize
|
||||||
}
|
}
|
||||||
KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE, KeyEvent.KEYCODE_P, KeyEvent.KEYCODE_SPACE -> { // space is not captured due to navigation
|
KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE, KeyEvent.KEYCODE_P, KeyEvent.KEYCODE_SPACE, KeyEvent.KEYCODE_NUMPAD_ENTER, KeyEvent.KEYCODE_ENTER -> { // space is not captured due to navigation
|
||||||
PlayerEventType.PlayPauseToggle
|
PlayerEventType.PlayPauseToggle
|
||||||
}
|
}
|
||||||
else -> null
|
else -> null
|
||||||
|
@ -198,6 +199,12 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener {
|
||||||
playerEventListener?.invoke(playerEvent)
|
playerEventListener?.invoke(playerEvent)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//when (keyCode) {
|
||||||
|
// KeyEvent.KEYCODE_DPAD_CENTER -> {
|
||||||
|
// println("DPAD PRESSED ${this.isKeyboardOpen()}")
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
|
||||||
return super.onKeyDown(keyCode, event)
|
return super.onKeyDown(keyCode, event)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -354,10 +361,35 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener {
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
val settingsManager = PreferenceManager.getDefaultSharedPreferences(this)
|
||||||
|
|
||||||
|
val currentTheme = when (settingsManager.getString(getString(R.string.app_theme_key), "Black")) {
|
||||||
|
"Black" -> R.style.AppTheme
|
||||||
|
"Light" -> R.style.LightMode
|
||||||
|
"Amoled" -> R.style.AmoledMode
|
||||||
|
else -> R.style.AppTheme
|
||||||
|
}
|
||||||
|
|
||||||
|
val currentOverlayTheme = when (settingsManager.getString(getString(R.string.primary_color_key), "Normal")) {
|
||||||
|
"Normal" -> R.style.OverlayPrimaryColorNormal
|
||||||
|
"Blue" -> R.style.OverlayPrimaryColorBlue
|
||||||
|
"Purple" -> R.style.OverlayPrimaryColorPurple
|
||||||
|
"Green" -> R.style.OverlayPrimaryColorGreen
|
||||||
|
"GreenApple" -> R.style.OverlayPrimaryColorGreenApple
|
||||||
|
"Red" -> R.style.OverlayPrimaryColorRed
|
||||||
|
"Banana" -> R.style.OverlayPrimaryColorBanana
|
||||||
|
"Party" -> R.style.OverlayPrimaryColorParty
|
||||||
|
else -> R.style.OverlayPrimaryColorNormal
|
||||||
|
}
|
||||||
|
|
||||||
|
theme.applyStyle(currentTheme, true)
|
||||||
|
theme.applyStyle(currentOverlayTheme, true)
|
||||||
|
|
||||||
theme.applyStyle(
|
theme.applyStyle(
|
||||||
R.style.LoadedStyle,
|
R.style.LoadedStyle,
|
||||||
true
|
true
|
||||||
) // THEME IS SET BEFORE VIEW IS CREATED TO APPLY THE THEME TO THE MAIN VIEW
|
) // THEME IS SET BEFORE VIEW IS CREATED TO APPLY THE THEME TO THE MAIN VIEW
|
||||||
|
|
||||||
updateLocale()
|
updateLocale()
|
||||||
initRequestClient()
|
initRequestClient()
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
|
@ -371,7 +403,12 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener {
|
||||||
|
|
||||||
window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN)
|
window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN)
|
||||||
|
|
||||||
setContentView(R.layout.activity_main)
|
if (isTvSettings()) {
|
||||||
|
setContentView(R.layout.activity_main_tv)
|
||||||
|
} else {
|
||||||
|
setContentView(R.layout.activity_main)
|
||||||
|
}
|
||||||
|
|
||||||
// val navView: BottomNavigationView = findViewById(R.id.nav_view)
|
// val navView: BottomNavigationView = findViewById(R.id.nav_view)
|
||||||
|
|
||||||
//https://stackoverflow.com/questions/52594181/how-to-know-if-user-has-disabled-picture-in-picture-feature-permission
|
//https://stackoverflow.com/questions/52594181/how-to-know-if-user-has-disabled-picture-in-picture-feature-permission
|
||||||
|
|
|
@ -0,0 +1,320 @@
|
||||||
|
package com.lagradost.cloudstream3.animeproviders
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty
|
||||||
|
import com.fasterxml.jackson.module.kotlin.readValue
|
||||||
|
import com.lagradost.cloudstream3.*
|
||||||
|
import com.lagradost.cloudstream3.network.get
|
||||||
|
import com.lagradost.cloudstream3.network.text
|
||||||
|
import com.lagradost.cloudstream3.utils.ExtractorLink
|
||||||
|
import com.lagradost.cloudstream3.utils.M3u8Helper
|
||||||
|
import com.lagradost.cloudstream3.utils.getQualityFromName
|
||||||
|
import org.jsoup.Jsoup
|
||||||
|
import org.mozilla.javascript.Context
|
||||||
|
import org.mozilla.javascript.Scriptable
|
||||||
|
import java.net.URI
|
||||||
|
import java.net.URLDecoder
|
||||||
|
import java.util.*
|
||||||
|
|
||||||
|
|
||||||
|
class AllAnimeProvider : MainAPI() {
|
||||||
|
override val mainUrl: String
|
||||||
|
get() = "https://allanime.site"
|
||||||
|
override val name: String
|
||||||
|
get() = "AllAnime"
|
||||||
|
override val hasQuickSearch: Boolean
|
||||||
|
get() = false
|
||||||
|
override val hasMainPage: Boolean
|
||||||
|
get() = false
|
||||||
|
|
||||||
|
private val hlsHelper = M3u8Helper()
|
||||||
|
|
||||||
|
private fun getStatus(t: String): ShowStatus {
|
||||||
|
return when (t) {
|
||||||
|
"Finished" -> ShowStatus.Completed
|
||||||
|
"Releasing" -> ShowStatus.Ongoing
|
||||||
|
else -> ShowStatus.Completed
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override val supportedTypes: Set<TvType>
|
||||||
|
get() = setOf(TvType.Anime, TvType.AnimeMovie)
|
||||||
|
|
||||||
|
private data class Data(
|
||||||
|
@JsonProperty("shows") val shows: Shows
|
||||||
|
)
|
||||||
|
|
||||||
|
private data class Shows(
|
||||||
|
@JsonProperty("pageInfo") val pageInfo: PageInfo,
|
||||||
|
@JsonProperty("edges") val edges: List<Edges>,
|
||||||
|
@JsonProperty("__typename") val _typename: String
|
||||||
|
)
|
||||||
|
|
||||||
|
private data class Edges(
|
||||||
|
@JsonProperty("_id") val Id: String?,
|
||||||
|
@JsonProperty("name") val name: String,
|
||||||
|
@JsonProperty("englishName") val englishName: String?,
|
||||||
|
@JsonProperty("nativeName") val nativeName: String?,
|
||||||
|
@JsonProperty("thumbnail") val thumbnail: String?,
|
||||||
|
@JsonProperty("type") val type: String?,
|
||||||
|
@JsonProperty("season") val season: Season?,
|
||||||
|
@JsonProperty("score") val score: Double?,
|
||||||
|
@JsonProperty("airedStart") val airedStart: AiredStart?,
|
||||||
|
@JsonProperty("availableEpisodes") val availableEpisodes: AvailableEpisodes?,
|
||||||
|
@JsonProperty("availableEpisodesDetail") val availableEpisodesDetail: AvailableEpisodesDetail?,
|
||||||
|
@JsonProperty("studios") val studios: List<String>?,
|
||||||
|
@JsonProperty("description") val description: String?,
|
||||||
|
@JsonProperty("status") val status: String?,
|
||||||
|
)
|
||||||
|
|
||||||
|
private data class AvailableEpisodes(
|
||||||
|
@JsonProperty("sub") val sub: Int,
|
||||||
|
@JsonProperty("dub") val dub: Int,
|
||||||
|
@JsonProperty("raw") val raw: Int
|
||||||
|
)
|
||||||
|
|
||||||
|
private data class AiredStart(
|
||||||
|
@JsonProperty("year") val year: Int,
|
||||||
|
@JsonProperty("month") val month: Int,
|
||||||
|
@JsonProperty("date") val date: Int
|
||||||
|
)
|
||||||
|
|
||||||
|
private data class Season(
|
||||||
|
@JsonProperty("quarter") val quarter: String,
|
||||||
|
@JsonProperty("year") val year: Int
|
||||||
|
)
|
||||||
|
|
||||||
|
private data class PageInfo(
|
||||||
|
@JsonProperty("total") val total: Int,
|
||||||
|
@JsonProperty("__typename") val _typename: String
|
||||||
|
)
|
||||||
|
|
||||||
|
private data class AllAnimeQuery(
|
||||||
|
@JsonProperty("data") val data: Data
|
||||||
|
)
|
||||||
|
|
||||||
|
override fun search(query: String): ArrayList<SearchResponse> {
|
||||||
|
val link =
|
||||||
|
"""$mainUrl/graphql?variables=%7B%22search%22%3A%7B%22allowAdult%22%3Afalse%2C%22query%22%3A%22$query%22%7D%2C%22limit%22%3A26%2C%22page%22%3A1%2C%22translationType%22%3A%22sub%22%7D&extensions=%7B%22persistedQuery%22%3A%7B%22version%22%3A1%2C%22sha256Hash%22%3A%229343797cc3d9e3f444e2d3b7db9a84d759b816a4d84512ea72d079f85bb96e98%22%7D%7D"""
|
||||||
|
var res = get(link).text
|
||||||
|
if (res.contains("PERSISTED_QUERY_NOT_FOUND")) {
|
||||||
|
res = get(link).text
|
||||||
|
if (res.contains("PERSISTED_QUERY_NOT_FOUND")) return ArrayList()
|
||||||
|
}
|
||||||
|
val response = mapper.readValue<AllAnimeQuery>(res)
|
||||||
|
|
||||||
|
val results = response.data.shows.edges.filter {
|
||||||
|
// filtering in case there is an anime with 0 episodes available on the site.
|
||||||
|
!(it.availableEpisodes?.raw == 0 && it.availableEpisodes.sub == 0 && it.availableEpisodes.dub == 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
return ArrayList(results.map {
|
||||||
|
AnimeSearchResponse(
|
||||||
|
it.name,
|
||||||
|
"$mainUrl/anime/${it.Id}",
|
||||||
|
this.name,
|
||||||
|
TvType.Anime,
|
||||||
|
it.thumbnail,
|
||||||
|
it.airedStart?.year,
|
||||||
|
EnumSet.of(DubStatus.Subbed, DubStatus.Dubbed),
|
||||||
|
it.englishName,
|
||||||
|
it.availableEpisodes?.dub,
|
||||||
|
it.availableEpisodes?.sub
|
||||||
|
)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
private data class AvailableEpisodesDetail(
|
||||||
|
@JsonProperty("sub") val sub: List<String>,
|
||||||
|
@JsonProperty("dub") val dub: List<String>,
|
||||||
|
@JsonProperty("raw") val raw: List<String>
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
override fun load(url: String): LoadResponse? {
|
||||||
|
val rhino = Context.enter()
|
||||||
|
rhino.initStandardObjects()
|
||||||
|
rhino.optimizationLevel = -1
|
||||||
|
val scope: Scriptable = rhino.initStandardObjects()
|
||||||
|
|
||||||
|
val html = get(url).text
|
||||||
|
val soup = Jsoup.parse(html)
|
||||||
|
|
||||||
|
val script = soup.select("script").firstOrNull {
|
||||||
|
it.html().contains("window.__NUXT__")
|
||||||
|
} ?: return null
|
||||||
|
|
||||||
|
val js = """
|
||||||
|
const window = {}
|
||||||
|
${script.html()}
|
||||||
|
const returnValue = JSON.stringify(window.__NUXT__.fetch[0].show)
|
||||||
|
""".trimIndent()
|
||||||
|
|
||||||
|
rhino.evaluateString(scope, js, "JavaScript", 1, null)
|
||||||
|
val jsEval = scope.get("returnValue", scope) ?: return null
|
||||||
|
val showData = mapper.readValue<Edges>(jsEval as String)
|
||||||
|
|
||||||
|
val title = showData.name
|
||||||
|
val description = showData.description
|
||||||
|
val poster = showData.thumbnail
|
||||||
|
|
||||||
|
val episodes = showData.availableEpisodes.let {
|
||||||
|
if (it == null) return@let Pair(null, null)
|
||||||
|
Pair(if (it.sub != 0) ArrayList((1..it.sub).map { epNum ->
|
||||||
|
AnimeEpisode(
|
||||||
|
"$mainUrl/anime/${showData.Id}/episodes/sub/$epNum", episode = epNum
|
||||||
|
)
|
||||||
|
}) else null, if (it.dub != 0) ArrayList((1..it.dub).map { epNum ->
|
||||||
|
AnimeEpisode(
|
||||||
|
"$mainUrl/anime/${showData.Id}/episodes/dub/$epNum", episode = epNum
|
||||||
|
)
|
||||||
|
}) else null)
|
||||||
|
}
|
||||||
|
|
||||||
|
return newAnimeLoadResponse(title, url, TvType.Anime) {
|
||||||
|
posterUrl = poster
|
||||||
|
year = showData.airedStart?.year
|
||||||
|
|
||||||
|
addEpisodes(DubStatus.Subbed, episodes.first)
|
||||||
|
addEpisodes(DubStatus.Dubbed, episodes.second)
|
||||||
|
|
||||||
|
showStatus = getStatus(showData.status.toString())
|
||||||
|
|
||||||
|
plot = description?.replace(Regex("""<(.*?)>"""), "")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private val embedBlackList = listOf(
|
||||||
|
"https://mp4upload.com/",
|
||||||
|
"https://streamsb.net/",
|
||||||
|
"https://dood.to/",
|
||||||
|
"https://videobin.co/",
|
||||||
|
"https://ok.ru",
|
||||||
|
"https://streamlare.com",
|
||||||
|
)
|
||||||
|
|
||||||
|
private fun embedIsBlacklisted(url: String): Boolean {
|
||||||
|
embedBlackList.forEach {
|
||||||
|
if (it.javaClass.name == "kotlin.text.Regex") {
|
||||||
|
if ((it as Regex).matches(url)) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (url.contains(it)) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun String.sanitize(): String {
|
||||||
|
var out = this
|
||||||
|
listOf(Pair("\\u002F", "/")).forEach {
|
||||||
|
out = out.replace(it.first, it.second)
|
||||||
|
}
|
||||||
|
return out
|
||||||
|
}
|
||||||
|
|
||||||
|
private data class Links(
|
||||||
|
@JsonProperty("link") val link: String,
|
||||||
|
@JsonProperty("hls") val hls: Boolean?,
|
||||||
|
@JsonProperty("resolutionStr") val resolutionStr: String,
|
||||||
|
@JsonProperty("src") val src: String?
|
||||||
|
)
|
||||||
|
|
||||||
|
private data class AllAnimeVideoApiResponse(
|
||||||
|
@JsonProperty("links") val links: List<Links>
|
||||||
|
)
|
||||||
|
|
||||||
|
private data class ApiEndPoint(
|
||||||
|
@JsonProperty("episodeIframeHead") val episodeIframeHead: String
|
||||||
|
)
|
||||||
|
|
||||||
|
private fun getM3u8Qualities(m3u8Link: String, referer: String, qualityName: String): ArrayList<ExtractorLink> {
|
||||||
|
return ArrayList(hlsHelper.m3u8Generation(M3u8Helper.M3u8Stream(m3u8Link, null), true).map { stream ->
|
||||||
|
val qualityString = if ((stream.quality ?: 0) == 0) "" else "${stream.quality}p"
|
||||||
|
ExtractorLink(
|
||||||
|
this.name,
|
||||||
|
"${this.name} - $qualityName $qualityString",
|
||||||
|
stream.streamUrl,
|
||||||
|
referer,
|
||||||
|
getQualityFromName(stream.quality.toString()),
|
||||||
|
true,
|
||||||
|
stream.headers
|
||||||
|
)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun loadLinks(
|
||||||
|
data: String,
|
||||||
|
isCasting: Boolean,
|
||||||
|
subtitleCallback: (SubtitleFile) -> Unit,
|
||||||
|
callback: (ExtractorLink) -> Unit
|
||||||
|
): Boolean {
|
||||||
|
var apiEndPoint = mapper.readValue<ApiEndPoint>(get("$mainUrl/getVersion").text).episodeIframeHead
|
||||||
|
if (apiEndPoint.endsWith("/")) apiEndPoint = apiEndPoint.slice(0 until apiEndPoint.length - 1)
|
||||||
|
|
||||||
|
val html = get(data).text
|
||||||
|
|
||||||
|
val sources = Regex("""sourceUrl[:=]"(.+?)"""").findAll(html).toList()
|
||||||
|
.map { URLDecoder.decode(it.destructured.component1().sanitize(), "UTF-8") }
|
||||||
|
sources.forEach {
|
||||||
|
var link = it
|
||||||
|
if (URI(link).isAbsolute || link.startsWith("//")) {
|
||||||
|
if (link.startsWith("//")) link = "https:$it"
|
||||||
|
|
||||||
|
if (Regex("""streaming\.php\?""").matches(link)) {
|
||||||
|
// for now ignore
|
||||||
|
} else if (!embedIsBlacklisted(link)) {
|
||||||
|
if (URI(link).path.contains(".m3u")) {
|
||||||
|
getM3u8Qualities(link, data, URI(link).host).forEach(callback)
|
||||||
|
} else {
|
||||||
|
callback(
|
||||||
|
ExtractorLink(
|
||||||
|
"AllAnime - " + URI(link).host,
|
||||||
|
"",
|
||||||
|
link,
|
||||||
|
data,
|
||||||
|
getQualityFromName("1080"),
|
||||||
|
false
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
link = apiEndPoint + URI(link).path + ".json?" + URI(link).query
|
||||||
|
val response = get(link)
|
||||||
|
|
||||||
|
if (response.code < 400) {
|
||||||
|
val links = mapper.readValue<AllAnimeVideoApiResponse>(response.text).links
|
||||||
|
links.forEach { server ->
|
||||||
|
if (server.hls != null && server.hls) {
|
||||||
|
getM3u8Qualities(
|
||||||
|
server.link,
|
||||||
|
"$apiEndPoint/player?uri=" + (if (URI(server.link).host.isNotEmpty()) server.link else apiEndPoint + URI(
|
||||||
|
server.link
|
||||||
|
).path),
|
||||||
|
server.resolutionStr
|
||||||
|
).forEach(callback)
|
||||||
|
} else {
|
||||||
|
callback(
|
||||||
|
ExtractorLink(
|
||||||
|
"AllAnime - " + URI(server.link).host,
|
||||||
|
server.resolutionStr,
|
||||||
|
server.link,
|
||||||
|
"$apiEndPoint/player?uri=" + (if (URI(server.link).host.isNotEmpty()) server.link else apiEndPoint + URI(
|
||||||
|
server.link
|
||||||
|
).path),
|
||||||
|
getQualityFromName("1080"),
|
||||||
|
false
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -76,21 +76,15 @@ class AnimeFlickProvider : MainAPI() {
|
||||||
AnimeEpisode(link, name)
|
AnimeEpisode(link, name)
|
||||||
}.reversed()
|
}.reversed()
|
||||||
|
|
||||||
return AnimeLoadResponse(
|
return newAnimeLoadResponse(title, url, getType(title)) {
|
||||||
title,
|
posterUrl = poster
|
||||||
null,
|
this.year = year
|
||||||
title,
|
|
||||||
url,
|
addEpisodes(DubStatus.Subbed, episodes)
|
||||||
this.name,
|
|
||||||
getType(title),
|
plot = description
|
||||||
poster,
|
tags = genres
|
||||||
year,
|
}
|
||||||
null,
|
|
||||||
episodes,
|
|
||||||
null,
|
|
||||||
description,
|
|
||||||
genres
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun loadLinks(
|
override fun loadLinks(
|
||||||
|
|
|
@ -293,30 +293,26 @@ class AnimePaheProvider : MainAPI() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
AnimeLoadResponse(
|
newAnimeLoadResponse(animeTitle, url, getType(tvType.toString())) {
|
||||||
animeTitle,
|
engName = animeTitle
|
||||||
japTitle,
|
japName = japTitle
|
||||||
animeTitle,
|
|
||||||
url,
|
this.posterUrl = poster
|
||||||
this.name,
|
this.year = year
|
||||||
getType(tvType.toString()),
|
|
||||||
poster,
|
addEpisodes(DubStatus.Subbed, episodes)
|
||||||
year,
|
this.showStatus = status
|
||||||
null,
|
plot = synopsis
|
||||||
episodes,
|
tags = if (!doc.select(".anime-genre > ul a").isEmpty()) {
|
||||||
status,
|
|
||||||
synopsis,
|
|
||||||
if (!doc.select(".anime-genre > ul a").isEmpty()) {
|
|
||||||
ArrayList(doc.select(".anime-genre > ul a").map { it.text().toString() })
|
ArrayList(doc.select(".anime-genre > ul a").map { it.text().toString() })
|
||||||
} else {
|
} else {
|
||||||
null
|
null
|
||||||
},
|
}
|
||||||
ArrayList(),
|
|
||||||
malId,
|
this.malId = malId
|
||||||
anilistId,
|
this.anilistId = anilistId
|
||||||
null,
|
this.trailerUrl = trailer
|
||||||
trailer
|
}
|
||||||
)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -325,7 +321,6 @@ class AnimePaheProvider : MainAPI() {
|
||||||
return s?.toIntOrNull() != null
|
return s?.toIntOrNull() != null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private fun cookieStrToMap(cookie: String): Map<String, String> {
|
private fun cookieStrToMap(cookie: String): Map<String, String> {
|
||||||
val cookies = mutableMapOf<String, String>()
|
val cookies = mutableMapOf<String, String>()
|
||||||
for (string in cookie.split("; ")) {
|
for (string in cookie.split("; ")) {
|
||||||
|
@ -347,7 +342,6 @@ class AnimePaheProvider : MainAPI() {
|
||||||
val slice2 = characterMap.slice(0 until s2)
|
val slice2 = characterMap.slice(0 until s2)
|
||||||
var acc: Long = 0
|
var acc: Long = 0
|
||||||
|
|
||||||
|
|
||||||
for ((n, i) in content.reversed().withIndex()) {
|
for ((n, i) in content.reversed().withIndex()) {
|
||||||
acc += (when (isNumber("$i")) {
|
acc += (when (isNumber("$i")) {
|
||||||
true -> "$i".toLong()
|
true -> "$i".toLong()
|
||||||
|
|
|
@ -109,7 +109,7 @@ class DubbedAnimeProvider : MainAPI() {
|
||||||
HomePageList("Trending", parseDocumentTrending(trendingUrl)),
|
HomePageList("Trending", parseDocumentTrending(trendingUrl)),
|
||||||
HomePageList("Recently Added", parseDocument(recentlyAddedUrl)),
|
HomePageList("Recently Added", parseDocument(recentlyAddedUrl)),
|
||||||
HomePageList("Recent Releases", parseDocument(lastEpisodeUrl, true)),
|
HomePageList("Recent Releases", parseDocument(lastEpisodeUrl, true)),
|
||||||
// HomePageList("All", parseDocument(allUrl))
|
// HomePageList("All", parseDocument(allUrl))
|
||||||
)
|
)
|
||||||
|
|
||||||
return HomePageResponse(listItems)
|
return HomePageResponse(listItems)
|
||||||
|
@ -268,20 +268,12 @@ class DubbedAnimeProvider : MainAPI() {
|
||||||
}
|
}
|
||||||
|
|
||||||
val img = fixUrl(document.select("div.fkimgs > img").attr("src"))
|
val img = fixUrl(document.select("div.fkimgs > img").attr("src"))
|
||||||
return AnimeLoadResponse(
|
return newAnimeLoadResponse(title, url, TvType.Anime) {
|
||||||
null,
|
posterUrl = img
|
||||||
null,
|
this.year = year
|
||||||
title,
|
addEpisodes(DubStatus.Dubbed, episodes)
|
||||||
url,
|
plot = descript
|
||||||
this.name,
|
}
|
||||||
TvType.Anime,
|
|
||||||
img,
|
|
||||||
year,
|
|
||||||
ArrayList(episodes),
|
|
||||||
null,
|
|
||||||
null,
|
|
||||||
descript,
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -185,24 +185,18 @@ class GogoanimeProvider : MainAPI() {
|
||||||
"Episode " + it.selectFirst(".name").text().replace("EP", "").trim()
|
"Episode " + it.selectFirst(".name").text().replace("EP", "").trim()
|
||||||
)
|
)
|
||||||
}.reversed()
|
}.reversed()
|
||||||
return AnimeLoadResponse(
|
|
||||||
title,
|
return newAnimeLoadResponse(title, link, getType(type.toString())) {
|
||||||
nativeName,
|
japName = nativeName
|
||||||
title,
|
engName = title
|
||||||
link,
|
posterUrl = poster
|
||||||
this.name,
|
this.year = year
|
||||||
getType(type.toString()),
|
addEpisodes(DubStatus.Subbed, episodes) // TODO CHECK
|
||||||
poster,
|
plot = description
|
||||||
year,
|
tags = genre
|
||||||
null,
|
|
||||||
episodes,
|
showStatus = getStatus(status.toString())
|
||||||
getStatus(status.toString()),
|
}
|
||||||
description,
|
|
||||||
ArrayList(genre),
|
|
||||||
null,
|
|
||||||
null,
|
|
||||||
null,
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun extractVideos(uri: String): List<ExtractorLink> {
|
private fun extractVideos(uri: String): List<ExtractorLink> {
|
||||||
|
|
|
@ -109,23 +109,13 @@ class KawaiifuProvider : MainAPI() {
|
||||||
}
|
}
|
||||||
val poster = soup.selectFirst("a.thumb > img").attr("src")
|
val poster = soup.selectFirst("a.thumb > img").attr("src")
|
||||||
|
|
||||||
|
return newAnimeLoadResponse(title, url, TvType.Anime) {
|
||||||
return AnimeLoadResponse(
|
this.year = year
|
||||||
title,
|
posterUrl = poster
|
||||||
null,
|
addEpisodes(DubStatus.Subbed, episodes)
|
||||||
title,
|
plot = description
|
||||||
url,
|
this.tags = tags
|
||||||
this.name,
|
}
|
||||||
TvType.Anime,
|
|
||||||
poster,
|
|
||||||
year,
|
|
||||||
null,
|
|
||||||
episodes,
|
|
||||||
ShowStatus.Ongoing,
|
|
||||||
description,
|
|
||||||
ArrayList(tags),
|
|
||||||
ArrayList()
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun loadLinks(
|
override fun loadLinks(
|
||||||
|
|
|
@ -268,24 +268,19 @@ class TenshiProvider : MainAPI() {
|
||||||
val synonyms =
|
val synonyms =
|
||||||
document.select("li.synonym.meta-data > div.info-box > span.value").map { it?.text()?.trim().toString() }
|
document.select("li.synonym.meta-data > div.info-box > span.value").map { it?.text()?.trim().toString() }
|
||||||
|
|
||||||
return AnimeLoadResponse(
|
return newAnimeLoadResponse(canonicalTitle,url,getType(type ?: "")) {
|
||||||
englishTitle,
|
engName = englishTitle
|
||||||
japaneseTitle,
|
japName = japaneseTitle
|
||||||
canonicalTitle,
|
|
||||||
url,
|
posterUrl = poster
|
||||||
this.name,
|
this.year = year.toIntOrNull()
|
||||||
getType(type ?: ""),
|
|
||||||
poster,
|
addEpisodes(DubStatus.Subbed,episodes)
|
||||||
year.toIntOrNull(),
|
showStatus = status
|
||||||
null,
|
tags = genre
|
||||||
episodes,
|
this.synonyms = synonyms
|
||||||
status,
|
plot = synopsis
|
||||||
synopsis,
|
}
|
||||||
ArrayList(genre),
|
|
||||||
ArrayList(synonyms),
|
|
||||||
null,
|
|
||||||
null,
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -208,22 +208,16 @@ class WcoProvider : MainAPI() {
|
||||||
val genre = document.select("div.elements div.row > div:nth-child(1) > div.row-line:nth-child(5) > a")
|
val genre = document.select("div.elements div.row > div:nth-child(1) > div.row-line:nth-child(5) > a")
|
||||||
.map { it?.text()?.trim().toString() }
|
.map { it?.text()?.trim().toString() }
|
||||||
|
|
||||||
return AnimeLoadResponse(
|
return newAnimeLoadResponse(canonicalTitle,url,getType(type ?: "")) {
|
||||||
canonicalTitle,
|
japName = japaneseTitle
|
||||||
japaneseTitle,
|
engName = canonicalTitle
|
||||||
canonicalTitle,
|
posterUrl = poster
|
||||||
url,
|
this.year = year
|
||||||
this.name,
|
addEpisodes(if(isDubbed) DubStatus.Dubbed else DubStatus.Subbed,episodes)
|
||||||
getType(type ?: ""),
|
showStatus = status
|
||||||
poster,
|
plot = synopsis
|
||||||
year,
|
tags = genre
|
||||||
if (isDubbed) episodes else null,
|
}
|
||||||
if (!isDubbed) episodes else null,
|
|
||||||
status,
|
|
||||||
synopsis,
|
|
||||||
ArrayList(genre),
|
|
||||||
ArrayList(),
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun loadLinks(
|
override fun loadLinks(
|
||||||
|
|
|
@ -230,21 +230,17 @@ class ZoroProvider : MainAPI() {
|
||||||
it.selectFirst(".ssli-order")?.text()?.toIntOrNull()
|
it.selectFirst(".ssli-order")?.text()?.toIntOrNull()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
return AnimeLoadResponse(
|
|
||||||
title,
|
return newAnimeLoadResponse(title, url, TvType.Anime) {
|
||||||
japaneseTitle,
|
japName = japaneseTitle
|
||||||
title,
|
engName = title
|
||||||
url,
|
posterUrl = poster
|
||||||
this.name,
|
this.year = year
|
||||||
TvType.Anime,
|
addEpisodes(DubStatus.Subbed, episodes)
|
||||||
poster,
|
showStatus = status
|
||||||
year,
|
plot = description
|
||||||
null,
|
this.tags = tags
|
||||||
episodes,
|
}
|
||||||
status,
|
|
||||||
description,
|
|
||||||
tags,
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getM3u8FromRapidCloud(url: String): String {
|
private fun getM3u8FromRapidCloud(url: String): String {
|
||||||
|
|
|
@ -36,11 +36,13 @@ object DownloadButtonSetup {
|
||||||
|
|
||||||
builder.setTitle(R.string.delete_file)
|
builder.setTitle(R.string.delete_file)
|
||||||
.setMessage(
|
.setMessage(
|
||||||
ctx.getString(R.string.delete_message).format(ctx.getNameFull(
|
ctx.getString(R.string.delete_message).format(
|
||||||
click.data.name,
|
ctx.getNameFull(
|
||||||
click.data.episode,
|
click.data.name,
|
||||||
click.data.season
|
click.data.episode,
|
||||||
))
|
click.data.season
|
||||||
|
)
|
||||||
|
)
|
||||||
)
|
)
|
||||||
.setPositiveButton(R.string.delete, dialogClickListener)
|
.setPositiveButton(R.string.delete, dialogClickListener)
|
||||||
.setNegativeButton(R.string.cancel, dialogClickListener)
|
.setNegativeButton(R.string.cancel, dialogClickListener)
|
||||||
|
@ -54,13 +56,19 @@ object DownloadButtonSetup {
|
||||||
}
|
}
|
||||||
DOWNLOAD_ACTION_RESUME_DOWNLOAD -> {
|
DOWNLOAD_ACTION_RESUME_DOWNLOAD -> {
|
||||||
activity?.let { ctx ->
|
activity?.let { ctx ->
|
||||||
val pkg = VideoDownloadManager.getDownloadResumePackage(ctx, id)
|
if (VideoDownloadManager.downloadStatus.containsKey(id) && VideoDownloadManager.downloadStatus[id] == VideoDownloadManager.DownloadType.IsPaused) {
|
||||||
if (pkg != null) {
|
|
||||||
VideoDownloadManager.downloadFromResumeUsingWorker(ctx, pkg)
|
|
||||||
} else {
|
|
||||||
VideoDownloadManager.downloadEvent.invoke(
|
VideoDownloadManager.downloadEvent.invoke(
|
||||||
Pair(click.data.id, VideoDownloadManager.DownloadActionType.Resume)
|
Pair(click.data.id, VideoDownloadManager.DownloadActionType.Resume)
|
||||||
)
|
)
|
||||||
|
} else {
|
||||||
|
val pkg = VideoDownloadManager.getDownloadResumePackage(ctx, id)
|
||||||
|
if (pkg != null) {
|
||||||
|
VideoDownloadManager.downloadFromResumeUsingWorker(ctx, pkg)
|
||||||
|
} else {
|
||||||
|
VideoDownloadManager.downloadEvent.invoke(
|
||||||
|
Pair(click.data.id, VideoDownloadManager.DownloadActionType.Resume)
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -69,7 +77,7 @@ object DownloadButtonSetup {
|
||||||
val length =
|
val length =
|
||||||
VideoDownloadManager.getDownloadFileInfoAndUpdateSettings(act, click.data.id)?.fileLength
|
VideoDownloadManager.getDownloadFileInfoAndUpdateSettings(act, click.data.id)?.fileLength
|
||||||
?: 0
|
?: 0
|
||||||
if(length > 0) {
|
if (length > 0) {
|
||||||
MainActivity.showToast(act, R.string.delete, Toast.LENGTH_LONG)
|
MainActivity.showToast(act, R.string.delete, Toast.LENGTH_LONG)
|
||||||
} else {
|
} else {
|
||||||
MainActivity.showToast(act, R.string.download, Toast.LENGTH_LONG)
|
MainActivity.showToast(act, R.string.download, Toast.LENGTH_LONG)
|
||||||
|
@ -86,19 +94,21 @@ object DownloadButtonSetup {
|
||||||
click.data.id.toString()
|
click.data.id.toString()
|
||||||
) ?: return
|
) ?: return
|
||||||
|
|
||||||
act.navigate(R.id.global_to_navigation_player, PlayerFragment.newInstance(
|
act.navigate(
|
||||||
UriData(
|
R.id.global_to_navigation_player, PlayerFragment.newInstance(
|
||||||
info.path.toString(),
|
UriData(
|
||||||
keyInfo.relativePath,
|
info.path.toString(),
|
||||||
keyInfo.displayName,
|
keyInfo.relativePath,
|
||||||
click.data.parentId,
|
keyInfo.displayName,
|
||||||
click.data.id,
|
click.data.parentId,
|
||||||
headerName ?: "null",
|
click.data.id,
|
||||||
if (click.data.episode <= 0) null else click.data.episode,
|
headerName ?: "null",
|
||||||
click.data.season
|
if (click.data.episode <= 0) null else click.data.episode,
|
||||||
),
|
click.data.season
|
||||||
act.getViewPos(click.data.id)?.position ?: 0
|
),
|
||||||
))
|
act.getViewPos(click.data.id)?.position ?: 0
|
||||||
|
)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@ import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import android.widget.LinearLayout
|
import android.widget.LinearLayout
|
||||||
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.lifecycle.ViewModelProvider
|
import androidx.lifecycle.ViewModelProvider
|
||||||
|
@ -15,8 +16,9 @@ import com.lagradost.cloudstream3.R
|
||||||
import com.lagradost.cloudstream3.isMovieType
|
import com.lagradost.cloudstream3.isMovieType
|
||||||
import com.lagradost.cloudstream3.mvvm.observe
|
import com.lagradost.cloudstream3.mvvm.observe
|
||||||
import com.lagradost.cloudstream3.ui.download.DownloadButtonSetup.handleDownloadClick
|
import com.lagradost.cloudstream3.ui.download.DownloadButtonSetup.handleDownloadClick
|
||||||
|
import com.lagradost.cloudstream3.utils.AppUtils.loadResult
|
||||||
import com.lagradost.cloudstream3.utils.DOWNLOAD_EPISODE_CACHE
|
import com.lagradost.cloudstream3.utils.DOWNLOAD_EPISODE_CACHE
|
||||||
import com.lagradost.cloudstream3.utils.DataStore.getFolderName
|
import com.lagradost.cloudstream3.utils.DataStore
|
||||||
import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbar
|
import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbar
|
||||||
import com.lagradost.cloudstream3.utils.UIHelper.hideKeyboard
|
import com.lagradost.cloudstream3.utils.UIHelper.hideKeyboard
|
||||||
import com.lagradost.cloudstream3.utils.VideoDownloadHelper
|
import com.lagradost.cloudstream3.utils.VideoDownloadHelper
|
||||||
|
@ -99,13 +101,24 @@ class DownloadFragment : Fragment() {
|
||||||
DownloadHeaderAdapter(
|
DownloadHeaderAdapter(
|
||||||
ArrayList(),
|
ArrayList(),
|
||||||
{ click ->
|
{ click ->
|
||||||
if (click.data.type.isMovieType()) {
|
when (click.action) {
|
||||||
//wont be called
|
0 -> {
|
||||||
} else {
|
if (click.data.type.isMovieType()) {
|
||||||
val folder = getFolderName(DOWNLOAD_EPISODE_CACHE, click.data.id.toString())
|
//wont be called
|
||||||
val navController = activity?.findNavController(R.id.nav_host_fragment)
|
} else {
|
||||||
navController?.navigate(R.id.navigation_download_child, DownloadChildFragment.newInstance(click.data.name,folder))
|
val folder = DataStore.getFolderName(DOWNLOAD_EPISODE_CACHE, click.data.id.toString())
|
||||||
|
val navController = activity?.findNavController(R.id.nav_host_fragment)
|
||||||
|
navController?.navigate(
|
||||||
|
R.id.navigation_download_child,
|
||||||
|
DownloadChildFragment.newInstance(click.data.name, folder)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
1 -> {
|
||||||
|
(activity as AppCompatActivity?)?.loadResult(click.data.url, click.data.apiName)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
},
|
},
|
||||||
{ downloadClickEvent ->
|
{ downloadClickEvent ->
|
||||||
if (downloadClickEvent.data !is VideoDownloadHelper.DownloadEpisodeCached) return@DownloadHeaderAdapter
|
if (downloadClickEvent.data !is VideoDownloadHelper.DownloadEpisodeCached) return@DownloadHeaderAdapter
|
||||||
|
|
|
@ -105,6 +105,9 @@ class DownloadHeaderAdapter(
|
||||||
val d = card.data
|
val d = card.data
|
||||||
|
|
||||||
poster?.setImage(d.poster)
|
poster?.setImage(d.poster)
|
||||||
|
poster?.setOnClickListener {
|
||||||
|
clickCallback.invoke(DownloadHeaderClickEvent(1, d))
|
||||||
|
}
|
||||||
|
|
||||||
title.text = d.name
|
title.text = d.name
|
||||||
val mbString = "%.1f".format(card.totalBytes / 1000000f)
|
val mbString = "%.1f".format(card.totalBytes / 1000000f)
|
||||||
|
|
|
@ -14,6 +14,7 @@ import android.widget.TextView
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.lifecycle.ViewModelProvider
|
import androidx.lifecycle.ViewModelProvider
|
||||||
|
import androidx.preference.PreferenceManager
|
||||||
import androidx.recyclerview.widget.GridLayoutManager
|
import androidx.recyclerview.widget.GridLayoutManager
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
import androidx.recyclerview.widget.LinearSnapHelper
|
import androidx.recyclerview.widget.LinearSnapHelper
|
||||||
|
@ -166,11 +167,24 @@ class HomeFragment : Fragment() {
|
||||||
}
|
}
|
||||||
|
|
||||||
private val apiChangeClickListener = View.OnClickListener { view ->
|
private val apiChangeClickListener = View.OnClickListener { view ->
|
||||||
val validAPIs = apis.filter { api -> api.hasMainPage }.toMutableList()
|
val allApis = apis.filter { api -> api.hasMainPage }.toMutableList()
|
||||||
|
var validAPIs = allApis
|
||||||
|
val settingsManager = PreferenceManager.getDefaultSharedPreferences(context)
|
||||||
|
val currentPrefMedia = settingsManager.getInt(getString(R.string.preferred_media_settings), 0)
|
||||||
|
|
||||||
|
// Filter API depending on preferred media type
|
||||||
|
if (currentPrefMedia > 0) {
|
||||||
|
val listEnumAnime = listOf(TvType.Anime, TvType.AnimeMovie, TvType.ONA)
|
||||||
|
val listEnumMovieTv = listOf(TvType.Movie, TvType.TvSeries, TvType.Cartoon)
|
||||||
|
val mediaTypeList = if (currentPrefMedia==1) listEnumMovieTv else listEnumAnime
|
||||||
|
|
||||||
|
validAPIs = allApis.filter { api -> api.supportedTypes.any { it in mediaTypeList } }.toMutableList()
|
||||||
|
}
|
||||||
|
|
||||||
validAPIs.add(0, randomApi)
|
validAPIs.add(0, randomApi)
|
||||||
validAPIs.add(0, noneApi)
|
validAPIs.add(0, noneApi)
|
||||||
view.popupMenuNoIconsAndNoStringRes(validAPIs.mapIndexed { index, api -> Pair(index, api.name) }) {
|
view.popupMenuNoIconsAndNoStringRes(validAPIs.mapIndexed { index, api -> Pair(index, api.name) }) {
|
||||||
homeViewModel.loadAndCancel(validAPIs[itemId].name)
|
homeViewModel.loadAndCancel(validAPIs[itemId].name, currentPrefMedia)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -411,7 +425,7 @@ class HomeFragment : Fragment() {
|
||||||
val apiName = context?.getKey<String>(HOMEPAGE_API)
|
val apiName = context?.getKey<String>(HOMEPAGE_API)
|
||||||
if (homeViewModel.apiName.value != apiName || apiName == null) {
|
if (homeViewModel.apiName.value != apiName || apiName == null) {
|
||||||
//println("Caught home: " + homeViewModel.apiName.value + " at " + apiName)
|
//println("Caught home: " + homeViewModel.apiName.value + " at " + apiName)
|
||||||
homeViewModel.loadAndCancel(apiName)
|
homeViewModel.loadAndCancel(apiName, 0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -10,6 +10,7 @@ import com.lagradost.cloudstream3.APIHolder.getApiFromNameNull
|
||||||
import com.lagradost.cloudstream3.HomePageResponse
|
import com.lagradost.cloudstream3.HomePageResponse
|
||||||
import com.lagradost.cloudstream3.MainAPI
|
import com.lagradost.cloudstream3.MainAPI
|
||||||
import com.lagradost.cloudstream3.SearchResponse
|
import com.lagradost.cloudstream3.SearchResponse
|
||||||
|
import com.lagradost.cloudstream3.TvType
|
||||||
import com.lagradost.cloudstream3.mvvm.Resource
|
import com.lagradost.cloudstream3.mvvm.Resource
|
||||||
import com.lagradost.cloudstream3.ui.APIRepository
|
import com.lagradost.cloudstream3.ui.APIRepository
|
||||||
import com.lagradost.cloudstream3.ui.APIRepository.Companion.noneApi
|
import com.lagradost.cloudstream3.ui.APIRepository.Companion.noneApi
|
||||||
|
@ -148,12 +149,21 @@ class HomeViewModel : ViewModel() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun loadAndCancel(preferredApiName: String?) = viewModelScope.launch {
|
fun loadAndCancel(preferredApiName: String?, currentPrefMedia: Int) = viewModelScope.launch {
|
||||||
val api = getApiFromNameNull(preferredApiName)
|
val api = getApiFromNameNull(preferredApiName)
|
||||||
if (preferredApiName == noneApi.name)
|
if (preferredApiName == noneApi.name)
|
||||||
loadAndCancel(noneApi)
|
loadAndCancel(noneApi)
|
||||||
else if(preferredApiName == randomApi.name || api == null) {
|
else if(preferredApiName == randomApi.name || api == null) {
|
||||||
loadAndCancel(apis.filter { it.hasMainPage }.random())
|
val allApis = apis.filter { api -> api.hasMainPage }.toMutableList()
|
||||||
|
var validAPIs = allApis
|
||||||
|
if (currentPrefMedia > 0) {
|
||||||
|
val listEnumAnime = listOf(TvType.Anime, TvType.AnimeMovie, TvType.ONA)
|
||||||
|
val listEnumMovieTv = listOf(TvType.Movie, TvType.TvSeries, TvType.Cartoon)
|
||||||
|
val mediaTypeList = if (currentPrefMedia==1) listEnumMovieTv else listEnumAnime
|
||||||
|
|
||||||
|
validAPIs = allApis.filter { api -> api.supportedTypes.any { it in mediaTypeList } }.toMutableList()
|
||||||
|
}
|
||||||
|
loadAndCancel(validAPIs.random())
|
||||||
} else {
|
} else {
|
||||||
loadAndCancel(api)
|
loadAndCancel(api)
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,7 +32,6 @@ import android.view.animation.AnimationUtils
|
||||||
import android.widget.*
|
import android.widget.*
|
||||||
import android.widget.Toast.LENGTH_SHORT
|
import android.widget.Toast.LENGTH_SHORT
|
||||||
import androidx.appcompat.app.AlertDialog
|
import androidx.appcompat.app.AlertDialog
|
||||||
import androidx.core.content.ContextCompat
|
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.lifecycle.ViewModelProvider
|
import androidx.lifecycle.ViewModelProvider
|
||||||
|
@ -89,6 +88,7 @@ import com.lagradost.cloudstream3.utils.DataStore.setKey
|
||||||
import com.lagradost.cloudstream3.utils.DataStoreHelper.setLastWatched
|
import com.lagradost.cloudstream3.utils.DataStoreHelper.setLastWatched
|
||||||
import com.lagradost.cloudstream3.utils.DataStoreHelper.setViewPos
|
import com.lagradost.cloudstream3.utils.DataStoreHelper.setViewPos
|
||||||
import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showDialog
|
import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showDialog
|
||||||
|
import com.lagradost.cloudstream3.utils.UIHelper.colorFromAttribute
|
||||||
import com.lagradost.cloudstream3.utils.UIHelper.getNavigationBarHeight
|
import com.lagradost.cloudstream3.utils.UIHelper.getNavigationBarHeight
|
||||||
import com.lagradost.cloudstream3.utils.UIHelper.getStatusBarHeight
|
import com.lagradost.cloudstream3.utils.UIHelper.getStatusBarHeight
|
||||||
import com.lagradost.cloudstream3.utils.UIHelper.hideKeyboard
|
import com.lagradost.cloudstream3.utils.UIHelper.hideKeyboard
|
||||||
|
@ -829,7 +829,7 @@ class PlayerFragment : Fragment() {
|
||||||
}
|
}
|
||||||
|
|
||||||
isLocked = !isLocked
|
isLocked = !isLocked
|
||||||
if(isLocked && isShowing) {
|
if (isLocked && isShowing) {
|
||||||
player_pause_holder?.postDelayed({
|
player_pause_holder?.postDelayed({
|
||||||
if (isLocked && isShowing) {
|
if (isLocked && isShowing) {
|
||||||
onClickChange()
|
onClickChange()
|
||||||
|
@ -869,11 +869,13 @@ class PlayerFragment : Fragment() {
|
||||||
|
|
||||||
private fun updateLock() {
|
private fun updateLock() {
|
||||||
video_locked_img?.setImageResource(if (isLocked) R.drawable.video_locked else R.drawable.video_unlocked)
|
video_locked_img?.setImageResource(if (isLocked) R.drawable.video_locked else R.drawable.video_unlocked)
|
||||||
val color = if (isLocked) ContextCompat.getColor(requireContext(), R.color.videoColorPrimary)
|
val color = if (isLocked) context?.colorFromAttribute(R.attr.colorPrimary)
|
||||||
else Color.WHITE
|
else Color.WHITE
|
||||||
|
|
||||||
video_locked_text?.setTextColor(color)
|
if (color != null) {
|
||||||
video_locked_img?.setColorFilter(color)
|
video_locked_text?.setTextColor(color)
|
||||||
|
video_locked_img?.setColorFilter(color)
|
||||||
|
}
|
||||||
|
|
||||||
val isClick = !isLocked
|
val isClick = !isLocked
|
||||||
|
|
||||||
|
@ -996,7 +998,7 @@ class PlayerFragment : Fragment() {
|
||||||
activity?.unregisterReceiver(it)
|
activity?.unregisterReceiver(it)
|
||||||
}
|
}
|
||||||
activity?.hideSystemUI()
|
activity?.hideSystemUI()
|
||||||
this.view?.let { activity?.hideKeyboard(it) }
|
this.view?.let { hideKeyboard(it) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1938,6 +1940,9 @@ class PlayerFragment : Fragment() {
|
||||||
) + currentUrl.headers // Adds the headers from the provider, e.g Authorization
|
) + currentUrl.headers // Adds the headers from the provider, e.g Authorization
|
||||||
setDefaultRequestProperties(headers)
|
setDefaultRequestProperties(headers)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//https://stackoverflow.com/questions/69040127/error-code-io-bad-http-status-exoplayer-android
|
||||||
|
setAllowCrossProtocolRedirects(true)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
DefaultDataSourceFactory(requireContext(), USER_AGENT)
|
DefaultDataSourceFactory(requireContext(), USER_AGENT)
|
||||||
|
|
|
@ -18,7 +18,6 @@ import android.view.ViewGroup
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import androidx.appcompat.app.AlertDialog
|
import androidx.appcompat.app.AlertDialog
|
||||||
import androidx.coordinatorlayout.widget.CoordinatorLayout
|
import androidx.coordinatorlayout.widget.CoordinatorLayout
|
||||||
import androidx.core.content.ContextCompat
|
|
||||||
import androidx.core.content.FileProvider
|
import androidx.core.content.FileProvider
|
||||||
import androidx.core.text.color
|
import androidx.core.text.color
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
|
@ -196,7 +195,7 @@ class ResultFragment : Fragment() {
|
||||||
super.onDestroy()
|
super.onDestroy()
|
||||||
activity?.let {
|
activity?.let {
|
||||||
it.window?.navigationBarColor =
|
it.window?.navigationBarColor =
|
||||||
it.colorFromAttribute(R.attr.darkBackground)
|
it.colorFromAttribute(R.attr.primaryGrayBackground)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -236,7 +235,7 @@ class ResultFragment : Fragment() {
|
||||||
private var currentId: Int? = null
|
private var currentId: Int? = null
|
||||||
private var currentIsMovie: Boolean? = null
|
private var currentIsMovie: Boolean? = null
|
||||||
private var episodeRanges: List<String>? = null
|
private var episodeRanges: List<String>? = null
|
||||||
|
private var dubRange: Set<DubStatus>? = null
|
||||||
var url: String? = null
|
var url: String? = null
|
||||||
|
|
||||||
private fun fromIndexToSeasonText(selection: Int?): String {
|
private fun fromIndexToSeasonText(selection: Int?): String {
|
||||||
|
@ -682,7 +681,6 @@ class ResultFragment : Fragment() {
|
||||||
}
|
}
|
||||||
outputFile.writeText(text)
|
outputFile.writeText(text)
|
||||||
|
|
||||||
|
|
||||||
val vlcIntent = Intent(VLC_INTENT_ACTION_RESULT)
|
val vlcIntent = Intent(VLC_INTENT_ACTION_RESULT)
|
||||||
|
|
||||||
vlcIntent.setPackage(VLC_PACKAGE)
|
vlcIntent.setPackage(VLC_PACKAGE)
|
||||||
|
@ -859,6 +857,25 @@ class ResultFragment : Fragment() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
observe(viewModel.dubStatus) { status ->
|
||||||
|
result_dub_select?.text = status.toString()
|
||||||
|
}
|
||||||
|
|
||||||
|
observe(viewModel.dubSubSelections) { range ->
|
||||||
|
dubRange = range
|
||||||
|
result_dub_select?.visibility = if (range.size <= 1) GONE else VISIBLE
|
||||||
|
}
|
||||||
|
|
||||||
|
result_dub_select.setOnClickListener {
|
||||||
|
val ranges = dubRange
|
||||||
|
if (ranges != null) {
|
||||||
|
it.popupMenuNoIconsAndNoStringRes(ranges.map { status -> Pair(status.ordinal, status.toString()) }
|
||||||
|
.toList()) {
|
||||||
|
viewModel.changeDubStatus(requireContext(), DubStatus.values()[itemId])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
observe(viewModel.selectedRange) { range ->
|
observe(viewModel.selectedRange) { range ->
|
||||||
result_episode_select?.text = range
|
result_episode_select?.text = range
|
||||||
}
|
}
|
||||||
|
@ -959,20 +976,25 @@ class ResultFragment : Fragment() {
|
||||||
|
|
||||||
metadataInfoArray.add(Pair(R.string.site, d.apiName))
|
metadataInfoArray.add(Pair(R.string.site, d.apiName))
|
||||||
|
|
||||||
if (metadataInfoArray.size > 0) {
|
context?.let { ctx ->
|
||||||
result_metadata.visibility = VISIBLE
|
if (metadataInfoArray.size > 0) {
|
||||||
val text = SpannableStringBuilder()
|
result_metadata.visibility = VISIBLE
|
||||||
val grayColor = ContextCompat.getColor(requireContext(), R.color.grayTextColor)
|
val text = SpannableStringBuilder()
|
||||||
val textColor = ContextCompat.getColor(requireContext(), R.color.textColor)
|
val grayColor =
|
||||||
for (meta in metadataInfoArray) {
|
ctx.colorFromAttribute(R.attr.grayTextColor) //ContextCompat.getColor(requireContext(), R.color.grayTextColor)
|
||||||
text.color(grayColor) { append(getString(meta.first) + ": ") }
|
val textColor =
|
||||||
.color(textColor) { append("${meta.second}\n") }
|
ctx.colorFromAttribute(R.attr.textColor) //ContextCompat.getColor(requireContext(), R.color.textColor)
|
||||||
|
for (meta in metadataInfoArray) {
|
||||||
|
text.color(grayColor) { append(getString(meta.first) + ": ") }
|
||||||
|
.color(textColor) { append("${meta.second}\n") }
|
||||||
|
}
|
||||||
|
result_metadata.text = text
|
||||||
|
} else {
|
||||||
|
result_metadata.visibility = GONE
|
||||||
}
|
}
|
||||||
result_metadata.text = text
|
|
||||||
} else {
|
|
||||||
result_metadata.visibility = GONE
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
result_poster?.setImage(d.posterUrl)
|
result_poster?.setImage(d.posterUrl)
|
||||||
result_poster_holder?.visibility = if (d.posterUrl.isNullOrBlank()) GONE else VISIBLE
|
result_poster_holder?.visibility = if (d.posterUrl.isNullOrBlank()) GONE else VISIBLE
|
||||||
|
|
||||||
|
|
|
@ -55,13 +55,20 @@ class ResultViewModel : ViewModel() {
|
||||||
val publicEpisodes: LiveData<Resource<List<ResultEpisode>>> get() = _publicEpisodes
|
val publicEpisodes: LiveData<Resource<List<ResultEpisode>>> get() = _publicEpisodes
|
||||||
val publicEpisodesCount: LiveData<Int> get() = _publicEpisodesCount
|
val publicEpisodesCount: LiveData<Int> get() = _publicEpisodesCount
|
||||||
|
|
||||||
private val dubStatus: MutableLiveData<DubStatus> = MutableLiveData()
|
val dubStatus: MutableLiveData<DubStatus> get() = _dubStatus
|
||||||
|
private val _dubStatus: MutableLiveData<DubStatus> = MutableLiveData()
|
||||||
|
|
||||||
private val page: MutableLiveData<LoadResponse> = MutableLiveData()
|
private val page: MutableLiveData<LoadResponse> = MutableLiveData()
|
||||||
val id: MutableLiveData<Int> = MutableLiveData()
|
val id: MutableLiveData<Int> = MutableLiveData()
|
||||||
val selectedSeason: MutableLiveData<Int> = MutableLiveData(-2)
|
val selectedSeason: MutableLiveData<Int> = MutableLiveData(-2)
|
||||||
val seasonSelections: MutableLiveData<List<Int?>> = MutableLiveData()
|
val seasonSelections: MutableLiveData<List<Int?>> = MutableLiveData()
|
||||||
|
|
||||||
|
val dubSubSelections: MutableLiveData<Set<DubStatus>> get() = _dubSubSelections
|
||||||
|
private val _dubSubSelections: MutableLiveData<Set<DubStatus>> = MutableLiveData()
|
||||||
|
|
||||||
|
val dubSubEpisodes: MutableLiveData<Map<DubStatus, List<ResultEpisode>>?> get() = _dubSubEpisodes
|
||||||
|
private val _dubSubEpisodes: MutableLiveData<Map<DubStatus, List<ResultEpisode>>?> = MutableLiveData()
|
||||||
|
|
||||||
private val _watchStatus: MutableLiveData<WatchType> = MutableLiveData()
|
private val _watchStatus: MutableLiveData<WatchType> = MutableLiveData()
|
||||||
val watchStatus: LiveData<WatchType> get() = _watchStatus
|
val watchStatus: LiveData<WatchType> get() = _watchStatus
|
||||||
|
|
||||||
|
@ -110,7 +117,7 @@ class ResultViewModel : ViewModel() {
|
||||||
val seasons = seasonTypes.toList().map { it.first }.sortedBy { it }
|
val seasons = seasonTypes.toList().map { it.first }.sortedBy { it }
|
||||||
seasonSelections.postValue(seasons)
|
seasonSelections.postValue(seasons)
|
||||||
if (seasons.isEmpty()) { // WHAT THE FUCK DID YOU DO????? HOW DID YOU DO THIS
|
if (seasons.isEmpty()) { // WHAT THE FUCK DID YOU DO????? HOW DID YOU DO THIS
|
||||||
_publicEpisodes.postValue(Resource.Success( ArrayList()))
|
_publicEpisodes.postValue(Resource.Success(ArrayList()))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -160,7 +167,7 @@ class ResultViewModel : ViewModel() {
|
||||||
selectedRange.postValue(allRange)
|
selectedRange.postValue(allRange)
|
||||||
}
|
}
|
||||||
|
|
||||||
_publicEpisodes.postValue(Resource.Success( currentList))
|
_publicEpisodes.postValue(Resource.Success(currentList))
|
||||||
}
|
}
|
||||||
|
|
||||||
fun changeSeason(context: Context, selection: Int?) {
|
fun changeSeason(context: Context, selection: Int?) {
|
||||||
|
@ -171,6 +178,13 @@ class ResultViewModel : ViewModel() {
|
||||||
filterEpisodes(context, _episodes.value, null, range)
|
filterEpisodes(context, _episodes.value, null, range)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun changeDubStatus(context: Context, status: DubStatus?) {
|
||||||
|
dubSubEpisodes.value?.get(status)?.let { episodes ->
|
||||||
|
dubStatus.postValue(status)
|
||||||
|
updateEpisodes(context, null, episodes, null)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun updateEpisodes(context: Context, localId: Int?, list: List<ResultEpisode>, selection: Int?) {
|
private fun updateEpisodes(context: Context, localId: Int?, list: List<ResultEpisode>, selection: Int?) {
|
||||||
_episodes.postValue(list)
|
_episodes.postValue(list)
|
||||||
val set = HashMap<Int, Int>()
|
val set = HashMap<Int, Int>()
|
||||||
|
@ -237,7 +251,7 @@ class ResultViewModel : ViewModel() {
|
||||||
return name
|
return name
|
||||||
}
|
}
|
||||||
|
|
||||||
fun load(context: Context, url: String, apiName: String, showFillers : Boolean) = viewModelScope.launch {
|
fun load(context: Context, url: String, apiName: String, showFillers: Boolean) = viewModelScope.launch {
|
||||||
_resultResponse.postValue(Resource.Loading(url))
|
_resultResponse.postValue(Resource.Loading(url))
|
||||||
_publicEpisodes.postValue(Resource.Loading())
|
_publicEpisodes.postValue(Resource.Loading())
|
||||||
|
|
||||||
|
@ -273,16 +287,21 @@ class ResultViewModel : ViewModel() {
|
||||||
|
|
||||||
when (d) {
|
when (d) {
|
||||||
is AnimeLoadResponse -> {
|
is AnimeLoadResponse -> {
|
||||||
val isDub = d.dubEpisodes != null && d.dubEpisodes.isNotEmpty()
|
//TODO context.getKey<>() isdub
|
||||||
dubStatus.postValue(if (isDub) DubStatus.Dubbed else DubStatus.Subbed)
|
|
||||||
|
|
||||||
val dataList = (if (isDub) d.dubEpisodes else d.subEpisodes)
|
val isDub =
|
||||||
|
d.episodes.containsKey(DubStatus.Dubbed) && !d.episodes[DubStatus.Dubbed].isNullOrEmpty()
|
||||||
|
val dubStatus = if (isDub) DubStatus.Dubbed else DubStatus.Subbed
|
||||||
|
_dubStatus.postValue(dubStatus)
|
||||||
|
|
||||||
val fillerEpisodes = if(showFillers) safeApiCall { getFillerEpisodes(d.name) } else null
|
_dubSubSelections.postValue(d.episodes.keys)
|
||||||
|
val fillerEpisodes = if (showFillers) safeApiCall { getFillerEpisodes(d.name) } else null
|
||||||
|
|
||||||
if (dataList != null) { // TODO dub and sub at the same time
|
var idIndex = 0
|
||||||
|
val res = d.episodes.map { ep ->
|
||||||
val episodes = ArrayList<ResultEpisode>()
|
val episodes = ArrayList<ResultEpisode>()
|
||||||
for ((index, i) in dataList.withIndex()) {
|
for ((index, i) in ep.value.withIndex()) {
|
||||||
|
|
||||||
val episode = i.episode ?: (index + 1)
|
val episode = i.episode ?: (index + 1)
|
||||||
episodes.add(
|
episodes.add(
|
||||||
context.buildResultEpisode(
|
context.buildResultEpisode(
|
||||||
|
@ -292,17 +311,23 @@ class ResultViewModel : ViewModel() {
|
||||||
null, // TODO FIX SEASON
|
null, // TODO FIX SEASON
|
||||||
i.url,
|
i.url,
|
||||||
apiName,
|
apiName,
|
||||||
(mainId + index + 1),
|
mainId + index + 1 + idIndex * 100000,
|
||||||
index,
|
index,
|
||||||
i.rating,
|
i.rating,
|
||||||
i.descript,
|
i.description,
|
||||||
if (fillerEpisodes is Resource.Success) fillerEpisodes.value?.let {
|
if (fillerEpisodes is Resource.Success) fillerEpisodes.value?.let {
|
||||||
it.contains(episode) && it[episode] == true
|
it.contains(episode) && it[episode] == true
|
||||||
}
|
} ?: false else false,
|
||||||
?: false else false,
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
idIndex++
|
||||||
|
|
||||||
|
Pair(ep.key, episodes)
|
||||||
|
}.toMap()
|
||||||
|
|
||||||
|
_dubSubEpisodes.postValue(res)
|
||||||
|
res[dubStatus]?.let { episodes ->
|
||||||
updateEpisodes(context, mainId, episodes, -1)
|
updateEpisodes(context, mainId, episodes, -1)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -366,11 +391,10 @@ class ResultViewModel : ViewModel() {
|
||||||
), -1
|
), -1
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else -> {
|
else -> {
|
||||||
|
// nothing
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,9 +35,11 @@ import com.lagradost.cloudstream3.utils.SEARCH_PROVIDER_TOGGLE
|
||||||
import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbar
|
import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbar
|
||||||
import com.lagradost.cloudstream3.utils.UIHelper.getGridIsCompact
|
import com.lagradost.cloudstream3.utils.UIHelper.getGridIsCompact
|
||||||
import com.lagradost.cloudstream3.utils.UIHelper.hideKeyboard
|
import com.lagradost.cloudstream3.utils.UIHelper.hideKeyboard
|
||||||
|
import com.lagradost.cloudstream3.utils.UIHelper.showInputMethod
|
||||||
import kotlinx.android.synthetic.main.fragment_search.*
|
import kotlinx.android.synthetic.main.fragment_search.*
|
||||||
import java.util.concurrent.locks.ReentrantLock
|
import java.util.concurrent.locks.ReentrantLock
|
||||||
|
|
||||||
|
|
||||||
class SearchFragment : Fragment() {
|
class SearchFragment : Fragment() {
|
||||||
companion object {
|
companion object {
|
||||||
fun List<SearchResponse>.filterSearchResponse(): List<SearchResponse> {
|
fun List<SearchResponse>.filterSearchResponse(): List<SearchResponse> {
|
||||||
|
@ -298,6 +300,10 @@ class SearchFragment : Fragment() {
|
||||||
main_search.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
|
main_search.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
|
||||||
override fun onQueryTextSubmit(query: String): Boolean {
|
override fun onQueryTextSubmit(query: String): Boolean {
|
||||||
searchViewModel.searchAndCancel(query)
|
searchViewModel.searchAndCancel(query)
|
||||||
|
main_search?.let {
|
||||||
|
hideKeyboard(it)
|
||||||
|
}
|
||||||
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -360,18 +366,13 @@ class SearchFragment : Fragment() {
|
||||||
typesActive = it.getApiTypeSettings()
|
typesActive = it.getApiTypeSettings()
|
||||||
}
|
}
|
||||||
|
|
||||||
/*main_search.setOnQueryTextFocusChangeListener { searchView, b ->
|
main_search.setOnQueryTextFocusChangeListener { searchView, b ->
|
||||||
if (b) {
|
if (b) {
|
||||||
// https://stackoverflow.com/questions/12022715/unable-to-show-keyboard-automatically-in-the-searchview
|
// https://stackoverflow.com/questions/12022715/unable-to-show-keyboard-automatically-in-the-searchview
|
||||||
searchView?.postDelayed({
|
showInputMethod(view.findFocus())
|
||||||
(activity?.getSystemService(Context.INPUT_METHOD_SERVICE) as? InputMethodManager?)?.showSoftInput(
|
|
||||||
view.findFocus(),
|
|
||||||
0
|
|
||||||
)
|
|
||||||
}, 200)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
main_search.onActionViewExpanded()*/
|
//main_search.onActionViewExpanded()*/
|
||||||
|
|
||||||
val masterAdapter: RecyclerView.Adapter<RecyclerView.ViewHolder> = ParentItemAdapter(listOf(), { callback ->
|
val masterAdapter: RecyclerView.Adapter<RecyclerView.ViewHolder> = ParentItemAdapter(listOf(), { callback ->
|
||||||
SearchHelper.handleSearchClickCallback(activity, callback)
|
SearchHelper.handleSearchClickCallback(activity, callback)
|
||||||
|
|
|
@ -1,7 +1,11 @@
|
||||||
package com.lagradost.cloudstream3.ui.settings
|
package com.lagradost.cloudstream3.ui.settings
|
||||||
|
|
||||||
|
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
|
import android.app.UiModeManager
|
||||||
|
import android.content.Context
|
||||||
|
import android.content.res.Configuration
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.os.Environment
|
import android.os.Environment
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
|
@ -40,6 +44,22 @@ import kotlin.concurrent.thread
|
||||||
|
|
||||||
|
|
||||||
class SettingsFragment : PreferenceFragmentCompat() {
|
class SettingsFragment : PreferenceFragmentCompat() {
|
||||||
|
companion object {
|
||||||
|
fun Context.isTvSettings(): Boolean {
|
||||||
|
val settingsManager = PreferenceManager.getDefaultSharedPreferences(this)
|
||||||
|
var value = settingsManager.getInt(this.getString(R.string.app_layout_key), -1)
|
||||||
|
if (value == -1) {
|
||||||
|
value = if (isAutoTv()) 1 else 0
|
||||||
|
}
|
||||||
|
return value == 1
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun Context.isAutoTv(): Boolean {
|
||||||
|
val uiModeManager = getSystemService(Context.UI_MODE_SERVICE) as UiModeManager?
|
||||||
|
return uiModeManager?.currentModeType == Configuration.UI_MODE_TYPE_TELEVISION
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private var beneneCount = 0
|
private var beneneCount = 0
|
||||||
|
|
||||||
// Open file picker
|
// Open file picker
|
||||||
|
@ -83,6 +103,7 @@ class SettingsFragment : PreferenceFragmentCompat() {
|
||||||
Triple("\uD83C\uDDF3\uD83C\uDDF4", "Norsk", "no"),
|
Triple("\uD83C\uDDF3\uD83C\uDDF4", "Norsk", "no"),
|
||||||
Triple("\ud83c\udde9\ud83c\uddea", "German", "de"),
|
Triple("\ud83c\udde9\ud83c\uddea", "German", "de"),
|
||||||
Triple("🇱🇧", "Arabic", "ar"),
|
Triple("🇱🇧", "Arabic", "ar"),
|
||||||
|
Triple("🇹🇷", "Turkish", "tr")
|
||||||
).sortedBy { it.second } //ye, we go alphabetical, so ppl don't put their lang on top
|
).sortedBy { it.second } //ye, we go alphabetical, so ppl don't put their lang on top
|
||||||
|
|
||||||
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
|
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
|
||||||
|
@ -97,6 +118,10 @@ class SettingsFragment : PreferenceFragmentCompat() {
|
||||||
val subdubPreference = findPreference<Preference>(getString(R.string.display_sub_key))!!
|
val subdubPreference = findPreference<Preference>(getString(R.string.display_sub_key))!!
|
||||||
val providerLangPreference = findPreference<Preference>(getString(R.string.provider_lang_key))!!
|
val providerLangPreference = findPreference<Preference>(getString(R.string.provider_lang_key))!!
|
||||||
val downloadPathPreference = findPreference<Preference>(getString(R.string.download_path_key))!!
|
val downloadPathPreference = findPreference<Preference>(getString(R.string.download_path_key))!!
|
||||||
|
val allLayoutPreference = findPreference<Preference>(getString(R.string.app_layout_key))!!
|
||||||
|
val colorPrimaryPreference = findPreference<Preference>(getString(R.string.primary_color_key))!!
|
||||||
|
val preferedMediaTypePreference = findPreference<Preference>(getString(R.string.prefer_media_type_key))!!
|
||||||
|
val appThemePreference = findPreference<Preference>(getString(R.string.app_theme_key))!!
|
||||||
|
|
||||||
legalPreference.setOnPreferenceClickListener {
|
legalPreference.setOnPreferenceClickListener {
|
||||||
val builder: AlertDialog.Builder = AlertDialog.Builder(it.context)
|
val builder: AlertDialog.Builder = AlertDialog.Builder(it.context)
|
||||||
|
@ -177,6 +202,7 @@ class SettingsFragment : PreferenceFragmentCompat() {
|
||||||
return@setOnPreferenceClickListener true
|
return@setOnPreferenceClickListener true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
fun getDownloadDirs(): List<String> {
|
fun getDownloadDirs(): List<String> {
|
||||||
val defaultDir = getDownloadDir()?.filePath
|
val defaultDir = getDownloadDir()?.filePath
|
||||||
|
|
||||||
|
@ -214,6 +240,93 @@ class SettingsFragment : PreferenceFragmentCompat() {
|
||||||
// pref = visual path
|
// pref = visual path
|
||||||
settingsManager.edit().putString(getString(R.string.download_path_key), dirs[it]).apply()
|
settingsManager.edit().putString(getString(R.string.download_path_key), dirs[it]).apply()
|
||||||
settingsManager.edit().putString(getString(R.string.download_path_pref), dirs[it]).apply()
|
settingsManager.edit().putString(getString(R.string.download_path_pref), dirs[it]).apply()
|
||||||
|
|
||||||
|
if (preferedMediaTypePreference != null) {
|
||||||
|
preferedMediaTypePreference.setOnPreferenceClickListener {
|
||||||
|
val prefNames = resources.getStringArray(R.array.media_type_pref)
|
||||||
|
val prefValues = resources.getIntArray(R.array.media_type_pref_values)
|
||||||
|
val settingsManager = PreferenceManager.getDefaultSharedPreferences(context)
|
||||||
|
|
||||||
|
val currentPrefMedia =
|
||||||
|
settingsManager.getInt(getString(R.string.preferred_media_settings), 0)
|
||||||
|
|
||||||
|
context?.showBottomDialog(
|
||||||
|
prefNames.toList(),
|
||||||
|
prefValues.indexOf(currentPrefMedia),
|
||||||
|
getString(R.string.preferred_media_settings),
|
||||||
|
true,
|
||||||
|
{}) {
|
||||||
|
settingsManager.edit()
|
||||||
|
.putInt(getString(R.string.preferred_media_settings), prefValues[it])
|
||||||
|
.apply()
|
||||||
|
context?.initRequestClient()
|
||||||
|
}
|
||||||
|
return@setOnPreferenceClickListener true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
allLayoutPreference.setOnPreferenceClickListener {
|
||||||
|
val prefNames = resources.getStringArray(R.array.app_layout)
|
||||||
|
val prefValues = resources.getIntArray(R.array.app_layout_values)
|
||||||
|
val settingsManager = PreferenceManager.getDefaultSharedPreferences(context)
|
||||||
|
|
||||||
|
val currentLayout =
|
||||||
|
settingsManager.getInt(getString(R.string.app_layout_key), -1)
|
||||||
|
context?.showBottomDialog(
|
||||||
|
prefNames.toList(),
|
||||||
|
prefValues.indexOf(currentLayout),
|
||||||
|
getString(R.string.app_layout),
|
||||||
|
true,
|
||||||
|
{}) {
|
||||||
|
try {
|
||||||
|
settingsManager.edit().putInt(getString(R.string.app_layout_key), prefValues[it]).apply()
|
||||||
|
activity?.recreate()
|
||||||
|
} catch (e : Exception) {
|
||||||
|
logError(e)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return@setOnPreferenceClickListener true
|
||||||
|
}
|
||||||
|
|
||||||
|
colorPrimaryPreference.setOnPreferenceClickListener {
|
||||||
|
val prefNames = resources.getStringArray(R.array.themes_overlay_names)
|
||||||
|
val prefValues = resources.getStringArray(R.array.themes_overlay_names_values)
|
||||||
|
val settingsManager = PreferenceManager.getDefaultSharedPreferences(context)
|
||||||
|
|
||||||
|
val currentLayout = settingsManager.getString( getString(R.string.primary_color_key),prefValues.first())
|
||||||
|
context?.showBottomDialog(
|
||||||
|
prefNames.toList(),
|
||||||
|
prefValues.indexOf(currentLayout),
|
||||||
|
getString(R.string.primary_color_settings),
|
||||||
|
true,
|
||||||
|
{}) {
|
||||||
|
try {
|
||||||
|
settingsManager.edit().putString(getString(R.string.primary_color_key), prefValues[it]).apply()
|
||||||
|
activity?.recreate()
|
||||||
|
} catch (e : Exception) {
|
||||||
|
logError(e)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return@setOnPreferenceClickListener true
|
||||||
|
}
|
||||||
|
|
||||||
|
appThemePreference.setOnPreferenceClickListener {
|
||||||
|
val prefNames = resources.getStringArray(R.array.themes_names)
|
||||||
|
val prefValues = resources.getStringArray(R.array.themes_names_values)
|
||||||
|
val settingsManager = PreferenceManager.getDefaultSharedPreferences(context)
|
||||||
|
|
||||||
|
val currentLayout = settingsManager.getString( getString(R.string.app_theme_key),prefValues.first())
|
||||||
|
context?.showBottomDialog(
|
||||||
|
prefNames.toList(),
|
||||||
|
prefValues.indexOf(currentLayout),
|
||||||
|
getString(R.string.app_theme_settings),
|
||||||
|
true,
|
||||||
|
{}) {
|
||||||
|
try {
|
||||||
|
settingsManager.edit().putString(getString(R.string.app_theme_key), prefValues[it]).apply()
|
||||||
|
activity?.recreate()
|
||||||
|
} catch (e : Exception) {
|
||||||
|
logError(e)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return@setOnPreferenceClickListener true
|
return@setOnPreferenceClickListener true
|
||||||
|
@ -271,7 +384,7 @@ class SettingsFragment : PreferenceFragmentCompat() {
|
||||||
settingsManager.edit().putInt(getString(R.string.benene_count), beneneCount).apply()
|
settingsManager.edit().putInt(getString(R.string.benene_count), beneneCount).apply()
|
||||||
it.summary = getString(R.string.benene_count_text).format(beneneCount)
|
it.summary = getString(R.string.benene_count_text).format(beneneCount)
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
e.printStackTrace()
|
logError(e)
|
||||||
}
|
}
|
||||||
|
|
||||||
return@setOnPreferenceClickListener true
|
return@setOnPreferenceClickListener true
|
||||||
|
|
|
@ -36,6 +36,7 @@ import androidx.preference.PreferenceManager
|
||||||
import com.bumptech.glide.load.model.GlideUrl
|
import com.bumptech.glide.load.model.GlideUrl
|
||||||
import com.lagradost.cloudstream3.R
|
import com.lagradost.cloudstream3.R
|
||||||
import com.lagradost.cloudstream3.mvvm.logError
|
import com.lagradost.cloudstream3.mvvm.logError
|
||||||
|
import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.isTvSettings
|
||||||
import kotlin.math.roundToInt
|
import kotlin.math.roundToInt
|
||||||
|
|
||||||
|
|
||||||
|
@ -68,7 +69,7 @@ object UIHelper {
|
||||||
activity?.window?.decorView?.clearFocus()
|
activity?.window?.decorView?.clearFocus()
|
||||||
view.let {
|
view.let {
|
||||||
if (it != null) {
|
if (it != null) {
|
||||||
activity?.hideKeyboard(it)
|
hideKeyboard(it)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -202,6 +203,10 @@ object UIHelper {
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
fun Context.getStatusBarHeight(): Int {
|
fun Context.getStatusBarHeight(): Int {
|
||||||
|
if(isTvSettings()) {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
var result = 0
|
var result = 0
|
||||||
val resourceId = resources.getIdentifier("status_bar_height", "dimen", "android")
|
val resourceId = resources.getIdentifier("status_bar_height", "dimen", "android")
|
||||||
if (resourceId > 0) {
|
if (resourceId > 0) {
|
||||||
|
@ -285,9 +290,14 @@ object UIHelper {
|
||||||
) == AppOpsManager.MODE_ALLOWED
|
) == AppOpsManager.MODE_ALLOWED
|
||||||
}
|
}
|
||||||
|
|
||||||
fun Context.hideKeyboard(view: View) {
|
fun hideKeyboard(view: View) {
|
||||||
val inputMethodManager = getSystemService(Activity.INPUT_METHOD_SERVICE) as InputMethodManager
|
val inputMethodManager = view.context.getSystemService(Activity.INPUT_METHOD_SERVICE) as InputMethodManager?
|
||||||
inputMethodManager.hideSoftInputFromWindow(view.windowToken, 0)
|
inputMethodManager?.hideSoftInputFromWindow(view.windowToken, 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun showInputMethod(view: View) {
|
||||||
|
val inputMethodManager = view.context.getSystemService(Activity.INPUT_METHOD_SERVICE) as InputMethodManager?
|
||||||
|
inputMethodManager?.showSoftInput(view, 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**id, stringRes */
|
/**id, stringRes */
|
||||||
|
|
|
@ -353,7 +353,7 @@ object VideoDownloadManager {
|
||||||
|
|
||||||
val pending: PendingIntent = PendingIntent.getService(
|
val pending: PendingIntent = PendingIntent.getService(
|
||||||
// BECAUSE episodes lying near will have the same id +1, index will give the same requested as the previous episode, *100000 fixes this
|
// BECAUSE episodes lying near will have the same id +1, index will give the same requested as the previous episode, *100000 fixes this
|
||||||
context, (4337 + index * 100000 + ep.id),
|
context, (4337 + index * 1000000 + ep.id),
|
||||||
actionResultIntent,
|
actionResultIntent,
|
||||||
PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
|
PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
|
||||||
)
|
)
|
||||||
|
|
5
app/src/main/res/color/item_select_color.xml
Normal file
5
app/src/main/res/color/item_select_color.xml
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<item android:color="?attr/colorPrimary" android:state_checked="true"/>
|
||||||
|
<item android:color="?attr/grayTextColor" android:state_checked="false"/>
|
||||||
|
</selector>
|
54
app/src/main/res/drawable/ic_banner_foreground.xml
Normal file
54
app/src/main/res/drawable/ic_banner_foreground.xml
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="320dp"
|
||||||
|
android:height="180dp"
|
||||||
|
android:viewportWidth="320"
|
||||||
|
android:viewportHeight="180"
|
||||||
|
android:name="vector">
|
||||||
|
<group android:scaleX="0.6666667"
|
||||||
|
android:scaleY="0.6666667"
|
||||||
|
android:translateX="53.333332"
|
||||||
|
android:translateY="30">
|
||||||
|
<group android:scaleX="0.13764706"
|
||||||
|
android:scaleY="0.13764706"
|
||||||
|
android:translateX="15.1"
|
||||||
|
android:translateY="31.5">
|
||||||
|
<group android:name="group_6">
|
||||||
|
<path
|
||||||
|
android:name="path_2"
|
||||||
|
android:pathData="M 698.92 450.33 C 697.92 440.99 690.27 432.74 679.92 430.25 L 653.67 430.75 C 655.17 407.75 636.67 386.63 618.79 384 C 611.804 381.871 604.367 381.698 597.29 383.5 C 597.91 379.77 602.74 347.16 578.79 322 C 558.72 300.92 532.54 299.13 517.67 299.31 L 500.37 298.92 C 494.76 293.4 460.65 262.47 412.62 266.67 C 382.23 269.32 354.96 277.67 334.79 302.67 C 333.11 304.74 327.6 311.81 321.17 320.81 C 318.82 323.81 316.91 327.43 314.79 330.5 C 314.63 330.74 288.79 326.44 272.79 331 C 247.52 338.2 224.79 358.54 217.29 385.5 C 215.44 392.18 209.08 415.09 219.79 435 C 222.101 439.202 223.081 444.009 222.6 448.78 C 219.48 450.41 205.02 450.94 182.29 450 C 164.43 449.27 149.83 463.6 149.79 480 C 149.74 497.17 165.23 510.58 184.29 510 C 205.93 510.23 605.96 510.67 637.04 510.56 C 650.12 510.56 656.79 499.17 656.79 499.17 C 661.24 493.35 661.09 486.09 661.04 481.5 L 661.04 477 L 664.79 477 L 675.96 476.33 C 690.35 474.78 700.21 462.36 698.92 450.33 Z M 407.54 456 L 407.54 349.25 L 483.75 402.63 Z"
|
||||||
|
android:fillColor="#ffffff"
|
||||||
|
android:strokeWidth="1"/>
|
||||||
|
</group>
|
||||||
|
</group>
|
||||||
|
|
||||||
|
<group android:scaleX="0.17275657"
|
||||||
|
android:scaleY="0.17275657"
|
||||||
|
android:translateX="128"
|
||||||
|
android:translateY="74.202896">
|
||||||
|
<group android:translateY="146.25">
|
||||||
|
<path android:pathData="M88,-5.25Q75.984375,2,57.984375,2Q35.0625,2,21.03125,-13.171875Q7,-28.34375,7,-52.421875Q7,-77.6875,22.390625,-94.34375Q37.796875,-111,62.40625,-111Q77.875,-111,88,-106.75L88,-93.75Q76.328125,-100,62.28125,-100Q43,-100,31.5,-86.890625Q20,-73.78125,20,-53.203125Q20,-33.671875,30.765625,-21.328125Q41.53125,-9,59.625,-9Q75.984375,-9,88,-16.25L88,-5.25Z"
|
||||||
|
android:fillColor="#FFFFFF"/>
|
||||||
|
<path android:pathData="M109,0L109,-115L121,-115L121,0L109,0Z"
|
||||||
|
android:fillColor="#FFFFFF"/>
|
||||||
|
<path android:pathData="M140,-38.015625Q140,-57.546875,150.71875,-68.765625Q161.4375,-80,179.89062,-80Q197.26562,-80,207.125,-69.15625Q217,-58.328125,217,-39.21875Q217,-20.65625,206.3125,-9.328125Q195.625,2,178.03125,2Q161.01562,2,150.5,-8.90625Q140,-19.8125,140,-38.015625ZM152,-38.5Q152,-24.59375,159.32812,-16.296875Q166.65625,-8,178.89062,-8Q191.34375,-8,198.17188,-16.078125Q205,-24.171875,205,-38.78125Q205,-53.75,198.23438,-61.875Q191.48438,-70,178.89062,-70Q166.59375,-70,159.29688,-61.59375Q152,-53.1875,152,-38.5Z"
|
||||||
|
android:fillColor="#FFFFFF"/>
|
||||||
|
<path android:pathData="M299,0L287,0L287,-12.15625L286.71875,-12.15625Q279.0625,2,262.79688,2Q235,2,235,-31.28125L235,-78L247,-78L247,-33.25Q247,-8,265.89062,-8Q275.1875,-8,281.09375,-15Q287,-22,287,-32.953125L287,-78L299,-78L299,0Z"
|
||||||
|
android:fillColor="#FFFFFF"/>
|
||||||
|
<path android:pathData="M390,0L378,0L378,-13.359375L377.71875,-13.359375Q369.125,2,351.01562,2Q336.34375,2,327.67188,-8.578125Q319,-19.171875,319,-37.15625Q319,-56.421875,328.71875,-68.203125Q338.4375,-80,354.375,-80Q370.3125,-80,377.71875,-66.875L378,-66.875L378,-115L390,-115L390,0ZM378,-47.015625Q378,-56.65625,371.54688,-63.328125Q365.09375,-70,355.75,-70Q344.17188,-70,337.57812,-61.3125Q331,-52.625,331,-37.796875Q331,-24.25,337.3125,-16.125Q343.625,-8,354.29688,-8Q364.54688,-8,371.26562,-15.625Q378,-23.25,378,-35.09375L378,-47.015625Z"
|
||||||
|
android:fillColor="#FFFFFF"/>
|
||||||
|
<path android:pathData="M413,-19.25Q417.5,-14.875,425.96875,-11.9375Q434.4375,-9,441.625,-9Q465,-9,465,-26.265625Q465,-31.09375,462.5625,-34.875Q460.14062,-38.671875,456.01562,-41.4375Q451.89062,-44.21875,439.76562,-50.53125Q422.29688,-59.671875,417.64062,-66.46875Q413,-73.28125,413,-81.859375Q413,-95.125,423.5625,-103.0625Q434.14062,-111,450.125,-111Q466.25,-111,473,-106.75L473,-92.75Q463.65625,-100,448.875,-100Q438.78125,-100,432.39062,-95.53125Q426,-91.0625,426,-82.96875Q426,-77.96875,428.25,-74.28125Q430.51562,-70.59375,434.39062,-67.875Q438.28125,-65.15625,449.53125,-59.46875Q465.35938,-51.53125,471.67188,-43.96875Q478,-36.421875,478,-27.078125Q478,-13.171875,467.9375,-5.578125Q457.875,2,439.76562,2Q434.25,2,425.40625,-0.109375Q416.5625,-2.234375,413,-5.25L413,-19.25Z"
|
||||||
|
android:fillColor="#FFFFFF"/>
|
||||||
|
<path android:pathData="M533,-1.25Q528.7656,2,521.8125,2Q502,2,502,-20.78125L502,-68L489,-68L489,-78L502,-78L502,-97.1875L514,-101L514,-78L533,-78L533,-68L514,-68L514,-22.859375Q514,-14.828125,516.5781,-11.40625Q519.15625,-8,525.2031,-8Q529.875,-8,533,-11.25L533,-1.25Z"
|
||||||
|
android:fillColor="#FFFFFF"/>
|
||||||
|
<path android:pathData="M590,-66.75Q586.78125,-70,580.71875,-70Q572.5469,-70,567.2656,-61.953125Q562,-53.90625,562,-40.84375L562,0L550,0L550,-78L562,-78L562,-63.46875L562.34375,-63.46875Q565,-71.328125,570.4375,-75.65625Q575.8906,-80,582.4531,-80Q587.4219,-80,590,-78.75L590,-66.75Z"
|
||||||
|
android:fillColor="#FFFFFF"/>
|
||||||
|
<path android:pathData="M665,-36L610,-36Q610.3594,-22.453125,617.125,-15.21875Q623.8906,-8,635.6719,-8Q648.8594,-8,660,-17L660,-6Q649.8125,2,633,2Q616.7656,2,607.375,-8.6875Q598,-19.390625,598,-38.78125Q598,-56.625,608.1094,-68.3125Q618.2344,-80,633.4219,-80Q648.34375,-80,656.6719,-70.0625Q665,-60.125,665,-42.390625L665,-36ZM653,-46Q652.9375,-57.375,647.7344,-63.6875Q642.53125,-70,633.1875,-70Q624.6875,-70,618.25,-63.65625Q611.8281,-57.3125,610.1406,-46L653,-46Z"
|
||||||
|
android:fillColor="#FFFFFF"/>
|
||||||
|
<path android:pathData="M687,-72Q698.3906,-80,713.0781,-80Q740,-80,740,-51.09375L740,0L728,0L728,-12L727.5781,-12Q719.5156,2,703.75,2Q692.25,2,685.625,-4.140625Q679,-10.296875,679,-20.40625Q679,-41.96875,704.5156,-45.625L727.9375,-49Q727.9375,-70,711.9844,-70Q698.03125,-70,687,-60L687,-72ZM708.8281,-36.46875Q698.8281,-35.140625,694.90625,-31.6875Q691,-28.234375,691,-21.046875Q691,-15.25,695.1875,-11.625Q699.3906,-8,706.15625,-8Q715.53125,-8,721.7344,-14.625Q727.9375,-21.265625,727.9375,-31.1875L727.9375,-39L708.8281,-36.46875Z"
|
||||||
|
android:fillColor="#FFFFFF"/>
|
||||||
|
<path android:pathData="M873,0L861,0L861,-44.90625Q861,-58.546875,857.0156,-64.265625Q853.03125,-70,843.84375,-70Q836.15625,-70,830.5781,-62.5Q825,-55.015625,825,-44.6875L825,0L813,0L813,-46.53125Q813,-70,795.0625,-70Q786.8281,-70,781.40625,-62.859375Q776,-55.71875,776,-44.6875L776,0L764,0L764,-78L776,-78L776,-65.859375L776.34375,-65.859375Q784.5,-80,800.3906,-80Q807.9844,-80,814.0625,-75.53125Q820.15625,-71.0625,822.3281,-63.75Q830.8281,-80,847.7656,-80Q873,-80,873,-48.125L873,0Z"
|
||||||
|
android:fillColor="#FFFFFF"/>
|
||||||
|
</group>
|
||||||
|
</group>
|
||||||
|
</group>
|
||||||
|
</vector>
|
|
@ -1,4 +1,4 @@
|
||||||
<vector android:height="24dp" android:tint="#FFFFFF"
|
<vector android:height="24dp" android:tint="?attr/white"
|
||||||
android:viewportHeight="24" android:viewportWidth="24"
|
android:viewportHeight="24" android:viewportWidth="24"
|
||||||
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<path android:fillColor="@android:color/white" android:pathData="M20,8h-2.81c-0.45,-0.78 -1.07,-1.45 -1.82,-1.96L17,4.41 15.59,3l-2.17,2.17C12.96,5.06 12.49,5 12,5c-0.49,0 -0.96,0.06 -1.41,0.17L8.41,3 7,4.41l1.62,1.63C7.88,6.55 7.26,7.22 6.81,8L4,8v2h2.09c-0.05,0.33 -0.09,0.66 -0.09,1v1L4,12v2h2v1c0,0.34 0.04,0.67 0.09,1L4,16v2h2.81c1.04,1.79 2.97,3 5.19,3s4.15,-1.21 5.19,-3L20,18v-2h-2.09c0.05,-0.33 0.09,-0.66 0.09,-1v-1h2v-2h-2v-1c0,-0.34 -0.04,-0.67 -0.09,-1L20,10L20,8zM14,16h-4v-2h4v2zM14,12h-4v-2h4v2z"/>
|
<path android:fillColor="@android:color/white" android:pathData="M20,8h-2.81c-0.45,-0.78 -1.07,-1.45 -1.82,-1.96L17,4.41 15.59,3l-2.17,2.17C12.96,5.06 12.49,5 12,5c-0.49,0 -0.96,0.06 -1.41,0.17L8.41,3 7,4.41l1.62,1.63C7.88,6.55 7.26,7.22 6.81,8L4,8v2h2.09c-0.05,0.33 -0.09,0.66 -0.09,1v1L4,12v2h2v1c0,0.34 0.04,0.67 0.09,1L4,16v2h2.81c1.04,1.79 2.97,3 5.19,3s4.15,-1.21 5.19,-3L20,18v-2h-2.09c0.05,-0.33 0.09,-0.66 0.09,-1v-1h2v-2h-2v-1c0,-0.34 -0.04,-0.67 -0.09,-1L20,10L20,8zM14,16h-4v-2h4v2zM14,12h-4v-2h4v2z"/>
|
||||||
|
|
5
app/src/main/res/drawable/ic_baseline_color_lens_24.xml
Normal file
5
app/src/main/res/drawable/ic_baseline_color_lens_24.xml
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
<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="M12,3c-4.97,0 -9,4.03 -9,9s4.03,9 9,9c0.83,0 1.5,-0.67 1.5,-1.5 0,-0.39 -0.15,-0.74 -0.39,-1.01 -0.23,-0.26 -0.38,-0.61 -0.38,-0.99 0,-0.83 0.67,-1.5 1.5,-1.5L16,16c2.76,0 5,-2.24 5,-5 0,-4.42 -4.03,-8 -9,-8zM6.5,12c-0.83,0 -1.5,-0.67 -1.5,-1.5S5.67,9 6.5,9 8,9.67 8,10.5 7.33,12 6.5,12zM9.5,8C8.67,8 8,7.33 8,6.5S8.67,5 9.5,5s1.5,0.67 1.5,1.5S10.33,8 9.5,8zM14.5,8c-0.83,0 -1.5,-0.67 -1.5,-1.5S13.67,5 14.5,5s1.5,0.67 1.5,1.5S15.33,8 14.5,8zM17.5,12c-0.83,0 -1.5,-0.67 -1.5,-1.5S16.67,9 17.5,9s1.5,0.67 1.5,1.5 -0.67,1.5 -1.5,1.5z"/>
|
||||||
|
</vector>
|
|
@ -1,4 +1,4 @@
|
||||||
<vector android:height="24dp" android:tint="#FFFFFF"
|
<vector android:height="24dp" android:tint="?attr/white"
|
||||||
android:viewportHeight="24" android:viewportWidth="24"
|
android:viewportHeight="24" android:viewportWidth="24"
|
||||||
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<path android:fillColor="@android:color/white" android:pathData="M7,5h10v2h2L19,3c0,-1.1 -0.9,-1.99 -2,-1.99L7,1c-1.1,0 -2,0.9 -2,2v4h2L7,5zM15.41,16.59L20,12l-4.59,-4.59L14,8.83 17.17,12 14,15.17l1.41,1.42zM10,15.17L6.83,12 10,8.83 8.59,7.41 4,12l4.59,4.59L10,15.17zM17,19L7,19v-2L5,17v4c0,1.1 0.9,2 2,2h10c1.1,0 2,-0.9 2,-2v-4h-2v2z"/>
|
<path android:fillColor="@android:color/white" android:pathData="M7,5h10v2h2L19,3c0,-1.1 -0.9,-1.99 -2,-1.99L7,1c-1.1,0 -2,0.9 -2,2v4h2L7,5zM15.41,16.59L20,12l-4.59,-4.59L14,8.83 17.17,12 14,15.17l1.41,1.42zM10,15.17L6.83,12 10,8.83 8.59,7.41 4,12l4.59,4.59L10,15.17zM17,19L7,19v-2L5,17v4c0,1.1 0.9,2 2,2h10c1.1,0 2,-0.9 2,-2v-4h-2v2z"/>
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
android:height="24dp"
|
android:height="24dp"
|
||||||
android:viewportWidth="24"
|
android:viewportWidth="24"
|
||||||
android:viewportHeight="24"
|
android:viewportHeight="24"
|
||||||
android:tint="@color/white">
|
android:tint="?attr/white">
|
||||||
<path
|
<path
|
||||||
android:fillColor="@android:color/white"
|
android:fillColor="@android:color/white"
|
||||||
android:pathData="M20,13H4c-0.55,0 -1,0.45 -1,1v6c0,0.55 0.45,1 1,1h16c0.55,0 1,-0.45 1,-1v-6c0,-0.55 -0.45,-1 -1,-1zM7,19c-1.1,0 -2,-0.9 -2,-2s0.9,-2 2,-2 2,0.9 2,2 -0.9,2 -2,2zM20,3H4c-0.55,0 -1,0.45 -1,1v6c0,0.55 0.45,1 1,1h16c0.55,0 1,-0.45 1,-1V4c0,-0.55 -0.45,-1 -1,-1zM7,9c-1.1,0 -2,-0.9 -2,-2s0.9,-2 2,-2 2,0.9 2,2 -0.9,2 -2,2z"/>
|
android:pathData="M20,13H4c-0.55,0 -1,0.45 -1,1v6c0,0.55 0.45,1 1,1h16c0.55,0 1,-0.45 1,-1v-6c0,-0.55 -0.45,-1 -1,-1zM7,19c-1.1,0 -2,-0.9 -2,-2s0.9,-2 2,-2 2,0.9 2,2 -0.9,2 -2,2zM20,3H4c-0.55,0 -1,0.45 -1,1v6c0,0.55 0.45,1 1,1h16c0.55,0 1,-0.45 1,-1V4c0,-0.55 -0.45,-1 -1,-1zM7,9c-1.1,0 -2,-0.9 -2,-2s0.9,-2 2,-2 2,0.9 2,2 -0.9,2 -2,2z"/>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<vector android:height="24dp" android:tint="#FFFFFF"
|
<vector android:height="24dp" android:tint="?attr/white"
|
||||||
android:viewportHeight="24" android:viewportWidth="24"
|
android:viewportHeight="24" android:viewportWidth="24"
|
||||||
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<path android:fillColor="@android:color/white" android:pathData="M19,3L5,3c-1.11,0 -2,0.9 -2,2v14c0,1.1 0.89,2 2,2h14c1.1,0 2,-0.9 2,-2L21,5c0,-1.1 -0.9,-2 -2,-2zM11,15L9.5,15v-2h-2v2L6,15L6,9h1.5v2.5h2L9.5,9L11,9v6zM13,9h4c0.55,0 1,0.45 1,1v4c0,0.55 -0.45,1 -1,1h-4L13,9zM14.5,13.5h2v-3h-2v3z"/>
|
<path android:fillColor="@android:color/white" android:pathData="M19,3L5,3c-1.11,0 -2,0.9 -2,2v14c0,1.1 0.89,2 2,2h14c1.1,0 2,-0.9 2,-2L21,5c0,-1.1 -0.9,-2 -2,-2zM11,15L9.5,15v-2h-2v2L6,15L6,9h1.5v2.5h2L9.5,9L11,9v6zM13,9h4c0.55,0 1,0.45 1,1v4c0,0.55 -0.45,1 -1,1h-4L13,9zM14.5,13.5h2v-3h-2v3z"/>
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<vector android:autoMirrored="true" android:height="24dp"
|
<vector android:autoMirrored="true" android:height="24dp"
|
||||||
android:tint="#FFFFFF" android:viewportHeight="24"
|
android:tint="?attr/white" android:viewportHeight="24"
|
||||||
android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<path android:fillColor="@android:color/white" android:pathData="M8.59,16.59L13.17,12 8.59,7.41 10,6l6,6 -6,6 -1.41,-1.41z"/>
|
<path android:fillColor="@android:color/white" android:pathData="M8.59,16.59L13.17,12 8.59,7.41 10,6l6,6 -6,6 -1.41,-1.41z"/>
|
||||||
</vector>
|
</vector>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<vector android:height="24dp" android:tint="#FFFFFF"
|
<vector android:height="24dp" android:tint="?attr/white"
|
||||||
android:viewportHeight="24" android:viewportWidth="24"
|
android:viewportHeight="24" android:viewportWidth="24"
|
||||||
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<path android:fillColor="@android:color/white" android:pathData="M11.99,2C6.47,2 2,6.48 2,12s4.47,10 9.99,10C17.52,22 22,17.52 22,12S17.52,2 11.99,2zM18.92,8h-2.95c-0.32,-1.25 -0.78,-2.45 -1.38,-3.56 1.84,0.63 3.37,1.91 4.33,3.56zM12,4.04c0.83,1.2 1.48,2.53 1.91,3.96h-3.82c0.43,-1.43 1.08,-2.76 1.91,-3.96zM4.26,14C4.1,13.36 4,12.69 4,12s0.1,-1.36 0.26,-2h3.38c-0.08,0.66 -0.14,1.32 -0.14,2 0,0.68 0.06,1.34 0.14,2L4.26,14zM5.08,16h2.95c0.32,1.25 0.78,2.45 1.38,3.56 -1.84,-0.63 -3.37,-1.9 -4.33,-3.56zM8.03,8L5.08,8c0.96,-1.66 2.49,-2.93 4.33,-3.56C8.81,5.55 8.35,6.75 8.03,8zM12,19.96c-0.83,-1.2 -1.48,-2.53 -1.91,-3.96h3.82c-0.43,1.43 -1.08,2.76 -1.91,3.96zM14.34,14L9.66,14c-0.09,-0.66 -0.16,-1.32 -0.16,-2 0,-0.68 0.07,-1.35 0.16,-2h4.68c0.09,0.65 0.16,1.32 0.16,2 0,0.68 -0.07,1.34 -0.16,2zM14.59,19.56c0.6,-1.11 1.06,-2.31 1.38,-3.56h2.95c-0.96,1.65 -2.49,2.93 -4.33,3.56zM16.36,14c0.08,-0.66 0.14,-1.32 0.14,-2 0,-0.68 -0.06,-1.34 -0.14,-2h3.38c0.16,0.64 0.26,1.31 0.26,2s-0.1,1.36 -0.26,2h-3.38z"/>
|
<path android:fillColor="@android:color/white" android:pathData="M11.99,2C6.47,2 2,6.48 2,12s4.47,10 9.99,10C17.52,22 22,17.52 22,12S17.52,2 11.99,2zM18.92,8h-2.95c-0.32,-1.25 -0.78,-2.45 -1.38,-3.56 1.84,0.63 3.37,1.91 4.33,3.56zM12,4.04c0.83,1.2 1.48,2.53 1.91,3.96h-3.82c0.43,-1.43 1.08,-2.76 1.91,-3.96zM4.26,14C4.1,13.36 4,12.69 4,12s0.1,-1.36 0.26,-2h3.38c-0.08,0.66 -0.14,1.32 -0.14,2 0,0.68 0.06,1.34 0.14,2L4.26,14zM5.08,16h2.95c0.32,1.25 0.78,2.45 1.38,3.56 -1.84,-0.63 -3.37,-1.9 -4.33,-3.56zM8.03,8L5.08,8c0.96,-1.66 2.49,-2.93 4.33,-3.56C8.81,5.55 8.35,6.75 8.03,8zM12,19.96c-0.83,-1.2 -1.48,-2.53 -1.91,-3.96h3.82c-0.43,1.43 -1.08,2.76 -1.91,3.96zM14.34,14L9.66,14c-0.09,-0.66 -0.16,-1.32 -0.16,-2 0,-0.68 0.07,-1.35 0.16,-2h4.68c0.09,0.65 0.16,1.32 0.16,2 0,0.68 -0.07,1.34 -0.16,2zM14.59,19.56c0.6,-1.11 1.06,-2.31 1.38,-3.56h2.95c-0.96,1.65 -2.49,2.93 -4.33,3.56zM16.36,14c0.08,-0.66 0.14,-1.32 0.14,-2 0,-0.68 -0.06,-1.34 -0.14,-2h3.38c0.16,0.64 0.26,1.31 0.26,2s-0.1,1.36 -0.26,2h-3.38z"/>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<vector android:height="24dp" android:tint="#FFFFFF"
|
<vector android:height="24dp" android:tint="?attr/white"
|
||||||
android:viewportHeight="24" android:viewportWidth="24"
|
android:viewportHeight="24" android:viewportWidth="24"
|
||||||
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<path android:fillColor="@android:color/white" android:pathData="M7.58,4.08L6.15,2.65C3.75,4.48 2.17,7.3 2.03,10.5h2c0.15,-2.65 1.51,-4.97 3.55,-6.42zM19.97,10.5h2c-0.15,-3.2 -1.73,-6.02 -4.12,-7.85l-1.42,1.43c2.02,1.45 3.39,3.77 3.54,6.42zM18,11c0,-3.07 -1.64,-5.64 -4.5,-6.32L13.5,4c0,-0.83 -0.67,-1.5 -1.5,-1.5s-1.5,0.67 -1.5,1.5v0.68C7.63,5.36 6,7.92 6,11v5l-2,2v1h16v-1l-2,-2v-5zM12,22c0.14,0 0.27,-0.01 0.4,-0.04 0.65,-0.14 1.18,-0.58 1.44,-1.18 0.1,-0.24 0.15,-0.5 0.15,-0.78h-4c0.01,1.1 0.9,2 2.01,2z"/>
|
<path android:fillColor="@android:color/white" android:pathData="M7.58,4.08L6.15,2.65C3.75,4.48 2.17,7.3 2.03,10.5h2c0.15,-2.65 1.51,-4.97 3.55,-6.42zM19.97,10.5h2c-0.15,-3.2 -1.73,-6.02 -4.12,-7.85l-1.42,1.43c2.02,1.45 3.39,3.77 3.54,6.42zM18,11c0,-3.07 -1.64,-5.64 -4.5,-6.32L13.5,4c0,-0.83 -0.67,-1.5 -1.5,-1.5s-1.5,0.67 -1.5,1.5v0.68C7.63,5.36 6,7.92 6,11v5l-2,2v1h16v-1l-2,-2v-5zM12,22c0.14,0 0.27,-0.01 0.4,-0.04 0.65,-0.14 1.18,-0.58 1.44,-1.18 0.1,-0.24 0.15,-0.5 0.15,-0.78h-4c0.01,1.1 0.9,2 2.01,2z"/>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<vector android:height="24dp" android:tint="#FFFFFF"
|
<vector android:height="24dp" android:tint="?attr/white"
|
||||||
android:viewportHeight="24" android:viewportWidth="24"
|
android:viewportHeight="24" android:viewportWidth="24"
|
||||||
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<path android:fillColor="@android:color/white" android:pathData="M21,3L3,3c-1.11,0 -2,0.89 -2,2v12c0,1.1 0.89,2 2,2h5v2h8v-2h5c1.1,0 1.99,-0.9 1.99,-2L23,5c0,-1.11 -0.9,-2 -2,-2zM21,17L3,17L3,5h18v12zM16,11l-7,4L9,7z"/>
|
<path android:fillColor="@android:color/white" android:pathData="M21,3L3,3c-1.11,0 -2,0.89 -2,2v12c0,1.1 0.89,2 2,2h5v2h8v-2h5c1.1,0 1.99,-0.9 1.99,-2L23,5c0,-1.11 -0.9,-2 -2,-2zM21,17L3,17L3,5h18v12zM16,11l-7,4L9,7z"/>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<vector android:height="24dp" android:tint="#FFFFFF"
|
<vector android:height="24dp" android:tint="?attr/white"
|
||||||
android:viewportHeight="24" android:viewportWidth="24"
|
android:viewportHeight="24" android:viewportWidth="24"
|
||||||
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<path android:fillColor="@android:color/white" android:pathData="M19,11h-8v6h8v-6zM23,19L23,4.98C23,3.88 22.1,3 21,3L3,3c-1.1,0 -2,0.88 -2,1.98L1,19c0,1.1 0.9,2 2,2h18c1.1,0 2,-0.9 2,-2zM21,19.02L3,19.02L3,4.97h18v14.05z"/>
|
<path android:fillColor="@android:color/white" android:pathData="M19,11h-8v6h8v-6zM23,19L23,4.98C23,3.88 22.1,3 21,3L3,3c-1.1,0 -2,0.88 -2,1.98L1,19c0,1.1 0.9,2 2,2h18c1.1,0 2,-0.9 2,-2zM21,19.02L3,19.02L3,4.97h18v14.05z"/>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<vector android:height="24dp" android:tint="#FFFFFF"
|
<vector android:height="24dp" android:tint="?attr/white"
|
||||||
android:viewportHeight="24" android:viewportWidth="24"
|
android:viewportHeight="24" android:viewportWidth="24"
|
||||||
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<path android:fillColor="@android:color/white" android:pathData="M6,18l8.5,-6L6,6v12zM16,6v12h2V6h-2z"/>
|
<path android:fillColor="@android:color/white" android:pathData="M6,18l8.5,-6L6,6v12zM16,6v12h2V6h-2z"/>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<vector android:height="24dp" android:tint="#FFFFFF"
|
<vector android:height="24dp" android:tint="?attr/white"
|
||||||
android:viewportHeight="24" android:viewportWidth="24"
|
android:viewportHeight="24" android:viewportWidth="24"
|
||||||
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<path android:fillColor="@android:color/white" android:pathData="M17,1.01L7,1c-1.1,0 -2,0.9 -2,2v18c0,1.1 0.9,2 2,2h10c1.1,0 2,-0.9 2,-2L19,3c0,-1.1 -0.9,-1.99 -2,-1.99zM17,19L7,19L7,5h10v14zM16,13h-3L13,8h-2v5L8,13l4,4 4,-4z"/>
|
<path android:fillColor="@android:color/white" android:pathData="M17,1.01L7,1c-1.1,0 -2,0.9 -2,2v18c0,1.1 0.9,2 2,2h10c1.1,0 2,-0.9 2,-2L19,3c0,-1.1 -0.9,-1.99 -2,-1.99zM17,19L7,19L7,5h10v14zM16,13h-3L13,8h-2v5L8,13l4,4 4,-4z"/>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<vector android:height="24dp" android:tint="#FFFFFF"
|
<vector android:height="24dp" android:tint="?attr/white"
|
||||||
android:viewportHeight="24" android:viewportWidth="24"
|
android:viewportHeight="24" android:viewportWidth="24"
|
||||||
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<path android:fillColor="@android:color/white" android:pathData="M9,11.24V7.5C9,6.12 10.12,5 11.5,5S14,6.12 14,7.5v3.74c1.21,-0.81 2,-2.18 2,-3.74C16,5.01 13.99,3 11.5,3S7,5.01 7,7.5C7,9.06 7.79,10.43 9,11.24zM18.84,15.87l-4.54,-2.26c-0.17,-0.07 -0.35,-0.11 -0.54,-0.11H13v-6C13,6.67 12.33,6 11.5,6S10,6.67 10,7.5v10.74c-3.6,-0.76 -3.54,-0.75 -3.67,-0.75c-0.31,0 -0.59,0.13 -0.79,0.33l-0.79,0.8l4.94,4.94C9.96,23.83 10.34,24 10.75,24h6.79c0.75,0 1.33,-0.55 1.44,-1.28l0.75,-5.27c0.01,-0.07 0.02,-0.14 0.02,-0.2C19.75,16.63 19.37,16.09 18.84,15.87z"/>
|
<path android:fillColor="@android:color/white" android:pathData="M9,11.24V7.5C9,6.12 10.12,5 11.5,5S14,6.12 14,7.5v3.74c1.21,-0.81 2,-2.18 2,-3.74C16,5.01 13.99,3 11.5,3S7,5.01 7,7.5C7,9.06 7.79,10.43 9,11.24zM18.84,15.87l-4.54,-2.26c-0.17,-0.07 -0.35,-0.11 -0.54,-0.11H13v-6C13,6.67 12.33,6 11.5,6S10,6.67 10,7.5v10.74c-3.6,-0.76 -3.54,-0.75 -3.67,-0.75c-0.31,0 -0.59,0.13 -0.79,0.33l-0.79,0.8l4.94,4.94C9.96,23.83 10.34,24 10.75,24h6.79c0.75,0 1.33,-0.55 1.44,-1.28l0.75,-5.27c0.01,-0.07 0.02,-0.14 0.02,-0.2C19.75,16.63 19.37,16.09 18.84,15.87z"/>
|
||||||
|
|
5
app/src/main/res/drawable/ic_baseline_tv_24.xml
Normal file
5
app/src/main/res/drawable/ic_baseline_tv_24.xml
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
<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="M21,3L3,3c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h5v2h8v-2h5c1.1,0 1.99,-0.9 1.99,-2L23,5c0,-1.1 -0.9,-2 -2,-2zM21,17L3,17L3,5h18v12z"/>
|
||||||
|
</vector>
|
|
@ -1,4 +1,4 @@
|
||||||
<vector android:height="24dp" android:tint="#FFFFFF"
|
<vector android:height="24dp" android:tint="?attr/white"
|
||||||
android:viewportHeight="24" android:viewportWidth="24"
|
android:viewportHeight="24" android:viewportWidth="24"
|
||||||
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<path android:fillColor="@android:color/white" android:pathData="M1,21h22L12,2 1,21zM13,18h-2v-2h2v2zM13,14h-2v-4h2v4z"/>
|
<path android:fillColor="@android:color/white" android:pathData="M1,21h22L12,2 1,21zM13,18h-2v-2h2v2zM13,14h-2v-4h2v4z"/>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<vector android:height="24dp" android:tint="#FFFFFF"
|
<vector android:height="24dp" android:tint="?attr/white"
|
||||||
android:viewportHeight="24" android:viewportWidth="24"
|
android:viewportHeight="24" android:viewportWidth="24"
|
||||||
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<path android:fillColor="@android:color/white" android:pathData="M20,4L4,4c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2L22,6c0,-1.1 -0.9,-2 -2,-2zM20,18L4,18L4,6h16v12zM6,10h2v2L6,12zM6,14h8v2L6,16zM16,14h2v2h-2zM10,10h8v2h-8z"/>
|
<path android:fillColor="@android:color/white" android:pathData="M20,4L4,4c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2L22,6c0,-1.1 -0.9,-2 -2,-2zM20,18L4,18L4,6h16v12zM6,10h2v2L6,12zM6,14h8v2L6,16zM16,14h2v2h-2zM10,10h8v2h-8z"/>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<vector android:height="24dp" android:tint="#FFFFFF"
|
<vector android:height="24dp" android:tint="?attr/white"
|
||||||
android:viewportHeight="24" android:viewportWidth="24"
|
android:viewportHeight="24" android:viewportWidth="24"
|
||||||
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<path android:fillColor="@android:color/white" android:pathData="M16.76,5.36l-1.68,1.69c0.8,1.13 0.83,2.58 0.09,3.74l1.7,1.7c1.9,-2.02 1.87,-4.98 -0.11,-7.13zM20.07,2l-1.63,1.63c2.72,2.97 2.76,7.39 0.14,10.56l1.64,1.64c3.74,-3.89 3.71,-9.84 -0.15,-13.83zM9.43,5.04l3.53,3.53c-0.2,-1.86 -1.67,-3.33 -3.53,-3.53zM4.41,2.86L3,4.27l2.62,2.62C5.23,7.5 5,8.22 5,9c0,2.21 1.79,4 4,4 0.78,0 1.5,-0.23 2.11,-0.62l4.4,4.4C13.74,15.6 10.78,15 9,15c-2.67,0 -8,1.34 -8,4v2h16v-2c0,-0.37 -0.11,-0.7 -0.29,-1.02L19.73,21l1.41,-1.41L4.41,2.86zM3,19c0.22,-0.72 3.31,-2 6,-2 2.7,0 5.8,1.29 6,2L3,19zM9,11c-1.1,0 -2,-0.9 -2,-2 0,-0.22 0.04,-0.42 0.11,-0.62l2.51,2.51c-0.2,0.07 -0.4,0.11 -0.62,0.11z"/>
|
<path android:fillColor="@android:color/white" android:pathData="M16.76,5.36l-1.68,1.69c0.8,1.13 0.83,2.58 0.09,3.74l1.7,1.7c1.9,-2.02 1.87,-4.98 -0.11,-7.13zM20.07,2l-1.63,1.63c2.72,2.97 2.76,7.39 0.14,10.56l1.64,1.64c3.74,-3.89 3.71,-9.84 -0.15,-13.83zM9.43,5.04l3.53,3.53c-0.2,-1.86 -1.67,-3.33 -3.53,-3.53zM4.41,2.86L3,4.27l2.62,2.62C5.23,7.5 5,8.22 5,9c0,2.21 1.79,4 4,4 0.78,0 1.5,-0.23 2.11,-0.62l4.4,4.4C13.74,15.6 10.78,15 9,15c-2.67,0 -8,1.34 -8,4v2h16v-2c0,-0.37 -0.11,-0.7 -0.29,-1.02L19.73,21l1.41,-1.41L4.41,2.86zM3,19c0.22,-0.72 3.31,-2 6,-2 2.7,0 5.8,1.29 6,2L3,19zM9,11c-1.1,0 -2,-0.9 -2,-2 0,-0.22 0.04,-0.42 0.11,-0.62l2.51,2.51c-0.2,0.07 -0.4,0.11 -0.62,0.11z"/>
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
<item android:id="@android:id/mask">
|
<item android:id="@android:id/mask">
|
||||||
<shape android:shape="rectangle">
|
<shape android:shape="rectangle">
|
||||||
<corners android:radius="2dp" />
|
<corners android:radius="2dp" />
|
||||||
<solid android:color="@color/iconGrayBackground" />
|
<solid android:color="?attr/iconGrayBackground" />
|
||||||
</shape>
|
</shape>
|
||||||
</item>
|
</item>
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<solid android:color="@color/colorPrimary"/>
|
<solid android:color="?attr/colorPrimary"/>
|
||||||
<corners android:topLeftRadius="5dp" android:topRightRadius="5dp"/>
|
<corners android:topLeftRadius="5dp" android:topRightRadius="5dp"/>
|
||||||
</shape>
|
</shape>
|
7
app/src/main/res/drawable/video_bottom_button.xml
Normal file
7
app/src/main/res/drawable/video_bottom_button.xml
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:color="@color/video_ripple">
|
||||||
|
<item android:id="@android:id/mask">
|
||||||
|
<color android:color="@color/video_ripple"/>
|
||||||
|
</item>
|
||||||
|
</ripple>
|
|
@ -6,7 +6,7 @@
|
||||||
android:id="@+id/homeRoot"
|
android:id="@+id/homeRoot"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:configChanges="orientation|screenSize|screenLayout|keyboardHidden"
|
android:configChanges="orientation|screenSize|screenLayout|keyboardHidden|keyboard|navigation"
|
||||||
android:paddingTop="0dp">
|
android:paddingTop="0dp">
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
|
@ -15,9 +15,11 @@
|
||||||
android:id="@+id/nav_view"
|
android:id="@+id/nav_view"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:background="?attr/darkBackground"
|
android:background="?attr/primaryGrayBackground"
|
||||||
|
|
||||||
app:labelVisibilityMode="labeled"
|
app:labelVisibilityMode="labeled"
|
||||||
|
app:itemTextColor="@color/item_select_color"
|
||||||
|
app:itemIconTint="@color/item_select_color"
|
||||||
|
|
||||||
app:layout_constraintLeft_toLeftOf="parent"
|
app:layout_constraintLeft_toLeftOf="parent"
|
||||||
app:layout_constraintRight_toRightOf="parent"
|
app:layout_constraintRight_toRightOf="parent"
|
||||||
|
@ -41,7 +43,7 @@
|
||||||
>
|
>
|
||||||
<!--com.google.android.gms.cast.framework.media.widget.MiniControllerFragment-->
|
<!--com.google.android.gms.cast.framework.media.widget.MiniControllerFragment-->
|
||||||
<fragment
|
<fragment
|
||||||
app:customCastBackgroundColor="?attr/darkBackground"
|
app:customCastBackgroundColor="?attr/primaryGrayBackground"
|
||||||
app:castControlButtons="@array/cast_mini_controller_control_buttons"
|
app:castControlButtons="@array/cast_mini_controller_control_buttons"
|
||||||
android:id="@+id/cast_mini_controller"
|
android:id="@+id/cast_mini_controller"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
|
62
app/src/main/res/layout/activity_main_tv.xml
Normal file
62
app/src/main/res/layout/activity_main_tv.xml
Normal file
|
@ -0,0 +1,62 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<FrameLayout
|
||||||
|
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/homeRoot"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:configChanges="orientation|screenSize|screenLayout|keyboardHidden|keyboard|navigation"
|
||||||
|
android:paddingTop="0dp">
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_width="match_parent">
|
||||||
|
<com.google.android.material.bottomnavigation.BottomNavigationView
|
||||||
|
android:id="@+id/nav_view"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="?attr/primaryGrayBackground"
|
||||||
|
|
||||||
|
app:itemTextColor="@color/item_select_color"
|
||||||
|
app:itemIconTint="@color/item_select_color"
|
||||||
|
|
||||||
|
android:outlineSpotShadowColor="@color/transparent"
|
||||||
|
android:outlineAmbientShadowColor="@color/transparent"
|
||||||
|
|
||||||
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
app:labelVisibilityMode="labeled"
|
||||||
|
app:layout_constraintBottom_toTopOf="@+id/nav_host_fragment"
|
||||||
|
app:layout_constraintLeft_toLeftOf="parent"
|
||||||
|
app:layout_constraintRight_toRightOf="parent"
|
||||||
|
app:menu="@menu/bottom_nav_menu"
|
||||||
|
/>
|
||||||
|
<fragment
|
||||||
|
android:id="@+id/nav_host_fragment"
|
||||||
|
android:name="androidx.navigation.fragment.NavHostFragment"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="0dp"
|
||||||
|
app:defaultNavHost="true"
|
||||||
|
app:layout_constraintTop_toBottomOf="@+id/nav_view"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:navGraph="@navigation/mobile_navigation"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"/>
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
app:layout_constraintBottom_toTopOf="@+id/nav_view"
|
||||||
|
android:id="@+id/cast_mini_controller_holder"
|
||||||
|
>
|
||||||
|
<!--com.google.android.gms.cast.framework.media.widget.MiniControllerFragment-->
|
||||||
|
<fragment
|
||||||
|
app:customCastBackgroundColor="?attr/primaryGrayBackground"
|
||||||
|
app:castControlButtons="@array/cast_mini_controller_control_buttons"
|
||||||
|
android:id="@+id/cast_mini_controller"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:visibility="gone"
|
||||||
|
class="com.lagradost.cloudstream3.ui.MyMiniControllerFragment"
|
||||||
|
tools:ignore="FragmentTagUsage">
|
||||||
|
</fragment>
|
||||||
|
</LinearLayout>
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
</FrameLayout>
|
|
@ -1,18 +1,23 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<LinearLayout android:orientation="vertical" xmlns:android="http://schemas.android.com/apk/res/android"
|
<LinearLayout android:orientation="vertical" xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent" >
|
android:layout_height="match_parent">
|
||||||
<!--
|
<!--
|
||||||
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content"
|
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content"
|
||||||
android:text="Loading..." android:textColor="?attr/textColor" android:textSize="20sp"
|
android:text="Loading..." android:textColor="?attr/textColor" android:textSize="20sp"
|
||||||
android:textStyle="bold" android:layout_margin="10dp"/>-->
|
android:textStyle="bold" android:layout_margin="10dp"/>-->
|
||||||
<!-- style="@android:style/Widget.Material.ProgressBar.Horizontal"
|
<!-- style="@android:style/Widget.Material.ProgressBar.Horizontal"
|
||||||
-->
|
-->
|
||||||
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content"
|
<TextView
|
||||||
android:text="@string/loading_chromecast" android:layout_gravity="center" android:textColor="?attr/textColor" android:textSize="20sp"
|
android:layout_width="wrap_content"
|
||||||
android:textStyle="bold" android:layout_margin="10dp" />
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/loading_chromecast"
|
||||||
|
android:layout_gravity="center"
|
||||||
|
android:textColor="@color/textColor"
|
||||||
|
android:textSize="20sp"
|
||||||
|
android:textStyle="bold"
|
||||||
|
android:layout_margin="10dp"/>
|
||||||
<ProgressBar
|
<ProgressBar
|
||||||
|
|
||||||
android:layout_margin="20dp"
|
android:layout_margin="20dp"
|
||||||
|
|
||||||
android:layout_gravity="center"
|
android:layout_gravity="center"
|
||||||
|
|
|
@ -60,7 +60,7 @@
|
||||||
android:marqueeRepeatLimit="marquee_forever"
|
android:marqueeRepeatLimit="marquee_forever"
|
||||||
android:singleLine="true"
|
android:singleLine="true"
|
||||||
|
|
||||||
android:textColor="@color/textColor"
|
android:textColor="?attr/textColor"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent">
|
android:layout_height="match_parent">
|
||||||
</TextView>
|
</TextView>
|
||||||
|
@ -71,7 +71,7 @@
|
||||||
android:layout_gravity="center_vertical"
|
android:layout_gravity="center_vertical"
|
||||||
android:gravity="center_vertical"
|
android:gravity="center_vertical"
|
||||||
tools:text="128MB / 237MB"
|
tools:text="128MB / 237MB"
|
||||||
android:textColor="@color/grayTextColor"
|
android:textColor="?attr/grayTextColor"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="match_parent">
|
android:layout_height="match_parent">
|
||||||
</TextView>
|
</TextView>
|
||||||
|
@ -111,6 +111,7 @@
|
||||||
android:layout_width="30dp"
|
android:layout_width="30dp"
|
||||||
android:background="?selectableItemBackgroundBorderless"
|
android:background="?selectableItemBackgroundBorderless"
|
||||||
android:src="@drawable/ic_baseline_play_arrow_24"
|
android:src="@drawable/ic_baseline_play_arrow_24"
|
||||||
|
android:tint="?attr/textColor"
|
||||||
android:contentDescription="@string/download"/>
|
android:contentDescription="@string/download"/>
|
||||||
</FrameLayout>
|
</FrameLayout>
|
||||||
</GridLayout>
|
</GridLayout>
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
app:cardCornerRadius="@dimen/roundedImageRadius"
|
app:cardCornerRadius="@dimen/roundedImageRadius"
|
||||||
app:cardBackgroundColor="@color/itemBackground"
|
app:cardBackgroundColor="?attr/boxItemBackground"
|
||||||
android:id="@+id/episode_holder"
|
android:id="@+id/episode_holder"
|
||||||
android:foreground="@drawable/outline_drawable"
|
android:foreground="@drawable/outline_drawable"
|
||||||
android:layout_marginBottom="10dp"
|
android:layout_marginBottom="10dp"
|
||||||
|
@ -41,14 +41,14 @@
|
||||||
android:id="@+id/download_header_title"
|
android:id="@+id/download_header_title"
|
||||||
tools:text="Perfect Run"
|
tools:text="Perfect Run"
|
||||||
android:textStyle="bold"
|
android:textStyle="bold"
|
||||||
android:textColor="@color/textColor"
|
android:textColor="?attr/textColor"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content">
|
android:layout_height="wrap_content">
|
||||||
</TextView>
|
</TextView>
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/download_header_info"
|
android:id="@+id/download_header_info"
|
||||||
tools:text="1 episode | 285MB"
|
tools:text="1 episode | 285MB"
|
||||||
android:textColor="@color/grayTextColor"
|
android:textColor="?attr/grayTextColor"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content">
|
android:layout_height="wrap_content">
|
||||||
</TextView>
|
</TextView>
|
||||||
|
@ -85,6 +85,8 @@
|
||||||
android:visibility="visible"
|
android:visibility="visible"
|
||||||
/>
|
/>
|
||||||
<ImageView
|
<ImageView
|
||||||
|
android:tint="?attr/white"
|
||||||
|
|
||||||
android:visibility="visible"
|
android:visibility="visible"
|
||||||
android:layout_marginEnd="10dp"
|
android:layout_marginEnd="10dp"
|
||||||
android:layout_marginStart="10dp"
|
android:layout_marginStart="10dp"
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<androidx.coordinatorlayout.widget.CoordinatorLayout
|
<androidx.coordinatorlayout.widget.CoordinatorLayout
|
||||||
android:background="?attr/darkBackground"
|
android:background="?attr/primaryGrayBackground"
|
||||||
android:id="@+id/download_child_root"
|
android:id="@+id/download_child_root"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
@ -17,7 +17,7 @@
|
||||||
android:id="@+id/download_child_toolbar"
|
android:id="@+id/download_child_toolbar"
|
||||||
android:paddingTop="@dimen/navbarHeight"
|
android:paddingTop="@dimen/navbarHeight"
|
||||||
tools:title="Overlord"
|
tools:title="Overlord"
|
||||||
android:background="?attr/darkBackground"
|
android:background="?attr/primaryGrayBackground"
|
||||||
app:navigationIconTint="?attr/iconColor"
|
app:navigationIconTint="?attr/iconColor"
|
||||||
app:titleTextColor="?attr/textColor"
|
app:titleTextColor="?attr/textColor"
|
||||||
app:layout_scrollFlags="scroll|enterAlways"
|
app:layout_scrollFlags="scroll|enterAlways"
|
||||||
|
|
|
@ -7,11 +7,11 @@
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:background="?attr/darkBackground"
|
android:background="?attr/primaryGrayBackground"
|
||||||
tools:context=".ui.download.DownloadFragment">
|
tools:context=".ui.download.DownloadFragment">
|
||||||
|
|
||||||
<com.google.android.material.appbar.AppBarLayout
|
<com.google.android.material.appbar.AppBarLayout
|
||||||
android:background="?attr/darkBackground"
|
android:background="?attr/primaryGrayBackground"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content">
|
android:layout_height="wrap_content">
|
||||||
<!--
|
<!--
|
||||||
|
@ -26,6 +26,7 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content">
|
android:layout_height="wrap_content">
|
||||||
<TextView
|
<TextView
|
||||||
|
android:textColor="?attr/textColor"
|
||||||
android:layout_marginBottom="5dp"
|
android:layout_marginBottom="5dp"
|
||||||
android:text="@string/download_storage_text"
|
android:text="@string/download_storage_text"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
|
@ -39,7 +40,7 @@
|
||||||
<View
|
<View
|
||||||
android:layout_weight="0.5"
|
android:layout_weight="0.5"
|
||||||
android:id="@+id/download_used"
|
android:id="@+id/download_used"
|
||||||
android:background="@color/usedStorageColor"
|
android:background="?attr/white"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="match_parent"/>
|
android:layout_height="match_parent"/>
|
||||||
<View
|
<View
|
||||||
|
@ -51,7 +52,7 @@
|
||||||
<View
|
<View
|
||||||
android:id="@+id/download_free"
|
android:id="@+id/download_free"
|
||||||
android:layout_weight="0.10"
|
android:layout_weight="0.10"
|
||||||
android:background="@color/freeStorageColor"
|
android:background="?attr/grayTextColor"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="match_parent"/>
|
android:layout_height="match_parent"/>
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
@ -64,7 +65,7 @@
|
||||||
android:layout_marginTop="5dp"
|
android:layout_marginTop="5dp"
|
||||||
android:layout_marginBottom="5dp"
|
android:layout_marginBottom="5dp"
|
||||||
android:layout_gravity="center_vertical"
|
android:layout_gravity="center_vertical"
|
||||||
android:background="@color/usedStorageColor"
|
android:background="?attr/white"
|
||||||
android:layout_width="10dp"
|
android:layout_width="10dp"
|
||||||
android:layout_height="10dp"/>
|
android:layout_height="10dp"/>
|
||||||
<TextView
|
<TextView
|
||||||
|
@ -93,7 +94,7 @@
|
||||||
<View
|
<View
|
||||||
android:layout_margin="5dp"
|
android:layout_margin="5dp"
|
||||||
android:layout_gravity="center_vertical"
|
android:layout_gravity="center_vertical"
|
||||||
android:background="@color/freeStorageColor"
|
android:background="?attr/grayTextColor"
|
||||||
android:layout_width="10dp"
|
android:layout_width="10dp"
|
||||||
android:layout_height="10dp"/>
|
android:layout_height="10dp"/>
|
||||||
<TextView
|
<TextView
|
||||||
|
|
|
@ -95,15 +95,15 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent">
|
android:layout_height="match_parent">
|
||||||
<View
|
<View
|
||||||
android:background="?attr/darkBackground"
|
android:background="?attr/primaryGrayBackground"
|
||||||
android:id="@+id/home_statusbar"
|
android:id="@+id/home_statusbar"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_width="match_parent"/>
|
android:layout_width="match_parent"/>
|
||||||
<FrameLayout
|
<FrameLayout
|
||||||
android:id="@+id/home_settings_bar"
|
android:id="@+id/home_settings_bar"
|
||||||
android:background="?attr/darkBackground"
|
android:background="?attr/primaryGrayBackground"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="60dp">
|
android:layout_height="70dp">
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
|
|
||||||
|
@ -194,12 +194,13 @@
|
||||||
android:textStyle="bold"
|
android:textStyle="bold"
|
||||||
android:layout_margin="5dp"
|
android:layout_margin="5dp"
|
||||||
android:textSize="15sp"
|
android:textSize="15sp"
|
||||||
android:textColor="@color/textColor"
|
android:textColor="?attr/textColor"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:maxLines="2"
|
android:maxLines="2"
|
||||||
android:ellipsize="end"
|
android:ellipsize="end"
|
||||||
android:layout_height="40sp"/>
|
android:layout_height="40sp"/>
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
|
android:padding="5dp"
|
||||||
android:layout_gravity="center"
|
android:layout_gravity="center"
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
android:orientation="horizontal"
|
android:orientation="horizontal"
|
||||||
|
@ -268,6 +269,7 @@
|
||||||
android:text="@string/continue_watching"
|
android:text="@string/continue_watching"
|
||||||
/>
|
/>
|
||||||
<ImageView
|
<ImageView
|
||||||
|
android:tint="?attr/textColor"
|
||||||
android:layout_marginEnd="5dp"
|
android:layout_marginEnd="5dp"
|
||||||
android:layout_gravity="end|center_vertical"
|
android:layout_gravity="end|center_vertical"
|
||||||
android:src="@drawable/ic_baseline_arrow_forward_24"
|
android:src="@drawable/ic_baseline_arrow_forward_24"
|
||||||
|
@ -309,6 +311,8 @@
|
||||||
<ImageView
|
<ImageView
|
||||||
android:background="?android:attr/selectableItemBackgroundBorderless"
|
android:background="?android:attr/selectableItemBackgroundBorderless"
|
||||||
|
|
||||||
|
android:tint="?attr/textColor"
|
||||||
|
|
||||||
android:id="@+id/home_bookmark_select"
|
android:id="@+id/home_bookmark_select"
|
||||||
android:src="@drawable/ic_baseline_filter_list_24"
|
android:src="@drawable/ic_baseline_filter_list_24"
|
||||||
android:layout_width="24dp"
|
android:layout_width="24dp"
|
||||||
|
@ -323,6 +327,7 @@
|
||||||
tools:text="Bookmarked"
|
tools:text="Bookmarked"
|
||||||
/>
|
/>
|
||||||
<ImageView
|
<ImageView
|
||||||
|
android:tint="?attr/textColor"
|
||||||
android:layout_marginEnd="5dp"
|
android:layout_marginEnd="5dp"
|
||||||
android:layout_gravity="end|center_vertical"
|
android:layout_gravity="end|center_vertical"
|
||||||
android:src="@drawable/ic_baseline_arrow_forward_24"
|
android:src="@drawable/ic_baseline_arrow_forward_24"
|
||||||
|
|
|
@ -83,7 +83,7 @@
|
||||||
android:scaleType="centerCrop"
|
android:scaleType="centerCrop"
|
||||||
android:alpha="0.7"
|
android:alpha="0.7"
|
||||||
tools:src="@drawable/example_poster"
|
tools:src="@drawable/example_poster"
|
||||||
android:background="@color/primaryGrayBackground"
|
android:background="?attr/primaryGrayBackground"
|
||||||
tools:ignore="ContentDescription"/>
|
tools:ignore="ContentDescription"/>
|
||||||
<ImageView
|
<ImageView
|
||||||
android:src="@drawable/background_shadow"
|
android:src="@drawable/background_shadow"
|
||||||
|
@ -208,6 +208,7 @@
|
||||||
android:layout_height="50dp"
|
android:layout_height="50dp"
|
||||||
android:mediaRouteTypes="user"
|
android:mediaRouteTypes="user"
|
||||||
android:visibility="gone"
|
android:visibility="gone"
|
||||||
|
app:mediaRouteButtonTint="?attr/textColor"
|
||||||
/>
|
/>
|
||||||
<ImageView
|
<ImageView
|
||||||
android:nextFocusUp="@id/result_back"
|
android:nextFocusUp="@id/result_back"
|
||||||
|
@ -220,6 +221,9 @@
|
||||||
android:layout_height="25dp"
|
android:layout_height="25dp"
|
||||||
android:layout_marginRight="10dp"
|
android:layout_marginRight="10dp"
|
||||||
android:elevation="10dp"
|
android:elevation="10dp"
|
||||||
|
|
||||||
|
android:tint="?attr/textColor"
|
||||||
|
|
||||||
android:background="?android:attr/selectableItemBackgroundBorderless"
|
android:background="?android:attr/selectableItemBackgroundBorderless"
|
||||||
android:src="@drawable/ic_outline_share_24"
|
android:src="@drawable/ic_outline_share_24"
|
||||||
android:layout_gravity="center" android:contentDescription="@string/result_share">
|
android:layout_gravity="center" android:contentDescription="@string/result_share">
|
||||||
|
@ -235,6 +239,9 @@
|
||||||
android:layout_height="25dp"
|
android:layout_height="25dp"
|
||||||
android:layout_margin="5dp"
|
android:layout_margin="5dp"
|
||||||
android:elevation="10dp"
|
android:elevation="10dp"
|
||||||
|
|
||||||
|
android:tint="?attr/textColor"
|
||||||
|
|
||||||
android:background="?android:attr/selectableItemBackgroundBorderless"
|
android:background="?android:attr/selectableItemBackgroundBorderless"
|
||||||
android:src="@drawable/ic_baseline_public_24"
|
android:src="@drawable/ic_baseline_public_24"
|
||||||
android:layout_gravity="center"
|
android:layout_gravity="center"
|
||||||
|
@ -261,6 +268,7 @@
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
|
android:textColor="?attr/textColor"
|
||||||
android:padding="10dp"
|
android:padding="10dp"
|
||||||
android:foreground="@drawable/outline_drawable"
|
android:foreground="@drawable/outline_drawable"
|
||||||
|
|
||||||
|
@ -383,7 +391,7 @@
|
||||||
android:layout_gravity="center_vertical"
|
android:layout_gravity="center_vertical"
|
||||||
android:gravity="center_vertical"
|
android:gravity="center_vertical"
|
||||||
tools:text="128MB / 237MB"
|
tools:text="128MB / 237MB"
|
||||||
android:textColor="@color/grayTextColor"
|
android:textColor="?attr/grayTextColor"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="match_parent">
|
android:layout_height="match_parent">
|
||||||
</TextView>
|
</TextView>
|
||||||
|
@ -423,8 +431,23 @@
|
||||||
android:layout_gravity="center_vertical"
|
android:layout_gravity="center_vertical"
|
||||||
android:layout_marginStart="0dp"
|
android:layout_marginStart="0dp"
|
||||||
style="@style/MultiSelectButton"
|
style="@style/MultiSelectButton"
|
||||||
>
|
/>
|
||||||
</com.google.android.material.button.MaterialButton>
|
|
||||||
|
<com.google.android.material.button.MaterialButton
|
||||||
|
tools:visibility="visible"
|
||||||
|
tools:text="Dubbed"
|
||||||
|
|
||||||
|
android:nextFocusUp="@id/result_descript"
|
||||||
|
android:nextFocusRight="@id/result_season_button"
|
||||||
|
android:nextFocusLeft="@id/result_season_button"
|
||||||
|
android:nextFocusDown="@id/result_episodes"
|
||||||
|
|
||||||
|
android:id="@+id/result_dub_select"
|
||||||
|
android:visibility="gone"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:layout_marginStart="0dp"
|
||||||
|
style="@style/MultiSelectButton"
|
||||||
|
/>
|
||||||
<TextView
|
<TextView
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
android:id="@+id/searchRoot"
|
android:id="@+id/searchRoot"
|
||||||
tools:context=".ui.search.SearchFragment"
|
tools:context=".ui.search.SearchFragment"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:background="?attr/darkBackground"
|
android:background="?attr/primaryGrayBackground"
|
||||||
android:layout_marginTop="@dimen/navbarHeight">
|
android:layout_marginTop="@dimen/navbarHeight">
|
||||||
<FrameLayout
|
<FrameLayout
|
||||||
android:visibility="visible"
|
android:visibility="visible"
|
||||||
|
@ -27,8 +27,12 @@
|
||||||
android:nextFocusLeft="@id/search_filter"
|
android:nextFocusLeft="@id/search_filter"
|
||||||
android:nextFocusDown="@id/cardSpace"
|
android:nextFocusDown="@id/cardSpace"
|
||||||
|
|
||||||
|
android:imeOptions="actionSearch"
|
||||||
|
android:inputType="text"
|
||||||
|
|
||||||
android:id="@+id/main_search"
|
android:id="@+id/main_search"
|
||||||
app:queryBackground="@color/transparent"
|
app:queryBackground="@color/transparent"
|
||||||
|
|
||||||
app:searchIcon="@drawable/search_icon"
|
app:searchIcon="@drawable/search_icon"
|
||||||
android:paddingStart="-10dp"
|
android:paddingStart="-10dp"
|
||||||
android:iconifiedByDefault="false"
|
android:iconifiedByDefault="false"
|
||||||
|
@ -38,7 +42,6 @@
|
||||||
android:layout_gravity="center_vertical"
|
android:layout_gravity="center_vertical"
|
||||||
app:iconifiedByDefault="false"
|
app:iconifiedByDefault="false"
|
||||||
tools:ignore="RtlSymmetry">
|
tools:ignore="RtlSymmetry">
|
||||||
<requestFocus/>
|
|
||||||
|
|
||||||
<androidx.core.widget.ContentLoadingProgressBar
|
<androidx.core.widget.ContentLoadingProgressBar
|
||||||
android:id="@+id/search_loading_bar"
|
android:id="@+id/search_loading_bar"
|
||||||
|
@ -70,6 +73,7 @@
|
||||||
android:layout_gravity="end|center_vertical"
|
android:layout_gravity="end|center_vertical"
|
||||||
app:tint="?attr/textColor"
|
app:tint="?attr/textColor"
|
||||||
android:contentDescription="@string/change_providers_img_des">
|
android:contentDescription="@string/change_providers_img_des">
|
||||||
|
<requestFocus/>
|
||||||
</ImageView>
|
</ImageView>
|
||||||
</FrameLayout>
|
</FrameLayout>
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:background="?attr/darkBackground"
|
android:background="?attr/primaryGrayBackground"
|
||||||
android:layout_height="wrap_content">
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
<FrameLayout
|
<FrameLayout
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
android:elevation="10dp"
|
android:elevation="10dp"
|
||||||
app:cardCornerRadius="@dimen/roundedImageRadius"
|
app:cardCornerRadius="@dimen/roundedImageRadius"
|
||||||
android:id="@+id/backgroundCard"
|
android:id="@+id/backgroundCard"
|
||||||
app:cardBackgroundColor="@color/primaryGrayBackground"
|
app:cardBackgroundColor="?attr/primaryGrayBackground"
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"
|
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">
|
xmlns:tools="http://schemas.android.com/tools">
|
||||||
<ImageView
|
<ImageView
|
||||||
|
@ -32,7 +32,7 @@
|
||||||
<TextView
|
<TextView
|
||||||
android:text="@string/app_dubbed_text"
|
android:text="@string/app_dubbed_text"
|
||||||
android:id="@+id/text_is_dub"
|
android:id="@+id/text_is_dub"
|
||||||
android:textColor="@color/textColor"
|
android:textColor="?attr/textColor"
|
||||||
android:paddingRight="10dp"
|
android:paddingRight="10dp"
|
||||||
android:paddingLeft="10dp"
|
android:paddingLeft="10dp"
|
||||||
android:paddingTop="4dp"
|
android:paddingTop="4dp"
|
||||||
|
@ -48,7 +48,7 @@
|
||||||
android:id="@+id/text_is_sub"
|
android:id="@+id/text_is_sub"
|
||||||
android:text="@string/app_subbed_text"
|
android:text="@string/app_subbed_text"
|
||||||
android:layout_gravity="end"
|
android:layout_gravity="end"
|
||||||
android:textColor="@color/textColor"
|
android:textColor="?attr/textColor"
|
||||||
android:paddingRight="10dp"
|
android:paddingRight="10dp"
|
||||||
android:paddingLeft="10dp"
|
android:paddingLeft="10dp"
|
||||||
android:paddingTop="4dp"
|
android:paddingTop="4dp"
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
android:elevation="10dp"
|
android:elevation="10dp"
|
||||||
app:cardCornerRadius="@dimen/roundedImageRadius"
|
app:cardCornerRadius="@dimen/roundedImageRadius"
|
||||||
android:id="@+id/backgroundCard"
|
android:id="@+id/backgroundCard"
|
||||||
app:cardBackgroundColor="@color/primaryGrayBackground"
|
app:cardBackgroundColor="?attr/primaryGrayBackground"
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"
|
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">
|
xmlns:tools="http://schemas.android.com/tools">
|
||||||
<ImageView
|
<ImageView
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
tools:text="Trending"
|
tools:text="Trending"
|
||||||
/>
|
/>
|
||||||
<ImageView
|
<ImageView
|
||||||
|
android:tint="?attr/textColor"
|
||||||
android:layout_marginEnd="5dp"
|
android:layout_marginEnd="5dp"
|
||||||
android:layout_gravity="end|center_vertical"
|
android:layout_gravity="end|center_vertical"
|
||||||
android:src="@drawable/ic_baseline_arrow_forward_24"
|
android:src="@drawable/ic_baseline_arrow_forward_24"
|
||||||
|
|
|
@ -269,6 +269,7 @@
|
||||||
android:nextFocusUp="@id/video_go_back"
|
android:nextFocusUp="@id/video_go_back"
|
||||||
android:nextFocusDown="@id/lock_player"
|
android:nextFocusDown="@id/lock_player"
|
||||||
android:nextFocusLeft="@id/exo_rew"
|
android:nextFocusLeft="@id/exo_rew"
|
||||||
|
android:tint="@color/white"
|
||||||
|
|
||||||
android:paddingLeft="100dp"
|
android:paddingLeft="100dp"
|
||||||
android:id="@id/exo_rew"
|
android:id="@id/exo_rew"
|
||||||
|
@ -302,6 +303,8 @@
|
||||||
android:nextFocusLeft="@id/exo_rew"
|
android:nextFocusLeft="@id/exo_rew"
|
||||||
android:nextFocusRight="@id/exo_ffwd"
|
android:nextFocusRight="@id/exo_ffwd"
|
||||||
|
|
||||||
|
android:tint="@color/white"
|
||||||
|
|
||||||
android:id="@id/exo_play"
|
android:id="@id/exo_play"
|
||||||
android:scaleType="fitCenter"
|
android:scaleType="fitCenter"
|
||||||
android:layout_height="70dp"
|
android:layout_height="70dp"
|
||||||
|
@ -319,6 +322,8 @@
|
||||||
android:nextFocusRight="@id/exo_ffwd"
|
android:nextFocusRight="@id/exo_ffwd"
|
||||||
|
|
||||||
android:id="@id/exo_pause"
|
android:id="@id/exo_pause"
|
||||||
|
android:tint="@color/white"
|
||||||
|
|
||||||
android:scaleType="fitCenter"
|
android:scaleType="fitCenter"
|
||||||
android:layout_height="70dp"
|
android:layout_height="70dp"
|
||||||
android:layout_width="70dp"
|
android:layout_width="70dp"
|
||||||
|
@ -354,6 +359,7 @@
|
||||||
android:nextFocusUp="@id/video_go_back"
|
android:nextFocusUp="@id/video_go_back"
|
||||||
android:nextFocusDown="@id/lock_player"
|
android:nextFocusDown="@id/lock_player"
|
||||||
android:nextFocusRight="@id/exo_rew"
|
android:nextFocusRight="@id/exo_rew"
|
||||||
|
android:tint="@color/white"
|
||||||
|
|
||||||
android:layout_gravity="center"
|
android:layout_gravity="center"
|
||||||
android:id="@id/exo_ffwd"
|
android:id="@id/exo_ffwd"
|
||||||
|
@ -498,7 +504,8 @@
|
||||||
android:layout_marginEnd="20dp"
|
android:layout_marginEnd="20dp"
|
||||||
card_view:cardCornerRadius="@dimen/card_corner_radius"
|
card_view:cardCornerRadius="@dimen/card_corner_radius"
|
||||||
card_view:cardBackgroundColor="@color/transparent"
|
card_view:cardBackgroundColor="@color/transparent"
|
||||||
android:foreground="?attr/selectableItemBackgroundBorderless"
|
|
||||||
|
android:foreground="@drawable/video_bottom_button"
|
||||||
card_view:cardElevation="0dp"
|
card_view:cardElevation="0dp"
|
||||||
tools:visibility="visible"
|
tools:visibility="visible"
|
||||||
>
|
>
|
||||||
|
@ -554,7 +561,7 @@
|
||||||
android:layout_marginEnd="20dp"
|
android:layout_marginEnd="20dp"
|
||||||
card_view:cardCornerRadius="@dimen/card_corner_radius"
|
card_view:cardCornerRadius="@dimen/card_corner_radius"
|
||||||
card_view:cardBackgroundColor="@color/transparent"
|
card_view:cardBackgroundColor="@color/transparent"
|
||||||
android:foreground="?attr/selectableItemBackgroundBorderless"
|
android:foreground="@drawable/video_bottom_button"
|
||||||
card_view:cardElevation="0dp"
|
card_view:cardElevation="0dp"
|
||||||
tools:visibility="visible"
|
tools:visibility="visible"
|
||||||
>
|
>
|
||||||
|
@ -602,7 +609,7 @@
|
||||||
android:layout_marginEnd="20dp"
|
android:layout_marginEnd="20dp"
|
||||||
app:cardCornerRadius="@dimen/card_corner_radius"
|
app:cardCornerRadius="@dimen/card_corner_radius"
|
||||||
app:cardBackgroundColor="@color/transparent"
|
app:cardBackgroundColor="@color/transparent"
|
||||||
android:foreground="?attr/selectableItemBackgroundBorderless"
|
android:foreground="@drawable/video_bottom_button"
|
||||||
app:cardElevation="0dp"
|
app:cardElevation="0dp"
|
||||||
|
|
||||||
>
|
>
|
||||||
|
@ -654,7 +661,7 @@
|
||||||
android:layout_marginEnd="20dp"
|
android:layout_marginEnd="20dp"
|
||||||
card_view:cardCornerRadius="@dimen/card_corner_radius"
|
card_view:cardCornerRadius="@dimen/card_corner_radius"
|
||||||
card_view:cardBackgroundColor="@color/transparent"
|
card_view:cardBackgroundColor="@color/transparent"
|
||||||
android:foreground="?attr/selectableItemBackgroundBorderless"
|
android:foreground="@drawable/video_bottom_button"
|
||||||
card_view:cardElevation="0dp"
|
card_view:cardElevation="0dp"
|
||||||
|
|
||||||
>
|
>
|
||||||
|
@ -704,7 +711,7 @@
|
||||||
android:layout_marginEnd="20dp"
|
android:layout_marginEnd="20dp"
|
||||||
card_view:cardCornerRadius="@dimen/card_corner_radius"
|
card_view:cardCornerRadius="@dimen/card_corner_radius"
|
||||||
card_view:cardBackgroundColor="@color/transparent"
|
card_view:cardBackgroundColor="@color/transparent"
|
||||||
android:foreground="?attr/selectableItemBackgroundBorderless"
|
android:foreground="@drawable/video_bottom_button"
|
||||||
card_view:cardElevation="0dp"
|
card_view:cardElevation="0dp"
|
||||||
|
|
||||||
>
|
>
|
||||||
|
@ -753,7 +760,7 @@
|
||||||
android:layout_marginEnd="20dp"
|
android:layout_marginEnd="20dp"
|
||||||
card_view:cardCornerRadius="@dimen/card_corner_radius"
|
card_view:cardCornerRadius="@dimen/card_corner_radius"
|
||||||
card_view:cardBackgroundColor="@color/transparent"
|
card_view:cardBackgroundColor="@color/transparent"
|
||||||
android:foreground="?attr/selectableItemBackgroundBorderless"
|
android:foreground="@drawable/video_bottom_button"
|
||||||
card_view:cardElevation="0dp"
|
card_view:cardElevation="0dp"
|
||||||
>
|
>
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
|
|
|
@ -13,6 +13,9 @@
|
||||||
<com.google.android.material.switchmaterial.SwitchMaterial
|
<com.google.android.material.switchmaterial.SwitchMaterial
|
||||||
android:id="@+id/toggle1"
|
android:id="@+id/toggle1"
|
||||||
|
|
||||||
|
android:nextFocusLeft="@id/apply_btt"
|
||||||
|
android:nextFocusRight="@id/cancel_btt"
|
||||||
|
|
||||||
android:layout_marginTop="10dp"
|
android:layout_marginTop="10dp"
|
||||||
android:paddingStart="20dp"
|
android:paddingStart="20dp"
|
||||||
android:paddingEnd="20dp"
|
android:paddingEnd="20dp"
|
||||||
|
@ -24,12 +27,15 @@
|
||||||
tools:text="Search"
|
tools:text="Search"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content">
|
android:layout_height="wrap_content">
|
||||||
|
<requestFocus/>
|
||||||
</com.google.android.material.switchmaterial.SwitchMaterial>
|
</com.google.android.material.switchmaterial.SwitchMaterial>
|
||||||
<ListView
|
<ListView
|
||||||
android:nextFocusRight="@id/cancel_btt"
|
android:nextFocusRight="@id/cancel_btt"
|
||||||
android:nextFocusLeft="@id/apply_btt"
|
android:nextFocusLeft="@id/apply_btt"
|
||||||
|
|
||||||
|
android:nextFocusUp="@id/toggle1"
|
||||||
|
android:nextFocusDown="@id/apply_btt"
|
||||||
|
|
||||||
android:id="@+id/listview1"
|
android:id="@+id/listview1"
|
||||||
android:layout_marginTop="-10dp"
|
android:layout_marginTop="-10dp"
|
||||||
android:layout_marginBottom="60dp"
|
android:layout_marginBottom="60dp"
|
||||||
|
@ -43,6 +49,9 @@
|
||||||
android:nextFocusRight="@id/cancel_btt"
|
android:nextFocusRight="@id/cancel_btt"
|
||||||
android:nextFocusLeft="@id/apply_btt"
|
android:nextFocusLeft="@id/apply_btt"
|
||||||
|
|
||||||
|
android:nextFocusUp="@id/toggle1"
|
||||||
|
android:nextFocusDown="@id/apply_btt"
|
||||||
|
|
||||||
android:id="@+id/listview2"
|
android:id="@+id/listview2"
|
||||||
android:layout_marginTop="-10dp"
|
android:layout_marginTop="-10dp"
|
||||||
android:layout_marginBottom="60dp"
|
android:layout_marginBottom="60dp"
|
||||||
|
|
|
@ -55,6 +55,7 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent">
|
android:layout_height="match_parent">
|
||||||
<ImageView
|
<ImageView
|
||||||
|
android:tint="?attr/textColor"
|
||||||
android:layout_marginStart="10dp"
|
android:layout_marginStart="10dp"
|
||||||
android:layout_marginEnd="10dp"
|
android:layout_marginEnd="10dp"
|
||||||
android:layout_gravity="center_vertical"
|
android:layout_gravity="center_vertical"
|
||||||
|
@ -71,7 +72,7 @@
|
||||||
android:layout_marginEnd="50dp"
|
android:layout_marginEnd="50dp"
|
||||||
android:layout_gravity="center_vertical"
|
android:layout_gravity="center_vertical"
|
||||||
android:gravity="center_vertical" tools:text="Episode 1"
|
android:gravity="center_vertical" tools:text="Episode 1"
|
||||||
android:textColor="@color/textColor"
|
android:textColor="?attr/textColor"
|
||||||
|
|
||||||
android:scrollHorizontally="true"
|
android:scrollHorizontally="true"
|
||||||
android:ellipsize="marquee"
|
android:ellipsize="marquee"
|
||||||
|
@ -108,6 +109,8 @@
|
||||||
android:nextFocusLeft="@id/episode_holder"
|
android:nextFocusLeft="@id/episode_holder"
|
||||||
android:nextFocusRight="@id/episode_holder"
|
android:nextFocusRight="@id/episode_holder"
|
||||||
|
|
||||||
|
android:tint="?attr/white"
|
||||||
|
|
||||||
android:id="@+id/result_episode_download"
|
android:id="@+id/result_episode_download"
|
||||||
android:visibility="visible"
|
android:visibility="visible"
|
||||||
android:layout_marginEnd="10dp"
|
android:layout_marginEnd="10dp"
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
app:cardCornerRadius="@dimen/roundedImageRadius"
|
app:cardCornerRadius="@dimen/roundedImageRadius"
|
||||||
app:cardBackgroundColor="@color/itemBackground"
|
app:cardBackgroundColor="?attr/boxItemBackground"
|
||||||
|
|
||||||
android:foreground="@drawable/outline_drawable"
|
android:foreground="@drawable/outline_drawable"
|
||||||
android:layout_marginBottom="10dp"
|
android:layout_marginBottom="10dp"
|
||||||
|
@ -75,14 +75,14 @@
|
||||||
android:id="@+id/episode_text"
|
android:id="@+id/episode_text"
|
||||||
tools:text="1. Jobless"
|
tools:text="1. Jobless"
|
||||||
android:textStyle="bold"
|
android:textStyle="bold"
|
||||||
android:textColor="@color/textColor"
|
android:textColor="?attr/textColor"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content">
|
android:layout_height="wrap_content">
|
||||||
</TextView>
|
</TextView>
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/episode_rating"
|
android:id="@+id/episode_rating"
|
||||||
tools:text="Rated: 8.8"
|
tools:text="Rated: 8.8"
|
||||||
android:textColor="@color/grayTextColor"
|
android:textColor="?attr/grayTextColor"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content">
|
android:layout_height="wrap_content">
|
||||||
</TextView>
|
</TextView>
|
||||||
|
@ -113,6 +113,8 @@
|
||||||
android:nextFocusRight="@id/episode_holder"
|
android:nextFocusRight="@id/episode_holder"
|
||||||
android:id="@+id/result_episode_download"
|
android:id="@+id/result_episode_download"
|
||||||
|
|
||||||
|
android:tint="?attr/white"
|
||||||
|
|
||||||
android:visibility="visible"
|
android:visibility="visible"
|
||||||
android:layout_marginEnd="10dp"
|
android:layout_marginEnd="10dp"
|
||||||
android:layout_marginStart="10dp"
|
android:layout_marginStart="10dp"
|
||||||
|
@ -129,7 +131,7 @@
|
||||||
android:paddingTop="10dp"
|
android:paddingTop="10dp"
|
||||||
android:paddingBottom="10dp"
|
android:paddingBottom="10dp"
|
||||||
android:id="@+id/episode_descript"
|
android:id="@+id/episode_descript"
|
||||||
android:textColor="@color/grayTextColor"
|
android:textColor="?attr/grayTextColor"
|
||||||
tools:text="Jon and Daenerys arrive in Winterfell and are met with skepticism. Sam learns about the fate of his family. Cersei gives Euron the reward he aims for. Theon follows his heart. "
|
tools:text="Jon and Daenerys arrive in Winterfell and are met with skepticism. Sam learns about the fate of his family. Cersei gives Euron the reward he aims for. Theon follows his heart. "
|
||||||
android:layout_width="match_parent" android:layout_height="wrap_content">
|
android:layout_width="match_parent" android:layout_height="wrap_content">
|
||||||
</TextView>
|
</TextView>
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
android:elevation="10dp"
|
android:elevation="10dp"
|
||||||
app:cardCornerRadius="@dimen/roundedImageRadius"
|
app:cardCornerRadius="@dimen/roundedImageRadius"
|
||||||
android:id="@+id/backgroundCard"
|
android:id="@+id/backgroundCard"
|
||||||
app:cardBackgroundColor="@color/primaryGrayBackground"
|
app:cardBackgroundColor="?attr/primaryGrayBackground"
|
||||||
>
|
>
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
|
@ -80,7 +80,7 @@
|
||||||
|
|
||||||
<!-- <TextView
|
<!-- <TextView
|
||||||
android:text="Movie"
|
android:text="Movie"
|
||||||
android:textColor="@color/textColor"
|
android:textColor="?attr/textColor"
|
||||||
android:paddingRight="10dp"
|
android:paddingRight="10dp"
|
||||||
android:paddingLeft="10dp"
|
android:paddingLeft="10dp"
|
||||||
android:paddingTop="4dp"
|
android:paddingTop="4dp"
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
android:layout_marginBottom="10dp"
|
android:layout_marginBottom="10dp"
|
||||||
android:elevation="0dp"
|
android:elevation="0dp"
|
||||||
app:cardCornerRadius="@dimen/roundedImageRadius"
|
app:cardCornerRadius="@dimen/roundedImageRadius"
|
||||||
app:cardBackgroundColor="@color/itemBackground"
|
app:cardBackgroundColor="?attr/boxItemBackground"
|
||||||
android:clickable="true"
|
android:clickable="true"
|
||||||
android:focusable="true"
|
android:focusable="true"
|
||||||
>
|
>
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:padding="5dp"
|
android:padding="5dp"
|
||||||
app:cardCornerRadius="10dp"
|
app:cardCornerRadius="10dp"
|
||||||
|
app:cardBackgroundColor="?attr/primaryBlackBackground"
|
||||||
android:background="?attr/primaryBlackBackground">
|
android:background="?attr/primaryBlackBackground">
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
|
|
5
app/src/main/res/mipmap-anydpi-v26/ic_banner.xml
Normal file
5
app/src/main/res/mipmap-anydpi-v26/ic_banner.xml
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<background android:drawable="@color/ic_banner_background"/>
|
||||||
|
<foreground android:drawable="@drawable/ic_banner_foreground"/>
|
||||||
|
</adaptive-icon>
|
BIN
app/src/main/res/mipmap-xhdpi/ic_banner.png
Normal file
BIN
app/src/main/res/mipmap-xhdpi/ic_banner.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.9 KiB |
|
@ -25,7 +25,7 @@
|
||||||
<string name="no_data">لايوجد بيانات</string>
|
<string name="no_data">لايوجد بيانات</string>
|
||||||
<string name="episode_more_options_des">المزيد من الخيارات</string>
|
<string name="episode_more_options_des">المزيد من الخيارات</string>
|
||||||
<string name="next_episode">الحلقة القادمة</string>
|
<string name="next_episode">الحلقة القادمة</string>
|
||||||
<string name="result_tags">الأنواع</string>
|
<string name="result_tags">النواع</string>
|
||||||
<string name="result_share">شارك</string>
|
<string name="result_share">شارك</string>
|
||||||
<string name="result_open_in_browser">فتح في الويب </string>
|
<string name="result_open_in_browser">فتح في الويب </string>
|
||||||
<string name="skip_loading">تخطي التحميل</string>
|
<string name="skip_loading">تخطي التحميل</string>
|
||||||
|
@ -106,7 +106,7 @@
|
||||||
<string name="vpn_might_be_needed">قد تكون هناك حاجة إلى شبكة ظاهرية خاصة لكي يعمل هذا المزود بشكل صحيح</string>
|
<string name="vpn_might_be_needed">قد تكون هناك حاجة إلى شبكة ظاهرية خاصة لكي يعمل هذا المزود بشكل صحيح</string>
|
||||||
<string name="vpn_torrent">هذا المزود هو تورنت ، يوصى باستخدام شبكة ظاهرية خاصة</string>
|
<string name="vpn_torrent">هذا المزود هو تورنت ، يوصى باستخدام شبكة ظاهرية خاصة</string>
|
||||||
<string name="torrent_plot">الوصف</string>
|
<string name="torrent_plot">الوصف</string>
|
||||||
<string name="normal_no_plot">لم يتم العثور على قطعة</string>
|
<string name="normal_no_plot">لم يتم العثور على وصف</string>
|
||||||
<string name="torrent_no_plot">لم يتم العثور على وصف</string>
|
<string name="torrent_no_plot">لم يتم العثور على وصف</string>
|
||||||
|
|
||||||
<string name="picture_in_picture">صورة داخل صورة</string>
|
<string name="picture_in_picture">صورة داخل صورة</string>
|
||||||
|
@ -116,7 +116,7 @@
|
||||||
<string name="player_subtitles_settings">الترجمة</string>
|
<string name="player_subtitles_settings">الترجمة</string>
|
||||||
<string name="player_subtitles_settings_des">إعدادات ترجمة المشغل</string>
|
<string name="player_subtitles_settings_des">إعدادات ترجمة المشغل</string>
|
||||||
<string name="eigengraumode_settings">وضع إيغنغرافي</string>
|
<string name="eigengraumode_settings">وضع إيغنغرافي</string>
|
||||||
<string name="eigengraumode_settings_des">يضيف خيار السرعة في اللاعب</string>
|
<string name="eigengraumode_settings_des">يضيف خيار السرعة في المشغل</string>
|
||||||
<string name="swipe_to_seek_settings">اسحب للسعي</string>
|
<string name="swipe_to_seek_settings">اسحب للسعي</string>
|
||||||
<string name="swipe_to_seek_settings_des">اسحب إلى اليسار أو اليمين للتحكم في الوقت في مشغل الفيديو</string>
|
<string name="swipe_to_seek_settings_des">اسحب إلى اليسار أو اليمين للتحكم في الوقت في مشغل الفيديو</string>
|
||||||
<string name="swipe_to_change_settings">اسحب لتغيير الإعدادات</string>
|
<string name="swipe_to_change_settings">اسحب لتغيير الإعدادات</string>
|
||||||
|
@ -129,7 +129,7 @@
|
||||||
<string name="search">بحث</string>
|
<string name="search">بحث</string>
|
||||||
<string name="settings_info">معلومات</string>
|
<string name="settings_info">معلومات</string>
|
||||||
<string name="advanced_search">البحث المتقدم</string>
|
<string name="advanced_search">البحث المتقدم</string>
|
||||||
<string name="advanced_search_des">يعطيك نتائج البحث مفصولة عن طريق مزود</string>
|
<string name="advanced_search_des">يعطيك نتائج البحث مفصولة عن طريق المزود</string>
|
||||||
<string name="bug_report_settings_off">إرسال البيانات عن الأعطال فقط</string>
|
<string name="bug_report_settings_off">إرسال البيانات عن الأعطال فقط</string>
|
||||||
<string name="bug_report_settings_on">لا ترسل أي بيانات</string>
|
<string name="bug_report_settings_on">لا ترسل أي بيانات</string>
|
||||||
<string name="show_fillers_settings">عرض حلقة فلر لأنيمي</string>
|
<string name="show_fillers_settings">عرض حلقة فلر لأنيمي</string>
|
||||||
|
@ -161,7 +161,6 @@
|
||||||
|
|
||||||
<string name="delete_file">حذف ملف</string>
|
<string name="delete_file">حذف ملف</string>
|
||||||
<string name="delete">حذف</string>
|
<string name="delete">حذف</string>
|
||||||
<string name="cancel" translatable="false">@string/sort_cancel</string>
|
|
||||||
<string name="pause">إيقاف مؤقت</string>
|
<string name="pause">إيقاف مؤقت</string>
|
||||||
<string name="resume">أكمل</string>
|
<string name="resume">أكمل</string>
|
||||||
<string name="delete_message">This will permanently delete %s\nAre you sure?</string>
|
<string name="delete_message">This will permanently delete %s\nAre you sure?</string>
|
||||||
|
@ -184,7 +183,7 @@
|
||||||
<string name="app_storage">تطبيق</string>
|
<string name="app_storage">تطبيق</string>
|
||||||
|
|
||||||
<string name="movies">أفلام</string>
|
<string name="movies">أفلام</string>
|
||||||
<string name="tv_series">مسلسلت</string>
|
<string name="tv_series">مسلسلات</string>
|
||||||
<string name="cartoons">رسوم متحركة</string>
|
<string name="cartoons">رسوم متحركة</string>
|
||||||
<string name="anime">انمي</string>
|
<string name="anime">انمي</string>
|
||||||
<string name="torrent">تورنت</string>
|
<string name="torrent">تورنت</string>
|
||||||
|
|
|
@ -3,13 +3,11 @@
|
||||||
<string name="result_poster_img_des">Poster</string>
|
<string name="result_poster_img_des">Poster</string>
|
||||||
<string name="search_poster_img_des">@string/result_poster_img_des</string>
|
<string name="search_poster_img_des">@string/result_poster_img_des</string>
|
||||||
<string name="episode_poster_img_des">Episode Poster</string>
|
<string name="episode_poster_img_des">Episode Poster</string>
|
||||||
<string name="home_main_poster_img_des">Main Poster</string>
|
<string name="home_main_poster_img_des">Hauptposter</string>
|
||||||
<string name="home_next_random_img_des">Next Random</string>
|
<string name="home_next_random_img_des">Nächstes Poster</string>
|
||||||
<string name="episode_play_img_des" translatable="false">@string/play_episode</string>
|
<string name="go_back_img_des">Zurück</string>
|
||||||
<string name="go_back_img_des">Go back</string>
|
<string name="home_change_provider_img_des">Anbieter ändern</string>
|
||||||
<string name="change_providers_img_des" translatable="false">@string/home_change_provider_img_des</string>
|
<string name="preview_background_img_des">Vorschau Hintergrund</string>
|
||||||
<string name="home_change_provider_img_des">Change Provider</string>
|
|
||||||
<string name="preview_background_img_des">Preview Background</string>
|
|
||||||
<string name="player_speed_text_format" formatted="true">Geschwindigkeit (%.2fx)</string>
|
<string name="player_speed_text_format" formatted="true">Geschwindigkeit (%.2fx)</string>
|
||||||
<string name="rated_format" formatted="true">Bewertung: %.1f</string>
|
<string name="rated_format" formatted="true">Bewertung: %.1f</string>
|
||||||
<string name="new_update_format" formatted="true">Neues Update gefunden!\n%s -> %s</string>
|
<string name="new_update_format" formatted="true">Neues Update gefunden!\n%s -> %s</string>
|
||||||
|
@ -23,7 +21,6 @@
|
||||||
<string name="no_data">Keine Daten vorhanden</string>
|
<string name="no_data">Keine Daten vorhanden</string>
|
||||||
<string name="episode_more_options_des">Mehr Optionen</string>
|
<string name="episode_more_options_des">Mehr Optionen</string>
|
||||||
<string name="next_episode">Nächste Episode</string>
|
<string name="next_episode">Nächste Episode</string>
|
||||||
<string name="result_plot" translatable="false">@string/synopsis</string>
|
|
||||||
<string name="result_tags">Genres</string>
|
<string name="result_tags">Genres</string>
|
||||||
<string name="result_share">Teilen</string>
|
<string name="result_share">Teilen</string>
|
||||||
<string name="result_open_in_browser">Im Browser öffnen</string>
|
<string name="result_open_in_browser">Im Browser öffnen</string>
|
||||||
|
@ -50,7 +47,6 @@
|
||||||
<string name="download_failed">Download fehlgeschlagen</string>
|
<string name="download_failed">Download fehlgeschlagen</string>
|
||||||
<string name="download_canceled">Download abgebrochen</string>
|
<string name="download_canceled">Download abgebrochen</string>
|
||||||
<string name="download_done">Download abgeschlossen</string>
|
<string name="download_done">Download abgeschlossen</string>
|
||||||
<string name="download_format" translatable="false">%s - %s</string>
|
|
||||||
<string name="error_loading_links_toast">Fehler beim Laden von Links</string>
|
<string name="error_loading_links_toast">Fehler beim Laden von Links</string>
|
||||||
<string name="download_storage_text">Interner Speicher</string>
|
<string name="download_storage_text">Interner Speicher</string>
|
||||||
<string name="app_dubbed_text">Dub</string>
|
<string name="app_dubbed_text">Dub</string>
|
||||||
|
@ -132,7 +128,7 @@
|
||||||
<string name="no_links_found_toast">Keine Links gefunden</string>
|
<string name="no_links_found_toast">Keine Links gefunden</string>
|
||||||
<string name="copy_link_toast">Link in die Zwischenablage kopiert</string>
|
<string name="copy_link_toast">Link in die Zwischenablage kopiert</string>
|
||||||
<string name="play_episode_toast">Episode abspielen</string>
|
<string name="play_episode_toast">Episode abspielen</string>
|
||||||
<string name="subs_default_reset_toast">Auf Standardwerte zurücksetzen</string>
|
<string name="subs_default_reset_toast">Auf Standardwerte zurückgesetzt</string>
|
||||||
<string name="acra_report_toast">Sorry, die App ist abgestürzt. Ein anonymer Fehlerbericht wird an die Entwickler gesendet</string>
|
<string name="acra_report_toast">Sorry, die App ist abgestürzt. Ein anonymer Fehlerbericht wird an die Entwickler gesendet</string>
|
||||||
<string name="season">Season</string>
|
<string name="season">Season</string>
|
||||||
<string name="no_season">Keine Season</string>
|
<string name="no_season">Keine Season</string>
|
||||||
|
@ -142,7 +138,6 @@
|
||||||
<string name="episode_short">E</string>
|
<string name="episode_short">E</string>
|
||||||
<string name="delete_file">Gelöschte Dateien</string>
|
<string name="delete_file">Gelöschte Dateien</string>
|
||||||
<string name="delete">Löschen</string>
|
<string name="delete">Löschen</string>
|
||||||
<string name="cancel" translatable="false">@string/sort_cancel</string>
|
|
||||||
<string name="pause">Pausieren</string>
|
<string name="pause">Pausieren</string>
|
||||||
<string name="resume">Fortsetzen</string>
|
<string name="resume">Fortsetzen</string>
|
||||||
<string name="delete_message">Dies löscht dauerhaft %s\nBist du dir sicher?</string>
|
<string name="delete_message">Dies löscht dauerhaft %s\nBist du dir sicher?</string>
|
||||||
|
@ -195,4 +190,12 @@
|
||||||
<string name="resize_fill">Strecken</string>
|
<string name="resize_fill">Strecken</string>
|
||||||
<string name="resize_zoom">Zoomen</string>
|
<string name="resize_zoom">Zoomen</string>
|
||||||
<string name="provider_lang_settings">Anbietersprache</string>
|
<string name="provider_lang_settings">Anbietersprache</string>
|
||||||
|
<string name="legal_notice">Haftungsausschluss</string>
|
||||||
|
<string name="app_layout">App-Layout</string>
|
||||||
|
<string name="preferred_media_settings">Bevorzugte Medien</string>
|
||||||
|
<string name="automatic">Automatisch</string>
|
||||||
|
<string name="tv_layout">TV-Layout</string>
|
||||||
|
<string name="phone_layout">Handy-Layout</string>
|
||||||
|
<string name="primary_color_settings">Primärfarbe</string>
|
||||||
|
<string name="app_theme_settings">App-Thema</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -6,15 +6,12 @@
|
||||||
<string name="title_downloads">Téléchargements</string>
|
<string name="title_downloads">Téléchargements</string>
|
||||||
<string name="title_settings">Paramètres</string>
|
<string name="title_settings">Paramètres</string>
|
||||||
<string name="search_hint">Rechercher…</string>
|
<string name="search_hint">Rechercher…</string>
|
||||||
<string name="change_providers_img_des">Changer les fournisseurs</string>
|
|
||||||
<string name="search_poster_img_des">Miniature</string>
|
<string name="search_poster_img_des">Miniature</string>
|
||||||
<string name="no_data">Aucune Donnée</string>
|
<string name="no_data">Aucune Donnée</string>
|
||||||
<string name="episode_more_options_des">Plus d\'options</string>
|
<string name="episode_more_options_des">Plus d\'options</string>
|
||||||
<string name="episode_play_img_des">Lire l\'épisode</string>
|
|
||||||
<string name="go_back_img_des">Retour</string>
|
<string name="go_back_img_des">Retour</string>
|
||||||
<string name="next_episode">Episode suivant</string>
|
<string name="next_episode">Episode suivant</string>
|
||||||
<string name="result_poster_img_des">Miniature</string>
|
<string name="result_poster_img_des">Miniature</string>
|
||||||
<string name="result_plot" translatable="false">@string/synopsis</string>
|
|
||||||
<string name="result_tags">Genres</string>
|
<string name="result_tags">Genres</string>
|
||||||
<string name="result_share">Partager</string>
|
<string name="result_share">Partager</string>
|
||||||
<string name="result_open_in_browser">Ouvrir dans le naviguateur</string>
|
<string name="result_open_in_browser">Ouvrir dans le naviguateur</string>
|
||||||
|
|
|
@ -6,11 +6,9 @@
|
||||||
<string name="title_downloads">Λήψεις</string>
|
<string name="title_downloads">Λήψεις</string>
|
||||||
<string name="title_settings">Ρυθμίσεις</string>
|
<string name="title_settings">Ρυθμίσεις</string>
|
||||||
<string name="search_hint">Ψάξε…</string>
|
<string name="search_hint">Ψάξε…</string>
|
||||||
<string name="change_providers_img_des">Αλλαγή Παροχών</string>
|
|
||||||
<string name="search_poster_img_des">Πόστερ</string>
|
<string name="search_poster_img_des">Πόστερ</string>
|
||||||
<string name="no_data">Χωρίς δεδομένα</string>
|
<string name="no_data">Χωρίς δεδομένα</string>
|
||||||
<string name="episode_more_options_des">Περισσότερες Επιλογές</string>
|
<string name="episode_more_options_des">Περισσότερες Επιλογές</string>
|
||||||
<string name="episode_play_img_des">Αναπαραγωγή Επισοδείου</string>
|
|
||||||
<string name="go_back_img_des">Πίσω</string>
|
<string name="go_back_img_des">Πίσω</string>
|
||||||
<string name="next_episode">Επόμενο Επισόδειο</string>
|
<string name="next_episode">Επόμενο Επισόδειο</string>
|
||||||
<string name="result_poster_img_des">Πόστερ</string>
|
<string name="result_poster_img_des">Πόστερ</string>
|
||||||
|
|
|
@ -12,7 +12,6 @@
|
||||||
<string name="no_data">डेटा उपलब्ध नही है</string>
|
<string name="no_data">डेटा उपलब्ध नही है</string>
|
||||||
<string name="episode_more_options_des">अन्य ऑप्शन</string>
|
<string name="episode_more_options_des">अन्य ऑप्शन</string>
|
||||||
<string name="next_episode">अगला एपिसोड</string>
|
<string name="next_episode">अगला एपिसोड</string>
|
||||||
<string name="result_plot" translatable="false">@string/synopsis</string>
|
|
||||||
<string name="result_tags">शैलियां</string>
|
<string name="result_tags">शैलियां</string>
|
||||||
<string name="result_share">शेयर</string>
|
<string name="result_share">शेयर</string>
|
||||||
<string name="result_open_in_browser">ब्राउज़र में खोलें</string>
|
<string name="result_open_in_browser">ब्राउज़र में खोलें</string>
|
||||||
|
|
|
@ -14,7 +14,6 @@
|
||||||
<string name="no_data">ടാറ്റ ലഭ്യമല്ല</string>
|
<string name="no_data">ടാറ്റ ലഭ്യമല്ല</string>
|
||||||
<string name="episode_more_options_des">കൂടുതൽ ഓപ്ഷൻസ്</string>
|
<string name="episode_more_options_des">കൂടുതൽ ഓപ്ഷൻസ്</string>
|
||||||
<string name="next_episode">അടുത്ത എപ്പിസോഡ്</string>
|
<string name="next_episode">അടുത്ത എപ്പിസോഡ്</string>
|
||||||
<string name="result_plot" translatable="false">@string/synopsis</string>
|
|
||||||
<string name="result_tags">തരം</string>
|
<string name="result_tags">തരം</string>
|
||||||
<string name="result_share">ഷെയർ</string>
|
<string name="result_share">ഷെയർ</string>
|
||||||
<string name="result_open_in_browser">ബ്രൗസറിൽ തുറക്കുക</string>
|
<string name="result_open_in_browser">ബ്രൗസറിൽ തുറക്കുക</string>
|
||||||
|
|
|
@ -7,15 +7,12 @@
|
||||||
<string name="title_downloads">ouuhhhooh ooh</string>
|
<string name="title_downloads">ouuhhhooh ooh</string>
|
||||||
<string name="title_settings">aaaghhoh aauugghh</string>
|
<string name="title_settings">aaaghhoh aauugghh</string>
|
||||||
<string name="search_hint">haaooh</string>
|
<string name="search_hint">haaooh</string>
|
||||||
<string name="change_providers_img_des">ooooo aah ohaooooo</string>
|
|
||||||
<string name="search_poster_img_des">aaaaaah</string>
|
<string name="search_poster_img_des">aaaaaah</string>
|
||||||
<string name="no_data">oooohhoouuh</string>
|
<string name="no_data">oooohhoouuh</string>
|
||||||
<string name="episode_more_options_des">aaaaaoouuhahhh ahh</string>
|
<string name="episode_more_options_des">aaaaaoouuhahhh ahh</string>
|
||||||
<string name="episode_play_img_des">ahooo aoohoouuhhaa</string>
|
|
||||||
<string name="go_back_img_des">oooohh aauuh</string>
|
<string name="go_back_img_des">oooohh aauuh</string>
|
||||||
<string name="next_episode">ahhhaaaghh aaaaa</string>
|
<string name="next_episode">ahhhaaaghh aaaaa</string>
|
||||||
<string name="result_poster_img_des">ahaauugghh</string>
|
<string name="result_poster_img_des">ahaauugghh</string>
|
||||||
<string name="result_plot">oohouuhhhaaahhu</string>
|
|
||||||
<string name="result_tags">ahhh oouuh</string>
|
<string name="result_tags">ahhh oouuh</string>
|
||||||
<string name="result_share">aauuh</string>
|
<string name="result_share">aauuh</string>
|
||||||
<string name="result_open_in_browser">oooohh oooohhhaaaoouuh</string>
|
<string name="result_open_in_browser">oooohh oooohhhaaaoouuh</string>
|
||||||
|
@ -121,8 +118,8 @@
|
||||||
<string name="no_season">aauuh ohaahooo</string>
|
<string name="no_season">aauuh ohaahooo</string>
|
||||||
<string name="episode">ahhhaaahhu</string>
|
<string name="episode">ahhhaaahhu</string>
|
||||||
<string name="episodes">ahhh ooooo</string>
|
<string name="episodes">ahhh ooooo</string>
|
||||||
<string name="season_short">haa</string>
|
<string name="season_short">H</string>
|
||||||
<string name="episode_short">a</string>
|
<string name="episode_short">A</string>
|
||||||
<string name="delete_file">ooha ohahaaahoooa ahahooo</string>
|
<string name="delete_file">ooha ohahaaahoooa ahahooo</string>
|
||||||
<string name="delete">oooooah</string>
|
<string name="delete">oooooah</string>
|
||||||
<string name="delete_message">aahhaaaaaahooo aauuh aaahhuaooo-ahahoooohh aoouuhoohoohooo-ahah</string>
|
<string name="delete_message">aahhaaaaaahooo aauuh aaahhuaooo-ahahoooohh aoouuhoohoohooo-ahah</string>
|
||||||
|
@ -175,4 +172,28 @@
|
||||||
<string name="resume">oouuh haa</string>
|
<string name="resume">oouuh haa</string>
|
||||||
<string name="double_tap_to_seek_settings_des">oohahaha hahha ooooohaha</string>
|
<string name="double_tap_to_seek_settings_des">oohahaha hahha ooooohaha</string>
|
||||||
<string name="storage_error">oohahaha hahha ooooohaha haaoou</string>
|
<string name="storage_error">oohahaha hahha ooooohaha haaoou</string>
|
||||||
|
<string name="use_system_brightness_settings">u ahhu uuuh hau uaohuau</string>
|
||||||
|
<string name="use_system_brightness_settings_des">aahuuouhh ouh hhhah hhaohuhha</string>
|
||||||
|
<string name="subs_font_size">a auoo ohauh</string>
|
||||||
|
<string name="source_error">uhaauauau ahuuouaha</string>
|
||||||
|
<string name="remote_error">auuuha h a ahuhaaaa</string>
|
||||||
|
<string name="render_error">uaoh uhu uahaaaaoo</string>
|
||||||
|
<string name="unexpected_error">uauhah u aao u oah</string>
|
||||||
|
<string name="watch_quality_pref">h u ahahh aoou ha</string>
|
||||||
|
<string name="dns_pref">haoooo aaoou uou ah</string>
|
||||||
|
<string name="dns_pref_summary">oahuouooaouoa ouuhh</string>
|
||||||
|
<string name="display_subbed_dubbed_settings">o ouou uhauuuoaah h</string>
|
||||||
|
<string name="resize_fit">ou aouhouo aaooao hh</string>
|
||||||
|
<string name="resize_fill">hhauhohhuu au aaohu</string>
|
||||||
|
<string name="resize_zoom">uhuoh o a ohahuhohoa hah</string>
|
||||||
|
<string name="provider_lang_settings">ua hu ouo o aoau hah ah</string>
|
||||||
|
<string name="legal_notice">ah huu oouhhau aoaoaaohoo ha</string>
|
||||||
|
<string name="general">a ahu uoo uoahuo uo</string>
|
||||||
|
<string name="app_layout">uo u ohouao</string>
|
||||||
|
<string name="automatic">uuoouhh hhuhuuh ouhoaao hau aouo</string>
|
||||||
|
<string name="tv_layout">uha uh huo uooaah u</string>
|
||||||
|
<string name="phone_layout">u ooah uo ahauao huhuu hauu h</string>
|
||||||
|
<string name="primary_color_settings">a ou oh ouhuouhoaaha</string>
|
||||||
|
<string name="show_fillers_settings">aaooohhouhhha hauauuu</string>
|
||||||
|
<string name="new_update_format">aaaaaaa uuuuuu\n%s -> %s</string>
|
||||||
</resources>
|
</resources>
|
|
@ -6,11 +6,9 @@
|
||||||
<string name="title_downloads">Downloads</string>
|
<string name="title_downloads">Downloads</string>
|
||||||
<string name="title_settings">Instellingen</string>
|
<string name="title_settings">Instellingen</string>
|
||||||
<string name="search_hint">Zoeken…</string>
|
<string name="search_hint">Zoeken…</string>
|
||||||
<string name="change_providers_img_des">Aanbieders wijzigen</string>
|
|
||||||
<string name="search_poster_img_des">Poster</string>
|
<string name="search_poster_img_des">Poster</string>
|
||||||
<string name="no_data">Geen gegevens</string>
|
<string name="no_data">Geen gegevens</string>
|
||||||
<string name="episode_more_options_des">Meer Opties</string>
|
<string name="episode_more_options_des">Meer Opties</string>
|
||||||
<string name="episode_play_img_des">Aflevering afspelen</string>
|
|
||||||
<string name="go_back_img_des">Ga terug</string>
|
<string name="go_back_img_des">Ga terug</string>
|
||||||
<string name="next_episode">Volgende aflevering</string>
|
<string name="next_episode">Volgende aflevering</string>
|
||||||
<string name="result_poster_img_des">Poster</string>
|
<string name="result_poster_img_des">Poster</string>
|
||||||
|
|
|
@ -224,6 +224,13 @@
|
||||||
<string name="resize_zoom">Zoome</string>
|
<string name="resize_zoom">Zoome</string>
|
||||||
<string name="general">Grunnleggende</string>
|
<string name="general">Grunnleggende</string>
|
||||||
<string name="provider_lang_settings">Leverandør Språk</string>
|
<string name="provider_lang_settings">Leverandør Språk</string>
|
||||||
|
<string name="app_layout">App Oppsett</string>
|
||||||
|
<string name="automatic">Automatisk</string>
|
||||||
|
<string name="tv_layout">Tv Oppsett</string>
|
||||||
|
<string name="phone_layout">Mobile Oppsett</string>
|
||||||
|
<string name="primary_color_settings">Primær Farge</string>
|
||||||
|
<string name="app_theme_settings">App Tema</string>
|
||||||
|
<string name="preferred_media_settings">Foretrukket Videoinnhold</string>
|
||||||
|
|
||||||
<string name="legal_notice" translatable="false">Disclaimer</string>
|
<string name="legal_notice" translatable="false">Disclaimer</string>
|
||||||
<string name="legal_notice_key" translatable="false">legal_notice_key</string>
|
<string name="legal_notice_key" translatable="false">legal_notice_key</string>
|
||||||
|
|
|
@ -76,6 +76,7 @@
|
||||||
<string name="subs_edge_type">Kolor krawędzi</string>
|
<string name="subs_edge_type">Kolor krawędzi</string>
|
||||||
<string name="subs_subtitle_elevation">Wzniesienie napisów</string>
|
<string name="subs_subtitle_elevation">Wzniesienie napisów</string>
|
||||||
<string name="subs_font">Czcionka</string>
|
<string name="subs_font">Czcionka</string>
|
||||||
|
<string name="subs_font_size">Rozmiar czcionki</string>
|
||||||
|
|
||||||
<string name="search_provider_text_providers">Szukaj według dostawców</string>
|
<string name="search_provider_text_providers">Szukaj według dostawców</string>
|
||||||
<string name="search_provider_text_types">Szukaj według typów</string>
|
<string name="search_provider_text_types">Szukaj według typów</string>
|
||||||
|
@ -134,7 +135,7 @@
|
||||||
<string name="no_links_found_toast">Nie znaleziono linków</string>
|
<string name="no_links_found_toast">Nie znaleziono linków</string>
|
||||||
<string name="copy_link_toast">Skopiowano do schowka</string>
|
<string name="copy_link_toast">Skopiowano do schowka</string>
|
||||||
<string name="play_episode_toast">Odtwórz odcinek</string>
|
<string name="play_episode_toast">Odtwórz odcinek</string>
|
||||||
<string name="subs_default_reset_toast">Resetuj</string>
|
<string name="subs_default_reset_toast">Zresetowano</string>
|
||||||
<string name="acra_report_toast">Awaria aplikacji. Anonimowe zgłoszenie błedu zostanie wysłane programistom</string>
|
<string name="acra_report_toast">Awaria aplikacji. Anonimowe zgłoszenie błedu zostanie wysłane programistom</string>
|
||||||
|
|
||||||
<string name="season">Sezon</string>
|
<string name="season">Sezon</string>
|
||||||
|
@ -200,4 +201,29 @@
|
||||||
<string name="dont_show_again">Nie pokazuj ponownie</string>
|
<string name="dont_show_again">Nie pokazuj ponownie</string>
|
||||||
<string name="update">Aktualizacja</string>
|
<string name="update">Aktualizacja</string>
|
||||||
<string name="watch_quality_pref">Domyślna jakość</string>
|
<string name="watch_quality_pref">Domyślna jakość</string>
|
||||||
|
<string name="use_system_brightness_settings">Używaj jasności systemowej</string>
|
||||||
|
<string name="use_system_brightness_settings_des">Używaj jasności systemowej zamiast ciemnej nakładki</string>
|
||||||
|
<string name="show_fillers_settings">Pokaż odcineki-wypełniacze dla anime</string>
|
||||||
|
<string name="dns_pref_summary">Przydatne w pomijaniu blokad dostawców internetu</string>
|
||||||
|
<string name="display_subbed_dubbed_settings">Wyświel Anime z dubbingiem/napisami</string>
|
||||||
|
<string name="resize_fit">Dopasuj do ekranu</string>
|
||||||
|
<string name="resize_fill">Rozciągnij</string>
|
||||||
|
<string name="resize_zoom">Powiększ</string>
|
||||||
|
<string name="provider_lang_settings">Języki dostawców</string>
|
||||||
|
<string name="general">Ogólne</string>
|
||||||
|
<string name="app_layout">Układ aplikacji</string>
|
||||||
|
<string name="automatic">Automatyczny</string>
|
||||||
|
<string name="tv_layout">Układ dla telewizorów</string>
|
||||||
|
<string name="phone_layout">Układ dla telefonów</string>
|
||||||
|
<string name="primary_color_settings">Kolor podstawowy</string>
|
||||||
|
<string name="dns_pref">DNS over HTTPS</string>
|
||||||
|
<string name="legal_notice">Zastrzeżenie</string>
|
||||||
|
<string name="result_poster_img_des">Plakat</string>
|
||||||
|
<string name="episode_poster_img_des">Plakat odcinka</string>
|
||||||
|
<string name="home_main_poster_img_des">Główny plakat</string>
|
||||||
|
<string name="home_next_random_img_des">Następny losowy</string>
|
||||||
|
<string name="go_back_img_des">Wstecz</string>
|
||||||
|
<string name="filler_format">(WYpełniacz) %s</string>
|
||||||
|
<string name="home_change_provider_img_des">Zmień dostawcę</string>
|
||||||
|
<string name="preview_background_img_des">Pogląd tła</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -10,14 +10,12 @@
|
||||||
<string name="title_downloads">Nerladdningar</string>
|
<string name="title_downloads">Nerladdningar</string>
|
||||||
<string name="title_settings">Instälningar</string>
|
<string name="title_settings">Instälningar</string>
|
||||||
<string name="search_hint">Sök…</string>
|
<string name="search_hint">Sök…</string>
|
||||||
<string name="change_providers_img_des">Ändra Providers</string>
|
|
||||||
<string name="search_poster_img_des">Poster</string>
|
<string name="search_poster_img_des">Poster</string>
|
||||||
<string name="no_data">Ingen Data</string>
|
<string name="no_data">Ingen Data</string>
|
||||||
<string name="episode_more_options_des">Mer Instälningar</string>
|
<string name="episode_more_options_des">Mer Instälningar</string>
|
||||||
<string name="go_back_img_des">Gå tillbacka</string>
|
<string name="go_back_img_des">Gå tillbacka</string>
|
||||||
<string name="next_episode">Nästa avsnitt</string>
|
<string name="next_episode">Nästa avsnitt</string>
|
||||||
<string name="result_poster_img_des">Affisch</string>
|
<string name="result_poster_img_des">Affisch</string>
|
||||||
<string name="result_plot">Sammanfattning</string>
|
|
||||||
<string name="result_tags">Genrer</string>
|
<string name="result_tags">Genrer</string>
|
||||||
<string name="result_share">Dela</string>
|
<string name="result_share">Dela</string>
|
||||||
<string name="result_open_in_browser">Öppna i webbläsaren</string>
|
<string name="result_open_in_browser">Öppna i webbläsaren</string>
|
||||||
|
|
|
@ -1,40 +1,9 @@
|
||||||
<!--https://newbedev.com/concatenate-multiple-strings-in-xml-->
|
<!--https://newbedev.com/concatenate-multiple-strings-in-xml-->
|
||||||
<resources>
|
<resources>
|
||||||
<!-- KEYS DON'T TRANSLATE -->
|
<!-- KEYS DON'T TRANSLATE -->
|
||||||
<string name="search_providers_list_key" translatable="false">search_providers_list</string>
|
|
||||||
<string name="locale_key" translatable="false">app_locale</string>
|
|
||||||
<string name="search_types_list_key" translatable="false">search_type_list</string>
|
|
||||||
<string name="grid_format_key" translatable="false">grid_format</string>
|
|
||||||
<string name="auto_update_key" translatable="false">auto_update</string>
|
|
||||||
<string name="prerelease_update_key" translatable="false">prerelease_update</string>
|
|
||||||
<string name="manual_check_update_key" translatable="false">manual_check_update</string>
|
|
||||||
<string name="fast_forward_button_time_key" translatable="false">fast_forward_button_time</string>
|
|
||||||
<string name="benene_count" translatable="false">benene_count</string>
|
|
||||||
<string name="subtitle_settings_key" translatable="false">subtitle_settings_key</string>
|
|
||||||
<string name="quality_pref_key" translatable="false">quality_pref_key</string>
|
|
||||||
<string name="prerelease_commit_hash" translatable="false">unknown_prerelease</string>
|
|
||||||
<string name="use_system_brightness_key" translatable="false">use_system_brightness_key</string>
|
|
||||||
<string name="swipe_enabled_key" translatable="false">swipe_enabled_key</string>
|
|
||||||
<string name="playback_speed_enabled_key" translatable="false">playback_speed_enabled_key</string>
|
|
||||||
<string name="player_resize_enabled_key" translatable="false">player_resize_enabled_key</string>
|
|
||||||
<string name="pip_enabled_key" translatable="false">pip_enabled_key</string>
|
|
||||||
<string name="double_tap_enabled_key" translatable="false">double_tap_enabled_key</string>
|
|
||||||
<string name="swipe_vertical_enabled_key" translatable="false">swipe_vertical_enabled_key</string>
|
|
||||||
<string name="display_sub_key" translatable="false">display_sub_key</string>
|
|
||||||
<string name="show_fillers_key" translatable="false">show_fillers_key</string>
|
|
||||||
<string name="provider_lang_key" translatable="false">provider_lang_key</string>
|
|
||||||
<string name="dns_key" translatable="false">dns_key</string>
|
|
||||||
|
|
||||||
|
|
||||||
<!-- FORMAT MIGHT TRANSLATE, WILL CAUSE CRASH IF APPLIED WRONG -->
|
<!-- 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="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="app_dub_sub_episode_text_format">%s Ep %d</string>
|
<string name="app_dub_sub_episode_text_format">%s Ep %d</string>
|
||||||
|
|
||||||
<!-- IS NOT NEEDED TO TRANSLATE AS THEY ARE ONLY USED FOR SCREEN READERS AND WONT SHOW UP TO NORMAL USERS -->
|
<!-- IS NOT NEEDED TO TRANSLATE AS THEY ARE ONLY USED FOR SCREEN READERS AND WONT SHOW UP TO NORMAL USERS -->
|
||||||
|
@ -43,9 +12,7 @@
|
||||||
<string name="episode_poster_img_des">Episodyo Paskil</string>
|
<string name="episode_poster_img_des">Episodyo Paskil</string>
|
||||||
<string name="home_main_poster_img_des">Pangunahing Paskil</string>
|
<string name="home_main_poster_img_des">Pangunahing Paskil</string>
|
||||||
<string name="home_next_random_img_des">Susunod Walang tiyak</string>
|
<string name="home_next_random_img_des">Susunod Walang tiyak</string>
|
||||||
<string name="episode_play_img_des" translatable="false">@string/play_episode</string>
|
|
||||||
<string name="go_back_img_des">Pumunta Likod</string>
|
<string name="go_back_img_des">Pumunta Likod</string>
|
||||||
<string name="change_providers_img_des" translatable="false">@string/home_change_provider_img_des</string>
|
|
||||||
<string name="home_change_provider_img_des">Pagbabago Pinagmulan</string>
|
<string name="home_change_provider_img_des">Pagbabago Pinagmulan</string>
|
||||||
<string name="preview_background_img_des">Prebiyu Likuran</string>
|
<string name="preview_background_img_des">Prebiyu Likuran</string>
|
||||||
|
|
||||||
|
@ -65,7 +32,6 @@
|
||||||
<string name="no_data">Wala Datos</string>
|
<string name="no_data">Wala Datos</string>
|
||||||
<string name="episode_more_options_des">Mas Opsyon</string>
|
<string name="episode_more_options_des">Mas Opsyon</string>
|
||||||
<string name="next_episode">Susunod Episodyo</string>
|
<string name="next_episode">Susunod Episodyo</string>
|
||||||
<string name="result_plot" translatable="false">@string/synopsis</string>
|
|
||||||
<string name="result_tags">Dyanra</string>
|
<string name="result_tags">Dyanra</string>
|
||||||
<string name="result_share">Magbahagi</string>
|
<string name="result_share">Magbahagi</string>
|
||||||
<string name="result_open_in_browser">Buksan Ito Panlabas</string>
|
<string name="result_open_in_browser">Buksan Ito Panlabas</string>
|
||||||
|
@ -96,7 +62,6 @@
|
||||||
<string name="download_failed">Pag-iimbak nabigo</string>
|
<string name="download_failed">Pag-iimbak nabigo</string>
|
||||||
<string name="download_canceled">Pag-iimbak Kinansela</string>
|
<string name="download_canceled">Pag-iimbak Kinansela</string>
|
||||||
<string name="download_done">Tapos</string>
|
<string name="download_done">Tapos</string>
|
||||||
<string name="download_format" translatable="false">%s - %s</string>
|
|
||||||
|
|
||||||
<string name="error_loading_links_toast">Kamalian</string>
|
<string name="error_loading_links_toast">Kamalian</string>
|
||||||
<string name="download_storage_text">Espasyo sa Imbakan</string>
|
<string name="download_storage_text">Espasyo sa Imbakan</string>
|
||||||
|
@ -204,7 +169,6 @@
|
||||||
|
|
||||||
<string name="delete_file">Tanggalin</string>
|
<string name="delete_file">Tanggalin</string>
|
||||||
<string name="delete">Tanggalin</string>
|
<string name="delete">Tanggalin</string>
|
||||||
<string name="cancel" translatable="false">@string/sort_cancel</string>
|
|
||||||
<string name="pause">Humawak</string>
|
<string name="pause">Humawak</string>
|
||||||
<string name="resume">Magpatuloy</string>
|
<string name="resume">Magpatuloy</string>
|
||||||
<string name="delete_message">Permanenteng tatanggalin %s\nSigurado ka ba?</string>
|
<string name="delete_message">Permanenteng tatanggalin %s\nSigurado ka ba?</string>
|
||||||
|
@ -262,31 +226,19 @@
|
||||||
<string name="dns_pref">DNS over HTTPS</string>
|
<string name="dns_pref">DNS over HTTPS</string>
|
||||||
<string name="dns_pref_summary">Mahusay gamitin sa pag-bypass ISP sagabal</string>
|
<string name="dns_pref_summary">Mahusay gamitin sa pag-bypass ISP sagabal</string>
|
||||||
|
|
||||||
|
|
||||||
<string name="display_subbed_dubbed_settings">Magpakita Dubbed/Subbed Anime</string>
|
<string name="display_subbed_dubbed_settings">Magpakita Dubbed/Subbed Anime</string>
|
||||||
|
|
||||||
<string name="resize_fit">Pinakamainam</string>
|
<string name="resize_fit">Pinakamainam</string>
|
||||||
<string name="resize_fill">Palakihin</string>
|
<string name="resize_fill">Palakihin</string>
|
||||||
<string name="resize_zoom">Magpalaki</string>
|
<string name="resize_zoom">Magpalaki</string>
|
||||||
|
|
||||||
<string name="legal_notice" translatable="false">Disclaimer</string>
|
<string name="general">Pangkalahatan</string>
|
||||||
<string name="legal_notice_key" translatable="false">legal_notice_key</string>
|
|
||||||
<string name="legal_notice_text" translatable="false">Any legal issues regarding the content on this application
|
|
||||||
should be taken up with the actual file hosts and providers themselves as we are not affiliated with them.
|
|
||||||
|
|
||||||
In case of copyright infringement, please directly contact the responsible parties or the streaming websites.
|
|
||||||
|
|
||||||
The app is purely for educational and personal use.
|
|
||||||
|
|
||||||
CloudStream 3 does not host any content on the app, and has no control over what media is put up or taken down.
|
|
||||||
CloudStream 3 functions like any other search engine, such as Google. CloudStream 3 does not host, upload or
|
|
||||||
manage any videos, films or content. It simply crawls, aggregates and displayes links in a convenient,
|
|
||||||
user-friendly interface.
|
|
||||||
|
|
||||||
It merely scrapes 3rd-party websites that are publicly accessable via any regular web browser. It is the
|
|
||||||
responsibility of user to avoid any actions that might violate the laws governing his/her locality. Use
|
|
||||||
CloudStream 3 at your own risk.
|
|
||||||
</string>
|
|
||||||
<string name="general">General</string>
|
|
||||||
<string name="provider_lang_settings">Pinagmulan wika</string>
|
<string name="provider_lang_settings">Pinagmulan wika</string>
|
||||||
</resources>
|
<string name="app_layout">App Ayos</string>
|
||||||
|
<string name="automatic">Automatiko</string>
|
||||||
|
<string name="tv_layout">Telebisyon Ayos</string>
|
||||||
|
<string name="phone_layout">Phone Ayos</string>
|
||||||
|
<string name="primary_color_settings">Pangunahin Kulay</string>
|
||||||
|
<string name="app_theme_settings">App Tema</string>
|
||||||
|
<string name="preferred_media_settings">Ginustong Nilalaman</string>
|
||||||
|
</resources>
|
||||||
|
|
280
app/src/main/res/values-tr/strings.xml
Normal file
280
app/src/main/res/values-tr/strings.xml
Normal file
|
@ -0,0 +1,280 @@
|
||||||
|
<!--https://newbedev.com/concatenate-multiple-strings-in-xml-->
|
||||||
|
<resources>
|
||||||
|
<!-- KEYS DON'T TRANSLATE -->
|
||||||
|
<string name="search_providers_list_key" translatable="false">search_providers_list</string>
|
||||||
|
<string name="locale_key" translatable="false">app_locale</string>
|
||||||
|
<string name="search_types_list_key" translatable="false">search_type_list</string>
|
||||||
|
<string name="grid_format_key" translatable="false">grid_format</string>
|
||||||
|
<string name="auto_update_key" translatable="false">auto_update</string>
|
||||||
|
<string name="prerelease_update_key" translatable="false">prerelease_update</string>
|
||||||
|
<string name="manual_check_update_key" translatable="false">manual_check_update</string>
|
||||||
|
<string name="fast_forward_button_time_key" translatable="false">fast_forward_button_time</string>
|
||||||
|
<string name="benene_count" translatable="false">benene_count</string>
|
||||||
|
<string name="subtitle_settings_key" translatable="false">subtitle_settings_key</string>
|
||||||
|
<string name="quality_pref_key" translatable="false">quality_pref_key</string>
|
||||||
|
<string name="prerelease_commit_hash" translatable="false">unknown_prerelease</string>
|
||||||
|
<string name="use_system_brightness_key" translatable="false">use_system_brightness_key</string>
|
||||||
|
<string name="swipe_enabled_key" translatable="false">swipe_enabled_key</string>
|
||||||
|
<string name="playback_speed_enabled_key" translatable="false">playback_speed_enabled_key</string>
|
||||||
|
<string name="player_resize_enabled_key" translatable="false">player_resize_enabled_key</string>
|
||||||
|
<string name="pip_enabled_key" translatable="false">pip_enabled_key</string>
|
||||||
|
<string name="double_tap_enabled_key" translatable="false">double_tap_enabled_key</string>
|
||||||
|
<string name="swipe_vertical_enabled_key" translatable="false">swipe_vertical_enabled_key</string>
|
||||||
|
<string name="display_sub_key" translatable="false">display_sub_key</string>
|
||||||
|
<string name="show_fillers_key" translatable="false">show_fillers_key</string>
|
||||||
|
<string name="provider_lang_key" translatable="false">provider_lang_key</string>
|
||||||
|
<string name="dns_key" translatable="false">dns_key</string>
|
||||||
|
<string name="app_layout_key" translatable="false">app_layout_key</string>
|
||||||
|
<string name="primary_color_key" translatable="false">primary_color_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="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="app_dub_sub_episode_text_format">%s Ep %d</string>
|
||||||
|
|
||||||
|
<!-- IS NOT NEEDED TO TRANSLATE AS THEY ARE ONLY USED FOR SCREEN READERS AND WONT SHOW UP TO NORMAL USERS -->
|
||||||
|
<string name="result_poster_img_des">Poster</string>
|
||||||
|
<string name="search_poster_img_des">@string/result_poster_img_des</string>
|
||||||
|
<string name="episode_poster_img_des">Episode Poster</string>
|
||||||
|
<string name="home_main_poster_img_des">Main Poster</string>
|
||||||
|
<string name="home_next_random_img_des">Next Random</string>
|
||||||
|
<string name="episode_play_img_des" translatable="false">@string/play_episode</string>
|
||||||
|
<string name="go_back_img_des">Go back</string>
|
||||||
|
<string name="change_providers_img_des" translatable="false">@string/home_change_provider_img_des</string>
|
||||||
|
<string name="home_change_provider_img_des">Change Provider</string>
|
||||||
|
<string name="preview_background_img_des">Preview Background</string>
|
||||||
|
|
||||||
|
<!-- TRANSLATE, BUT DON'T FORGET FORMAT -->
|
||||||
|
<string name="player_speed_text_format" formatted="true">Hız (%.2fx)</string>
|
||||||
|
<string name="rated_format" formatted="true">Puan: %.1f</string>
|
||||||
|
<string name="new_update_format" formatted="true">Yeni güncelleme bulundu!\n%s -> %s</string>
|
||||||
|
<string name="filler_format" formatted="true">(Doldurucu) %s</string>
|
||||||
|
|
||||||
|
<string name="app_name">CloudStream</string>
|
||||||
|
<string name="title_home">Ana Sayfa</string>
|
||||||
|
<string name="title_search">Arama</string>
|
||||||
|
<string name="title_downloads">İndirmeler</string>
|
||||||
|
<string name="title_settings">Ayarlar</string>
|
||||||
|
|
||||||
|
<string name="search_hint">Ara…</string>
|
||||||
|
<string name="no_data">Veri Yok</string>
|
||||||
|
<string name="episode_more_options_des">Daha Fazla Seçenek</string>
|
||||||
|
<string name="next_episode">Sonraki bölüm</string>
|
||||||
|
<string name="result_tags">Türler</string>
|
||||||
|
<string name="result_share">Paylaş</string>
|
||||||
|
<string name="result_open_in_browser">Tarayıcıda Aç</string>
|
||||||
|
<string name="skip_loading">Yüklemeyi geç</string>
|
||||||
|
<string name="loading_chromecast">Yükleniyor…</string>
|
||||||
|
|
||||||
|
<string name="type_watching">İzleniyor</string>
|
||||||
|
<string name="type_on_hold">Beklemede</string>
|
||||||
|
<string name="type_completed">Tamamlandı</string>
|
||||||
|
<string name="type_dropped">Bırakıldı</string>
|
||||||
|
<string name="type_plan_to_watch">İzlemeyi Planla</string>
|
||||||
|
<string name="type_none">Hiçbiri</string>
|
||||||
|
|
||||||
|
<string name="play_movie_button">Film Oynat</string>
|
||||||
|
<string name="play_torrent_button">Torrent Akışı</string>
|
||||||
|
<string name="pick_source">Kaynaklar</string>
|
||||||
|
<string name="pick_subtitle">Altyazılar</string>
|
||||||
|
<string name="reload_error">Yeniden bağlanmayı dene…</string>
|
||||||
|
<string name="result_go_back">Geri Git</string>
|
||||||
|
<string name="play_episode">Bölümü Oynat</string>
|
||||||
|
<!--<string name="need_storage">Allow to download episodes</string>-->
|
||||||
|
|
||||||
|
<string name="download">İndirme</string>
|
||||||
|
<string name="downloaded">İndirildi</string>
|
||||||
|
<string name="downloading">İndiriliyor</string>
|
||||||
|
<string name="download_paused">İndirme Durduruldu</string>
|
||||||
|
<string name="download_started">İndirme Başladı</string>
|
||||||
|
<string name="download_failed">İndirme Başarısız Oldu</string>
|
||||||
|
<string name="download_canceled">İndirme İptal Edildi</string>
|
||||||
|
<string name="download_done">İndirme Bitti</string>
|
||||||
|
|
||||||
|
<string name="error_loading_links_toast">Bağlantıları yüklerken hata</string>
|
||||||
|
<string name="download_storage_text">Dahili Depolama</string>
|
||||||
|
|
||||||
|
<string name="app_dubbed_text">Seslendirme</string>
|
||||||
|
<string name="app_subbed_text">Altyazı</string>
|
||||||
|
|
||||||
|
<string name="popup_delete_file">Dosyayı Sil</string>
|
||||||
|
<string name="popup_play_file">Dosyayı Oynat</string>
|
||||||
|
<string name="popup_resume_download">İndirmeyi Sürdür</string>
|
||||||
|
<string name="popup_pause_download">İndirmeyi Durdur</string>
|
||||||
|
|
||||||
|
<string name="pref_disable_acra">Otomatik hata bildirmeyi devre dışı bırak</string>
|
||||||
|
<string name="home_more_info">Daha fazka bilgi</string>
|
||||||
|
<string name="home_expanded_hide">Gizle</string>
|
||||||
|
<string name="home_play">Oynat</string>
|
||||||
|
<string name="home_info">Bilgi</string>
|
||||||
|
<string name="filter_bookmarks">Yer işaretlerini filtrele</string>
|
||||||
|
<string name="error_bookmarks_text">Yer işaretleri</string>
|
||||||
|
<string name="action_remove_from_bookmarks">Kaldır</string>
|
||||||
|
<string name="sort_apply">Uygula</string>
|
||||||
|
<string name="sort_cancel">İptal Et</string>
|
||||||
|
<string name="player_speed">Oynatıcı Hızı</string>
|
||||||
|
|
||||||
|
<string name="subtitles_settings">Altyazı Ayarları</string>
|
||||||
|
<string name="subs_text_color">Metin Rengi</string>
|
||||||
|
<string name="subs_outline_color">Anahat Rengi</string>
|
||||||
|
<string name="subs_background_color">Arkaplan Rengi</string>
|
||||||
|
<string name="subs_window_color">Pencere Rengi</string>
|
||||||
|
<string name="subs_edge_type">Kenar Tipi</string>
|
||||||
|
<string name="subs_subtitle_elevation">Altyazı Yüksekliği</string>
|
||||||
|
<string name="subs_font">Yazı Tipi</string>
|
||||||
|
<string name="subs_font_size">Yazı Tipi Boyutu</string>
|
||||||
|
|
||||||
|
<string name="search_provider_text_providers">Sağlayıcıları kullanarak ara</string>
|
||||||
|
<string name="search_provider_text_types">Türleri kullanarak ara</string>
|
||||||
|
|
||||||
|
<string name="benene_count_text">Geliştiricilere %d Benene verildi</string>
|
||||||
|
<string name="benene_count_text_none">Hiçbir Benene verilmedi</string>
|
||||||
|
|
||||||
|
<string name="subs_auto_select_language">Dili Otomatik Seç</string>
|
||||||
|
<string name="subs_download_languages">Dilleri İndir</string>
|
||||||
|
<string name="subs_hold_to_reset_to_default">Varsayılana dönmek için basılı tutun</string>
|
||||||
|
<string name="continue_watching">İzlemeye Devam Edin</string>
|
||||||
|
|
||||||
|
<string name="action_remove_watching">Kaldır</string>
|
||||||
|
<string name="action_open_watching">Daha Fazla Bilgi</string>
|
||||||
|
|
||||||
|
<string name="vpn_might_be_needed">Bu sağlayıcının düzgün bir şekilde çalışması için VPN gerekebilir</string>
|
||||||
|
<string name="vpn_torrent">Bu sağlayıcınınki Torrent, VPN önerilir</string>
|
||||||
|
<string name="torrent_plot">Açıklama</string>
|
||||||
|
<string name="normal_no_plot">Olay örgüsü bulunamadı</string>
|
||||||
|
<string name="torrent_no_plot">Açıklama bulunamadı</string>
|
||||||
|
|
||||||
|
<string name="picture_in_picture">Resim içinde resim</string>
|
||||||
|
<string name="picture_in_picture_des">Diğer uygulamaların üzerinde minyatür bir oynatıcıda oynatmaya devam eder</string>
|
||||||
|
<string name="player_size_settings">Oyuncu yeniden boyutlandırma düğmesi</string>
|
||||||
|
<string name="player_size_settings_des">Siyah kenarlıkları kaldır</string>
|
||||||
|
<string name="player_subtitles_settings">Altyazılar</string>
|
||||||
|
<string name="player_subtitles_settings_des">Oynatıcı altyazı ayarları</string>
|
||||||
|
<string name="eigengraumode_settings">Eigengravy Modu</string>
|
||||||
|
<string name="eigengraumode_settings_des">Oynatıcıya hız seçeneğini ekler</string>
|
||||||
|
<string name="swipe_to_seek_settings">Aramak için kaydırın</string>
|
||||||
|
<string name="swipe_to_seek_settings_des">Video oynatıcıda zamanı kontrol etmek için sola veya sağa kaydırın</string>
|
||||||
|
<string name="swipe_to_change_settings">Ayarları değiştirmek için kaydırın</string>
|
||||||
|
<string name="swipe_to_change_settings_des">Parlaklığı veya ses seviyesini değiştirmek için sola veya sağa kaydırın</string>
|
||||||
|
<string name="double_tap_to_seek_settings">Aramak için iki kez dokunun</string>
|
||||||
|
<string name="double_tap_to_seek_settings_des">İleri veya geri aramak için sağ veya sol tarafa iki kez dokunun
|
||||||
|
</string>
|
||||||
|
<string name="use_system_brightness_settings">Sistem parlaklığını kullan</string>
|
||||||
|
<string name="use_system_brightness_settings_des">Uygulama oynatıcısında karanlık bir kaplama yerine sistem parlaklığını kullanın</string>
|
||||||
|
|
||||||
|
<string name="search">Arama</string>
|
||||||
|
<string name="settings_info">Bilgi</string>
|
||||||
|
<string name="advanced_search">Gelişmiş Arama</string>
|
||||||
|
<string name="advanced_search_des">Sağlayıcı tarafından ayrılmış arama sonuçlarını verir</string>
|
||||||
|
<string name="bug_report_settings_off">Yalnızca çökmelerle ilgili verileri gönderir</string>
|
||||||
|
<string name="bug_report_settings_on">Hiçbir veri göndermez</string>
|
||||||
|
<string name="show_fillers_settings">Anime için doldurucu bölümü göster</string>
|
||||||
|
<string name="updates_settings">Uygulama güncellemelerini göster</string>
|
||||||
|
<string name="updates_settings_des">Başlangıçta yeni güncellemeleri otomatik olarak ara</string>
|
||||||
|
<string name="uprereleases_settings">Ön sürümlere güncelleme</string>
|
||||||
|
<string name="uprereleases_settings_des">Yalnızca tam sürümler yerine önsürüm güncellemeleri arayın</string>
|
||||||
|
<string name="github">Github</string>
|
||||||
|
<string name="lightnovel">Aynı geliştiricilerden Light novel uygulaması</string>
|
||||||
|
<string name="anim">Aynı geliştiricilerden Anime uygulaması</string>
|
||||||
|
<string name="discord">Discord\'a gelin</string>
|
||||||
|
<string name="benene">Geliştiricilere muz ver</string>
|
||||||
|
<string name="benene_des">Verilen benene</string>
|
||||||
|
|
||||||
|
<string name="app_language">Uygulama Dili</string>
|
||||||
|
|
||||||
|
<string name="no_chomecast_support_toast">Bu sağlayıcının chromecast desteği yok</string>
|
||||||
|
<string name="no_links_found_toast">Hiçbir Bağlantı Bulumamadı</string>
|
||||||
|
<string name="copy_link_toast">Bağlantı panoya kopyalandı</string>
|
||||||
|
<string name="play_episode_toast">Bölümü Oynat</string>
|
||||||
|
<string name="subs_default_reset_toast">Varsayılan değere sıfırla</string>
|
||||||
|
<string name="acra_report_toast">Üzgünüm, uygulama çöktü. Anonim bir hata raporu geliştiricilere gönderilecek</string>
|
||||||
|
|
||||||
|
<string name="season">Sezon</string>
|
||||||
|
<string name="no_season">Sezon Yok</string>
|
||||||
|
<string name="episode">Bölüm</string>
|
||||||
|
<string name="episodes">Bölümler</string>
|
||||||
|
<string name="season_short">S</string>
|
||||||
|
<string name="episode_short">B</string>
|
||||||
|
|
||||||
|
<string name="delete_file">Dosyayı Sil</string>
|
||||||
|
<string name="delete">Sil</string>
|
||||||
|
<string name="pause">Durdur</string>
|
||||||
|
<string name="resume">Sürdür</string>
|
||||||
|
<string name="delete_message">%s kalıcı olarak silinecektir. Emin misiniz?</string>
|
||||||
|
|
||||||
|
<string name="status_ongoing">Devam eden</string>
|
||||||
|
<string name="status_completed">Tamamlandı</string>
|
||||||
|
<string name="status">Durum</string>
|
||||||
|
<string name="year">Yıl</string>
|
||||||
|
<string name="rating">Derecelendirme</string>
|
||||||
|
<string name="duration">Süre</string>
|
||||||
|
<string name="site">Site</string>
|
||||||
|
<string name="synopsis">Özet</string>
|
||||||
|
|
||||||
|
<string name="queued">sıraya eklendi</string>
|
||||||
|
<string name="no_subtitles">Altyazı yok</string>
|
||||||
|
<string name="default_subtitles">Varsayılan</string>
|
||||||
|
|
||||||
|
<string name="free_storage">Bağımsız</string>
|
||||||
|
<string name="used_storage">Kullanıldı</string>
|
||||||
|
<string name="app_storage">Uygulama</string>
|
||||||
|
|
||||||
|
<string name="movies">Filmler</string>
|
||||||
|
<string name="tv_series">Televizyon Dizisi</string>
|
||||||
|
<string name="cartoons">Karikatürler</string>
|
||||||
|
<string name="anime">Anime</string>
|
||||||
|
<string name="torrent">Torrent</string>
|
||||||
|
|
||||||
|
<string name="source_error">Kaynak hatası</string>
|
||||||
|
<string name="remote_error">Uzaktan hata</string>
|
||||||
|
<string name="render_error">İşleyici hatası</string>
|
||||||
|
<string name="unexpected_error">Beklenmeyen oynatıcı hatası</string>
|
||||||
|
<string name="storage_error">İndirme hatası, depolama izinlerini kontrol et</string>
|
||||||
|
|
||||||
|
<string name="episode_action_chomecast_episode">Chromecast Bölümü</string>
|
||||||
|
<string name="episode_action_chomecast_mirror">Chromecast Yansıtma</string>
|
||||||
|
<string name="episode_action_play_in_app">Uygulamada Oynat</string>
|
||||||
|
<string name="episode_action_play_in_vlc">VLC\'de Oynat</string>
|
||||||
|
<string name="episode_action_play_in_browser">Tarayıcıda Oynat</string>
|
||||||
|
<string name="episode_action_copy_link">Bağlantıyı Kopyala</string>
|
||||||
|
<string name="episode_action_auto_download">Otomatik İndirme</string>
|
||||||
|
<string name="episode_action_download_mirror">İndirme Yansıması</string>
|
||||||
|
<string name="episode_action_reload_links">Bağlantıları yeniden yükle</string>
|
||||||
|
|
||||||
|
<string name="no_update_found">Güncelleme bulunamadı</string>
|
||||||
|
<string name="check_for_update">Güncellemeleri kontrol et</string>
|
||||||
|
|
||||||
|
<string name="video_lock">Kilitle</string>
|
||||||
|
<string name="video_aspect_ratio_resize">Yeniden boyutlandır</string>
|
||||||
|
<string name="video_source">Kaynak</string>
|
||||||
|
<string name="video_skip_op">OP\'u geç</string>
|
||||||
|
|
||||||
|
<string name="dont_show_again">Bir daha gösterme</string>
|
||||||
|
<string name="update">Güncelleme</string>
|
||||||
|
<string name="watch_quality_pref">Tercih edilen izleme kalitesi</string>
|
||||||
|
<string name="dns_pref">HTTPS üzerinden DNS</string>
|
||||||
|
<string name="dns_pref_summary">ISS\'in engellemelerini geçmek için kullanışlı</string>
|
||||||
|
|
||||||
|
|
||||||
|
<string name="display_subbed_dubbed_settings">Seslendirilmiş/Altyazılı Anime\'yi göster</string>
|
||||||
|
|
||||||
|
<string name="resize_fit">Ekrana sığdır</string>
|
||||||
|
<string name="resize_fill">Yay</string>
|
||||||
|
<string name="resize_zoom">Yakınlaştır</string>
|
||||||
|
|
||||||
|
<string name="general">Genel</string>
|
||||||
|
<string name="provider_lang_settings">Sağlayıcı Dilleri</string>
|
||||||
|
<string name="app_layout">Uygulama Düzeni</string>
|
||||||
|
|
||||||
|
<string name="automatic">Otomatik</string>
|
||||||
|
<string name="tv_layout">Tv Düzeni</string>
|
||||||
|
<string name="phone_layout">Telefon Düzeni</string>
|
||||||
|
|
||||||
|
<string name="primary_color_settings">Ana Renk</string>
|
||||||
|
</resources>
|
|
@ -9,7 +9,6 @@
|
||||||
<string name="no_data">Thật tiếc! Không có kết quả nào phù hợp. Hãy thử nhập một tên khác</string>
|
<string name="no_data">Thật tiếc! Không có kết quả nào phù hợp. Hãy thử nhập một tên khác</string>
|
||||||
<string name="episode_more_options_des">More Options</string>
|
<string name="episode_more_options_des">More Options</string>
|
||||||
<string name="next_episode">Tập tiếp theo</string>
|
<string name="next_episode">Tập tiếp theo</string>
|
||||||
<string name="result_plot" translatable="false">@string/synopsis</string>
|
|
||||||
<string name="result_tags">Thể loại</string>
|
<string name="result_tags">Thể loại</string>
|
||||||
<string name="result_share">Chia sẻ</string>
|
<string name="result_share">Chia sẻ</string>
|
||||||
<string name="result_open_in_browser">Mở bằng trình duyệt</string>
|
<string name="result_open_in_browser">Mở bằng trình duyệt</string>
|
||||||
|
|
|
@ -46,6 +46,17 @@
|
||||||
<item>4</item>
|
<item>4</item>
|
||||||
</array>
|
</array>
|
||||||
|
|
||||||
|
<array name="media_type_pref">
|
||||||
|
<item>All</item>
|
||||||
|
<item>Movies and TV</item>
|
||||||
|
<item>Anime</item>
|
||||||
|
</array>
|
||||||
|
<array name="media_type_pref_values">
|
||||||
|
<item>0</item>
|
||||||
|
<item>1</item>
|
||||||
|
<item>2</item>
|
||||||
|
</array>
|
||||||
|
|
||||||
<array name="episode_long_click_options">
|
<array name="episode_long_click_options">
|
||||||
<item>@string/episode_action_chomecast_episode</item>
|
<item>@string/episode_action_chomecast_episode</item>
|
||||||
<item>@string/episode_action_chomecast_mirror</item>
|
<item>@string/episode_action_chomecast_mirror</item>
|
||||||
|
@ -68,4 +79,48 @@
|
||||||
<item>7</item>
|
<item>7</item>
|
||||||
<item>8</item>
|
<item>8</item>
|
||||||
</array>
|
</array>
|
||||||
|
|
||||||
|
<array name="app_layout">
|
||||||
|
<item>@string/automatic</item>
|
||||||
|
<item>@string/phone_layout</item>
|
||||||
|
<item>@string/tv_layout</item>
|
||||||
|
</array>
|
||||||
|
|
||||||
|
<array name="app_layout_values">
|
||||||
|
<item>-1</item>
|
||||||
|
<item>0</item>
|
||||||
|
<item>1</item>
|
||||||
|
</array>
|
||||||
|
|
||||||
|
<string-array name="themes_overlay_names">
|
||||||
|
<item>Normal</item>
|
||||||
|
<item>Cool</item>
|
||||||
|
<item>Fire</item>
|
||||||
|
<item>Burple</item>
|
||||||
|
<item>Green</item>
|
||||||
|
<item>Apple</item>
|
||||||
|
<item>Banana</item>
|
||||||
|
<item>Party</item>
|
||||||
|
</string-array>
|
||||||
|
<string-array name="themes_overlay_names_values">
|
||||||
|
<item>Normal</item>
|
||||||
|
<item>Blue</item>
|
||||||
|
<item>Red</item>
|
||||||
|
<item>Purple</item>
|
||||||
|
<item>Green</item>
|
||||||
|
<item>GreenApple</item>
|
||||||
|
<item>Banana</item>
|
||||||
|
<item>Party</item>
|
||||||
|
</string-array>
|
||||||
|
|
||||||
|
<string-array name="themes_names">
|
||||||
|
<item>Normal</item>
|
||||||
|
<item>Amoled</item>
|
||||||
|
<item>Flashbang</item>
|
||||||
|
</string-array>
|
||||||
|
<string-array name="themes_names_values">
|
||||||
|
<item>Black</item>
|
||||||
|
<item>Amoled</item>
|
||||||
|
<item>Light</item>
|
||||||
|
</string-array>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -16,9 +16,8 @@
|
||||||
<attr name="colorSearch" format="color"/>
|
<attr name="colorSearch" format="color"/>
|
||||||
<attr name="colorOngoing" format="color"/>
|
<attr name="colorOngoing" format="color"/>
|
||||||
<attr name="colorPrimaryDark" format="color"/>
|
<attr name="colorPrimaryDark" format="color"/>
|
||||||
<attr name="colorItemSeen" format="color"/>
|
|
||||||
|
|
||||||
<attr name="darkBackground" format="color"/>
|
<attr name="primaryGrayBackground" format="color"/>
|
||||||
<attr name="primaryBlackBackground" format="color"/>
|
<attr name="primaryBlackBackground" format="color"/>
|
||||||
<attr name="iconGrayBackground" format="color"/>
|
<attr name="iconGrayBackground" format="color"/>
|
||||||
<attr name="boxItemBackground" format="color"/>
|
<attr name="boxItemBackground" format="color"/>
|
||||||
|
|
|
@ -3,7 +3,6 @@
|
||||||
<color name="colorPrimary">#3d50fa</color>
|
<color name="colorPrimary">#3d50fa</color>
|
||||||
<color name="colorPrimarySecond">@color/colorPrimary</color>
|
<color name="colorPrimarySecond">@color/colorPrimary</color>
|
||||||
<color name="colorSearch">#303135</color> <!--#3444D1 @color/itemBackground-->
|
<color name="colorSearch">#303135</color> <!--#3444D1 @color/itemBackground-->
|
||||||
<color name="colorItemSeen">#1E1E32</color>
|
|
||||||
<color name="colorOngoing">#F53B66</color> <!--FF8181-->
|
<color name="colorOngoing">#F53B66</color> <!--FF8181-->
|
||||||
<color name="colorPrimaryDark">#3700B3</color>
|
<color name="colorPrimaryDark">#3700B3</color>
|
||||||
<color name="colorAccent">#3b65f5</color> <!-- 818fff-->
|
<color name="colorAccent">#3b65f5</color> <!-- 818fff-->
|
||||||
|
@ -11,16 +10,17 @@
|
||||||
<color name="primaryGrayBackground">#2B2C30</color> <!--0f0f10 0E0E10 303135 2B2C30-->
|
<color name="primaryGrayBackground">#2B2C30</color> <!--0f0f10 0E0E10 303135 2B2C30-->
|
||||||
<color name="primaryBlackBackground">#111111</color> <!--1C1C20 191a1f 19181E 202125 1C1C20-->
|
<color name="primaryBlackBackground">#111111</color> <!--1C1C20 191a1f 19181E 202125 1C1C20-->
|
||||||
<color name="iconGrayBackground">#1C1C20</color> <!--141419 202125-->
|
<color name="iconGrayBackground">#1C1C20</color> <!--141419 202125-->
|
||||||
<color name="itemBackground">#161616</color> <!-- 17171B 1B1B20-->
|
<color name="boxItemBackground">#161616</color> <!-- 17171B 1B1B20-->
|
||||||
|
|
||||||
<color name="textColor">#e9eaee</color> <!--FFF-->
|
<color name="textColor">#e9eaee</color> <!--FFF-->
|
||||||
<color name="grayTextColor">#9ba0a4</color> <!-- 5e5f62-->
|
<color name="grayTextColor">#9ba0a4</color> <!-- 5e5f62-->
|
||||||
|
|
||||||
<color name="searchColor">@color/textColor</color> <!--DADADA-->
|
|
||||||
<color name="searchColorTransparent">#1AFFFFFF</color> <!--DADADA-->
|
<color name="searchColorTransparent">#1AFFFFFF</color> <!--DADADA-->
|
||||||
<color name="transparent">#00000000</color>
|
<color name="transparent">#00000000</color>
|
||||||
|
|
||||||
<color name="white">#FFF</color>
|
<color name="white">#FFF</color>
|
||||||
|
<color name="black">#000</color>
|
||||||
|
|
||||||
<color name="dubColor">#3d50fa</color> <!--3b65f5 f18c82 8294F1-->
|
<color name="dubColor">#3d50fa</color> <!--3b65f5 f18c82 8294F1-->
|
||||||
<color name="dubColorBg">#803B65F5</color>
|
<color name="dubColorBg">#803B65F5</color>
|
||||||
<color name="subColor">#F54A3B</color> <!--F53B66 FA3D79-->
|
<color name="subColor">#F54A3B</color> <!--F53B66 FA3D79-->
|
||||||
|
@ -34,10 +34,27 @@
|
||||||
<color name="darkBar">#121212</color>
|
<color name="darkBar">#121212</color>
|
||||||
<color name="videoProgress">#66B5B5B5</color> <!--66B5B5B5-->
|
<color name="videoProgress">#66B5B5B5</color> <!--66B5B5B5-->
|
||||||
<!--<color name="videoCache">#663D50FA</color>--> <!--66B5B5B5-->
|
<!--<color name="videoCache">#663D50FA</color>--> <!--66B5B5B5-->
|
||||||
<color name="videoColorPrimary">@color/colorPrimary</color> <!--0e09df 617EFF 3d50fa-->
|
|
||||||
|
|
||||||
<color name="iconColor">#9ba0a6</color>
|
<color name="iconColor">#9ba0a6</color>
|
||||||
|
|
||||||
<color name="usedStorageColor">#FFF</color>
|
<!-- <color name="usedStorageColor">?attr/white</color>#fff-->
|
||||||
<color name="freeStorageColor">#676767</color>
|
<!-- <color name="freeStorageColor">?attr/grayTextColor</color> #676767-->
|
||||||
|
|
||||||
|
<!--Light Mode -->
|
||||||
|
<color name="lightPrimaryGrayBackground">#f1f1f1</color>
|
||||||
|
<color name="lightBitDarkerGrayBackground">#fff</color>
|
||||||
|
<color name="lightGrayBackground">#eeeeee</color>
|
||||||
|
<color name="lightItemBackground">#eeeeee</color>
|
||||||
|
<color name="lightTextColor">#202125</color>
|
||||||
|
<color name="lightGrayTextColor">#5f6267</color>
|
||||||
|
<color name="lightIconColor">#5f6267</color>
|
||||||
|
|
||||||
|
<!--Other Colors -->
|
||||||
|
<color name="colorPrimaryBlue">#5664B7</color>
|
||||||
|
<color name="colorPrimaryRed">#D50000</color>
|
||||||
|
<color name="colorPrimaryPurple">#6200EA</color> <!-- Burple-->
|
||||||
|
<color name="colorPrimaryGreen">#00BFA5</color>
|
||||||
|
<color name="colorPrimaryGreenApple">#48E484</color>
|
||||||
|
<color name="colorPrimaryBanana">#E4D448</color>
|
||||||
|
<color name="colorPrimaryParty">#ea596e</color>
|
||||||
</resources>
|
</resources>
|
4
app/src/main/res/values/ic_banner_background.xml
Normal file
4
app/src/main/res/values/ic_banner_background.xml
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
<color name="ic_banner_background">#3242D3</color>
|
||||||
|
</resources>
|
|
@ -25,9 +25,11 @@
|
||||||
<string name="provider_lang_key" translatable="false">provider_lang_key</string>
|
<string name="provider_lang_key" translatable="false">provider_lang_key</string>
|
||||||
<string name="dns_key" translatable="false">dns_key</string>
|
<string name="dns_key" translatable="false">dns_key</string>
|
||||||
<string name="download_path_key" translatable="false">download_path_key</string>
|
<string name="download_path_key" translatable="false">download_path_key</string>
|
||||||
|
|
||||||
|
|
||||||
<string name="app_name_download_path" translatable="false">Cloudstream</string>
|
<string name="app_name_download_path" translatable="false">Cloudstream</string>
|
||||||
|
<string name="app_layout_key" translatable="false">app_layout_key</string>
|
||||||
|
<string name="primary_color_key" translatable="false">primary_color_key</string>
|
||||||
|
<string name="prefer_media_type_key" translatable="false">prefer_media_type_key</string>
|
||||||
|
<string name="app_theme_key" translatable="false">app_theme_key</string>
|
||||||
|
|
||||||
|
|
||||||
<!-- FORMAT MIGHT TRANSLATE, WILL CAUSE CRASH IF APPLIED WRONG -->
|
<!-- FORMAT MIGHT TRANSLATE, WILL CAUSE CRASH IF APPLIED WRONG -->
|
||||||
|
@ -279,7 +281,7 @@
|
||||||
<string name="resize_fill">Stretch</string>
|
<string name="resize_fill">Stretch</string>
|
||||||
<string name="resize_zoom">Zoom</string>
|
<string name="resize_zoom">Zoom</string>
|
||||||
|
|
||||||
<string name="legal_notice" translatable="false">Disclaimer</string>
|
<string name="legal_notice">Disclaimer</string>
|
||||||
<string name="legal_notice_key" translatable="false">legal_notice_key</string>
|
<string name="legal_notice_key" translatable="false">legal_notice_key</string>
|
||||||
<string name="legal_notice_text" translatable="false">Any legal issues regarding the content on this application
|
<string name="legal_notice_text" translatable="false">Any legal issues regarding the content on this application
|
||||||
should be taken up with the actual file hosts and providers themselves as we are not affiliated with them.
|
should be taken up with the actual file hosts and providers themselves as we are not affiliated with them.
|
||||||
|
@ -299,4 +301,13 @@
|
||||||
</string>
|
</string>
|
||||||
<string name="general">General</string>
|
<string name="general">General</string>
|
||||||
<string name="provider_lang_settings">Provider Languages</string>
|
<string name="provider_lang_settings">Provider Languages</string>
|
||||||
|
<string name="app_layout">App Layout</string>
|
||||||
|
<string name="preferred_media_settings">Preferred Media</string>
|
||||||
|
|
||||||
|
<string name="automatic">Auto</string>
|
||||||
|
<string name="tv_layout">Tv Layout</string>
|
||||||
|
<string name="phone_layout">Phone Layout</string>
|
||||||
|
|
||||||
|
<string name="primary_color_settings">Primary Color</string>
|
||||||
|
<string name="app_theme_settings">App Theme</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -8,9 +8,6 @@
|
||||||
<!--<item name="android:navigationBarColor">@color/darkBackground</item>-->
|
<!--<item name="android:navigationBarColor">@color/darkBackground</item>-->
|
||||||
<item name="android:statusBarColor">?attr/iconGrayBackground</item>
|
<item name="android:statusBarColor">?attr/iconGrayBackground</item>
|
||||||
|
|
||||||
<item name="android:textColorHint">@color/searchColor</item>
|
|
||||||
<item name="android:editTextColor">@color/textColor</item>
|
|
||||||
|
|
||||||
<item name="android:scrollbarThumbVertical">@null</item>
|
<item name="android:scrollbarThumbVertical">@null</item>
|
||||||
<item name="android:scrollbarThumbHorizontal">@null</item>
|
<item name="android:scrollbarThumbHorizontal">@null</item>
|
||||||
|
|
||||||
|
@ -32,22 +29,139 @@
|
||||||
<item name="castMiniControllerStyle">@style/CustomCastMiniController</item>
|
<item name="castMiniControllerStyle">@style/CustomCastMiniController</item>
|
||||||
<!--<item name="mediaRouteButtonTint">?attr/colorPrimary</item>-->
|
<!--<item name="mediaRouteButtonTint">?attr/colorPrimary</item>-->
|
||||||
|
|
||||||
|
<!-- Preference -->
|
||||||
|
<item name="android:textColor">?attr/textColor</item>
|
||||||
|
<item name="android:textColorSecondary">?attr/grayTextColor</item>
|
||||||
|
<item name="android:icon">?attr/grayTextColor</item>
|
||||||
|
|
||||||
|
<item name="android:textColorHint">?attr/grayTextColor</item>
|
||||||
|
<item name="android:editTextColor">?attr/textColor</item>
|
||||||
|
<item name="android:colorForeground">?attr/textColor</item>
|
||||||
|
<item name="android:colorControlHighlight">?attr/textColor</item> <!--iconRipple-->
|
||||||
|
|
||||||
|
<item name="android:windowAllowReturnTransitionOverlap">true</item>
|
||||||
|
<item name="android:windowAllowEnterTransitionOverlap">true</item>
|
||||||
|
<!--<item name="preferenceTheme">@style/PreferencesTheme</item>-->
|
||||||
|
|
||||||
<!-- DEF STYLE -->
|
<!-- DEF STYLE -->
|
||||||
<item name="colorPrimary">@color/colorPrimary</item>
|
<item name="colorPrimary">@color/colorPrimary</item>
|
||||||
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
|
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
|
||||||
<item name="colorAccent">@color/colorAccent</item>
|
<item name="colorAccent">@color/colorAccent</item>
|
||||||
<item name="textColor">@color/textColor</item>
|
<item name="textColor">@color/textColor</item>
|
||||||
<item name="colorItemSeen">@color/colorItemSeen</item>
|
|
||||||
<item name="grayTextColor">@color/grayTextColor</item>
|
<item name="grayTextColor">@color/grayTextColor</item>
|
||||||
<item name="darkBackground">@color/primaryGrayBackground</item>
|
<item name="primaryGrayBackground">@color/primaryGrayBackground</item>
|
||||||
<item name="primaryBlackBackground">@color/primaryBlackBackground</item>
|
<item name="primaryBlackBackground">@color/primaryBlackBackground</item>
|
||||||
<item name="iconGrayBackground">@color/iconGrayBackground</item>
|
<item name="iconGrayBackground">@color/iconGrayBackground</item>
|
||||||
<item name="boxItemBackground">@color/itemBackground</item>
|
<item name="boxItemBackground">@color/boxItemBackground</item>
|
||||||
<item name="iconColor">@color/iconColor</item>
|
<item name="iconColor">@color/iconColor</item>
|
||||||
<item name="white">#FFF</item>
|
<item name="white">#FFF</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
<!-- <style name="PreferencesTheme" parent="@style/Base.Theme.AppCompat">
|
||||||
|
<item name="android:textColorPrimary">?attr/textColor</item>
|
||||||
|
<item name="android:textColorSecondary">?attr/grayTextColor</item>
|
||||||
|
<item name="android:colorAccent">?attr/colorAccent</item>
|
||||||
|
<item name="android:colorControlHighlight">@color/colorPrimary</item>
|
||||||
|
<item name="android:tint">?attr/textColor</item>
|
||||||
|
</style>-->
|
||||||
|
|
||||||
|
<style name="AmoledMode">
|
||||||
|
<item name="primaryGrayBackground">@color/black</item>
|
||||||
|
<item name="primaryBlackBackground">@color/black</item>
|
||||||
|
<item name="iconGrayBackground">@color/primaryBlackBackground</item>
|
||||||
|
<item name="boxItemBackground">@color/black</item>
|
||||||
|
<item name="textColor">@color/textColor</item>
|
||||||
|
<item name="grayTextColor">@color/grayTextColor</item>
|
||||||
|
<item name="white">@color/white</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="LightMode">
|
||||||
|
<item name="primaryGrayBackground">@color/lightPrimaryGrayBackground</item>
|
||||||
|
<item name="primaryBlackBackground">@color/lightBitDarkerGrayBackground</item>
|
||||||
|
<item name="iconGrayBackground">@color/lightGrayBackground</item>
|
||||||
|
<item name="boxItemBackground">@color/lightItemBackground</item>
|
||||||
|
<item name="textColor">@color/lightTextColor</item>
|
||||||
|
<item name="grayTextColor">@color/lightGrayTextColor</item>
|
||||||
|
<item name="white">#000</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="OverlayPrimaryColorNormal">
|
||||||
|
<item name="colorPrimary">@color/colorPrimary</item>
|
||||||
|
<item name="android:colorPrimary">@color/colorPrimary</item>
|
||||||
|
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
|
||||||
|
<item name="colorAccent">@color/colorAccent</item>
|
||||||
|
<item name="colorOnPrimary">@color/colorAccent</item>
|
||||||
|
<!-- Needed for leanback fuckery -->
|
||||||
|
<item name="android:colorAccent">@color/colorAccent</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="OverlayPrimaryColorBlue">
|
||||||
|
<item name="colorPrimary">@color/colorPrimaryBlue</item>
|
||||||
|
<item name="android:colorPrimary">@color/colorPrimaryBlue</item>
|
||||||
|
<item name="colorPrimaryDark">#4855A2</item>
|
||||||
|
<item name="colorAccent">#5A6BCB</item>
|
||||||
|
<item name="colorOnPrimary">#5A6BCB</item>
|
||||||
|
<!-- Needed for leanback fuckery -->
|
||||||
|
<item name="android:colorAccent">@color/colorPrimaryBlue</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="OverlayPrimaryColorPurple">
|
||||||
|
<item name="colorPrimary">@color/colorPrimaryPurple</item>
|
||||||
|
<item name="android:colorPrimary">@color/colorPrimaryPurple</item>
|
||||||
|
<item name="colorPrimaryDark">#4704A3</item>
|
||||||
|
<item name="colorAccent">#7125DB</item>
|
||||||
|
<item name="colorOnPrimary">#7125DB</item>
|
||||||
|
<item name="android:colorAccent">@color/colorPrimaryPurple</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="OverlayPrimaryColorGreen">
|
||||||
|
<item name="colorPrimary">@color/colorPrimaryGreen</item>
|
||||||
|
<item name="android:colorPrimary">@color/colorPrimaryGreen</item>
|
||||||
|
<item name="colorPrimaryDark">#007363</item>
|
||||||
|
<item name="colorAccent">#39C1AE</item>
|
||||||
|
<item name="colorOnPrimary">#39C1AE</item>
|
||||||
|
<item name="android:colorAccent">@color/colorPrimaryGreen</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="OverlayPrimaryColorGreenApple">
|
||||||
|
<item name="colorPrimary">@color/colorPrimaryGreenApple</item>
|
||||||
|
<item name="android:colorPrimary">@color/colorPrimaryGreenApple</item>
|
||||||
|
<item name="colorPrimaryDark">#319B5A</item>
|
||||||
|
<item name="colorAccent">#51C57E</item>
|
||||||
|
<item name="colorOnPrimary">#51C57E</item>
|
||||||
|
<item name="android:colorAccent">@color/colorPrimaryGreenApple</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="OverlayPrimaryColorRed">
|
||||||
|
<item name="colorPrimary">@color/colorPrimaryRed</item>
|
||||||
|
<item name="android:colorPrimary">@color/colorPrimaryRed</item>
|
||||||
|
<item name="colorPrimaryDark">#D53333</item>
|
||||||
|
<item name="colorAccent">#F53B3B</item>
|
||||||
|
<item name="colorOnPrimary">#EC3838</item>
|
||||||
|
<!-- Needed for leanback fuckery -->
|
||||||
|
<item name="android:colorAccent">@color/colorPrimaryRed</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="OverlayPrimaryColorBanana">
|
||||||
|
<item name="colorPrimary">@color/colorPrimaryBanana</item>
|
||||||
|
<item name="android:colorPrimary">@color/colorPrimaryBanana</item>
|
||||||
|
<item name="colorPrimaryDark">#9B7D31</item>
|
||||||
|
<item name="colorAccent">#C5B251</item>
|
||||||
|
<item name="colorOnPrimary">#C5A851</item>
|
||||||
|
<item name="android:colorAccent">@color/colorPrimaryBanana</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="OverlayPrimaryColorParty">
|
||||||
|
<item name="colorPrimary">@color/colorPrimaryParty</item>
|
||||||
|
<item name="android:colorPrimary">@color/colorPrimaryParty</item>
|
||||||
|
<item name="colorPrimaryDark">#C1495B</item>
|
||||||
|
<item name="colorAccent">#FD798C</item>
|
||||||
|
<item name="colorOnPrimary">#BF5968</item>
|
||||||
|
<item name="android:colorAccent">@color/colorPrimaryParty</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
<style name="LoadedStyle">
|
<style name="LoadedStyle">
|
||||||
<item name="android:navigationBarColor">?attr/darkBackground</item>
|
<item name="android:navigationBarColor">?attr/primaryGrayBackground</item>
|
||||||
<item name="android:windowBackground">?attr/primaryBlackBackground</item>
|
<item name="android:windowBackground">?attr/primaryBlackBackground</item>
|
||||||
</style>
|
</style>
|
||||||
<style name="AppSearchViewStyle"
|
<style name="AppSearchViewStyle"
|
||||||
|
@ -161,6 +275,9 @@
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="NiceButton">
|
<style name="NiceButton">
|
||||||
|
<!--removes shadow-->
|
||||||
|
<item name="android:stateListAnimator">@null</item>
|
||||||
|
|
||||||
<item name="android:padding">5dp</item>
|
<item name="android:padding">5dp</item>
|
||||||
<item name="android:layout_marginStart">5dp</item>
|
<item name="android:layout_marginStart">5dp</item>
|
||||||
<item name="android:layout_marginEnd">5dp</item>
|
<item name="android:layout_marginEnd">5dp</item>
|
||||||
|
|
|
@ -83,6 +83,11 @@
|
||||||
android:title="@string/app_language"
|
android:title="@string/app_language"
|
||||||
android:icon="@drawable/ic_baseline_language_24">
|
android:icon="@drawable/ic_baseline_language_24">
|
||||||
</Preference>
|
</Preference>
|
||||||
|
<Preference
|
||||||
|
android:key="@string/prefer_media_type_key"
|
||||||
|
android:title="@string/preferred_media_settings"
|
||||||
|
android:icon="@drawable/ic_baseline_play_arrow_24">
|
||||||
|
</Preference>
|
||||||
<Preference
|
<Preference
|
||||||
android:key="@string/display_sub_key"
|
android:key="@string/display_sub_key"
|
||||||
android:title="@string/display_subbed_dubbed_settings"
|
android:title="@string/display_subbed_dubbed_settings"
|
||||||
|
@ -104,6 +109,21 @@
|
||||||
android:title="@string/download_path_pref"
|
android:title="@string/download_path_pref"
|
||||||
android:icon="@drawable/netflix_download">
|
android:icon="@drawable/netflix_download">
|
||||||
</Preference>
|
</Preference>
|
||||||
|
<Preference
|
||||||
|
android:icon="@drawable/ic_baseline_tv_24"
|
||||||
|
android:key="@string/app_layout_key"
|
||||||
|
android:title="@string/app_layout">
|
||||||
|
</Preference>
|
||||||
|
<Preference
|
||||||
|
android:icon="@drawable/ic_baseline_color_lens_24"
|
||||||
|
android:key="@string/primary_color_key"
|
||||||
|
android:title="@string/primary_color_settings">
|
||||||
|
</Preference>
|
||||||
|
<Preference
|
||||||
|
android:icon="@drawable/ic_baseline_color_lens_24"
|
||||||
|
android:key="@string/app_theme_key"
|
||||||
|
android:title="@string/app_theme_settings">
|
||||||
|
</Preference>
|
||||||
</PreferenceCategory>
|
</PreferenceCategory>
|
||||||
<PreferenceCategory
|
<PreferenceCategory
|
||||||
android:key="search"
|
android:key="search"
|
||||||
|
|
Loading…
Reference in a new issue