From c0d7b16ee64cf863cda042cad1060a02ed020936 Mon Sep 17 00:00:00 2001 From: len Date: Sat, 26 Aug 2017 12:46:35 +0200 Subject: [PATCH 01/78] Allow to update chapter metadata --- .../tachiyomi/util/ChapterSourceSync.kt | 37 ++++++++++++++++--- 1 file changed, 32 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/ChapterSourceSync.kt b/app/src/main/java/eu/kanade/tachiyomi/util/ChapterSourceSync.kt index 7a705fe66..e76217e09 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/util/ChapterSourceSync.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/util/ChapterSourceSync.kt @@ -37,8 +37,27 @@ fun syncChaptersWithSource(db: DatabaseHelper, } } - // Chapters from the source not in db. - val toAdd = sourceChapters.filterNot { it in dbChapters } + // Chapters from the db not in the source. + val toAdd = mutableListOf() + + // Chapters whose metadata have changed. + val toChange = mutableListOf() + + for (sourceChapter in sourceChapters) { + val dbChapter = dbChapters.find { it.url == sourceChapter.url } + + // Add the chapter if not in db already, or update if the metadata changed. + if (dbChapter == null) { + toAdd.add(sourceChapter) + } else if (dbChapter.scanlator != sourceChapter.scanlator || + dbChapter.name != sourceChapter.name) { + + dbChapter.scanlator = sourceChapter.scanlator + dbChapter.name = sourceChapter.name + + toChange.add(dbChapter) + } + } // Recognize number for new chapters. toAdd.forEach { @@ -49,10 +68,14 @@ fun syncChaptersWithSource(db: DatabaseHelper, } // Chapters from the db not in the source. - val toDelete = dbChapters.filterNot { it in sourceChapters } + val toDelete = dbChapters.filterNot { dbChapter -> + sourceChapters.any { sourceChapter -> + dbChapter.url == sourceChapter.url + } + } - // Return if there's nothing to add or delete, avoiding unnecessary db transactions. - if (toAdd.isEmpty() && toDelete.isEmpty()) { + // Return if there's nothing to add, delete or change, avoiding unnecessary db transactions. + if (toAdd.isEmpty() && toDelete.isEmpty() && toChange.isEmpty()) { return Pair(emptyList(), emptyList()) } @@ -90,6 +113,10 @@ fun syncChaptersWithSource(db: DatabaseHelper, db.insertChapters(toAdd).executeAsBlocking() } + if (!toChange.isEmpty()) { + db.insertChapters(toChange).executeAsBlocking() + } + // Fix order in source. db.fixChaptersSourceOrder(sourceChapters).executeAsBlocking() } From 71fc6fc257d3241a70c477d0b778bbfca23e1148 Mon Sep 17 00:00:00 2001 From: len Date: Sat, 26 Aug 2017 12:50:52 +0200 Subject: [PATCH 02/78] Revert chapter equals method --- .../eu/kanade/tachiyomi/data/database/models/ChapterImpl.kt | 5 +---- .../main/java/eu/kanade/tachiyomi/util/ChapterSourceSync.kt | 2 +- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/database/models/ChapterImpl.kt b/app/src/main/java/eu/kanade/tachiyomi/data/database/models/ChapterImpl.kt index a7fd291b5..d2067abfd 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/database/models/ChapterImpl.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/database/models/ChapterImpl.kt @@ -31,10 +31,7 @@ class ChapterImpl : Chapter { if (other == null || javaClass != other.javaClass) return false val chapter = other as Chapter - // Forces updates on manga if scanlator changes. This will allow existing manga in library - // with scanlator to update. - return url == chapter.url && scanlator == chapter.scanlator - + return url == chapter.url } override fun hashCode(): Int { diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/ChapterSourceSync.kt b/app/src/main/java/eu/kanade/tachiyomi/util/ChapterSourceSync.kt index e76217e09..077e83d18 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/util/ChapterSourceSync.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/util/ChapterSourceSync.kt @@ -37,7 +37,7 @@ fun syncChaptersWithSource(db: DatabaseHelper, } } - // Chapters from the db not in the source. + // Chapters from the source not in db. val toAdd = mutableListOf() // Chapters whose metadata have changed. From 5ae0589547489193826b6205f05711a07ceaa16b Mon Sep 17 00:00:00 2001 From: Carlos Date: Mon, 28 Aug 2017 03:10:19 -0400 Subject: [PATCH 03/78] License manga update and Manga Fox Title Update (#937) * update mangafox parsing to read chapter title also if it exists. * updated chapterImpl to force update chapters if chapter name changes. This allows for chapter name changes from the source to update in app * switched from : to - since other sites that already have title use - so it provides consistency across sources. * fixed spacing for - * fixes license status for manga fox if manga is licensed no chapters will be shown. * 1. changed equality in chapterImp back to just the url (removed scanlator, and name comparison) 2. Removed extra line of code assigning mangaFox title twice 3. Modified ChapterSourceSync for scanlator/title/url comparison. * cleaned spaces, added comment, incorporated toChange code from other pull request * throw exception instead of returning empty list when licensed * space fix --- .../tachiyomi/source/online/HttpSource.kt | 19 ++++++++++++------- .../source/online/english/Mangafox.kt | 8 +++++--- .../tachiyomi/util/ChapterSourceSync.kt | 3 ++- 3 files changed, 19 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/source/online/HttpSource.kt b/app/src/main/java/eu/kanade/tachiyomi/source/online/HttpSource.kt index 5698a3dfd..7b57d10c1 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/source/online/HttpSource.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/source/online/HttpSource.kt @@ -13,6 +13,7 @@ import okhttp3.Request import okhttp3.Response import rx.Observable import uy.kohesive.injekt.injectLazy +import java.lang.Exception import java.net.URI import java.net.URISyntaxException import java.security.MessageDigest @@ -51,7 +52,7 @@ abstract class HttpSource : CatalogueSource { override val id by lazy { val key = "${name.toLowerCase()}/$lang/$versionId" val bytes = MessageDigest.getInstance("MD5").digest(key.toByteArray()) - (0..7).map { bytes[it].toLong() and 0xff shl 8*(7-it) }.reduce(Long::or) and Long.MAX_VALUE + (0..7).map { bytes[it].toLong() and 0xff shl 8 * (7 - it) }.reduce(Long::or) and Long.MAX_VALUE } /** @@ -197,16 +198,20 @@ abstract class HttpSource : CatalogueSource { /** * Returns an observable with the updated chapter list for a manga. Normally it's not needed to - * override this method. + * override this method. If a manga is licensed an empty chapter list observable is returned * * @param manga the manga to look for chapters. */ override fun fetchChapterList(manga: SManga): Observable> { - return client.newCall(chapterListRequest(manga)) - .asObservableSuccess() - .map { response -> - chapterListParse(response) - } + if (manga.status != SManga.LICENSED) { + return client.newCall(chapterListRequest(manga)) + .asObservableSuccess() + .map { response -> + chapterListParse(response) + } + } else { + return Observable.error(Exception("Licensed - No chapters to show")) + } } /** diff --git a/app/src/main/java/eu/kanade/tachiyomi/source/online/english/Mangafox.kt b/app/src/main/java/eu/kanade/tachiyomi/source/online/english/Mangafox.kt index 4444d9105..269ab067a 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/source/online/english/Mangafox.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/source/online/english/Mangafox.kt @@ -61,7 +61,7 @@ class Mangafox : ParsedHttpSource() { is Status -> url.addQueryParameter(filter.id, filter.state.toString()) is GenreList -> filter.state.forEach { genre -> url.addQueryParameter(genre.id, genre.state.toString()) } is TextField -> url.addQueryParameter(filter.key, filter.state) - is Type -> url.addQueryParameter("type", if(filter.state == 0) "" else filter.state.toString()) + is Type -> url.addQueryParameter("type", if (filter.state == 0) "" else filter.state.toString()) is OrderBy -> { url.addQueryParameter("sort", arrayOf("name", "rating", "views", "total_chapters", "last_chapter_time")[filter.state!!.index]) url.addQueryParameter("order", if (filter.state?.ascending == true) "az" else "za") @@ -89,13 +89,14 @@ class Mangafox : ParsedHttpSource() { val infoElement = document.select("div#title").first() val rowElement = infoElement.select("table > tbody > tr:eq(1)").first() val sideInfoElement = document.select("#series_info").first() + val licensedElement = document.select("div.warning").first() val manga = SManga.create() manga.author = rowElement.select("td:eq(1)").first()?.text() manga.artist = rowElement.select("td:eq(2)").first()?.text() manga.genre = rowElement.select("td:eq(3)").first()?.text() manga.description = infoElement.select("p.summary").first()?.text() - manga.status = sideInfoElement.select(".data").first()?.text().orEmpty().let { parseStatus(it) } + manga.status = licensedElement?.let { SManga.LICENSED } ?: sideInfoElement.select(".data").first()?.text().orEmpty().let { parseStatus(it) } manga.thumbnail_url = sideInfoElement.select("div.cover > img").first()?.attr("src") return manga } @@ -113,7 +114,7 @@ class Mangafox : ParsedHttpSource() { val chapter = SChapter.create() chapter.setUrlWithoutDomain(urlElement.attr("href")) - chapter.name = urlElement.text() + chapter.name = element.select("span.title.nowrap").first()?.text()?.let { urlElement.text() + " - " + it } ?: urlElement.text() chapter.date_upload = element.select("span.date").first()?.text()?.let { parseChapterDate(it) } ?: 0 return chapter } @@ -169,6 +170,7 @@ class Mangafox : ParsedHttpSource() { private class OrderBy : Filter.Sort("Order by", arrayOf("Series name", "Rating", "Views", "Total chapters", "Last chapter"), Filter.Sort.Selection(2, false)) + private class GenreList(genres: List) : Filter.Group("Genres", genres) override fun getFilterList() = FilterList( diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/ChapterSourceSync.kt b/app/src/main/java/eu/kanade/tachiyomi/util/ChapterSourceSync.kt index 077e83d18..36252f610 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/util/ChapterSourceSync.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/util/ChapterSourceSync.kt @@ -20,7 +20,7 @@ import java.util.* fun syncChaptersWithSource(db: DatabaseHelper, rawSourceChapters: List, manga: Manga, - source: Source) : Pair, List> { + source: Source): Pair, List> { if (rawSourceChapters.isEmpty()) { throw Exception("No chapters found") @@ -121,4 +121,5 @@ fun syncChaptersWithSource(db: DatabaseHelper, db.fixChaptersSourceOrder(sourceChapters).executeAsBlocking() } return Pair(toAdd.subtract(readded).toList(), toDelete.subtract(readded).toList()) + } From 537693f5cf613123188380552541ce1163f12ac0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jozef=20Holl=C3=BD?= Date: Mon, 28 Aug 2017 09:42:44 +0200 Subject: [PATCH 04/78] README, CONTRIBUTING and ISSUE_TEMPLATE, Discord (#952) * Include discord, change issue segment * Update CONTRIBUTING.md * Update ISSUE_TEMPLATE.md --- .github/CONTRIBUTING.md | 29 ++++++++++++++--------------- .github/ISSUE_TEMPLATE.md | 6 ------ README.md | 11 ++++++----- 3 files changed, 20 insertions(+), 26 deletions(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 0c2dda36b..b77cf7f29 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -1,6 +1,17 @@ +1. **Before reporting a new issue, take a look at the [FAQ](https://github.com/inorichi/tachiyomi/wiki/FAQ), the [changelog](https://github.com/inorichi/tachiyomi/releases) and the already opened [issues](https://github.com/inorichi/tachiyomi/issues).** +2. If you are unsure, ask here: [![Discord](https://img.shields.io/discord/349436576037732353.svg)](https://discord.gg/WrBkRk4) +3. What is your type of issue? + * [Catalogue request](#catalogue-requests) + * [Bugs](#bugs) + * [Feature requests](#feature-requests) + * [Translations](https://github.com/inorichi/tachiyomi/wiki/Translation) +4. After following 1. and 3. you can [open your issue](https://github.com/inorichi/tachiyomi/issues/new) + +*** + # Catalogue requests -* Catalogue requests should be created at https://github.com/inorichi/tachiyomi-extensions/issues, not here +* Catalogue requests should be created at https://github.com/inorichi/tachiyomi-extensions#readme, not here # Bugs * Include version (Setting > About > Version) @@ -8,17 +19,9 @@ * Dev version is equal to the number of commits as seen in the main page * Include steps to reproduce (if not obvious from description) * Include screenshot (if needed) -* If it could be device-dependent, try reproducing on another device (if possible), include results and device names, OS, modifications (root, Xposed) -* **Before reporting a new issue, take a look at the [FAQ](https://github.com/inorichi/tachiyomi/wiki/FAQ), the [changelog](https://github.com/inorichi/tachiyomi/releases) and the already opened [issues](https://github.com/inorichi/tachiyomi/issues).** +* If it could be device-dependent, try reproducing on another device (if possible) * For large logs use http://pastebin.com/ (or similar) -* For multipart issues **use list** like this: - * [x] Done - * [ ] Not done -``` -* [x] Done -* [ ] Not done -``` -* Don't put together too many unrelated requests into one issue +* Don't group unrelated requests into one issue DO: https://github.com/inorichi/tachiyomi/issues/24 https://github.com/inorichi/tachiyomi/issues/71 @@ -28,7 +31,3 @@ DON'T: https://github.com/inorichi/tachiyomi/issues/75 * Write a detailed issue, explaning what it should do or how. Avoid writing just "like X app does" * Include screenshot (if needed) - -# Translations - -[Wiki](https://github.com/inorichi/tachiyomi/wiki/Translation) diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index 47f813ac5..c2b4ab5a7 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -1,7 +1 @@ **Please read https://github.com/inorichi/tachiyomi/blob/master/.github/CONTRIBUTING.md before posting** - -Remove line above and describe your issue here. Fill out version below. Use Preview. - - -Version: r000 or v0.0.0 -(other relevant info like OS) diff --git a/README.md b/README.md index 6c4ed5e34..3ef10af61 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,11 @@ -| Build | Download | F-Droid | -|-------|----------|-------------| -| [![TeamCity (simple build status)](https://img.shields.io/teamcity/https/teamcity.kanade.eu/s/tachiyomi_Build.svg)](https://teamcity.kanade.eu/project.html?projectId=tachiyomi) [![Travis](https://img.shields.io/travis/inorichi/tachiyomi.svg)](https://travis-ci.org/inorichi/tachiyomi) | [![stable release](https://img.shields.io/github/release/inorichi/tachiyomi.svg?maxAge=3600&label=stable)](https://github.com/inorichi/tachiyomi/releases) [![latest dev build](https://img.shields.io/badge/dev-latest%20build-blue.svg)](http://tachiyomi.kanade.eu/latest/app-debug.apk) | [![fdroid release](https://img.shields.io/badge/stable-f--droid.org-blue.svg)](https://f-droid.org/repository/browse/?fdid=eu.kanade.tachiyomi) [![fdroid dev](https://img.shields.io/badge/dev-wiki-blue.svg)](//github.com/inorichi/tachiyomi/wiki/FDroid-for-dev-versions) | +| Build | Download | F-Droid | Contact | +|-------|----------|---------|---------| +| [![TeamCity (simple build status)](https://img.shields.io/teamcity/https/teamcity.kanade.eu/s/tachiyomi_Build.svg)](https://teamcity.kanade.eu/project.html?projectId=tachiyomi) [![Travis](https://img.shields.io/travis/inorichi/tachiyomi.svg)](https://travis-ci.org/inorichi/tachiyomi) | [![stable release](https://img.shields.io/github/release/inorichi/tachiyomi.svg?maxAge=3600&label=stable)](https://github.com/inorichi/tachiyomi/releases) [![latest dev build](https://img.shields.io/badge/dev-latest%20build-blue.svg)](http://tachiyomi.kanade.eu/latest/app-debug.apk) | [![fdroid release](https://img.shields.io/badge/stable-f--droid.org-blue.svg)](https://f-droid.org/repository/browse/?fdid=eu.kanade.tachiyomi) [![fdroid dev](https://img.shields.io/badge/dev-wiki-blue.svg)](//github.com/inorichi/tachiyomi/wiki/FDroid-for-dev-versions) | [![Discord](https://img.shields.io/discord/349436576037732353.svg)](https://discord.gg/WrBkRk4) | -## [Report an issue](https://github.com/inorichi/tachiyomi/blob/master/.github/CONTRIBUTING.md) +### **Contact us on [Discord](https://discord.gg/WrBkRk4)** +If you want to open an issue, please read [contributing guidelines](https://github.com/inorichi/tachiyomi/blob/master/.github/CONTRIBUTING.md). Your issue may be closed otherwise. -**Before reporting a new issue, take a look at the [FAQ](https://github.com/inorichi/tachiyomi/wiki/FAQ), the [changelog](https://github.com/inorichi/tachiyomi/releases) and the already opened issues.** +*** Tachiyomi is a free and open source manga reader for Android. From 3c550c1781e64c374b63055c6f99c256785bf75d Mon Sep 17 00:00:00 2001 From: inorichi Date: Mon, 28 Aug 2017 10:00:13 +0200 Subject: [PATCH 05/78] Kotlin 1.1.4. Add discord link in about --- app/build.gradle | 2 +- .../tachiyomi/ui/setting/SettingsAboutController.kt | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 187fccf8c..f3bf3cee8 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -217,7 +217,7 @@ dependencies { } buildscript { - ext.kotlin_version = '1.1.3' + ext.kotlin_version = '1.1.4' repositories { mavenCentral() } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsAboutController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsAboutController.kt index 3aa9398e9..1a2f6c458 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsAboutController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsAboutController.kt @@ -22,6 +22,9 @@ import java.text.ParseException import java.text.SimpleDateFormat import java.util.* import eu.kanade.tachiyomi.data.preference.PreferenceKeys as Keys +import android.content.Intent +import android.net.Uri + class SettingsAboutController : SettingsController() { @@ -66,6 +69,15 @@ class SettingsAboutController : SettingsController() { isVisible = false } } + preference { + title = "Discord" + val url = "https://discord.gg/WrBkRk4" + summary = url + onClick { + val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url)) + startActivity(intent) + } + } preference { titleRes = R.string.version summary = if (BuildConfig.DEBUG) From e6ff9e18cc9a294e716fa1a3683b4ac1194aff5d Mon Sep 17 00:00:00 2001 From: inorichi Date: Mon, 28 Aug 2017 10:13:27 +0200 Subject: [PATCH 06/78] Fix #956 --- .../java/eu/kanade/tachiyomi/ui/catalogue/CatalogueController.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/CatalogueController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/CatalogueController.kt index cac5a12a9..bb61a1ff3 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/CatalogueController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/CatalogueController.kt @@ -228,6 +228,7 @@ open class CatalogueController(bundle: Bundle? = null) : val recycler = if (presenter.isListMode) { RecyclerView(view.context).apply { + id = R.id.recycler layoutManager = LinearLayoutManager(context) addItemDecoration(DividerItemDecoration(context, DividerItemDecoration.VERTICAL)) } From ecfe72bcadbf16a5c79e4bde56bb8f233b71457a Mon Sep 17 00:00:00 2001 From: inorichi Date: Tue, 29 Aug 2017 09:55:42 +0200 Subject: [PATCH 07/78] Let GC take care of the presenter. Also fix #947 --- app/src/main/AndroidManifest.xml | 2 +- .../tachiyomi/ui/base/presenter/NucleusConductorDelegate.java | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index dd193aca4..660a3b0cc 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -21,7 +21,7 @@ android:theme="@style/Theme.Tachiyomi"> + android:launchMode="singleTop"> diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/base/presenter/NucleusConductorDelegate.java b/app/src/main/java/eu/kanade/tachiyomi/ui/base/presenter/NucleusConductorDelegate.java index 62a50af83..e495069f0 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/base/presenter/NucleusConductorDelegate.java +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/base/presenter/NucleusConductorDelegate.java @@ -61,7 +61,6 @@ public class NucleusConductorDelegate

{ void onDestroy() { if (presenter != null) { presenter.destroy(); - presenter = null; } } } From 2f6d163a7acf4672fa39ecd225532a79bef770e1 Mon Sep 17 00:00:00 2001 From: inorichi Date: Tue, 29 Aug 2017 10:39:22 +0200 Subject: [PATCH 08/78] Simplify presenter delegate --- .../ui/base/presenter/NucleusConductorDelegate.java | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/base/presenter/NucleusConductorDelegate.java b/app/src/main/java/eu/kanade/tachiyomi/ui/base/presenter/NucleusConductorDelegate.java index e495069f0..ddc4aba5a 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/base/presenter/NucleusConductorDelegate.java +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/base/presenter/NucleusConductorDelegate.java @@ -10,7 +10,6 @@ public class NucleusConductorDelegate

{ @Nullable private P presenter; @Nullable private Bundle bundle; - private boolean presenterHasView = false; private PresenterFactory

factory; @@ -22,8 +21,8 @@ public class NucleusConductorDelegate

{ if (presenter == null) { presenter = factory.createPresenter(); presenter.create(bundle); + bundle = null; } - bundle = null; return presenter; } @@ -37,24 +36,20 @@ public class NucleusConductorDelegate

{ } void onRestoreInstanceState(Bundle presenterState) { - if (presenter != null) - throw new IllegalArgumentException("onRestoreInstanceState() should be called before onResume()"); bundle = presenterState; } void onTakeView(Object view) { getPresenter(); - if (presenter != null && !presenterHasView) { + if (presenter != null) { //noinspection unchecked presenter.takeView(view); - presenterHasView = true; } } void onDropView() { - if (presenter != null && presenterHasView) { + if (presenter != null) { presenter.dropView(); - presenterHasView = false; } } From 75cb94b51a4b52068a2ec7516c9cef8fc063d15f Mon Sep 17 00:00:00 2001 From: Bram van de Kerkhof Date: Wed, 30 Aug 2017 21:50:19 +0200 Subject: [PATCH 09/78] Fix tint on AMOLED theme (#966) Fix tint on AMOLED theme --- .../eu/kanade/tachiyomi/ui/manga/chapter/ChapterHolder.kt | 5 +++++ .../tachiyomi/ui/recent_updates/RecentChapterHolder.kt | 4 ++++ app/src/main/res/layout/recent_chapters_item.xml | 4 ++-- app/src/main/res/values/attrs.xml | 1 + app/src/main/res/values/colors.xml | 3 +++ app/src/main/res/values/themes.xml | 2 ++ 6 files changed, 17 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/chapter/ChapterHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/chapter/ChapterHolder.kt index b5ef25f1a..936763bf7 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/chapter/ChapterHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/chapter/ChapterHolder.kt @@ -6,7 +6,9 @@ import eu.davidea.viewholders.FlexibleViewHolder import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.database.models.Manga import eu.kanade.tachiyomi.data.download.model.Download +import eu.kanade.tachiyomi.util.getResourceColor import eu.kanade.tachiyomi.util.gone +import eu.kanade.tachiyomi.util.setVectorCompat import kotlinx.android.synthetic.main.chapters_item.view.* import java.util.* @@ -33,6 +35,9 @@ class ChapterHolder( else -> chapter.name } + // Set the correct drawable for dropdown and update the tint to match theme. + view.chapter_menu.setVectorCompat(R.drawable.ic_more_horiz_black_24dp, view.context.getResourceColor(R.attr.icon_color)) + // Set correct text color chapter_title.setTextColor(if (chapter.read) adapter.readColor else adapter.unreadColor) if (chapter.bookmark) chapter_title.setTextColor(adapter.bookmarkedColor) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/recent_updates/RecentChapterHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/recent_updates/RecentChapterHolder.kt index 434ee400c..0c3a1f030 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/recent_updates/RecentChapterHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/recent_updates/RecentChapterHolder.kt @@ -8,6 +8,7 @@ import eu.davidea.viewholders.FlexibleViewHolder import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.download.model.Download import eu.kanade.tachiyomi.util.getResourceColor +import eu.kanade.tachiyomi.util.setVectorCompat import jp.wasabeef.glide.transformations.CropCircleTransformation import kotlinx.android.synthetic.main.recent_chapters_item.view.* @@ -63,6 +64,9 @@ class RecentChapterHolder(private val view: View, private val adapter: RecentCha // Set manga title view.manga_title.text = item.manga.title + // Set the correct drawable for dropdown and update the tint to match theme. + view.chapter_menu_icon.setVectorCompat(R.drawable.ic_more_horiz_black_24dp, view.context.getResourceColor(R.attr.icon_color)) + // Set cover Glide.clear(itemView.manga_cover) if (!item.manga.thumbnail_url.isNullOrEmpty()) { diff --git a/app/src/main/res/layout/recent_chapters_item.xml b/app/src/main/res/layout/recent_chapters_item.xml index 9a23c8b37..2bf1b92d8 100644 --- a/app/src/main/res/layout/recent_chapters_item.xml +++ b/app/src/main/res/layout/recent_chapters_item.xml @@ -76,12 +76,12 @@ app:layout_constraintTop_toTopOf="parent"> + android:layout_marginRight="16dp" /> diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml index 3d4b09c75..3d0864a35 100644 --- a/app/src/main/res/values/attrs.xml +++ b/app/src/main/res/values/attrs.xml @@ -25,4 +25,5 @@ + diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 8aa48821c..dff91d05c 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -20,6 +20,7 @@ @color/md_white_1000 @color/md_blue_A400_38 + @color/md_black_1000 #3399ff @@ -35,6 +36,7 @@ @color/md_grey_800 @color/md_blue_A200_50 + @color/md_white_1000_54 @color/md_grey_50_75 @@ -48,6 +50,7 @@ #FFFFFFFF #B3FFFFFF + #8AFFFFFF #80FFFFFF #33FFFFFF #1FFFFFFF diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index 8a82972a3..ebe215a1e 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -36,6 +36,7 @@ @drawable/library_item_selector_light @color/textColorPrimaryLight @color/dialogLight + @color/iconColorLight + + @@ -105,6 +109,10 @@ 20sp + + @@ -130,7 +138,7 @@ - @@ -161,21 +175,24 @@ + + - - + - From 75c41b645a318eb86f5303f109021ed189f00a70 Mon Sep 17 00:00:00 2001 From: len Date: Sat, 23 Sep 2017 17:14:04 +0200 Subject: [PATCH 23/78] Target sdk 26. Dependency updates. --- app/build.gradle | 39 +++++++------------ .../tachiyomi/ui/catalogue/ProgressItem.kt | 4 +- .../ui/catalogue/filter/CheckboxItem.kt | 8 ++-- .../ui/catalogue/filter/GroupItem.kt | 10 ++--- .../ui/catalogue/filter/HeaderItem.kt | 6 +-- .../ui/catalogue/filter/SectionItems.kt | 24 ++++-------- .../ui/catalogue/filter/SelectItem.kt | 10 ++--- .../ui/catalogue/filter/SeparatorItem.kt | 6 +-- .../ui/catalogue/filter/SortGroup.kt | 6 +-- .../tachiyomi/ui/catalogue/filter/SortItem.kt | 9 ++--- .../tachiyomi/ui/catalogue/filter/TextItem.kt | 10 ++--- .../ui/catalogue/filter/TriStateItem.kt | 8 ++-- .../kanade/tachiyomi/ui/main/MainActivity.kt | 2 +- .../ui/manga/track/SetTrackChaptersDialog.kt | 4 +- .../ui/manga/track/SetTrackScoreDialog.kt | 4 +- .../tachiyomi/ui/recent_updates/DateItem.kt | 2 +- .../kanade/tachiyomi/util/ViewExtensions.kt | 2 +- .../tachiyomi/widget/SimpleNavigationView.kt | 14 +++---- app/src/main/res/menu/menu_navigation.xml | 4 -- 19 files changed, 67 insertions(+), 105 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 9564168e1..f682e58d0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -29,14 +29,14 @@ ext { } android { - compileSdkVersion 25 - buildToolsVersion "25.0.2" + compileSdkVersion 26 + buildToolsVersion "26.0.1" publishNonDefault true defaultConfig { applicationId "eu.kanade.tachiyomi" minSdkVersion 16 - targetSdkVersion 25 + targetSdkVersion 26 testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" versionCode 26 versionName "0.6.3" @@ -102,12 +102,13 @@ dependencies { compile 'com.github.inorichi:junrar-android:634c1f5' // Android support library - final support_library_version = '25.4.0' + final support_library_version = '26.1.0' compile "com.android.support:support-v4:$support_library_version" compile "com.android.support:appcompat-v7:$support_library_version" compile "com.android.support:cardview-v7:$support_library_version" compile "com.android.support:design:$support_library_version" compile "com.android.support:recyclerview-v7:$support_library_version" + compile "com.android.support:preference-v7:$support_library_version" compile "com.android.support:support-annotations:$support_library_version" compile "com.android.support:customtabs:$support_library_version" @@ -117,13 +118,13 @@ dependencies { // ReactiveX compile 'io.reactivex:rxandroid:1.2.1' - compile 'io.reactivex:rxjava:1.3.0' + compile 'io.reactivex:rxjava:1.3.2' compile 'com.jakewharton.rxrelay:rxrelay:1.2.0' compile 'com.f2prateek.rx.preferences:rx-preferences:1.0.2' compile 'com.github.pwittchen:reactivenetwork:0.7.0' // Network client - compile "com.squareup.okhttp3:okhttp:3.8.1" + compile "com.squareup.okhttp3:okhttp:3.9.0" compile 'com.squareup.okio:okio:1.13.0' // REST @@ -133,14 +134,14 @@ dependencies { compile "com.squareup.retrofit2:adapter-rxjava:$retrofit_version" // JSON - compile 'com.google.code.gson:gson:2.8.1' + compile 'com.google.code.gson:gson:2.8.2' compile 'com.github.salomonbrys.kotson:kotson:2.5.0' // YAML compile 'com.github.bmoliveira:snake-yaml:v1.18-android' // JavaScript engine - compile 'com.squareup.duktape:duktape-android:1.1.0' + compile 'com.squareup.duktape:duktape-android:1.2.0' // Disk compile 'com.jakewharton:disklrucache:2.0.2' @@ -151,7 +152,7 @@ dependencies { // Job scheduling compile 'com.evernote:android-job:1.1.11' - compile 'com.google.android.gms:play-services-gcm:11.0.1' + compile 'com.google.android.gms:play-services-gcm:11.4.0' // Changelog compile 'com.github.gabrielemariotti.changeloglib:changelog:2.1.0' @@ -188,14 +189,16 @@ dependencies { compile 'eu.davidea:flexible-adapter:5.0.0-rc1' compile 'com.nononsenseapps:filepicker:2.5.2' compile 'com.github.amulyakhare:TextDrawable:558677e' - compile 'com.afollestad.material-dialogs:core:0.9.4.5' + compile('com.afollestad.material-dialogs:core:0.9.4.7') { + exclude group: "com.android.support", module: "support-v13" + } compile 'me.zhanghai.android.systemuihelper:library:1.0.0' compile 'com.nightlynexus.viewstatepageradapter:viewstatepageradapter:1.0.4' compile 'com.github.mthli:Slice:v1.2' // Conductor compile "com.bluelinelabs:conductor:2.1.4" - compile 'com.github.inorichi:conductor-support-preference:9e36460' + compile 'com.github.inorichi:conductor-support-preference:26.0.2' // RxBindings final rxbindings_version = '1.0.1' @@ -218,7 +221,7 @@ dependencies { } buildscript { - ext.kotlin_version = '1.1.4' + ext.kotlin_version = '1.1.50' repositories { mavenCentral() } @@ -231,18 +234,6 @@ repositories { mavenCentral() } -// Workaround to force a support lib version -configurations.all { - resolutionStrategy.eachDependency { details -> - def requested = details.requested - if (requested.group == 'com.android.support') { - if (!requested.name.startsWith("multidex")) { - details.useVersion '25.4.0' - } - } - } -} - // add support for placeholders in resource files //https://code.google.com/p/android/issues/detail?id=69224 def replacePlaceholdersInFile(basePath, fileName, placeholders) { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/ProgressItem.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/ProgressItem.kt index 1f1d75b72..5c79c954f 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/ProgressItem.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/ProgressItem.kt @@ -45,8 +45,8 @@ class ProgressItem : AbstractFlexibleItem() { class Holder(view: View, adapter: FlexibleAdapter<*>) : FlexibleViewHolder(view, adapter) { - val progressBar = view.findViewById(R.id.progress_bar) as ProgressBar - val progressMessage = view.findViewById(R.id.progress_message) as TextView + val progressBar: ProgressBar = view.findViewById(R.id.progress_bar) + val progressMessage: TextView = view.findViewById(R.id.progress_message) } } \ No newline at end of file diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/filter/CheckboxItem.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/filter/CheckboxItem.kt index d9bab855e..0efe58620 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/filter/CheckboxItem.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/filter/CheckboxItem.kt @@ -32,10 +32,8 @@ open class CheckboxItem(val filter: Filter.CheckBox) : AbstractFlexibleItem) : FlexibleViewHolder(view, adapter) { - val check = itemView.findViewById(R.id.nav_view_item) as CheckBox + val check: CheckBox = itemView.findViewById(R.id.nav_view_item) } } \ No newline at end of file diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/filter/GroupItem.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/filter/GroupItem.kt index c023ce596..5e77f5a81 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/filter/GroupItem.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/filter/GroupItem.kt @@ -34,10 +34,8 @@ class GroupItem(val filter: Filter.Group<*>) : AbstractExpandableHeaderItem) : AbstractExpandableHeaderItem) : ExpandableViewHolder(view, adapter, true) { - val title = itemView.findViewById(R.id.title) as TextView - val icon = itemView.findViewById(R.id.expand_icon) as ImageView + val title: TextView = itemView.findViewById(R.id.title) + val icon: ImageView = itemView.findViewById(R.id.expand_icon) override fun shouldNotifyParentOnClick(): Boolean { return true diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/filter/HeaderItem.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/filter/HeaderItem.kt index a76612167..90218fff6 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/filter/HeaderItem.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/filter/HeaderItem.kt @@ -29,10 +29,8 @@ class HeaderItem(val filter: Filter.Header) : AbstractHeaderItem) : SelectItem(filter), ISection override fun equals(other: Any?): Boolean { if (this === other) return true - if (other is SelectSectionItem) { - return filter == other.filter - } - return false + if (javaClass != other?.javaClass) return false + return filter == (other as SelectSectionItem).filter } override fun hashCode(): Int { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/filter/SelectItem.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/filter/SelectItem.kt index ad840475e..1db147095 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/filter/SelectItem.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/filter/SelectItem.kt @@ -40,10 +40,8 @@ open class SelectItem(val filter: Filter.Select<*>) : AbstractFlexibleItem) : AbstractFlexibleItem) : FlexibleViewHolder(view, adapter) { - val text = itemView.findViewById(R.id.nav_view_item_text) as TextView - val spinner = itemView.findViewById(R.id.nav_view_item) as Spinner + val text: TextView = itemView.findViewById(R.id.nav_view_item_text) + val spinner: Spinner = itemView.findViewById(R.id.nav_view_item) } } \ No newline at end of file diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/filter/SeparatorItem.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/filter/SeparatorItem.kt index 8420f2f7d..3291b3342 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/filter/SeparatorItem.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/filter/SeparatorItem.kt @@ -27,10 +27,8 @@ class SeparatorItem(val filter: Filter.Separator) : AbstractHeaderItem) : FlexibleViewHolder(view, adapter) { - val text = itemView.findViewById(R.id.nav_view_item) as CheckedTextView + val text: CheckedTextView = itemView.findViewById(R.id.nav_view_item) } } \ No newline at end of file diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/filter/TextItem.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/filter/TextItem.kt index 9d4321dcb..56813eb80 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/filter/TextItem.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/filter/TextItem.kt @@ -34,10 +34,8 @@ open class TextItem(val filter: Filter.Text) : AbstractFlexibleItem) : FlexibleViewHolder(view, adapter) { - val wrapper = itemView.findViewById(R.id.nav_view_item_wrapper) as TextInputLayout - val edit = itemView.findViewById(R.id.nav_view_item) as EditText + val wrapper: TextInputLayout = itemView.findViewById(R.id.nav_view_item_wrapper) + val edit: EditText = itemView.findViewById(R.id.nav_view_item) } } \ No newline at end of file diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/filter/TriStateItem.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/filter/TriStateItem.kt index 0c834b337..eacf255da 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/filter/TriStateItem.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/filter/TriStateItem.kt @@ -51,10 +51,8 @@ open class TriStateItem(val filter: Filter.TriState) : AbstractFlexibleItem) : FlexibleViewHolder(view, adapter) { - val text = itemView.findViewById(TR.id.nav_view_item) as CheckedTextView + val text: CheckedTextView = itemView.findViewById(TR.id.nav_view_item) init { // Align with native checkbox diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt index 7db5474c4..9815477d1 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt @@ -99,7 +99,7 @@ class MainActivity : BaseActivity() { true } - val container = findViewById(R.id.controller_container) as ViewGroup + val container: ViewGroup = findViewById(R.id.controller_container) router = Conductor.attachRouter(this, container, savedInstanceState) if (!router.hasRootController()) { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/track/SetTrackChaptersDialog.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/track/SetTrackChaptersDialog.kt index 6b1bf0a22..249d96562 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/track/SetTrackChaptersDialog.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/track/SetTrackChaptersDialog.kt @@ -43,7 +43,7 @@ class SetTrackChaptersDialog : DialogController val view = dialog.customView if (view != null) { // Remove focus to update selected number - val np = view.findViewById(R.id.chapters_picker) as NumberPicker + val np: NumberPicker = view.findViewById(R.id.chapters_picker) np.clearFocus() (targetController as? Listener)?.setChaptersRead(item, np.value) @@ -53,7 +53,7 @@ class SetTrackChaptersDialog : DialogController val view = dialog.customView if (view != null) { - val np = view.findViewById(R.id.chapters_picker) as NumberPicker + val np: NumberPicker = view.findViewById(R.id.chapters_picker) // Set initial value np.value = item.track?.last_chapter_read ?: 0 // Don't allow to go from 0 to 9999 diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/track/SetTrackScoreDialog.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/track/SetTrackScoreDialog.kt index 80931940a..44734f64b 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/track/SetTrackScoreDialog.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/track/SetTrackScoreDialog.kt @@ -43,7 +43,7 @@ class SetTrackScoreDialog : DialogController val view = dialog.customView if (view != null) { // Remove focus to update selected number - val np = view.findViewById(R.id.score_picker) as NumberPicker + val np: NumberPicker = view.findViewById(R.id.score_picker) np.clearFocus() (targetController as? Listener)?.setScore(item, np.value) @@ -53,7 +53,7 @@ class SetTrackScoreDialog : DialogController val view = dialog.customView if (view != null) { - val np = view.findViewById(R.id.score_picker) as NumberPicker + val np: NumberPicker = view.findViewById(R.id.score_picker) val scores = item.service.getScoreList().toTypedArray() np.maxValue = scores.size - 1 np.displayedValues = scores diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/recent_updates/DateItem.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/recent_updates/DateItem.kt index de64e85b0..06bf3786c 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/recent_updates/DateItem.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/recent_updates/DateItem.kt @@ -41,7 +41,7 @@ class DateItem(val date: Date) : AbstractHeaderItem() { private val now = Date().time - val section_text = view.findViewById(R.id.section_text) as TextView + val section_text: TextView = view.findViewById(R.id.section_text) fun bind(item: DateItem) { section_text.text = DateUtils.getRelativeTimeSpanString(item.date.time, now, DateUtils.DAY_IN_MILLIS) diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/ViewExtensions.kt b/app/src/main/java/eu/kanade/tachiyomi/util/ViewExtensions.kt index 0bd1ce9a2..e3f6bbb01 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/util/ViewExtensions.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/util/ViewExtensions.kt @@ -28,7 +28,7 @@ fun View.getCoordinates() = Point((left + right) / 2, (top + bottom) / 2) */ inline fun View.snack(message: String, length: Int = Snackbar.LENGTH_LONG, f: Snackbar.() -> Unit): Snackbar { val snack = Snackbar.make(this, message, length) - val textView = snack.view.findViewById(android.support.design.R.id.snackbar_text) as TextView + val textView: TextView = snack.view.findViewById(android.support.design.R.id.snackbar_text) textView.setTextColor(Color.WHITE) snack.f() snack.show() diff --git a/app/src/main/java/eu/kanade/tachiyomi/widget/SimpleNavigationView.kt b/app/src/main/java/eu/kanade/tachiyomi/widget/SimpleNavigationView.kt index 40b1cfa01..8df9fd252 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/widget/SimpleNavigationView.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/widget/SimpleNavigationView.kt @@ -104,7 +104,7 @@ open class SimpleNavigationView @JvmOverloads constructor( class RadioHolder(parent: ViewGroup, listener: View.OnClickListener?) : ClickableHolder(parent.inflate(TR.layout.navigation_view_radio), listener) { - val radio = itemView.findViewById(TR.id.nav_view_item) as RadioButton + val radio: RadioButton = itemView.findViewById(TR.id.nav_view_item) } /** @@ -113,7 +113,7 @@ open class SimpleNavigationView @JvmOverloads constructor( class CheckboxHolder(parent: ViewGroup, listener: View.OnClickListener?) : ClickableHolder(parent.inflate(TR.layout.navigation_view_checkbox), listener) { - val check = itemView.findViewById(TR.id.nav_view_item) as CheckBox + val check: CheckBox = itemView.findViewById(TR.id.nav_view_item) } /** @@ -122,21 +122,21 @@ open class SimpleNavigationView @JvmOverloads constructor( class MultiStateHolder(parent: ViewGroup, listener: View.OnClickListener?) : ClickableHolder(parent.inflate(TR.layout.navigation_view_checkedtext), listener) { - val text = itemView.findViewById(TR.id.nav_view_item) as CheckedTextView + val text: CheckedTextView = itemView.findViewById(TR.id.nav_view_item) } class SpinnerHolder(parent: ViewGroup, listener: OnClickListener? = null) : ClickableHolder(parent.inflate(TR.layout.navigation_view_spinner), listener) { - val text = itemView.findViewById(TR.id.nav_view_item_text) as TextView - val spinner = itemView.findViewById(TR.id.nav_view_item) as Spinner + val text: TextView = itemView.findViewById(TR.id.nav_view_item_text) + val spinner: Spinner = itemView.findViewById(TR.id.nav_view_item) } class EditTextHolder(parent: ViewGroup) : Holder(parent.inflate(TR.layout.navigation_view_text)) { - val wrapper = itemView.findViewById(TR.id.nav_view_item_wrapper) as TextInputLayout - val edit = itemView.findViewById(TR.id.nav_view_item) as EditText + val wrapper: TextInputLayout = itemView.findViewById(TR.id.nav_view_item_wrapper) + val edit: EditText = itemView.findViewById(TR.id.nav_view_item) } protected companion object { diff --git a/app/src/main/res/menu/menu_navigation.xml b/app/src/main/res/menu/menu_navigation.xml index 06e2bd68e..3599d8ba6 100644 --- a/app/src/main/res/menu/menu_navigation.xml +++ b/app/src/main/res/menu/menu_navigation.xml @@ -19,10 +19,6 @@ android:id="@+id/nav_drawer_catalogues" android:icon="@drawable/ic_explore_black_24dp" android:title="@string/label_catalogues" /> - Date: Sun, 24 Sep 2017 04:54:39 -0400 Subject: [PATCH 24/78] added licensed element check for MangaFox (#977) --- .../kanade/tachiyomi/source/online/english/Mangafox.kt | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/source/online/english/Mangafox.kt b/app/src/main/java/eu/kanade/tachiyomi/source/online/english/Mangafox.kt index 062ffb82c..cfabaed74 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/source/online/english/Mangafox.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/source/online/english/Mangafox.kt @@ -89,13 +89,20 @@ class Mangafox : ParsedHttpSource() { val infoElement = document.select("div#title").first() val rowElement = infoElement.select("table > tbody > tr:eq(1)").first() val sideInfoElement = document.select("#series_info").first() + val licensedElement = document.select("div.warning").first() val manga = SManga.create() manga.author = rowElement.select("td:eq(1)").first()?.text() manga.artist = rowElement.select("td:eq(2)").first()?.text() manga.genre = rowElement.select("td:eq(3)").first()?.text() manga.description = infoElement.select("p.summary").first()?.text() - manga.status = sideInfoElement.select(".data").first()?.text().orEmpty().let { parseStatus(it) } + val isLicensed = licensedElement?.text()?.contains("licensed") + if (isLicensed == true) { + manga.status = SManga.LICENSED + } else { + manga.status = sideInfoElement.select(".data").first()?.text().orEmpty().let { parseStatus(it) } + } + manga.thumbnail_url = sideInfoElement.select("div.cover > img").first()?.attr("src") return manga } From 74fd70416fa63a4732df89de28bce05a925788e5 Mon Sep 17 00:00:00 2001 From: ddmgy Date: Sun, 24 Sep 2017 14:01:07 -0400 Subject: [PATCH 25/78] Add option to sort library by source. (#985) * Add option to sort library by source. * Implement change suggested by NoodleMage. --- .../eu/kanade/tachiyomi/ui/library/LibraryNavigationView.kt | 6 +++++- .../java/eu/kanade/tachiyomi/ui/library/LibraryPresenter.kt | 5 +++++ .../main/java/eu/kanade/tachiyomi/ui/library/LibrarySort.kt | 1 + 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryNavigationView.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryNavigationView.kt index 6c1d4a040..7f90523c6 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryNavigationView.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryNavigationView.kt @@ -117,7 +117,9 @@ class LibraryNavigationView @JvmOverloads constructor(context: Context, attrs: A private val unread = Item.MultiSort(R.string.action_filter_unread, this) - override val items = listOf(alphabetically, lastRead, lastUpdated, unread, total) + private val source = Item.MultiSort(R.string.manga_info_source_label, this) + + override val items = listOf(alphabetically, lastRead, lastUpdated, unread, total, source) override val header = Item.Header(R.string.action_sort) @@ -133,6 +135,7 @@ class LibraryNavigationView @JvmOverloads constructor(context: Context, attrs: A lastUpdated.state = if (sorting == LibrarySort.LAST_UPDATED) order else SORT_NONE unread.state = if (sorting == LibrarySort.UNREAD) order else SORT_NONE total.state = if (sorting == LibrarySort.TOTAL) order else SORT_NONE + source.state = if (sorting == LibrarySort.SOURCE) order else SORT_NONE } override fun onItemClicked(item: Item) { @@ -153,6 +156,7 @@ class LibraryNavigationView @JvmOverloads constructor(context: Context, attrs: A lastUpdated -> LibrarySort.LAST_UPDATED unread -> LibrarySort.UNREAD total -> LibrarySort.TOTAL + source -> LibrarySort.SOURCE else -> throw Exception("Unknown sorting") }) preferences.librarySortingAscending().set(if (item.state == SORT_ASC) true else false) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryPresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryPresenter.kt index 7661f218f..30edf6fed 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryPresenter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryPresenter.kt @@ -174,6 +174,11 @@ class LibraryPresenter( val mange2TotalChapter = totalChapterManga[manga2.id!!] ?: 0 manga1TotalChapter.compareTo(mange2TotalChapter) } + LibrarySort.SOURCE -> { + val source1Name = sourceManager.get(manga1.source)?.name ?: "" + val source2Name = sourceManager.get(manga2.source)?.name ?: "" + source1Name.compareTo(source2Name) + } else -> throw Exception("Unknown sorting mode") } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibrarySort.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibrarySort.kt index 677eeb244..57c9f28b1 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibrarySort.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibrarySort.kt @@ -7,4 +7,5 @@ object LibrarySort { const val LAST_UPDATED = 2 const val UNREAD = 3 const val TOTAL = 4 + const val SOURCE = 5 } \ No newline at end of file From f2a06eab373bf959a0005a2798f024438959febb Mon Sep 17 00:00:00 2001 From: Taumer Date: Tue, 26 Sep 2017 23:15:27 +0300 Subject: [PATCH 26/78] Fix downloads from mangahere (#997) --- .../eu/kanade/tachiyomi/source/online/english/Mangahere.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/source/online/english/Mangahere.kt b/app/src/main/java/eu/kanade/tachiyomi/source/online/english/Mangahere.kt index 42a8e17b9..033ef9d6c 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/source/online/english/Mangahere.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/source/online/english/Mangahere.kt @@ -159,7 +159,7 @@ class Mangahere : ParsedHttpSource() { val pages = mutableListOf() document.select("select.wid60").first()?.getElementsByTag("option")?.forEach { - pages.add(Page(pages.size, it.attr("value"))) + pages.add(Page(pages.size, "http:" + it.attr("value"))) } pages.getOrNull(0)?.imageUrl = imageUrlParse(document) return pages @@ -174,6 +174,7 @@ class Mangahere : ParsedHttpSource() { private class OrderBy : Filter.Sort("Order by", arrayOf("Series name", "Rating", "Views", "Total chapters", "Last chapter"), Filter.Sort.Selection(2, false)) + private class GenreList(genres: List) : Filter.Group("Genres", genres) override fun getFilterList() = FilterList( From 9b40d10352ad1b94fcdcbebdef578875f04b247b Mon Sep 17 00:00:00 2001 From: Bram van de Kerkhof Date: Fri, 29 Sep 2017 08:34:13 +0200 Subject: [PATCH 27/78] Improved AMOLED theme. Added Button style for borderless buttons. (#1009) * Improved AMOLED theme. Added Button style for borderless buttons. Some UI improvements. * Deleted unused drawables from app. --- .../library_item_selector_amoled.xml | 6 ++--- .../drawable-v21/list_item_selector_trans.xml | 6 ----- .../drawable/library_item_selector_amoled.xml | 6 ++--- .../res/drawable/list_item_selector_trans.xml | 10 -------- .../res/layout/catalogue_drawer_content.xml | 4 +++- .../catalogue_main_controller_card_item.xml | 12 ++++------ app/src/main/res/layout/navigation_header.xml | 2 +- .../main/res/layout/recently_read_item.xml | 21 ++++++---------- app/src/main/res/values-v21/themes.xml | 2 +- app/src/main/res/values/colors.xml | 2 ++ app/src/main/res/values/styles.xml | 24 +++++++++++++++---- app/src/main/res/values/themes.xml | 5 +++- 12 files changed, 48 insertions(+), 52 deletions(-) delete mode 100644 app/src/main/res/drawable-v21/list_item_selector_trans.xml delete mode 100644 app/src/main/res/drawable/list_item_selector_trans.xml diff --git a/app/src/main/res/drawable-v21/library_item_selector_amoled.xml b/app/src/main/res/drawable-v21/library_item_selector_amoled.xml index 5eab2ca69..319f4c20f 100644 --- a/app/src/main/res/drawable-v21/library_item_selector_amoled.xml +++ b/app/src/main/res/drawable-v21/library_item_selector_amoled.xml @@ -1,16 +1,16 @@ - + - + diff --git a/app/src/main/res/drawable-v21/list_item_selector_trans.xml b/app/src/main/res/drawable-v21/list_item_selector_trans.xml deleted file mode 100644 index 2c8d1001b..000000000 --- a/app/src/main/res/drawable-v21/list_item_selector_trans.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/library_item_selector_amoled.xml b/app/src/main/res/drawable/library_item_selector_amoled.xml index 1cf05bdc9..6a3bef4b4 100644 --- a/app/src/main/res/drawable/library_item_selector_amoled.xml +++ b/app/src/main/res/drawable/library_item_selector_amoled.xml @@ -2,9 +2,9 @@ - - - + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/list_item_selector_trans.xml b/app/src/main/res/drawable/list_item_selector_trans.xml deleted file mode 100644 index f61aa8a0d..000000000 --- a/app/src/main/res/drawable/list_item_selector_trans.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/catalogue_drawer_content.xml b/app/src/main/res/layout/catalogue_drawer_content.xml index 4e04cc655..a9310079a 100644 --- a/app/src/main/res/layout/catalogue_drawer_content.xml +++ b/app/src/main/res/layout/catalogue_drawer_content.xml @@ -12,6 +12,7 @@ android:padding="8dp">