diff --git a/app/src/main/java/ani/dantotsu/media/CalendarActivity.kt b/app/src/main/java/ani/dantotsu/media/CalendarActivity.kt index 66cec7e4..230f3a4e 100644 --- a/app/src/main/java/ani/dantotsu/media/CalendarActivity.kt +++ b/app/src/main/java/ani/dantotsu/media/CalendarActivity.kt @@ -30,6 +30,7 @@ class CalendarActivity : AppCompatActivity() { private lateinit var binding: ActivityListBinding private val scope = lifecycleScope private var selectedTabIdx = 1 + private var showOnlyLibrary = false private val model: OtherDetailsViewModel by viewModels() override fun onCreate(savedInstanceState: Bundle?) { @@ -38,8 +39,6 @@ class CalendarActivity : AppCompatActivity() { ThemeManager(this).applyTheme() binding = ActivityListBinding.inflate(layoutInflater) - - val primaryColor = getThemeColor(com.google.android.material.R.attr.colorSurface) val primaryTextColor = getThemeColor(com.google.android.material.R.attr.colorPrimary) val secondaryTextColor = getThemeColor(com.google.android.material.R.attr.colorOutline) @@ -79,6 +78,17 @@ class CalendarActivity : AppCompatActivity() { override fun onTabReselected(tab: TabLayout.Tab?) {} }) + binding.listed.setOnClickListener { + showOnlyLibrary = !showOnlyLibrary + binding.listed.setImageResource( + if (showOnlyLibrary) R.drawable.ic_round_collections_bookmark_24 + else R.drawable.ic_round_library_books_24 + ) + scope.launch { + model.loadCalendar(showOnlyLibrary) + } + } + model.getCalendar().observe(this) { if (it != null) { binding.listProgressBar.visibility = View.GONE @@ -97,11 +107,10 @@ class CalendarActivity : AppCompatActivity() { live.observe(this) { if (it) { scope.launch { - withContext(Dispatchers.IO) { model.loadCalendar() } + withContext(Dispatchers.IO) { model.loadCalendar(showOnlyLibrary) } live.postValue(false) } } } - } } diff --git a/app/src/main/java/ani/dantotsu/media/OtherDetailsViewModel.kt b/app/src/main/java/ani/dantotsu/media/OtherDetailsViewModel.kt index 0be0fc22..a086a765 100644 --- a/app/src/main/java/ani/dantotsu/media/OtherDetailsViewModel.kt +++ b/app/src/main/java/ani/dantotsu/media/OtherDetailsViewModel.kt @@ -26,25 +26,50 @@ class OtherDetailsViewModel : ViewModel() { if (author.value == null) author.postValue(Anilist.query.getAuthorDetails(m)) } + private var cachedAllCalendarData: Map>? = null + private var cachedLibraryCalendarData: Map>? = null private val calendar: MutableLiveData>> = MutableLiveData(null) fun getCalendar(): LiveData>> = calendar - suspend fun loadCalendar() { - val curr = System.currentTimeMillis() / 1000 - val res = Anilist.query.recentlyUpdated(curr - 86400, curr + (86400 * 6)) - val df = DateFormat.getDateInstance(DateFormat.FULL) - val map = mutableMapOf>() - val idMap = mutableMapOf>() - res?.forEach { - val v = it.relation?.split(",")?.map { i -> i.toLong() }!! - val dateInfo = df.format(Date(v[1] * 1000)) - val list = map.getOrPut(dateInfo) { mutableListOf() } - val idList = idMap.getOrPut(dateInfo) { mutableListOf() } - it.relation = "Episode ${v[0]}" - if (!idList.contains(it.id)) { - idList.add(it.id) - list.add(it) + suspend fun loadCalendar(showOnlyLibrary: Boolean = false) { + if (cachedAllCalendarData == null || cachedLibraryCalendarData == null) { + val curr = System.currentTimeMillis() / 1000 + val res = Anilist.query.recentlyUpdated(curr - 86400, curr + (86400 * 6)) + val df = DateFormat.getDateInstance(DateFormat.FULL) + val allMap = mutableMapOf>() + val libraryMap = mutableMapOf>() + val idMap = mutableMapOf>() + + val userId = Anilist.userid ?: 0 + val userLibrary = Anilist.query.getMediaLists(true, userId) + val libraryMediaIds = userLibrary.flatMap { it.value }.map { it.id } + + res.forEach { + val v = it.relation?.split(",")?.map { i -> i.toLong() }!! + val dateInfo = df.format(Date(v[1] * 1000)) + val list = allMap.getOrPut(dateInfo) { mutableListOf() } + val libraryList = if (libraryMediaIds.contains(it.id)) { + libraryMap.getOrPut(dateInfo) { mutableListOf() } + } else { + null + } + val idList = idMap.getOrPut(dateInfo) { mutableListOf() } + it.relation = "Episode ${v[0]}" + if (!idList.contains(it.id)) { + idList.add(it.id) + list.add(it) + libraryList?.add(it) + } } + + cachedAllCalendarData = allMap + cachedLibraryCalendarData = libraryMap } - calendar.postValue(map) + + val cacheToUse: Map> = if (showOnlyLibrary) { + cachedLibraryCalendarData ?: emptyMap() + } else { + cachedAllCalendarData ?: emptyMap() + } + calendar.postValue(cacheToUse) } } \ No newline at end of file diff --git a/app/src/main/java/ani/dantotsu/media/user/ListActivity.kt b/app/src/main/java/ani/dantotsu/media/user/ListActivity.kt index 994a0c78..08109594 100644 --- a/app/src/main/java/ani/dantotsu/media/user/ListActivity.kt +++ b/app/src/main/java/ani/dantotsu/media/user/ListActivity.kt @@ -47,6 +47,7 @@ class ListActivity : AppCompatActivity() { window.statusBarColor = primaryColor window.navigationBarColor = primaryColor + binding.listed.visibility = View.GONE binding.listTabLayout.setBackgroundColor(primaryColor) binding.listAppBar.setBackgroundColor(primaryColor) binding.listTitle.setTextColor(primaryTextColor) diff --git a/app/src/main/res/drawable/ic_round_library_books_24.xml b/app/src/main/res/drawable/ic_round_library_books_24.xml new file mode 100644 index 00000000..ee9f6511 --- /dev/null +++ b/app/src/main/res/drawable/ic_round_library_books_24.xml @@ -0,0 +1,11 @@ + + + + diff --git a/app/src/main/res/layout/activity_list.xml b/app/src/main/res/layout/activity_list.xml index 63aa5d81..d70668fc 100644 --- a/app/src/main/res/layout/activity_list.xml +++ b/app/src/main/res/layout/activity_list.xml @@ -55,6 +55,15 @@ app:srcCompat="@drawable/ic_round_search_24" app:tint="?attr/colorOnBackground" /> + + Installed Manga Color Picker Random Selection + Listed in Library Incognito Mode EXAMPLE Configure