forked from recloudstream/cloudstream
testing mal sync
This commit is contained in:
parent
2a27c0360d
commit
6d2c609246
10 changed files with 491 additions and 439 deletions
|
@ -109,7 +109,7 @@ class MALApi(index: Int) : AccountManager(index), SyncAPI {
|
||||||
@JsonProperty("updated_at") val updatedAt: String?,
|
@JsonProperty("updated_at") val updatedAt: String?,
|
||||||
@JsonProperty("media_type") val mediaType: String?,
|
@JsonProperty("media_type") val mediaType: String?,
|
||||||
@JsonProperty("status") val status: String?,
|
@JsonProperty("status") val status: String?,
|
||||||
@JsonProperty("genres") val genres: ArrayList<Genres>,
|
@JsonProperty("genres") val genres: ArrayList<Genres>?,
|
||||||
@JsonProperty("my_list_status") val myListStatus: MyListStatus?,
|
@JsonProperty("my_list_status") val myListStatus: MyListStatus?,
|
||||||
@JsonProperty("num_episodes") val numEpisodes: Int?,
|
@JsonProperty("num_episodes") val numEpisodes: Int?,
|
||||||
@JsonProperty("start_season") val startSeason: StartSeason?,
|
@JsonProperty("start_season") val startSeason: StartSeason?,
|
||||||
|
@ -117,12 +117,12 @@ class MALApi(index: Int) : AccountManager(index), SyncAPI {
|
||||||
@JsonProperty("source") val source: String?,
|
@JsonProperty("source") val source: String?,
|
||||||
@JsonProperty("average_episode_duration") val averageEpisodeDuration: Int?,
|
@JsonProperty("average_episode_duration") val averageEpisodeDuration: Int?,
|
||||||
@JsonProperty("rating") val rating: String?,
|
@JsonProperty("rating") val rating: String?,
|
||||||
@JsonProperty("pictures") val pictures: ArrayList<MainPicture>,
|
@JsonProperty("pictures") val pictures: ArrayList<MainPicture>?,
|
||||||
@JsonProperty("background") val background: String?,
|
@JsonProperty("background") val background: String?,
|
||||||
@JsonProperty("related_anime") val relatedAnime: ArrayList<RelatedAnime>,
|
@JsonProperty("related_anime") val relatedAnime: ArrayList<RelatedAnime>?,
|
||||||
@JsonProperty("related_manga") val relatedManga: ArrayList<String>,
|
@JsonProperty("related_manga") val relatedManga: ArrayList<String>?,
|
||||||
@JsonProperty("recommendations") val recommendations: ArrayList<Recommendations>,
|
@JsonProperty("recommendations") val recommendations: ArrayList<Recommendations>?,
|
||||||
@JsonProperty("studios") val studios: ArrayList<Studios>,
|
@JsonProperty("studios") val studios: ArrayList<Studios>?,
|
||||||
@JsonProperty("statistics") val statistics: Statistics?,
|
@JsonProperty("statistics") val statistics: Statistics?,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -136,7 +136,6 @@ class MALApi(index: Int) : AccountManager(index), SyncAPI {
|
||||||
@JsonProperty("name") val name: String? = null
|
@JsonProperty("name") val name: String? = null
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
data class MyListStatus(
|
data class MyListStatus(
|
||||||
@JsonProperty("status") val status: String? = null,
|
@JsonProperty("status") val status: String? = null,
|
||||||
@JsonProperty("score") val score: Int? = null,
|
@JsonProperty("score") val score: Int? = null,
|
||||||
|
@ -172,7 +171,7 @@ class MALApi(index: Int) : AccountManager(index), SyncAPI {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun toSearchResult(node : Node?) : SyncAPI.SyncSearchResult? {
|
private fun toSearchResult(node: Node?): SyncAPI.SyncSearchResult? {
|
||||||
return SyncAPI.SyncSearchResult(
|
return SyncAPI.SyncSearchResult(
|
||||||
name = node?.title ?: return null,
|
name = node?.title ?: return null,
|
||||||
syncApiName = this.name,
|
syncApiName = this.name,
|
||||||
|
@ -205,19 +204,19 @@ class MALApi(index: Int) : AccountManager(index), SyncAPI {
|
||||||
else -> null
|
else -> null
|
||||||
},
|
},
|
||||||
nextAiring = null,
|
nextAiring = null,
|
||||||
studio = malAnime.studios.mapNotNull { it.name },
|
studio = malAnime.studios?.mapNotNull { it.name },
|
||||||
genres = malAnime.genres.map { it.name },
|
genres = malAnime.genres?.map { it.name },
|
||||||
trailerUrl = null,
|
trailerUrl = null,
|
||||||
startDate = parseDate(malAnime.startDate),
|
startDate = parseDate(malAnime.startDate),
|
||||||
endDate = parseDate(malAnime.endDate),
|
endDate = parseDate(malAnime.endDate),
|
||||||
recommendations = malAnime.recommendations.mapNotNull { rec ->
|
recommendations = malAnime.recommendations?.mapNotNull { rec ->
|
||||||
val node = rec.node ?: return@mapNotNull null
|
val node = rec.node ?: return@mapNotNull null
|
||||||
toSearchResult(node)
|
toSearchResult(node)
|
||||||
},
|
},
|
||||||
nextSeason = malAnime.relatedAnime.firstOrNull {
|
nextSeason = malAnime.relatedAnime?.firstOrNull {
|
||||||
return@firstOrNull it.relationType == "sequel"
|
return@firstOrNull it.relationType == "sequel"
|
||||||
}?.let { toSearchResult(it.node) },
|
}?.let { toSearchResult(it.node) },
|
||||||
prevSeason = malAnime.relatedAnime.firstOrNull {
|
prevSeason = malAnime.relatedAnime?.firstOrNull {
|
||||||
return@firstOrNull it.relationType == "prequel"
|
return@firstOrNull it.relationType == "prequel"
|
||||||
}?.let { toSearchResult(it.node) },
|
}?.let { toSearchResult(it.node) },
|
||||||
actors = null,
|
actors = null,
|
||||||
|
@ -229,7 +228,8 @@ class MALApi(index: Int) : AccountManager(index), SyncAPI {
|
||||||
override suspend fun getStatus(id: String): SyncAPI.SyncStatus? {
|
override suspend fun getStatus(id: String): SyncAPI.SyncStatus? {
|
||||||
val internalId = id.toIntOrNull() ?: return null
|
val internalId = id.toIntOrNull() ?: return null
|
||||||
|
|
||||||
val data = getDataAboutMalId(internalId)?.my_list_status //?: throw ErrorLoadingException("No my_list_status")
|
val data =
|
||||||
|
getDataAboutMalId(internalId)?.my_list_status //?: throw ErrorLoadingException("No my_list_status")
|
||||||
return SyncAPI.SyncStatus(
|
return SyncAPI.SyncStatus(
|
||||||
score = data?.score,
|
score = data?.score,
|
||||||
status = malStatusAsString.indexOf(data?.status),
|
status = malStatusAsString.indexOf(data?.status),
|
||||||
|
|
|
@ -11,15 +11,15 @@ import android.content.res.ColorStateList
|
||||||
import android.content.res.Configuration
|
import android.content.res.Configuration
|
||||||
import android.graphics.Rect
|
import android.graphics.Rect
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
|
import android.os.Build
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
import android.text.Editable
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.View.GONE
|
import android.view.View.GONE
|
||||||
import android.view.View.VISIBLE
|
import android.view.View.VISIBLE
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import android.widget.ImageView
|
import android.widget.*
|
||||||
import android.widget.TextView
|
|
||||||
import android.widget.Toast
|
|
||||||
import androidx.annotation.StringRes
|
import androidx.annotation.StringRes
|
||||||
import androidx.appcompat.app.AlertDialog
|
import androidx.appcompat.app.AlertDialog
|
||||||
import androidx.core.content.FileProvider
|
import androidx.core.content.FileProvider
|
||||||
|
@ -27,6 +27,7 @@ import androidx.core.graphics.drawable.toBitmap
|
||||||
import androidx.core.view.isGone
|
import androidx.core.view.isGone
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
import androidx.core.widget.NestedScrollView
|
import androidx.core.widget.NestedScrollView
|
||||||
|
import androidx.core.widget.doOnTextChanged
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.lifecycle.ViewModelProvider
|
import androidx.lifecycle.ViewModelProvider
|
||||||
import androidx.preference.PreferenceManager
|
import androidx.preference.PreferenceManager
|
||||||
|
@ -1149,7 +1150,79 @@ class ResultFragment : Fragment(), PanelsChildGestureRegionObserver.GestureRegio
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
observe(syncModel.status) { status ->
|
context?.let { ctx ->
|
||||||
|
val arrayAdapter = ArrayAdapter<String>(ctx, R.layout.sort_bottom_single_choice)
|
||||||
|
/*
|
||||||
|
-1 -> None
|
||||||
|
0 -> Watching
|
||||||
|
1 -> Completed
|
||||||
|
2 -> OnHold
|
||||||
|
3 -> Dropped
|
||||||
|
4 -> PlanToWatch
|
||||||
|
5 -> ReWatching
|
||||||
|
*/
|
||||||
|
val items = listOf(
|
||||||
|
R.string.none,
|
||||||
|
R.string.type_watching,
|
||||||
|
R.string.type_completed,
|
||||||
|
R.string.type_on_hold,
|
||||||
|
R.string.type_dropped,
|
||||||
|
R.string.type_plan_to_watch,
|
||||||
|
R.string.type_re_watching
|
||||||
|
).map { ctx.getString(it) }
|
||||||
|
arrayAdapter.addAll(items)
|
||||||
|
result_sync_check?.choiceMode = AbsListView.CHOICE_MODE_SINGLE
|
||||||
|
result_sync_check?.adapter = arrayAdapter
|
||||||
|
UIHelper.setListViewHeightBasedOnItems(result_sync_check)
|
||||||
|
|
||||||
|
result_sync_check?.setOnItemClickListener { _, _, which, _ ->
|
||||||
|
syncModel.setStatus(which - 1)
|
||||||
|
}
|
||||||
|
|
||||||
|
result_sync_rating?.addOnChangeListener { _, value, _ ->
|
||||||
|
syncModel.setScore(value.toInt())
|
||||||
|
}
|
||||||
|
|
||||||
|
result_sync_add_episode?.setOnClickListener {
|
||||||
|
syncModel.setEpisodesDelta(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
result_sync_sub_episode?.setOnClickListener {
|
||||||
|
syncModel.setEpisodesDelta(-1)
|
||||||
|
}
|
||||||
|
|
||||||
|
result_sync_current_episodes?.doOnTextChanged { text, start, before, count ->
|
||||||
|
if(count == before) return@doOnTextChanged
|
||||||
|
text?.toString()?.toIntOrNull()?.let { ep ->
|
||||||
|
syncModel.setEpisodes(ep)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
observe(syncModel.metadata) { meta ->
|
||||||
|
when (meta) {
|
||||||
|
is Resource.Success -> {
|
||||||
|
val d = meta.value
|
||||||
|
result_sync_episodes?.max = (d.totalEpisodes ?: 0)*1000
|
||||||
|
normalSafeApiCall {
|
||||||
|
val ctx = result_sync_max_episodes?.context
|
||||||
|
result_sync_max_episodes?.text =
|
||||||
|
d.totalEpisodes?.let {
|
||||||
|
ctx?.getString(R.string.sync_total_episodes_some)?.format(it)
|
||||||
|
} ?: run {
|
||||||
|
ctx?.getString(R.string.sync_total_episodes_none)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
is Resource.Loading -> {
|
||||||
|
result_sync_max_episodes?.text =
|
||||||
|
result_sync_max_episodes?.context?.getString(R.string.sync_total_episodes_none)
|
||||||
|
}
|
||||||
|
else -> {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
observe(syncModel.userData) { status ->
|
||||||
var closed = false
|
var closed = false
|
||||||
when (status) {
|
when (status) {
|
||||||
is Resource.Failure -> {
|
is Resource.Failure -> {
|
||||||
|
@ -1169,17 +1242,20 @@ class ResultFragment : Fragment(), PanelsChildGestureRegionObserver.GestureRegio
|
||||||
|
|
||||||
val d = status.value
|
val d = status.value
|
||||||
result_sync_rating?.value = d.score?.toFloat() ?: 0.0f
|
result_sync_rating?.value = d.score?.toFloat() ?: 0.0f
|
||||||
|
result_sync_check?.setItemChecked(d.status + 1, true)
|
||||||
/*when(d.status) {
|
val watchedEpisodes = d.watchedEpisodes ?: 0
|
||||||
-1 -> None
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
||||||
0 -> Watching
|
result_sync_episodes?.setProgress(watchedEpisodes * 1000, true)
|
||||||
1 -> Completed
|
} else {
|
||||||
2 -> OnHold
|
result_sync_episodes?.progress = watchedEpisodes * 1000
|
||||||
3 -> Dropped
|
}
|
||||||
4 -> PlanToWatch
|
result_sync_current_episodes?.text =
|
||||||
5 -> ReWatching
|
Editable.Factory.getInstance()?.newEditable(watchedEpisodes.toString())
|
||||||
}*/
|
normalSafeApiCall { // format might fail
|
||||||
//d.status
|
context?.getString(R.string.sync_score_format)?.format(d.score ?: 0)?.let {
|
||||||
|
result_sync_score_text?.text = it
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
null -> {
|
null -> {
|
||||||
closed = false
|
closed = false
|
||||||
|
@ -1349,10 +1425,7 @@ class ResultFragment : Fragment(), PanelsChildGestureRegionObserver.GestureRegio
|
||||||
}
|
}
|
||||||
|
|
||||||
result_sync_set_score?.setOnClickListener {
|
result_sync_set_score?.setOnClickListener {
|
||||||
// TODO set score
|
syncModel.publishUserData()
|
||||||
//syncModel.setScore(SyncAPI.SyncStatus(
|
|
||||||
// status =
|
|
||||||
//))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
observe(viewModel.publicEpisodesCount) { count ->
|
observe(viewModel.publicEpisodesCount) { count ->
|
||||||
|
@ -1455,7 +1528,7 @@ class ResultFragment : Fragment(), PanelsChildGestureRegionObserver.GestureRegio
|
||||||
setAniListSync(d.anilistId?.toString())
|
setAniListSync(d.anilistId?.toString())
|
||||||
) {
|
) {
|
||||||
syncModel.updateMetadata()
|
syncModel.updateMetadata()
|
||||||
syncModel.updateStatus()
|
syncModel.updateUserData()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,7 @@ import com.lagradost.cloudstream3.syncproviders.OAuth2API.Companion.malApi
|
||||||
import com.lagradost.cloudstream3.syncproviders.SyncAPI
|
import com.lagradost.cloudstream3.syncproviders.SyncAPI
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
|
|
||||||
|
|
||||||
class SyncViewModel : ViewModel() {
|
class SyncViewModel : ViewModel() {
|
||||||
private val repos = SyncApis
|
private val repos = SyncApis
|
||||||
|
|
||||||
|
@ -19,10 +20,10 @@ class SyncViewModel : ViewModel() {
|
||||||
|
|
||||||
val metadata: LiveData<Resource<SyncAPI.SyncResult>> get() = _metaResponse
|
val metadata: LiveData<Resource<SyncAPI.SyncResult>> get() = _metaResponse
|
||||||
|
|
||||||
private val _statusResponse: MutableLiveData<Resource<SyncAPI.SyncStatus>?> =
|
private val _userDataResponse: MutableLiveData<Resource<SyncAPI.SyncStatus>?> =
|
||||||
MutableLiveData(null)
|
MutableLiveData(null)
|
||||||
|
|
||||||
val status: LiveData<Resource<SyncAPI.SyncStatus>?> get() = _statusResponse
|
val userData: LiveData<Resource<SyncAPI.SyncStatus>?> get() = _userDataResponse
|
||||||
|
|
||||||
// prefix, id
|
// prefix, id
|
||||||
private val syncIds = hashMapOf<String, String>()
|
private val syncIds = hashMapOf<String, String>()
|
||||||
|
@ -35,29 +36,75 @@ class SyncViewModel : ViewModel() {
|
||||||
syncIds[aniListApi.idPrefix] = id
|
syncIds[aniListApi.idPrefix] = id
|
||||||
}
|
}
|
||||||
|
|
||||||
fun setScore(status: SyncAPI.SyncStatus) = viewModelScope.launch {
|
fun setEpisodesDelta(delta: Int) {
|
||||||
for ((prefix, id) in syncIds) {
|
val user = userData.value
|
||||||
repos.firstOrNull { it.idPrefix == prefix }?.score(id, status)
|
if (user is Resource.Success) {
|
||||||
|
user.value.watchedEpisodes?.plus(
|
||||||
|
delta
|
||||||
|
)?.let { episode ->
|
||||||
|
setEpisodes(episode)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
updateStatus()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun updateStatus() = viewModelScope.launch {
|
fun setEpisodes(episodes: Int) {
|
||||||
_statusResponse.postValue(Resource.Loading())
|
if (episodes < 0) return
|
||||||
|
val meta = metadata.value
|
||||||
|
if (meta is Resource.Success) {
|
||||||
|
meta.value.totalEpisodes?.let { max ->
|
||||||
|
if (episodes > max) {
|
||||||
|
setEpisodes(max)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
val user = userData.value
|
||||||
|
if (user is Resource.Success) {
|
||||||
|
_userDataResponse.postValue(Resource.Success(user.value.copy(watchedEpisodes = episodes)))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun setScore(score: Int) {
|
||||||
|
val user = userData.value
|
||||||
|
if (user is Resource.Success) {
|
||||||
|
_userDataResponse.postValue(Resource.Success(user.value.copy(score = score)))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun setStatus(which: Int) {
|
||||||
|
if (which < -1 || which > 5) return // validate input
|
||||||
|
val user = userData.value
|
||||||
|
if (user is Resource.Success) {
|
||||||
|
_userDataResponse.postValue(Resource.Success(user.value.copy(status = which)))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun publishUserData() = viewModelScope.launch {
|
||||||
|
val user = userData.value
|
||||||
|
if (user is Resource.Success) {
|
||||||
|
for ((prefix, id) in syncIds) {
|
||||||
|
repos.firstOrNull { it.idPrefix == prefix }?.score(id, user.value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
updateUserData()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun updateUserData() = viewModelScope.launch {
|
||||||
|
_userDataResponse.postValue(Resource.Loading())
|
||||||
var lastError: Resource<SyncAPI.SyncStatus> = Resource.Failure(false, null, null, "No data")
|
var lastError: Resource<SyncAPI.SyncStatus> = Resource.Failure(false, null, null, "No data")
|
||||||
for ((prefix, id) in syncIds) {
|
for ((prefix, id) in syncIds) {
|
||||||
repos.firstOrNull { it.idPrefix == prefix }?.let {
|
repos.firstOrNull { it.idPrefix == prefix }?.let {
|
||||||
val result = it.getStatus(id)
|
val result = it.getStatus(id)
|
||||||
if (result is Resource.Success) {
|
if (result is Resource.Success) {
|
||||||
_statusResponse.postValue(result)
|
_userDataResponse.postValue(result)
|
||||||
return@launch
|
return@launch
|
||||||
} else if (result is Resource.Failure) {
|
} else if (result is Resource.Failure) {
|
||||||
lastError = result
|
lastError = result
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_statusResponse.postValue(lastError)
|
_userDataResponse.postValue(lastError)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun updateMetadata() = viewModelScope.launch {
|
fun updateMetadata() = viewModelScope.launch {
|
||||||
|
@ -75,5 +122,6 @@ class SyncViewModel : ViewModel() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_metaResponse.postValue(lastError)
|
_metaResponse.postValue(lastError)
|
||||||
|
setEpisodesDelta(0)
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -88,7 +88,7 @@ class SettingsFragment : PreferenceFragmentCompat() {
|
||||||
return uiModeManager?.currentModeType == Configuration.UI_MODE_TYPE_TELEVISION
|
return uiModeManager?.currentModeType == Configuration.UI_MODE_TYPE_TELEVISION
|
||||||
}
|
}
|
||||||
|
|
||||||
const val accountEnabled = false
|
const val accountEnabled = true
|
||||||
}
|
}
|
||||||
|
|
||||||
private var beneneCount = 0
|
private var beneneCount = 0
|
||||||
|
|
|
@ -12,12 +12,11 @@ import android.content.res.Resources
|
||||||
import android.graphics.Color
|
import android.graphics.Color
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.Gravity
|
import android.view.*
|
||||||
import android.view.MenuItem
|
|
||||||
import android.view.View
|
|
||||||
import android.view.WindowManager
|
|
||||||
import android.view.inputmethod.InputMethodManager
|
import android.view.inputmethod.InputMethodManager
|
||||||
import android.widget.ImageView
|
import android.widget.ImageView
|
||||||
|
import android.widget.ListAdapter
|
||||||
|
import android.widget.ListView
|
||||||
import androidx.annotation.AttrRes
|
import androidx.annotation.AttrRes
|
||||||
import androidx.annotation.ColorInt
|
import androidx.annotation.ColorInt
|
||||||
import androidx.annotation.IdRes
|
import androidx.annotation.IdRes
|
||||||
|
@ -71,6 +70,36 @@ object UIHelper {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets ListView height dynamically based on the height of the items.
|
||||||
|
*
|
||||||
|
* @param listView to be resized
|
||||||
|
* @return true if the listView is successfully resized, false otherwise
|
||||||
|
*/
|
||||||
|
fun setListViewHeightBasedOnItems(listView: ListView?) {
|
||||||
|
val listAdapter: ListAdapter = listView?.adapter ?: return
|
||||||
|
val numberOfItems: Int = listAdapter.count
|
||||||
|
|
||||||
|
// Get total height of all items.
|
||||||
|
var totalItemsHeight = 0
|
||||||
|
for (itemPos in 0 until numberOfItems) {
|
||||||
|
val item: View = listAdapter.getView(itemPos, null, listView)
|
||||||
|
item.measure(0, 0)
|
||||||
|
totalItemsHeight += item.measuredHeight
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get total height of all item dividers.
|
||||||
|
val totalDividersHeight: Int = listView.dividerHeight *
|
||||||
|
(numberOfItems - 1)
|
||||||
|
|
||||||
|
// Set list height.
|
||||||
|
val params: ViewGroup.LayoutParams = listView.layoutParams
|
||||||
|
params.height = totalItemsHeight + totalDividersHeight
|
||||||
|
listView.layoutParams = params
|
||||||
|
listView.requestLayout()
|
||||||
|
}
|
||||||
|
|
||||||
fun Activity?.getSpanCount(): Int? {
|
fun Activity?.getSpanCount(): Int? {
|
||||||
val compactView = this?.getGridIsCompact() ?: return null
|
val compactView = this?.getGridIsCompact() ?: return null
|
||||||
val spanCountLandscape = if (compactView) 2 else 6
|
val spanCountLandscape = if (compactView) 2 else 6
|
||||||
|
@ -120,7 +149,7 @@ object UIHelper {
|
||||||
return color
|
return color
|
||||||
}
|
}
|
||||||
|
|
||||||
fun ImageView?.setImage(url: String?) : Boolean {
|
fun ImageView?.setImage(url: String?): Boolean {
|
||||||
if (this == null || url.isNullOrBlank()) return false
|
if (this == null || url.isNullOrBlank()) return false
|
||||||
return try {
|
return try {
|
||||||
GlideApp.with(this.context)
|
GlideApp.with(this.context)
|
||||||
|
@ -316,7 +345,7 @@ object UIHelper {
|
||||||
fun Activity.showSystemUI() {
|
fun Activity.showSystemUI() {
|
||||||
window.decorView.systemUiVisibility =
|
window.decorView.systemUiVisibility =
|
||||||
|
|
||||||
(View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN)
|
(View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN)
|
||||||
|
|
||||||
changeStatusBarState(isEmulatorSettings())
|
changeStatusBarState(isEmulatorSettings())
|
||||||
|
|
||||||
|
|
|
@ -6,363 +6,265 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent">
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
<LinearLayout
|
<ScrollView
|
||||||
|
android:id="@+id/result_sync_holder"
|
||||||
|
tools:visibility="visible"
|
||||||
android:visibility="gone"
|
android:visibility="gone"
|
||||||
android:padding="16dp"
|
android:padding="16dp"
|
||||||
android:orientation="vertical"
|
|
||||||
android:id="@+id/result_sync_holder"
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent">
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:textStyle="bold"
|
|
||||||
android:textSize="16sp"
|
|
||||||
android:layout_marginBottom="10dp"
|
|
||||||
android:text="MyAnimeList, AniList"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content" />
|
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:visibility="visible"
|
android:orientation="vertical"
|
||||||
android:orientation="horizontal"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content">
|
|
||||||
|
|
||||||
<ImageView
|
|
||||||
android:padding="10dp"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:background="?android:attr/selectableItemBackgroundBorderless"
|
|
||||||
android:src="@drawable/baseline_remove_24"
|
|
||||||
android:layout_gravity="end|center_vertical"
|
|
||||||
android:contentDescription="@string/result_share"
|
|
||||||
app:tint="?attr/textColor" />
|
|
||||||
|
|
||||||
<EditText
|
|
||||||
android:id="@+id/result_sync_current_episodes"
|
|
||||||
style="@style/AppEditStyle"
|
|
||||||
tools:hint="20"
|
|
||||||
android:textSize="20sp"
|
|
||||||
android:inputType="number"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
tools:ignore="LabelFor" />
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/result_sync_max_episodes"
|
|
||||||
android:layout_gravity="center_vertical"
|
|
||||||
android:paddingBottom="1dp"
|
|
||||||
android:textSize="20sp"
|
|
||||||
android:textColor="?attr/textColor"
|
|
||||||
tools:text="/30"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content" />
|
|
||||||
|
|
||||||
<ImageView
|
|
||||||
android:padding="10dp"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:background="?android:attr/selectableItemBackgroundBorderless"
|
|
||||||
android:src="@drawable/ic_baseline_add_24"
|
|
||||||
android:layout_gravity="end|center_vertical"
|
|
||||||
android:contentDescription="@string/result_share"
|
|
||||||
app:tint="?attr/textColor" />
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
<androidx.core.widget.ContentLoadingProgressBar
|
|
||||||
android:id="@+id/result_sync_episodes"
|
|
||||||
android:padding="10dp"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="20dp"
|
|
||||||
android:progress="50"
|
|
||||||
android:indeterminate="false"
|
|
||||||
android:progressBackgroundTint="?attr/colorPrimary"
|
|
||||||
style="?android:attr/progressBarStyleHorizontal"
|
|
||||||
android:max="100"
|
|
||||||
android:layout_gravity="end|center_vertical"
|
|
||||||
tools:visibility="visible" />
|
|
||||||
|
|
||||||
<!--
|
|
||||||
<LinearLayout
|
|
||||||
android:layout_marginBottom="10dp"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content">
|
|
||||||
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:layout_gravity="center_vertical"
|
|
||||||
android:padding="10dp"
|
|
||||||
android:textSize="17sp"
|
|
||||||
android:textColor="?attr/textColor"
|
|
||||||
android:text="Status:"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content" />
|
|
||||||
|
|
||||||
<com.google.android.material.button.MaterialButton
|
|
||||||
android:layout_height="30dp"
|
|
||||||
android:text="Watching"
|
|
||||||
android:minWidth="0dp"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_gravity="center_vertical"
|
|
||||||
android:layout_marginStart="0dp"
|
|
||||||
style="@style/BlackButton" />
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
<GridLayout
|
|
||||||
android:orientation="horizontal"
|
|
||||||
android:columnCount="2"
|
|
||||||
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content">
|
|
||||||
|
|
||||||
<com.google.android.material.button.MaterialButton
|
|
||||||
android:id="@+id/sync_completed"
|
|
||||||
android:nextFocusRight="@id/sync_on_hold"
|
|
||||||
android:nextFocusDown="@id/sync_plan_to_watch"
|
|
||||||
|
|
||||||
android:layout_row="0"
|
|
||||||
android:layout_column="0"
|
|
||||||
android:text="@string/type_completed"
|
|
||||||
style="@style/SyncButton" />
|
|
||||||
|
|
||||||
<com.google.android.material.button.MaterialButton
|
|
||||||
android:id="@+id/sync_on_hold"
|
|
||||||
android:nextFocusDown="@id/sync_watching"
|
|
||||||
android:nextFocusLeft="@id/sync_completed"
|
|
||||||
|
|
||||||
android:layout_row="0"
|
|
||||||
android:layout_column="1"
|
|
||||||
style="@style/SyncButton"
|
|
||||||
android:text="@string/type_on_hold" />
|
|
||||||
|
|
||||||
<com.google.android.material.button.MaterialButton
|
|
||||||
android:id="@+id/sync_plan_to_watch"
|
|
||||||
android:nextFocusRight="@id/sync_plan_to_watch"
|
|
||||||
android:nextFocusDown="@id/sync_dropped"
|
|
||||||
android:nextFocusUp="@id/sync_completed"
|
|
||||||
|
|
||||||
android:layout_row="1"
|
|
||||||
android:layout_column="0"
|
|
||||||
android:text="@string/type_plan_to_watch"
|
|
||||||
style="@style/SyncButton"
|
|
||||||
/>
|
|
||||||
|
|
||||||
<com.google.android.material.button.MaterialButton
|
|
||||||
android:id="@+id/sync_watching"
|
|
||||||
android:nextFocusLeft="@id/sync_plan_to_watch"
|
|
||||||
android:nextFocusDown="@id/sync_dropped"
|
|
||||||
android:nextFocusUp="@id/sync_on_hold"
|
|
||||||
|
|
||||||
android:layout_row="1"
|
|
||||||
android:layout_column="1"
|
|
||||||
|
|
||||||
style="@style/SyncButton"
|
|
||||||
android:text="@string/type_watching" />
|
|
||||||
|
|
||||||
</GridLayout>
|
|
||||||
|
|
||||||
<com.google.android.material.button.MaterialButton
|
|
||||||
android:id="@+id/sync_dropped"
|
|
||||||
android:nextFocusUp="@id/sync_plan_to_watch"
|
|
||||||
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
style="@style/SyncButton"
|
|
||||||
|
|
||||||
android:text="@string/type_dropped" />-->
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:orientation="horizontal"
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content">
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:layout_gravity="center_vertical"
|
android:visibility="gone"
|
||||||
android:padding="10dp"
|
android:textStyle="bold"
|
||||||
android:textSize="17sp"
|
android:textSize="16sp"
|
||||||
android:textColor="?attr/textColor"
|
android:layout_marginBottom="10dp"
|
||||||
android:text="Rated:"
|
android:text="MyAnimeList, AniList"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content" />
|
android:layout_height="wrap_content" />
|
||||||
<!--
|
|
||||||
|
<LinearLayout
|
||||||
|
android:visibility="visible"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/result_sync_sub_episode"
|
||||||
|
android:padding="10dp"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="?android:attr/selectableItemBackgroundBorderless"
|
||||||
|
android:src="@drawable/baseline_remove_24"
|
||||||
|
android:layout_gravity="end|center_vertical"
|
||||||
|
app:tint="?attr/textColor" />
|
||||||
|
|
||||||
|
<EditText
|
||||||
|
android:id="@+id/result_sync_current_episodes"
|
||||||
|
style="@style/AppEditStyle"
|
||||||
|
tools:hint="20"
|
||||||
|
android:textSize="20sp"
|
||||||
|
android:inputType="number"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
tools:ignore="LabelFor" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/result_sync_max_episodes"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:paddingBottom="1dp"
|
||||||
|
android:textSize="20sp"
|
||||||
|
android:textColor="?attr/textColor"
|
||||||
|
tools:text="30"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content" />
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/result_sync_add_episode"
|
||||||
|
android:padding="10dp"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="?android:attr/selectableItemBackgroundBorderless"
|
||||||
|
android:src="@drawable/ic_baseline_add_24"
|
||||||
|
android:layout_gravity="end|center_vertical"
|
||||||
|
app:tint="?attr/textColor" />
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<androidx.core.widget.ContentLoadingProgressBar
|
||||||
|
android:id="@+id/result_sync_episodes"
|
||||||
|
android:padding="10dp"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="20dp"
|
||||||
|
android:progress="0"
|
||||||
|
android:indeterminate="false"
|
||||||
|
android:progressBackgroundTint="?attr/colorPrimary"
|
||||||
|
style="?android:attr/progressBarStyleHorizontal"
|
||||||
|
android:max="100"
|
||||||
|
android:layout_gravity="end|center_vertical"
|
||||||
|
tools:visibility="visible" />
|
||||||
|
|
||||||
|
<!--
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_marginBottom="10dp"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:padding="10dp"
|
||||||
|
android:textSize="17sp"
|
||||||
|
android:textColor="?attr/textColor"
|
||||||
|
android:text="Status:"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content" />
|
||||||
|
|
||||||
|
<com.google.android.material.button.MaterialButton
|
||||||
|
android:layout_height="30dp"
|
||||||
|
android:text="Watching"
|
||||||
|
android:minWidth="0dp"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:layout_marginStart="0dp"
|
||||||
|
style="@style/BlackButton" />
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<GridLayout
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:columnCount="2"
|
||||||
|
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
|
<com.google.android.material.button.MaterialButton
|
||||||
|
android:id="@+id/sync_completed"
|
||||||
|
android:nextFocusRight="@id/sync_on_hold"
|
||||||
|
android:nextFocusDown="@id/sync_plan_to_watch"
|
||||||
|
|
||||||
|
android:layout_row="0"
|
||||||
|
android:layout_column="0"
|
||||||
|
android:text="@string/type_completed"
|
||||||
|
style="@style/SyncButton" />
|
||||||
|
|
||||||
|
<com.google.android.material.button.MaterialButton
|
||||||
|
android:id="@+id/sync_on_hold"
|
||||||
|
android:nextFocusDown="@id/sync_watching"
|
||||||
|
android:nextFocusLeft="@id/sync_completed"
|
||||||
|
|
||||||
|
android:layout_row="0"
|
||||||
|
android:layout_column="1"
|
||||||
|
style="@style/SyncButton"
|
||||||
|
android:text="@string/type_on_hold" />
|
||||||
|
|
||||||
|
<com.google.android.material.button.MaterialButton
|
||||||
|
android:id="@+id/sync_plan_to_watch"
|
||||||
|
android:nextFocusRight="@id/sync_plan_to_watch"
|
||||||
|
android:nextFocusDown="@id/sync_dropped"
|
||||||
|
android:nextFocusUp="@id/sync_completed"
|
||||||
|
|
||||||
|
android:layout_row="1"
|
||||||
|
android:layout_column="0"
|
||||||
|
android:text="@string/type_plan_to_watch"
|
||||||
|
style="@style/SyncButton"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<com.google.android.material.button.MaterialButton
|
||||||
|
android:id="@+id/sync_watching"
|
||||||
|
android:nextFocusLeft="@id/sync_plan_to_watch"
|
||||||
|
android:nextFocusDown="@id/sync_dropped"
|
||||||
|
android:nextFocusUp="@id/sync_on_hold"
|
||||||
|
|
||||||
|
android:layout_row="1"
|
||||||
|
android:layout_column="1"
|
||||||
|
|
||||||
|
style="@style/SyncButton"
|
||||||
|
android:text="@string/type_watching" />
|
||||||
|
|
||||||
|
</GridLayout>
|
||||||
|
|
||||||
<com.google.android.material.button.MaterialButton
|
<com.google.android.material.button.MaterialButton
|
||||||
android:layout_height="30dp"
|
android:id="@+id/sync_dropped"
|
||||||
android:text="7/10"
|
android:nextFocusUp="@id/sync_plan_to_watch"
|
||||||
android:minWidth="0dp"
|
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
style="@style/SyncButton"
|
||||||
|
|
||||||
|
android:text="@string/type_dropped" />-->
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:padding="10dp"
|
||||||
|
android:textSize="17sp"
|
||||||
|
android:textColor="?attr/textColor"
|
||||||
|
android:text="@string/sync_score"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content" />
|
||||||
|
|
||||||
|
<com.google.android.material.button.MaterialButton
|
||||||
|
android:id="@+id/result_sync_score_text"
|
||||||
|
|
||||||
|
android:layout_height="30dp"
|
||||||
|
android:text="7/10"
|
||||||
|
android:minWidth="0dp"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:layout_marginStart="0dp"
|
||||||
|
style="@style/BlackButton" />
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<com.google.android.material.slider.Slider
|
||||||
|
android:id="@+id/result_sync_rating"
|
||||||
|
android:valueFrom="0"
|
||||||
|
android:valueTo="10"
|
||||||
|
android:value="4"
|
||||||
|
android:stepSize="1"
|
||||||
|
app:tickVisible="false"
|
||||||
|
android:layout_marginStart="-5dp"
|
||||||
|
android:layout_marginEnd="-5dp"
|
||||||
|
app:thumbRadius="10dp"
|
||||||
|
app:labelStyle="@style/BlackLabel"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_gravity="center_vertical"
|
android:layout_height="wrap_content" />
|
||||||
android:layout_marginStart="0dp"
|
|
||||||
style="@style/BlackButton" />-->
|
<FrameLayout
|
||||||
|
android:visibility="gone"
|
||||||
|
android:paddingTop="12dp"
|
||||||
|
android:paddingBottom="12dp"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/home_parent_item_title"
|
||||||
|
style="@style/WatchHeaderText"
|
||||||
|
tools:text="Recommended" />
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
app:tint="?attr/textColor"
|
||||||
|
android:layout_marginEnd="5dp"
|
||||||
|
android:layout_gravity="end|center_vertical"
|
||||||
|
android:src="@drawable/ic_baseline_arrow_forward_24"
|
||||||
|
android:layout_width="30dp"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:contentDescription="@string/home_more_info" />
|
||||||
|
</FrameLayout>
|
||||||
|
|
||||||
|
<ListView
|
||||||
|
android:id="@+id/result_sync_check"
|
||||||
|
tools:listitem="@layout/sort_bottom_single_choice"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_rowWeight="1" />
|
||||||
|
|
||||||
|
<com.google.android.material.button.MaterialButton
|
||||||
|
android:visibility="gone"
|
||||||
|
android:layout_marginTop="10dp"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
style="@style/WhiteButton"
|
||||||
|
android:text="@string/type_watching" />
|
||||||
|
|
||||||
|
<com.google.android.material.button.MaterialButton
|
||||||
|
android:id="@+id/result_sync_set_score"
|
||||||
|
android:layout_marginTop="10dp"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
style="@style/BlackButton"
|
||||||
|
app:icon="@drawable/baseline_sync_24"
|
||||||
|
android:text="@string/upload_sync" />
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<com.google.android.material.slider.Slider
|
</ScrollView>
|
||||||
android:id="@+id/result_sync_rating"
|
|
||||||
android:valueFrom="0"
|
|
||||||
android:valueTo="10"
|
|
||||||
android:value="4"
|
|
||||||
android:stepSize="1"
|
|
||||||
app:tickVisible="false"
|
|
||||||
android:layout_marginStart="-5dp"
|
|
||||||
android:layout_marginEnd="-5dp"
|
|
||||||
app:thumbRadius="10dp"
|
|
||||||
app:labelStyle="@style/BlackLabel"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content" />
|
|
||||||
|
|
||||||
<FrameLayout
|
|
||||||
android:visibility="gone"
|
|
||||||
android:paddingTop="12dp"
|
|
||||||
android:paddingBottom="12dp"
|
|
||||||
android:orientation="horizontal"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content">
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/home_parent_item_title"
|
|
||||||
style="@style/WatchHeaderText"
|
|
||||||
tools:text="Recommended" />
|
|
||||||
|
|
||||||
<ImageView
|
|
||||||
app:tint="?attr/textColor"
|
|
||||||
android:layout_marginEnd="5dp"
|
|
||||||
android:layout_gravity="end|center_vertical"
|
|
||||||
android:src="@drawable/ic_baseline_arrow_forward_24"
|
|
||||||
android:layout_width="30dp"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:contentDescription="@string/home_more_info" />
|
|
||||||
</FrameLayout>
|
|
||||||
|
|
||||||
<TextView 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"
|
|
||||||
style="@style/AppTextViewStyle"
|
|
||||||
android:id="@android:id/text1"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:minHeight="?android:attr/listPreferredItemHeightSmall"
|
|
||||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
|
||||||
android:textColor="@color/text_selection_color"
|
|
||||||
android:textSize="16sp"
|
|
||||||
android:textStyle="bold"
|
|
||||||
android:gravity="center_vertical"
|
|
||||||
android:paddingStart="12dp"
|
|
||||||
android:paddingEnd="7dip"
|
|
||||||
android:text="@string/type_watching"
|
|
||||||
android:checkMark="?android:attr/listChoiceIndicatorSingle"
|
|
||||||
android:ellipsize="marquee"
|
|
||||||
android:foreground="?attr/selectableItemBackgroundBorderless"
|
|
||||||
tools:drawableTint="?attr/textColor"
|
|
||||||
android:drawablePadding="20dp"
|
|
||||||
app:drawableTint="@color/check_selection_color"
|
|
||||||
app:drawableStartCompat="@drawable/ic_baseline_check_24" />
|
|
||||||
<TextView 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"
|
|
||||||
style="@style/AppTextViewStyle"
|
|
||||||
android:id="@android:id/text1"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:minHeight="?android:attr/listPreferredItemHeightSmall"
|
|
||||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
|
||||||
android:textColor="@color/text_selection_color"
|
|
||||||
android:textSize="16sp"
|
|
||||||
android:textStyle="bold"
|
|
||||||
android:gravity="center_vertical"
|
|
||||||
android:paddingStart="12dp"
|
|
||||||
android:paddingEnd="7dip"
|
|
||||||
android:text="@string/type_on_hold"
|
|
||||||
android:checkMark="?android:attr/listChoiceIndicatorSingle"
|
|
||||||
android:ellipsize="marquee"
|
|
||||||
android:foreground="?attr/selectableItemBackgroundBorderless"
|
|
||||||
tools:drawableTint="?attr/textColor"
|
|
||||||
android:drawablePadding="20dp"
|
|
||||||
app:drawableTint="@color/check_selection_color"
|
|
||||||
app:drawableStartCompat="@drawable/ic_baseline_check_24" />
|
|
||||||
<TextView 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"
|
|
||||||
style="@style/AppTextViewStyle"
|
|
||||||
android:id="@android:id/text1"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:minHeight="?android:attr/listPreferredItemHeightSmall"
|
|
||||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
|
||||||
android:textColor="@color/text_selection_color"
|
|
||||||
android:textSize="16sp"
|
|
||||||
android:textStyle="bold"
|
|
||||||
android:gravity="center_vertical"
|
|
||||||
android:paddingStart="12dp"
|
|
||||||
android:paddingEnd="7dip"
|
|
||||||
android:text="@string/type_completed"
|
|
||||||
android:checkMark="?android:attr/listChoiceIndicatorSingle"
|
|
||||||
android:ellipsize="marquee"
|
|
||||||
android:foreground="?attr/selectableItemBackgroundBorderless"
|
|
||||||
tools:drawableTint="?attr/textColor"
|
|
||||||
android:drawablePadding="20dp"
|
|
||||||
app:drawableTint="@color/check_selection_color"
|
|
||||||
app:drawableStartCompat="@drawable/ic_baseline_check_24" />
|
|
||||||
<TextView 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"
|
|
||||||
style="@style/AppTextViewStyle"
|
|
||||||
android:id="@android:id/text1"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:minHeight="?android:attr/listPreferredItemHeightSmall"
|
|
||||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
|
||||||
android:textColor="@color/text_selection_color"
|
|
||||||
android:textSize="16sp"
|
|
||||||
android:textStyle="bold"
|
|
||||||
android:gravity="center_vertical"
|
|
||||||
android:paddingStart="12dp"
|
|
||||||
android:paddingEnd="7dip"
|
|
||||||
android:text="@string/type_plan_to_watch"
|
|
||||||
android:checkMark="?android:attr/listChoiceIndicatorSingle"
|
|
||||||
android:ellipsize="marquee"
|
|
||||||
android:foreground="?attr/selectableItemBackgroundBorderless"
|
|
||||||
tools:drawableTint="?attr/textColor"
|
|
||||||
android:drawablePadding="20dp"
|
|
||||||
app:drawableTint="@color/check_selection_color"
|
|
||||||
app:drawableStartCompat="@drawable/ic_baseline_check_24" />
|
|
||||||
<TextView 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"
|
|
||||||
style="@style/AppTextViewStyle"
|
|
||||||
android:id="@android:id/text1"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:minHeight="?android:attr/listPreferredItemHeightSmall"
|
|
||||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
|
||||||
android:textColor="@color/text_selection_color"
|
|
||||||
android:textSize="16sp"
|
|
||||||
android:textStyle="bold"
|
|
||||||
android:gravity="center_vertical"
|
|
||||||
android:paddingStart="12dp"
|
|
||||||
android:paddingEnd="7dip"
|
|
||||||
android:text="@string/type_dropped"
|
|
||||||
android:checkMark="?android:attr/listChoiceIndicatorSingle"
|
|
||||||
android:ellipsize="marquee"
|
|
||||||
android:foreground="?attr/selectableItemBackgroundBorderless"
|
|
||||||
tools:drawableTint="?attr/textColor"
|
|
||||||
android:drawablePadding="20dp"
|
|
||||||
app:drawableTint="@color/check_selection_color"
|
|
||||||
app:drawableStartCompat="@drawable/ic_baseline_check_24" />
|
|
||||||
|
|
||||||
<com.google.android.material.button.MaterialButton
|
|
||||||
android:visibility="gone"
|
|
||||||
android:layout_marginTop="10dp"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
style="@style/WhiteButton"
|
|
||||||
android:text="@string/type_watching" />
|
|
||||||
<com.google.android.material.button.MaterialButton
|
|
||||||
android:id="@+id/result_sync_set_score"
|
|
||||||
android:layout_marginTop="10dp"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
style="@style/BlackButton"
|
|
||||||
app:icon="@drawable/baseline_sync_24"
|
|
||||||
android:text="@string/upload_sync" />
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
<com.facebook.shimmer.ShimmerFrameLayout
|
<com.facebook.shimmer.ShimmerFrameLayout
|
||||||
|
tools:visibility="gone"
|
||||||
android:id="@+id/result_sync_loading_shimmer"
|
android:id="@+id/result_sync_loading_shimmer"
|
||||||
app:shimmer_base_alpha="0.2"
|
app:shimmer_base_alpha="0.2"
|
||||||
app:shimmer_highlight_alpha="0.3"
|
app:shimmer_highlight_alpha="0.3"
|
||||||
|
@ -378,32 +280,45 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="vertical">
|
android:orientation="vertical">
|
||||||
|
|
||||||
<Space
|
<Space
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="30dp"/>
|
android:layout_height="30dp" />
|
||||||
|
|
||||||
<include layout="@layout/loading_line_short" />
|
<include layout="@layout/loading_line_short" />
|
||||||
|
|
||||||
<include layout="@layout/loading_line" />
|
<include layout="@layout/loading_line" />
|
||||||
|
|
||||||
<Space
|
<Space
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="30dp"/>
|
android:layout_height="30dp" />
|
||||||
|
|
||||||
<include layout="@layout/loading_line_short" />
|
<include layout="@layout/loading_line_short" />
|
||||||
|
|
||||||
<include layout="@layout/loading_line" />
|
<include layout="@layout/loading_line" />
|
||||||
|
|
||||||
<Space
|
<Space
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="30dp"/>
|
android:layout_height="30dp" />
|
||||||
|
|
||||||
<include layout="@layout/loading_line_short" />
|
<include layout="@layout/loading_line_short" />
|
||||||
|
|
||||||
<include layout="@layout/loading_line_short" />
|
<include layout="@layout/loading_line_short" />
|
||||||
|
|
||||||
<include layout="@layout/loading_line_short" />
|
<include layout="@layout/loading_line_short" />
|
||||||
|
|
||||||
<include layout="@layout/loading_line_short" />
|
<include layout="@layout/loading_line_short" />
|
||||||
|
|
||||||
<include layout="@layout/loading_line_short" />
|
<include layout="@layout/loading_line_short" />
|
||||||
|
|
||||||
<Space
|
<Space
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="30dp"/>
|
android:layout_height="30dp" />
|
||||||
|
|
||||||
<include layout="@layout/loading_line" />
|
<include layout="@layout/loading_line" />
|
||||||
|
|
||||||
<include layout="@layout/loading_line" />
|
<include layout="@layout/loading_line" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
</com.facebook.shimmer.ShimmerFrameLayout>
|
</com.facebook.shimmer.ShimmerFrameLayout>
|
||||||
|
|
||||||
</FrameLayout>
|
</FrameLayout>
|
|
@ -1,23 +1,7 @@
|
||||||
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
|
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
style="@style/AppTextViewStyle"
|
style="@style/CheckLabel"
|
||||||
android:id="@android:id/text1"
|
android:id="@android:id/text1"
|
||||||
android:layout_width="match_parent"
|
tools:text="hello"
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:minHeight="?android:attr/listPreferredItemHeightSmall"
|
|
||||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
|
||||||
android:textColor="@color/text_selection_color"
|
|
||||||
android:textSize="16sp"
|
|
||||||
android:textStyle="bold"
|
|
||||||
android:gravity="center_vertical"
|
|
||||||
android:paddingStart="12dp"
|
|
||||||
android:paddingEnd="7dip"
|
|
||||||
tools:text="TEST"
|
|
||||||
android:checkMark="?android:attr/listChoiceIndicatorSingle"
|
|
||||||
android:ellipsize="marquee"
|
|
||||||
android:foreground="?attr/selectableItemBackgroundBorderless"
|
|
||||||
tools:drawableTint="?attr/textColor"
|
|
||||||
android:drawablePadding="20dp"
|
|
||||||
app:drawableTint="?attr/textColor"
|
|
||||||
app:drawableStartCompat="@drawable/ic_baseline_add_24" />
|
app:drawableStartCompat="@drawable/ic_baseline_add_24" />
|
|
@ -14,25 +14,7 @@
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
|
<TextView 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"
|
||||||
style="@style/AppTextViewStyle"
|
style="@style/CheckLabel"
|
||||||
android:id="@android:id/text1"
|
tools:text="hello"
|
||||||
android:layout_width="match_parent"
|
android:id="@android:id/text1" />
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:minHeight="?android:attr/listPreferredItemHeightSmall"
|
|
||||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
|
||||||
android:textColor="@color/text_selection_color"
|
|
||||||
android:textSize="16sp"
|
|
||||||
android:textStyle="bold"
|
|
||||||
android:gravity="center_vertical"
|
|
||||||
android:paddingStart="12dp"
|
|
||||||
android:paddingEnd="7dip"
|
|
||||||
tools:text="TEST"
|
|
||||||
android:checkMark="?android:attr/listChoiceIndicatorSingle"
|
|
||||||
android:ellipsize="marquee"
|
|
||||||
android:foreground="?attr/selectableItemBackgroundBorderless"
|
|
||||||
tools:drawableTint="?attr/textColor"
|
|
||||||
android:drawablePadding="20dp"
|
|
||||||
app:drawableTint="@color/check_selection_color"
|
|
||||||
app:drawableStartCompat="@drawable/ic_baseline_check_24" />
|
|
||||||
|
|
|
@ -395,7 +395,10 @@
|
||||||
<string name="add_sync">Add tracking</string>
|
<string name="add_sync">Add tracking</string>
|
||||||
<string name="added_sync_format" formatted="true">Added %s</string>
|
<string name="added_sync_format" formatted="true">Added %s</string>
|
||||||
<string name="upload_sync">Sync</string>
|
<string name="upload_sync">Sync</string>
|
||||||
|
<string name="sync_score">Rated</string>
|
||||||
|
<string name="sync_score_format" formatted="true">%d / 10</string>
|
||||||
|
<string name="sync_total_episodes_none">/??</string>
|
||||||
|
<string name="sync_total_episodes_some" formatted="true">/%d</string>
|
||||||
<!-- ============ -->
|
<!-- ============ -->
|
||||||
<string name="none">None</string>
|
<string name="none">None</string>
|
||||||
<string name="normal">Normal</string>
|
<string name="normal">Normal</string>
|
||||||
|
|
|
@ -370,6 +370,24 @@
|
||||||
<item name="android:textColor">?attr/textColor</item>
|
<item name="android:textColor">?attr/textColor</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
<style name="CheckLabel" parent="@style/AppTextViewStyle">
|
||||||
|
<item name="android:layout_width">match_parent</item>
|
||||||
|
<item name="android:layout_height">wrap_content</item>
|
||||||
|
<item name="android:minHeight">?android:attr/listPreferredItemHeightSmall</item>
|
||||||
|
<item name="android:textColor">@color/text_selection_color</item>
|
||||||
|
<item name="android:textSize">16sp</item>
|
||||||
|
<item name="android:textStyle">bold</item>
|
||||||
|
<item name="android:gravity">center_vertical</item>
|
||||||
|
<item name="android:paddingStart">12dp</item>
|
||||||
|
<item name="android:paddingEnd">12dp</item>
|
||||||
|
<item name="android:checkMark">?android:attr/listChoiceIndicatorSingle</item>
|
||||||
|
<item name="android:ellipsize">marquee</item>
|
||||||
|
<item name="android:foreground">?attr/selectableItemBackgroundBorderless</item>
|
||||||
|
<item name="android:drawablePadding">20dp</item>
|
||||||
|
<item name="drawableTint">@color/check_selection_color</item>
|
||||||
|
<item name="drawableStartCompat">@drawable/ic_baseline_check_24</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
<style name="BlackButton" parent="NiceButton">
|
<style name="BlackButton" parent="NiceButton">
|
||||||
<item name="strokeColor">?attr/textColor</item>
|
<item name="strokeColor">?attr/textColor</item>
|
||||||
<item name="backgroundTint">?attr/iconGrayBackground</item>
|
<item name="backgroundTint">?attr/iconGrayBackground</item>
|
||||||
|
|
Loading…
Reference in a new issue