From 967df6f7a3ee7cdd618027801acf7ccb4fbda6a1 Mon Sep 17 00:00:00 2001 From: arkon <eugcheung94@gmail.com> Date: Mon, 17 Aug 2020 15:24:11 -0400 Subject: [PATCH 01/14] Update to Kotlin 1.4 --- app/build.gradle | 2 -- buildSrc/src/main/kotlin/Dependencies.kt | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 4f5df7db6..39fdcf873 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -273,8 +273,6 @@ dependencies { testImplementation "org.robolectric:shadows-multidex:$robolectric_version" testImplementation "org.robolectric:shadows-play-services:$robolectric_version" - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$BuildPluginsVersion.KOTLIN" - final coroutines_version = '1.3.8' implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutines_version" implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutines_version" diff --git a/buildSrc/src/main/kotlin/Dependencies.kt b/buildSrc/src/main/kotlin/Dependencies.kt index 1602df39a..6b9c1f921 100644 --- a/buildSrc/src/main/kotlin/Dependencies.kt +++ b/buildSrc/src/main/kotlin/Dependencies.kt @@ -4,7 +4,7 @@ object Versions { object BuildPluginsVersion { const val AGP = "4.0.1" - const val KOTLIN = "1.3.72" + const val KOTLIN = "1.4.0" const val KTLINT = "9.2.1" const val VERSIONS_PLUGIN = "0.28.0" } From 3aafc671f83d0c8bdc44afc3d69e9bb0d91adb7c Mon Sep 17 00:00:00 2001 From: arkon <eugcheung94@gmail.com> Date: Mon, 17 Aug 2020 15:36:04 -0400 Subject: [PATCH 02/14] Dependency updates --- app/build.gradle | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 39fdcf873..fe24e686f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -154,7 +154,7 @@ dependencies { // UI library implementation 'com.google.android.material:material:1.3.0-alpha02' - standardImplementation 'com.google.firebase:firebase-core:17.4.4' + standardImplementation 'com.google.firebase:firebase-core:17.5.0' // ReactiveX implementation 'io.reactivex:rxandroid:1.2.1' @@ -200,7 +200,7 @@ dependencies { implementation 'io.requery:sqlite-android:3.32.2' // Preferences - implementation 'com.github.tfcporciuncula:flow-preferences:1.3.0' + implementation 'com.github.tfcporciuncula:flow-preferences:1.3.1' // Model View Presenter final nucleus_version = '3.0.0' @@ -273,7 +273,7 @@ dependencies { testImplementation "org.robolectric:shadows-multidex:$robolectric_version" testImplementation "org.robolectric:shadows-play-services:$robolectric_version" - final coroutines_version = '1.3.8' + final coroutines_version = '1.3.9' implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutines_version" implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutines_version" From 4ef25c75b763811439bbd9a5512a22a14c864194 Mon Sep 17 00:00:00 2001 From: arkon <eugcheung94@gmail.com> Date: Tue, 18 Aug 2020 17:40:17 -0400 Subject: [PATCH 03/14] Use core-ktx for bolding chapter transition text --- .../viewer/pager/PagerTransitionHolder.kt | 18 +++++------------- .../viewer/webtoon/WebtoonTransitionHolder.kt | 18 +++++------------- 2 files changed, 10 insertions(+), 26 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerTransitionHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerTransitionHolder.kt index ed93fa3d1..f116b2600 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerTransitionHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerTransitionHolder.kt @@ -1,9 +1,6 @@ package eu.kanade.tachiyomi.ui.reader.viewer.pager import android.annotation.SuppressLint -import android.graphics.Typeface -import android.text.Spanned -import android.text.style.StyleSpan import android.view.Gravity import android.view.View import android.view.ViewGroup @@ -13,6 +10,7 @@ import android.widget.LinearLayout import android.widget.ProgressBar import android.widget.TextView import androidx.appcompat.widget.AppCompatTextView +import androidx.core.text.bold import androidx.core.text.buildSpannedString import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.ui.reader.model.ChapterTransition @@ -91,12 +89,9 @@ class PagerTransitionHolder( textView.text = if (nextChapter != null) { buildSpannedString { - append(context.getString(R.string.transition_finished)) - setSpan(StyleSpan(Typeface.BOLD), 0, length, Spanned.SPAN_INCLUSIVE_EXCLUSIVE) + bold { append(context.getString(R.string.transition_finished)) } append("\n${transition.from.chapter.name}\n\n") - val currSize = length - append(context.getString(R.string.transition_next)) - setSpan(StyleSpan(Typeface.BOLD), currSize, length, Spanned.SPAN_INCLUSIVE_EXCLUSIVE) + bold { append(context.getString(R.string.transition_next)) } append("\n${nextChapter.chapter.name}\n\n") } } else { @@ -116,12 +111,9 @@ class PagerTransitionHolder( textView.text = if (prevChapter != null) { buildSpannedString { - append(context.getString(R.string.transition_current)) - setSpan(StyleSpan(Typeface.BOLD), 0, length, Spanned.SPAN_INCLUSIVE_EXCLUSIVE) + bold { append(context.getString(R.string.transition_current)) } append("\n${transition.from.chapter.name}\n\n") - val currSize = length - append(context.getString(R.string.transition_previous)) - setSpan(StyleSpan(Typeface.BOLD), currSize, length, Spanned.SPAN_INCLUSIVE_EXCLUSIVE) + bold { append(context.getString(R.string.transition_previous)) } append("\n${prevChapter.chapter.name}\n\n") } } else { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonTransitionHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonTransitionHolder.kt index b45ed13de..e220b0680 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonTransitionHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonTransitionHolder.kt @@ -1,8 +1,5 @@ package eu.kanade.tachiyomi.ui.reader.viewer.webtoon -import android.graphics.Typeface -import android.text.Spanned -import android.text.style.StyleSpan import android.view.Gravity import android.view.ViewGroup.LayoutParams.MATCH_PARENT import android.view.ViewGroup.LayoutParams.WRAP_CONTENT @@ -11,6 +8,7 @@ import android.widget.ProgressBar import android.widget.TextView import androidx.appcompat.widget.AppCompatButton import androidx.appcompat.widget.AppCompatTextView +import androidx.core.text.bold import androidx.core.text.buildSpannedString import androidx.core.view.isNotEmpty import androidx.core.view.isVisible @@ -94,12 +92,9 @@ class WebtoonTransitionHolder( textView.text = if (nextChapter != null) { buildSpannedString { - append(context.getString(R.string.transition_finished)) - setSpan(StyleSpan(Typeface.BOLD), 0, length, Spanned.SPAN_INCLUSIVE_EXCLUSIVE) + bold { append(context.getString(R.string.transition_finished)) } append("\n${transition.from.chapter.name}\n\n") - val currSize = length - append(context.getString(R.string.transition_next)) - setSpan(StyleSpan(Typeface.BOLD), currSize, length, Spanned.SPAN_INCLUSIVE_EXCLUSIVE) + bold { append(context.getString(R.string.transition_next)) } append("\n${nextChapter.chapter.name}\n\n") } } else { @@ -119,12 +114,9 @@ class WebtoonTransitionHolder( textView.text = if (prevChapter != null) { buildSpannedString { - append(context.getString(R.string.transition_current)) - setSpan(StyleSpan(Typeface.BOLD), 0, length, Spanned.SPAN_INCLUSIVE_EXCLUSIVE) + bold { append(context.getString(R.string.transition_current)) } append("\n${transition.from.chapter.name}\n\n") - val currSize = length - append(context.getString(R.string.transition_previous)) - setSpan(StyleSpan(Typeface.BOLD), currSize, length, Spanned.SPAN_INCLUSIVE_EXCLUSIVE) + bold { append(context.getString(R.string.transition_previous)) } append("\n${prevChapter.chapter.name}\n\n") } } else { From ba6778143162b185cc5d5a0dc5e5c0e4968c6258 Mon Sep 17 00:00:00 2001 From: arkon <eugcheung94@gmail.com> Date: Tue, 18 Aug 2020 17:40:24 -0400 Subject: [PATCH 04/14] Minor wording edit --- app/src/main/res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 872a4c0b3..3f0e8822f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -337,7 +337,7 @@ <!-- Tracking section --> <string name="pref_auto_update_manga_sync">Update chapter progress after reading</string> <string name="services">Services</string> - <string name="tracking_info">One-way sync to update the chapter progress in tracking services. Set up tracking for individual manga entries from their tracking chip.</string> + <string name="tracking_info">One-way sync to update the chapter progress in tracking services. Set up tracking for individual manga entries from their tracking button.</string> <!-- Browse section --> <string name="pref_enable_automatic_extension_updates">Check for extension updates</string> From 4c8665c9f015cc87c0280fa9495f0748c5490fba Mon Sep 17 00:00:00 2001 From: arkon <eugcheung94@gmail.com> Date: Tue, 18 Aug 2020 17:47:07 -0400 Subject: [PATCH 05/14] Don't enqueue bookmarked chapters for deletion (fixes #3691) --- .../data/download/DownloadManager.kt | 22 ++++++++++++------- .../tachiyomi/ui/manga/MangaPresenter.kt | 15 +++++-------- 2 files changed, 19 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadManager.kt b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadManager.kt index d8a8368ac..400fe5648 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadManager.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadManager.kt @@ -198,14 +198,10 @@ class DownloadManager(private val context: Context) { * @param manga the manga of the chapters. * @param source the source of the chapters. */ - fun deleteChapters(chapters: List<Chapter>, manga: Manga, source: Source) { - queue.remove(chapters) + fun deleteChapters(chapters: List<Chapter>, manga: Manga, source: Source): List<Chapter> { + val filteredChapters = getChaptersToDelete(chapters) - val filteredChapters = if (!preferences.removeBookmarkedChapters()) { - chapters.filterNot { it.bookmark } - } else { - chapters - } + queue.remove(filteredChapters) val chapterDirs = provider.findChapterDirs(filteredChapters, manga, source) chapterDirs.forEach { it.delete() } @@ -213,6 +209,8 @@ class DownloadManager(private val context: Context) { if (cache.getDownloadCount(manga) == 0) { // Delete manga directory if empty chapterDirs.firstOrNull()?.parentFile?.delete() } + + return filteredChapters } /** @@ -234,7 +232,7 @@ class DownloadManager(private val context: Context) { * @param manga the manga of the chapters. */ fun enqueueDeleteChapters(chapters: List<Chapter>, manga: Manga) { - pendingDeleter.addChapters(chapters, manga) + pendingDeleter.addChapters(getChaptersToDelete(chapters), manga) } /** @@ -273,4 +271,12 @@ class DownloadManager(private val context: Context) { Timber.e("Could not rename downloaded chapter: %s.", oldNames.joinToString()) } } + + private fun getChaptersToDelete(chapters: List<Chapter>): List<Chapter> { + return if (!preferences.removeBookmarkedChapters()) { + chapters.filterNot { it.bookmark } + } else { + chapters + } + } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaPresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaPresenter.kt index a3ea29a82..95ee65ce3 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaPresenter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaPresenter.kt @@ -494,16 +494,11 @@ class MangaPresenter( * @param chapters the chapters to delete. */ private fun deleteChaptersInternal(chapters: List<ChapterItem>) { - val filteredChapters = if (!preferences.removeBookmarkedChapters()) { - chapters.filterNot { it.bookmark } - } else { - chapters - } - - downloadManager.deleteChapters(filteredChapters, manga, source) - filteredChapters.forEach { - it.status = Download.NOT_DOWNLOADED - it.download = null + downloadManager.deleteChapters(chapters, manga, source).forEach { + if (it is ChapterItem) { + it.status = Download.NOT_DOWNLOADED + it.download = null + } } } From 15f49b39b85d2c2bb25e0e95962f006e0a0f2653 Mon Sep 17 00:00:00 2001 From: tatsuya25 <67844862+tatsuya25@users.noreply.github.com> Date: Sat, 22 Aug 2020 17:42:42 +0300 Subject: [PATCH 06/14] Remove Glide Proguard rules (#3702) * update glide rules in progurad * remove glide rules since it is implemented by glide it self (through consumerproguardfiles) --- app/proguard-rules.pro | 9 --------- 1 file changed, 9 deletions(-) diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index 5b3943f6e..afe8b6fe4 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -29,15 +29,6 @@ -dontwarn javax.annotation.** -dontwarn retrofit2.Platform$Java8 -# Glide specific rules # -# https://github.com/bumptech/glide --keep public class * implements com.bumptech.glide.module.GlideModule --keep public class * extends com.bumptech.glide.AppGlideModule --keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** { - **[] $VALUES; - public *; -} - # RxJava 1.1.0 -dontwarn sun.misc.** From 4c31e3fc5ff558038342c6981aa38b3eb8789ec2 Mon Sep 17 00:00:00 2001 From: arkon <eugcheung94@gmail.com> Date: Thu, 20 Aug 2020 08:46:16 -0400 Subject: [PATCH 07/14] AndroidX dependency updates --- app/build.gradle | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index fe24e686f..f34a726e7 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -129,8 +129,8 @@ dependencies { // AndroidX libraries implementation 'androidx.annotation:annotation:1.1.0' - implementation 'androidx.appcompat:appcompat:1.3.0-alpha01' - implementation 'androidx.biometric:biometric:1.0.1' + implementation 'androidx.appcompat:appcompat:1.3.0-alpha02' + implementation 'androidx.biometric:biometric:1.1.0-alpha02' implementation 'androidx.browser:browser:1.2.0' implementation 'androidx.cardview:cardview:1.0.0' implementation 'androidx.constraintlayout:constraintlayout:2.0.0-rc1' @@ -141,13 +141,13 @@ dependencies { implementation 'androidx.recyclerview:recyclerview:1.2.0-alpha05' implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.2.0-alpha01' - final lifecycle_version = '2.3.0-alpha06' + final lifecycle_version = '2.3.0-alpha07' implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version" implementation "androidx.lifecycle:lifecycle-process:$lifecycle_version" implementation "androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version" // Job scheduling - final work_version = '2.4.0' + final work_version = '2.5.0-alpha01' implementation "androidx.work:work-runtime:$work_version" implementation "androidx.work:work-runtime-ktx:$work_version" From 02e370c2d8b46de5668f628c62868c0bf7aed6ad Mon Sep 17 00:00:00 2001 From: arkon <eugcheung94@gmail.com> Date: Sat, 22 Aug 2020 10:44:52 -0400 Subject: [PATCH 08/14] Remove OkHttp Proguard rules https://square.github.io/okhttp/r8_proguard/ --- app/proguard-rules.pro | 6 ------ 1 file changed, 6 deletions(-) diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index afe8b6fe4..07ccd102e 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -23,12 +23,6 @@ <init>(); } -# OkHttp --dontwarn okhttp3.** --dontwarn okio.** --dontwarn javax.annotation.** --dontwarn retrofit2.Platform$Java8 - # RxJava 1.1.0 -dontwarn sun.misc.** From 4929e66eccbd53c35fc62a755015d03179163927 Mon Sep 17 00:00:00 2001 From: arkon <eugcheung94@gmail.com> Date: Sat, 22 Aug 2020 12:36:29 -0400 Subject: [PATCH 09/14] Update ActionMode styling --- app/build.gradle | 2 +- app/src/main/res/values/styles.xml | 8 ++++++++ app/src/main/res/values/themes.xml | 6 ++++++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index f34a726e7..378d389e2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -133,7 +133,7 @@ dependencies { implementation 'androidx.biometric:biometric:1.1.0-alpha02' implementation 'androidx.browser:browser:1.2.0' implementation 'androidx.cardview:cardview:1.0.0' - implementation 'androidx.constraintlayout:constraintlayout:2.0.0-rc1' + implementation 'androidx.constraintlayout:constraintlayout:2.0.0' implementation 'androidx.coordinatorlayout:coordinatorlayout:1.1.0' implementation 'androidx.core:core-ktx:1.4.0-alpha01' implementation 'androidx.multidex:multidex:2.0.1' diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index bb38bd7ca..9a3845cba 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -14,6 +14,14 @@ <item name="tint">?attr/colorOnPrimary</item> </style> + <style name="Theme.ActionMode" parent="Base.Widget.AppCompat.ActionMode"> + <item name="background">?attr/colorPrimary</item> + </style> + + <style name="Theme.ActionMode.CloseButton" parent="Base.Widget.AppCompat.ActionButton.CloseMode"> + <item name="android:tint">?attr/colorOnPrimary</item> + </style> + <!--===========--> <!--AlertDialog--> diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index caa83dff5..738f9211c 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -47,6 +47,9 @@ <item name="android:navigationBarColor">?attr/colorPrimary</item> <item name="windowActionModeOverlay">true</item> <item name="elevationOverlayEnabled">false</item> + <item name="actionModeStyle">@style/Theme.ActionMode</item> + <item name="actionModeCloseButtonStyle">@style/Theme.ActionMode.CloseButton</item> + <item name="actionModeCloseDrawable">@drawable/ic_close_24dp</item> <item name="actionBarPopupTheme">@style/ThemeOverlay.MaterialComponents</item> <item name="toolbarNavigationButtonStyle">@style/Theme.Toolbar.Navigation</item> <item name="preferenceTheme">@style/PreferenceThemeOverlay</item> @@ -131,6 +134,9 @@ <item name="android:navigationBarColor">?attr/colorPrimary</item> <item name="windowActionModeOverlay">true</item> <item name="elevationOverlayEnabled">false</item> + <item name="actionModeStyle">@style/Theme.ActionMode</item> + <item name="actionModeCloseButtonStyle">@style/Theme.ActionMode.CloseButton</item> + <item name="actionModeCloseDrawable">@drawable/ic_close_24dp</item> <item name="actionBarTheme">@style/ThemeOverlay.MaterialComponents.Dark.ActionBar</item> <item name="actionBarPopupTheme">@style/ThemeOverlay.MaterialComponents</item> <item name="toolbarNavigationButtonStyle">@style/Theme.Toolbar.Navigation</item> From 3f1355c4136843f3d7d85a626370ce1b6fd3f1e0 Mon Sep 17 00:00:00 2001 From: armangido <42208098+armangido@users.noreply.github.com> Date: Sun, 23 Aug 2020 00:37:21 +0800 Subject: [PATCH 10/14] Update WebViewActivity.kt (#3617) This code added is for some extension that blocks tachiyomi, by tricking it that it was sent by a android browser, nothing major changes, --- .../java/eu/kanade/tachiyomi/ui/webview/WebViewActivity.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/webview/WebViewActivity.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/webview/WebViewActivity.kt index 2eaed5bd6..ea94582d1 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/webview/WebViewActivity.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/webview/WebViewActivity.kt @@ -100,7 +100,9 @@ class WebViewActivity : BaseActivity<WebviewActivityBinding>() { binding.webview.webViewClient = object : WebViewClientCompat() { override fun shouldOverrideUrlCompat(view: WebView, url: String): Boolean { - view.loadUrl(url) + val android_browser: MutableMap<String, String> = HashMap() + android_browser["X-Requested-With"] = "com.android.browser" + view.loadUrl(url,android_browser) return true } From 9920ff617b01359538ea0fe21098d247c6dc267d Mon Sep 17 00:00:00 2001 From: arkon <eugcheung94@gmail.com> Date: Sat, 22 Aug 2020 12:49:00 -0400 Subject: [PATCH 11/14] Clean up X-Requested-With change This only really affects the initial request, subsequent requests may still use the package name. --- .../eu/kanade/tachiyomi/network/CloudflareInterceptor.kt | 3 ++- .../eu/kanade/tachiyomi/ui/webview/WebViewActivity.kt | 9 ++++----- .../java/eu/kanade/tachiyomi/util/system/WebViewUtil.kt | 2 ++ 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/network/CloudflareInterceptor.kt b/app/src/main/java/eu/kanade/tachiyomi/network/CloudflareInterceptor.kt index d517a9e4c..5b2cccde2 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/network/CloudflareInterceptor.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/network/CloudflareInterceptor.kt @@ -89,7 +89,8 @@ class CloudflareInterceptor(private val context: Context) : Interceptor { var isWebViewOutdated = false val origRequestUrl = request.url.toString() - val headers = request.headers.toMultimap().mapValues { it.value.getOrNull(0) ?: "" } + val headers = request.headers.toMultimap().mapValues { it.value.getOrNull(0) ?: "" }.toMutableMap() + headers["X-Requested-With"] = WebViewUtil.REQUESTED_WITH handler.post { val webview = WebView(context) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/webview/WebViewActivity.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/webview/WebViewActivity.kt index ea94582d1..89b7933f9 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/webview/WebViewActivity.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/webview/WebViewActivity.kt @@ -70,13 +70,14 @@ class WebViewActivity : BaseActivity<WebviewActivityBinding>() { if (bundle == null) { val url = intent.extras!!.getString(URL_KEY) ?: return - var headers = emptyMap<String, String>() + var headers = mutableMapOf<String, String>() val source = sourceManager.get(intent.extras!!.getLong(SOURCE_KEY)) as? HttpSource if (source != null) { - headers = source.headers.toMultimap().mapValues { it.value.getOrNull(0) ?: "" } + headers = source.headers.toMultimap().mapValues { it.value.getOrNull(0) ?: "" }.toMutableMap() binding.webview.settings.userAgentString = source.headers["User-Agent"] } + headers["X-Requested-With"] = WebViewUtil.REQUESTED_WITH binding.webview.setDefaultSettings() @@ -100,9 +101,7 @@ class WebViewActivity : BaseActivity<WebviewActivityBinding>() { binding.webview.webViewClient = object : WebViewClientCompat() { override fun shouldOverrideUrlCompat(view: WebView, url: String): Boolean { - val android_browser: MutableMap<String, String> = HashMap() - android_browser["X-Requested-With"] = "com.android.browser" - view.loadUrl(url,android_browser) + view.loadUrl(url, headers) return true } diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/system/WebViewUtil.kt b/app/src/main/java/eu/kanade/tachiyomi/util/system/WebViewUtil.kt index b92866e46..8527c6539 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/util/system/WebViewUtil.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/util/system/WebViewUtil.kt @@ -11,6 +11,8 @@ object WebViewUtil { Regex(""".*Chrome/(\d+)\..*""") } + const val REQUESTED_WITH = "com.android.browser" + const val MINIMUM_WEBVIEW_VERSION = 80 fun supportsWebView(context: Context): Boolean { From 9ba11a585fcee1277f8c5e0449477a19a346718f Mon Sep 17 00:00:00 2001 From: arkon <eugcheung94@gmail.com> Date: Sat, 22 Aug 2020 13:03:39 -0400 Subject: [PATCH 12/14] Adopt tab/controller transitions from SY Original author: @jobobby04 --- .../tachiyomi/ui/base/controller/ConductorExtensions.kt | 6 +++--- .../main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt | 4 ++-- .../java/eu/kanade/tachiyomi/ui/main/ViewHeightAnimator.kt | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/base/controller/ConductorExtensions.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/base/controller/ConductorExtensions.kt index 7efc823b5..ef4239912 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/base/controller/ConductorExtensions.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/base/controller/ConductorExtensions.kt @@ -28,8 +28,8 @@ fun Controller.requestPermissionsSafe(permissions: Array<String>, requestCode: I } } -fun Controller.withFadeTransaction(duration: Long = 150L): RouterTransaction { +fun Controller.withFadeTransaction(): RouterTransaction { return RouterTransaction.with(this) - .pushChangeHandler(FadeChangeHandler(duration)) - .popChangeHandler(FadeChangeHandler(duration)) + .pushChangeHandler(FadeChangeHandler()) + .popChangeHandler(FadeChangeHandler()) } 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 1ce35ab00..a5829b6a7 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 @@ -86,7 +86,7 @@ class MainActivity : BaseActivity<MainActivityBinding>() { setSupportActionBar(binding.toolbar) - tabAnimator = ViewHeightAnimator(binding.tabs) + tabAnimator = ViewHeightAnimator(binding.tabs, 0L) bottomNavAnimator = ViewHeightAnimator(binding.bottomNav) // Set behavior of bottom nav @@ -312,7 +312,7 @@ class MainActivity : BaseActivity<MainActivityBinding>() { } private fun setRoot(controller: Controller, id: Int) { - router.setRoot(RouterTransaction.with(controller).tag(id.toString())) + router.setRoot(controller.withFadeTransaction().tag(id.toString())) } private fun syncActivityViewWithController(to: Controller?, from: Controller? = null) { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/main/ViewHeightAnimator.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/main/ViewHeightAnimator.kt index e76587889..ce22a9219 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/main/ViewHeightAnimator.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/main/ViewHeightAnimator.kt @@ -6,7 +6,7 @@ import android.view.ViewTreeObserver import android.view.animation.DecelerateInterpolator import androidx.annotation.Keep -class ViewHeightAnimator(val view: View) { +class ViewHeightAnimator(val view: View, val duration: Long = 250L) { /** * The default height of the view. It's unknown until the view is layout. @@ -23,7 +23,7 @@ class ViewHeightAnimator(val view: View) { */ private val animation by lazy { ObjectAnimator.ofInt(this, "height", height).apply { - duration = 250L + duration = this@ViewHeightAnimator.duration interpolator = DecelerateInterpolator() } } From fe7c7e72f54dc36b74a2683089a51cb4690aaf46 Mon Sep 17 00:00:00 2001 From: arkon <eugcheung94@gmail.com> Date: Sat, 22 Aug 2020 17:33:04 -0400 Subject: [PATCH 13/14] Filter out hidden directories for local source (closes #3706) --- app/src/main/java/eu/kanade/tachiyomi/source/LocalSource.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/java/eu/kanade/tachiyomi/source/LocalSource.kt b/app/src/main/java/eu/kanade/tachiyomi/source/LocalSource.kt index 506ef910f..23d0f00b4 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/source/LocalSource.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/source/LocalSource.kt @@ -80,6 +80,7 @@ class LocalSource(private val context: Context) : CatalogueSource { .mapNotNull { it.listFiles()?.toList() } .flatten() .filter { it.isDirectory } + .filterNot { it.name.startsWith('.') } .filter { if (time == 0L) it.name.contains(query, ignoreCase = true) else it.lastModified() >= time } .distinctBy { it.name } From e90b0aaf8bb14e4b3070e5353cdd3f892d7cca6f Mon Sep 17 00:00:00 2001 From: arkon <eugcheung94@gmail.com> Date: Sun, 23 Aug 2020 10:42:20 -0400 Subject: [PATCH 14/14] Adopt OneWayFadeChangeHandler from SY From https://github.com/jobobby04/TachiyomiSY/commit/d86f3ffad808f01d4f04f136c63c0e11f135748c --- .../ui/base/controller/ConductorExtensions.kt | 5 +-- .../ui/base/controller/DialogController.kt | 1 - .../controller/OneWayFadeChangeHandler.kt | 43 +++++++++++++++++++ 3 files changed, 45 insertions(+), 4 deletions(-) create mode 100644 app/src/main/java/eu/kanade/tachiyomi/ui/base/controller/OneWayFadeChangeHandler.kt diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/base/controller/ConductorExtensions.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/base/controller/ConductorExtensions.kt index ef4239912..f5c2277ac 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/base/controller/ConductorExtensions.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/base/controller/ConductorExtensions.kt @@ -6,7 +6,6 @@ import androidx.core.content.ContextCompat import com.bluelinelabs.conductor.Controller import com.bluelinelabs.conductor.Router import com.bluelinelabs.conductor.RouterTransaction -import com.bluelinelabs.conductor.changehandler.FadeChangeHandler fun Router.popControllerWithTag(tag: String): Boolean { val controller = getControllerWithTag(tag) @@ -30,6 +29,6 @@ fun Controller.requestPermissionsSafe(permissions: Array<String>, requestCode: I fun Controller.withFadeTransaction(): RouterTransaction { return RouterTransaction.with(this) - .pushChangeHandler(FadeChangeHandler()) - .popChangeHandler(FadeChangeHandler()) + .pushChangeHandler(OneWayFadeChangeHandler()) + .popChangeHandler(OneWayFadeChangeHandler()) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/base/controller/DialogController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/base/controller/DialogController.kt index 0e487cb03..321d55c40 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/base/controller/DialogController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/base/controller/DialogController.kt @@ -14,7 +14,6 @@ import com.bluelinelabs.conductor.changehandler.SimpleSwapChangeHandler * A controller that displays a dialog window, floating on top of its activity's window. * This is a wrapper over [Dialog] object like [android.app.DialogFragment]. * - * * Implementations should override this class and implement [.onCreateDialog] to create a custom dialog, such as an [android.app.AlertDialog] */ abstract class DialogController : RestoreViewOnCreateController { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/base/controller/OneWayFadeChangeHandler.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/base/controller/OneWayFadeChangeHandler.kt new file mode 100644 index 000000000..b1209e0b4 --- /dev/null +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/base/controller/OneWayFadeChangeHandler.kt @@ -0,0 +1,43 @@ +package eu.kanade.tachiyomi.ui.base.controller + +import android.animation.Animator +import android.animation.AnimatorSet +import android.view.View +import android.view.ViewGroup +import com.bluelinelabs.conductor.ControllerChangeHandler +import com.bluelinelabs.conductor.changehandler.FadeChangeHandler + +/** + * A variation of [FadeChangeHandler] that only fades in. + */ +class OneWayFadeChangeHandler : FadeChangeHandler { + constructor() + constructor(removesFromViewOnPush: Boolean) : super(removesFromViewOnPush) + constructor(duration: Long) : super(duration) + constructor(duration: Long, removesFromViewOnPush: Boolean) : super( + duration, + removesFromViewOnPush + ) + + override fun getAnimator( + container: ViewGroup, + from: View?, + to: View?, + isPush: Boolean, + toAddedToContainer: Boolean + ): Animator { + if (to != null) { + return super.getAnimator(container, from, to, isPush, toAddedToContainer) + } + + if (from != null && (!isPush || removesFromViewOnPush())) { + container.removeView(from) + } + + return AnimatorSet() + } + + override fun copy(): ControllerChangeHandler { + return OneWayFadeChangeHandler(animationDuration, removesFromViewOnPush()) + } +}