fix offline crash
This commit is contained in:
parent
300f2c2fb0
commit
d80b250650
3 changed files with 36 additions and 65 deletions
|
@ -21,10 +21,7 @@ import android.widget.TextView
|
||||||
import androidx.annotation.OptIn
|
import androidx.annotation.OptIn
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.cardview.widget.CardView
|
import androidx.cardview.widget.CardView
|
||||||
import androidx.core.app.ActivityOptionsCompat
|
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import androidx.core.util.Pair
|
|
||||||
import androidx.core.view.ViewCompat
|
|
||||||
import androidx.core.view.marginBottom
|
import androidx.core.view.marginBottom
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.media3.common.util.UnstableApi
|
import androidx.media3.common.util.UnstableApi
|
||||||
|
@ -96,8 +93,8 @@ class OfflineAnimeFragment : Fragment(), OfflineAnimeSearchListener {
|
||||||
view.rootView.fitsSystemWindows = true
|
view.rootView.fitsSystemWindows = true
|
||||||
}
|
}
|
||||||
|
|
||||||
textInputLayout.boxBackgroundColor = (color and 0x00FFFFFF) or 0x28000000.toInt()
|
textInputLayout.boxBackgroundColor = (color and 0x00FFFFFF) or 0x28000000
|
||||||
materialCardView.setCardBackgroundColor((color and 0x00FFFFFF) or 0x28000000.toInt())
|
materialCardView.setCardBackgroundColor((color and 0x00FFFFFF) or 0x28000000)
|
||||||
|
|
||||||
val searchView = view.findViewById<AutoCompleteTextView>(R.id.animeSearchBarText)
|
val searchView = view.findViewById<AutoCompleteTextView>(R.id.animeSearchBarText)
|
||||||
searchView.addTextChangedListener(object : TextWatcher {
|
searchView.addTextChangedListener(object : TextWatcher {
|
||||||
|
@ -181,14 +178,7 @@ class OfflineAnimeFragment : Fragment(), OfflineAnimeSearchListener {
|
||||||
requireActivity(),
|
requireActivity(),
|
||||||
Intent(requireContext(), MediaDetailsActivity::class.java)
|
Intent(requireContext(), MediaDetailsActivity::class.java)
|
||||||
.putExtra("download", true),
|
.putExtra("download", true),
|
||||||
ActivityOptionsCompat.makeSceneTransitionAnimation(
|
null
|
||||||
requireActivity(),
|
|
||||||
Pair.create(
|
|
||||||
gridView.getChildAt(position)
|
|
||||||
.findViewById<ImageView>(R.id.itemCompactImage),
|
|
||||||
ViewCompat.getTransitionName(requireActivity().findViewById(R.id.itemCompactImage))
|
|
||||||
),
|
|
||||||
).toBundle()
|
|
||||||
)
|
)
|
||||||
} ?: run {
|
} ?: run {
|
||||||
snackString("no media found")
|
snackString("no media found")
|
||||||
|
@ -291,8 +281,8 @@ class OfflineAnimeFragment : Fragment(), OfflineAnimeSearchListener {
|
||||||
val animeTitles = downloadManager.animeDownloadedTypes.map { it.title }.distinct()
|
val animeTitles = downloadManager.animeDownloadedTypes.map { it.title }.distinct()
|
||||||
val newAnimeDownloads = mutableListOf<OfflineAnimeModel>()
|
val newAnimeDownloads = mutableListOf<OfflineAnimeModel>()
|
||||||
for (title in animeTitles) {
|
for (title in animeTitles) {
|
||||||
val _downloads = downloadManager.animeDownloadedTypes.filter { it.title == title }
|
val tDownloads = downloadManager.animeDownloadedTypes.filter { it.title == title }
|
||||||
val download = _downloads.first()
|
val download = tDownloads.first()
|
||||||
val offlineAnimeModel = loadOfflineAnimeModel(download)
|
val offlineAnimeModel = loadOfflineAnimeModel(download)
|
||||||
newAnimeDownloads += offlineAnimeModel
|
newAnimeDownloads += offlineAnimeModel
|
||||||
}
|
}
|
||||||
|
@ -300,12 +290,10 @@ class OfflineAnimeFragment : Fragment(), OfflineAnimeSearchListener {
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getMedia(downloadedType: DownloadedType): Media? {
|
private fun getMedia(downloadedType: DownloadedType): Media? {
|
||||||
val type = if (downloadedType.type == DownloadedType.Type.ANIME) {
|
val type = when (downloadedType.type) {
|
||||||
"Anime"
|
DownloadedType.Type.MANGA -> "Manga"
|
||||||
} else if (downloadedType.type == DownloadedType.Type.MANGA) {
|
DownloadedType.Type.ANIME -> "Anime"
|
||||||
"Manga"
|
else -> "Novel"
|
||||||
} else {
|
|
||||||
"Novel"
|
|
||||||
}
|
}
|
||||||
val directory = File(
|
val directory = File(
|
||||||
currContext()?.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS),
|
currContext()?.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS),
|
||||||
|
@ -336,12 +324,10 @@ class OfflineAnimeFragment : Fragment(), OfflineAnimeSearchListener {
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun loadOfflineAnimeModel(downloadedType: DownloadedType): OfflineAnimeModel {
|
private fun loadOfflineAnimeModel(downloadedType: DownloadedType): OfflineAnimeModel {
|
||||||
val type = if (downloadedType.type == DownloadedType.Type.MANGA) {
|
val type = when (downloadedType.type) {
|
||||||
"Manga"
|
DownloadedType.Type.MANGA -> "Manga"
|
||||||
} else if (downloadedType.type == DownloadedType.Type.ANIME) {
|
DownloadedType.Type.ANIME -> "Anime"
|
||||||
"Anime"
|
else -> "Novel"
|
||||||
} else {
|
|
||||||
"Novel"
|
|
||||||
}
|
}
|
||||||
val directory = File(
|
val directory = File(
|
||||||
currContext()?.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS),
|
currContext()?.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS),
|
||||||
|
@ -349,8 +335,6 @@ class OfflineAnimeFragment : Fragment(), OfflineAnimeSearchListener {
|
||||||
)
|
)
|
||||||
//load media.json and convert to media class with gson
|
//load media.json and convert to media class with gson
|
||||||
try {
|
try {
|
||||||
val media = File(directory, "media.json")
|
|
||||||
val mediaJson = media.readText()
|
|
||||||
val mediaModel = getMedia(downloadedType)!!
|
val mediaModel = getMedia(downloadedType)!!
|
||||||
val cover = File(directory, "cover.jpg")
|
val cover = File(directory, "cover.jpg")
|
||||||
val coverUri: Uri? = if (cover.exists()) {
|
val coverUri: Uri? = if (cover.exists()) {
|
||||||
|
@ -399,8 +383,8 @@ class OfflineAnimeFragment : Fragment(), OfflineAnimeSearchListener {
|
||||||
"??",
|
"??",
|
||||||
"movie",
|
"movie",
|
||||||
"hmm",
|
"hmm",
|
||||||
false,
|
isOngoing = false,
|
||||||
false,
|
isUserScored = false,
|
||||||
null,
|
null,
|
||||||
null
|
null
|
||||||
)
|
)
|
||||||
|
|
|
@ -19,10 +19,7 @@ import android.widget.ImageView
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.cardview.widget.CardView
|
import androidx.cardview.widget.CardView
|
||||||
import androidx.core.app.ActivityOptionsCompat
|
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import androidx.core.util.Pair
|
|
||||||
import androidx.core.view.ViewCompat
|
|
||||||
import androidx.core.view.marginBottom
|
import androidx.core.view.marginBottom
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import ani.dantotsu.R
|
import ani.dantotsu.R
|
||||||
|
@ -89,8 +86,8 @@ class OfflineMangaFragment : Fragment(), OfflineMangaSearchListener {
|
||||||
view.rootView.fitsSystemWindows = true
|
view.rootView.fitsSystemWindows = true
|
||||||
}
|
}
|
||||||
|
|
||||||
textInputLayout.boxBackgroundColor = (color and 0x00FFFFFF) or 0x28000000.toInt()
|
textInputLayout.boxBackgroundColor = (color and 0x00FFFFFF) or 0x28000000
|
||||||
materialCardView.setCardBackgroundColor((color and 0x00FFFFFF) or 0x28000000.toInt())
|
materialCardView.setCardBackgroundColor((color and 0x00FFFFFF) or 0x28000000)
|
||||||
|
|
||||||
val searchView = view.findViewById<AutoCompleteTextView>(R.id.animeSearchBarText)
|
val searchView = view.findViewById<AutoCompleteTextView>(R.id.animeSearchBarText)
|
||||||
searchView.addTextChangedListener(object : TextWatcher {
|
searchView.addTextChangedListener(object : TextWatcher {
|
||||||
|
@ -165,19 +162,13 @@ class OfflineMangaFragment : Fragment(), OfflineMangaSearchListener {
|
||||||
downloadManager.mangaDownloadedTypes.firstOrNull { it.title == item.title }
|
downloadManager.mangaDownloadedTypes.firstOrNull { it.title == item.title }
|
||||||
?: downloadManager.novelDownloadedTypes.firstOrNull { it.title == item.title }
|
?: downloadManager.novelDownloadedTypes.firstOrNull { it.title == item.title }
|
||||||
media?.let {
|
media?.let {
|
||||||
|
|
||||||
ContextCompat.startActivity(
|
ContextCompat.startActivity(
|
||||||
requireActivity(),
|
requireActivity(),
|
||||||
Intent(requireContext(), MediaDetailsActivity::class.java)
|
Intent(requireContext(), MediaDetailsActivity::class.java)
|
||||||
.putExtra("media", getMedia(it))
|
.putExtra("media", getMedia(it))
|
||||||
.putExtra("download", true),
|
.putExtra("download", true),
|
||||||
ActivityOptionsCompat.makeSceneTransitionAnimation(
|
null
|
||||||
requireActivity(),
|
|
||||||
Pair.create(
|
|
||||||
gridView.getChildAt(position)
|
|
||||||
.findViewById<ImageView>(R.id.itemCompactImage),
|
|
||||||
ViewCompat.getTransitionName(requireActivity().findViewById(R.id.itemCompactImage))
|
|
||||||
)
|
|
||||||
).toBundle()
|
|
||||||
)
|
)
|
||||||
} ?: run {
|
} ?: run {
|
||||||
snackString("no media found")
|
snackString("no media found")
|
||||||
|
@ -278,8 +269,8 @@ class OfflineMangaFragment : Fragment(), OfflineMangaSearchListener {
|
||||||
val mangaTitles = downloadManager.mangaDownloadedTypes.map { it.title }.distinct()
|
val mangaTitles = downloadManager.mangaDownloadedTypes.map { it.title }.distinct()
|
||||||
val newMangaDownloads = mutableListOf<OfflineMangaModel>()
|
val newMangaDownloads = mutableListOf<OfflineMangaModel>()
|
||||||
for (title in mangaTitles) {
|
for (title in mangaTitles) {
|
||||||
val _downloads = downloadManager.mangaDownloadedTypes.filter { it.title == title }
|
val tDownloads = downloadManager.mangaDownloadedTypes.filter { it.title == title }
|
||||||
val download = _downloads.first()
|
val download = tDownloads.first()
|
||||||
val offlineMangaModel = loadOfflineMangaModel(download)
|
val offlineMangaModel = loadOfflineMangaModel(download)
|
||||||
newMangaDownloads += offlineMangaModel
|
newMangaDownloads += offlineMangaModel
|
||||||
}
|
}
|
||||||
|
@ -287,8 +278,8 @@ class OfflineMangaFragment : Fragment(), OfflineMangaSearchListener {
|
||||||
val novelTitles = downloadManager.novelDownloadedTypes.map { it.title }.distinct()
|
val novelTitles = downloadManager.novelDownloadedTypes.map { it.title }.distinct()
|
||||||
val newNovelDownloads = mutableListOf<OfflineMangaModel>()
|
val newNovelDownloads = mutableListOf<OfflineMangaModel>()
|
||||||
for (title in novelTitles) {
|
for (title in novelTitles) {
|
||||||
val _downloads = downloadManager.novelDownloadedTypes.filter { it.title == title }
|
val tDownloads = downloadManager.novelDownloadedTypes.filter { it.title == title }
|
||||||
val download = _downloads.first()
|
val download = tDownloads.first()
|
||||||
val offlineMangaModel = loadOfflineMangaModel(download)
|
val offlineMangaModel = loadOfflineMangaModel(download)
|
||||||
newNovelDownloads += offlineMangaModel
|
newNovelDownloads += offlineMangaModel
|
||||||
}
|
}
|
||||||
|
@ -297,12 +288,10 @@ class OfflineMangaFragment : Fragment(), OfflineMangaSearchListener {
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getMedia(downloadedType: DownloadedType): Media? {
|
private fun getMedia(downloadedType: DownloadedType): Media? {
|
||||||
val type = if (downloadedType.type == DownloadedType.Type.MANGA) {
|
val type = when (downloadedType.type) {
|
||||||
"Manga"
|
DownloadedType.Type.MANGA -> "Manga"
|
||||||
} else if (downloadedType.type == DownloadedType.Type.ANIME) {
|
DownloadedType.Type.ANIME -> "Anime"
|
||||||
"Anime"
|
else -> "Novel"
|
||||||
} else {
|
|
||||||
"Novel"
|
|
||||||
}
|
}
|
||||||
val directory = File(
|
val directory = File(
|
||||||
currContext()?.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS),
|
currContext()?.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS),
|
||||||
|
@ -327,12 +316,10 @@ class OfflineMangaFragment : Fragment(), OfflineMangaSearchListener {
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun loadOfflineMangaModel(downloadedType: DownloadedType): OfflineMangaModel {
|
private fun loadOfflineMangaModel(downloadedType: DownloadedType): OfflineMangaModel {
|
||||||
val type = if (downloadedType.type == DownloadedType.Type.MANGA) {
|
val type = when (downloadedType.type) {
|
||||||
"Manga"
|
DownloadedType.Type.MANGA -> "Manga"
|
||||||
} else if (downloadedType.type == DownloadedType.Type.ANIME) {
|
DownloadedType.Type.ANIME -> "Anime"
|
||||||
"Anime"
|
else -> "Novel"
|
||||||
} else {
|
|
||||||
"Novel"
|
|
||||||
}
|
}
|
||||||
val directory = File(
|
val directory = File(
|
||||||
currContext()?.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS),
|
currContext()?.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS),
|
||||||
|
@ -340,8 +327,6 @@ class OfflineMangaFragment : Fragment(), OfflineMangaSearchListener {
|
||||||
)
|
)
|
||||||
//load media.json and convert to media class with gson
|
//load media.json and convert to media class with gson
|
||||||
try {
|
try {
|
||||||
val media = File(directory, "media.json")
|
|
||||||
val mediaJson = media.readText()
|
|
||||||
val mediaModel = getMedia(downloadedType)!!
|
val mediaModel = getMedia(downloadedType)!!
|
||||||
val cover = File(directory, "cover.jpg")
|
val cover = File(directory, "cover.jpg")
|
||||||
val coverUri: Uri? = if (cover.exists()) {
|
val coverUri: Uri? = if (cover.exists()) {
|
||||||
|
@ -383,8 +368,8 @@ class OfflineMangaFragment : Fragment(), OfflineMangaSearchListener {
|
||||||
"??",
|
"??",
|
||||||
"movie",
|
"movie",
|
||||||
"hmm",
|
"hmm",
|
||||||
false,
|
isOngoing = false,
|
||||||
false,
|
isUserScored = false,
|
||||||
null,
|
null,
|
||||||
null
|
null
|
||||||
)
|
)
|
||||||
|
|
|
@ -184,7 +184,9 @@ open class MangaReadFragment : Fragment(), ScanlatorSelectionListener {
|
||||||
MangaChapterAdapter(style ?: PrefManager.getVal(PrefName.MangaDefaultView), media, this)
|
MangaChapterAdapter(style ?: PrefManager.getVal(PrefName.MangaDefaultView), media, this)
|
||||||
|
|
||||||
for (download in downloadManager.mangaDownloadedTypes) {
|
for (download in downloadManager.mangaDownloadedTypes) {
|
||||||
chapterAdapter.stopDownload(download.chapter)
|
if (download.title == media.mainName()) {
|
||||||
|
chapterAdapter.stopDownload(download.chapter)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
binding.animeSourceRecycler.adapter =
|
binding.animeSourceRecycler.adapter =
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue