From d38cd2547a251b1cbaa52fe54042744cfd6376cf Mon Sep 17 00:00:00 2001 From: paronos Date: Sun, 25 Mar 2018 17:08:29 +0200 Subject: [PATCH 01/15] Enable TLS 1.1 and TLS 1.2 on Android KitKat (and older) (#1316) * Enable TLS 1.1 and TLS 1.2 on Android KitKat (and older) * enable SSLv3 * use extension function --- .../kanade/tachiyomi/network/NetworkHelper.kt | 85 +++++++++++++++++++ 1 file changed, 85 insertions(+) diff --git a/app/src/main/java/eu/kanade/tachiyomi/network/NetworkHelper.kt b/app/src/main/java/eu/kanade/tachiyomi/network/NetworkHelper.kt index b8f5d756a..97d4b4d7d 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/network/NetworkHelper.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/network/NetworkHelper.kt @@ -1,9 +1,22 @@ package eu.kanade.tachiyomi.network import android.content.Context +import android.os.Build import okhttp3.Cache import okhttp3.OkHttpClient import java.io.File +import java.io.IOException +import java.net.InetAddress +import java.net.Socket +import java.net.UnknownHostException +import java.security.KeyManagementException +import java.security.KeyStore +import java.security.NoSuchAlgorithmException +import javax.net.ssl.SSLContext +import javax.net.ssl.SSLSocket +import javax.net.ssl.SSLSocketFactory +import javax.net.ssl.TrustManagerFactory +import javax.net.ssl.X509TrustManager class NetworkHelper(context: Context) { @@ -16,6 +29,7 @@ class NetworkHelper(context: Context) { val client = OkHttpClient.Builder() .cookieJar(cookieManager) .cache(Cache(cacheDir, cacheSize)) + .enableTLS12() .build() val cloudflareClient = client.newBuilder() @@ -25,4 +39,75 @@ class NetworkHelper(context: Context) { val cookies: PersistentCookieStore get() = cookieManager.store + private fun OkHttpClient.Builder.enableTLS12(): OkHttpClient.Builder { + if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT) { + return this + } + + val trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()) + trustManagerFactory.init(null as KeyStore?) + val trustManagers = trustManagerFactory.trustManagers + if (trustManagers.size == 1 && trustManagers[0] is X509TrustManager) { + class TLSSocketFactory @Throws(KeyManagementException::class, NoSuchAlgorithmException::class) + constructor() : SSLSocketFactory() { + + private val internalSSLSocketFactory: SSLSocketFactory + + init { + val context = SSLContext.getInstance("TLS") + context.init(null, null, null) + internalSSLSocketFactory = context.socketFactory + } + + override fun getDefaultCipherSuites(): Array { + return internalSSLSocketFactory.defaultCipherSuites + } + + override fun getSupportedCipherSuites(): Array { + return internalSSLSocketFactory.supportedCipherSuites + } + + @Throws(IOException::class) + override fun createSocket(): Socket? { + return enableTLSOnSocket(internalSSLSocketFactory.createSocket()) + } + + @Throws(IOException::class) + override fun createSocket(s: Socket, host: String, port: Int, autoClose: Boolean): Socket? { + return enableTLSOnSocket(internalSSLSocketFactory.createSocket(s, host, port, autoClose)) + } + + @Throws(IOException::class, UnknownHostException::class) + override fun createSocket(host: String, port: Int): Socket? { + return enableTLSOnSocket(internalSSLSocketFactory.createSocket(host, port)) + } + + @Throws(IOException::class, UnknownHostException::class) + override fun createSocket(host: String, port: Int, localHost: InetAddress, localPort: Int): Socket? { + return enableTLSOnSocket(internalSSLSocketFactory.createSocket(host, port, localHost, localPort)) + } + + @Throws(IOException::class) + override fun createSocket(host: InetAddress, port: Int): Socket? { + return enableTLSOnSocket(internalSSLSocketFactory.createSocket(host, port)) + } + + @Throws(IOException::class) + override fun createSocket(address: InetAddress, port: Int, localAddress: InetAddress, localPort: Int): Socket? { + return enableTLSOnSocket(internalSSLSocketFactory.createSocket(address, port, localAddress, localPort)) + } + + private fun enableTLSOnSocket(socket: Socket?): Socket? { + if (socket != null && socket is SSLSocket) { + socket.enabledProtocols = socket.supportedProtocols + } + return socket + } + } + + sslSocketFactory(TLSSocketFactory(), trustManagers[0] as X509TrustManager) + } + + return this + } } From 95e60ed77564ffeddf367a176bff9ed897cb9104 Mon Sep 17 00:00:00 2001 From: inorichi Date: Thu, 5 Apr 2018 10:36:29 +0200 Subject: [PATCH 02/15] Update cloudflare interceptor and android studio --- app/build.gradle | 2 +- .../kanade/tachiyomi/network/CloudflareInterceptor.kt | 11 +++++------ build.gradle | 2 +- gradle/wrapper/gradle-wrapper.properties | 4 ++-- 4 files changed, 9 insertions(+), 10 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 4197abdc4..60cda489d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -30,7 +30,7 @@ ext { android { compileSdkVersion 27 - buildToolsVersion "27.0.2" + buildToolsVersion '27.0.3' publishNonDefault true defaultConfig { 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 bc55342ab..dae1252c2 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/network/CloudflareInterceptor.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/network/CloudflareInterceptor.kt @@ -47,19 +47,18 @@ class CloudflareInterceptor : Interceptor { } val js = operation - .replace(Regex("""a\.value =(.+?) \+.*"""), "$1") + .replace(Regex("""a\.value = (.+ \+ t\.length).+"""), "$1") .replace(Regex("""\s{3,}[a-z](?: = |\.).+"""), "") + .replace("t.length", "${domain.length}") .replace("\n", "") - val result = (duktape.evaluate(js) as Double).toInt() - - val answer = "${result + domain.length}" + val result = (duktape.evaluate(js) as Double) val cloudflareUrl = HttpUrl.parse("${url.scheme()}://$domain/cdn-cgi/l/chk_jschl")!! .newBuilder() .addQueryParameter("jschl_vc", challenge) .addQueryParameter("pass", pass) - .addQueryParameter("jschl_answer", answer) + .addQueryParameter("jschl_answer", "$result") .toString() val cloudflareHeaders = originalRequest.headers() @@ -71,4 +70,4 @@ class CloudflareInterceptor : Interceptor { } } -} \ No newline at end of file +} diff --git a/build.gradle b/build.gradle index 3378a689f..2a39702a8 100644 --- a/build.gradle +++ b/build.gradle @@ -7,7 +7,7 @@ buildscript { google() } dependencies { - classpath 'com.android.tools.build:gradle:3.0.1' + classpath 'com.android.tools.build:gradle:3.1.0' classpath 'com.github.ben-manes:gradle-versions-plugin:0.17.0' classpath 'com.github.zellius:android-shortcut-gradle-plugin:0.1.2' // NOTE: Do not place your application dependencies here; they belong diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index c6a753671..620a96dc3 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Wed Oct 25 23:17:30 CEST 2017 +#Thu Apr 05 09:21:32 CEST 2018 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip From 7ab16a69dfd4d34c7627be04b99dba1d94333f21 Mon Sep 17 00:00:00 2001 From: inorichi Date: Thu, 5 Apr 2018 10:56:16 +0200 Subject: [PATCH 03/15] Update travis script --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index ecc3a426c..1c99346f3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,7 @@ language: android android: components: - - build-tools-27.0.2 + - build-tools-27.0.3 - android-27 - extra-android-m2repository - extra-google-m2repository From 4bbf78e840bd28c1024b2726c98dd641a1e3006e Mon Sep 17 00:00:00 2001 From: inorichi Date: Thu, 5 Apr 2018 11:58:28 +0200 Subject: [PATCH 04/15] Don't send cache control with cloudflare challenge --- .../eu/kanade/tachiyomi/network/CloudflareInterceptor.kt | 9 +++++---- 1 file changed, 5 insertions(+), 4 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 dae1252c2..1a41d117f 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/network/CloudflareInterceptor.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/network/CloudflareInterceptor.kt @@ -1,6 +1,7 @@ package eu.kanade.tachiyomi.network import com.squareup.duktape.Duktape +import okhttp3.CacheControl import okhttp3.HttpUrl import okhttp3.Interceptor import okhttp3.Request @@ -21,7 +22,7 @@ class CloudflareInterceptor : Interceptor { val response = chain.proceed(chain.request()) // Check if Cloudflare anti-bot is on - if (response.code() == 503 && serverCheck.contains(response.header("Server"))) { + if (response.code() == 503 && response.header("Server") in serverCheck) { return chain.proceed(resolveChallenge(response)) } @@ -43,7 +44,7 @@ class CloudflareInterceptor : Interceptor { val pass = passPattern.find(content)?.groups?.get(1)?.value if (operation == null || challenge == null || pass == null) { - throw RuntimeException("Failed resolving Cloudflare challenge") + throw Exception("Failed resolving Cloudflare challenge") } val js = operation @@ -52,7 +53,7 @@ class CloudflareInterceptor : Interceptor { .replace("t.length", "${domain.length}") .replace("\n", "") - val result = (duktape.evaluate(js) as Double) + val result = duktape.evaluate(js) as Double val cloudflareUrl = HttpUrl.parse("${url.scheme()}://$domain/cdn-cgi/l/chk_jschl")!! .newBuilder() @@ -66,7 +67,7 @@ class CloudflareInterceptor : Interceptor { .add("Referer", url.toString()) .build() - return GET(cloudflareUrl, cloudflareHeaders) + return GET(cloudflareUrl, cloudflareHeaders, cache = CacheControl.Builder().build()) } } From 1566b8f8b86059f6b7688b6ceb2c061fb411e82b Mon Sep 17 00:00:00 2001 From: inorichi Date: Thu, 5 Apr 2018 19:12:17 +0200 Subject: [PATCH 05/15] Provide accept & accept-language to cloudflare --- .../java/eu/kanade/tachiyomi/network/CloudflareInterceptor.kt | 2 ++ 1 file changed, 2 insertions(+) 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 1a41d117f..18a87170b 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/network/CloudflareInterceptor.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/network/CloudflareInterceptor.kt @@ -65,6 +65,8 @@ class CloudflareInterceptor : Interceptor { val cloudflareHeaders = originalRequest.headers() .newBuilder() .add("Referer", url.toString()) + .add("Accept", "text/html,application/xhtml+xml,application/xml") + .add("Accept-Language", "en") .build() return GET(cloudflareUrl, cloudflareHeaders, cache = CacheControl.Builder().build()) From e0d680201a42e7f7f3e2b0f8a232a35dbbab8936 Mon Sep 17 00:00:00 2001 From: inorichi Date: Thu, 5 Apr 2018 21:50:44 +0200 Subject: [PATCH 06/15] Update constraint layout & fix broken layouts --- app/build.gradle | 2 +- app/src/main/res/layout/catalogue_list_item.xml | 2 +- app/src/main/res/layout/chapters_item.xml | 2 +- .../main/res/layout/manga_info_controller.xml | 16 +++++++++++----- 4 files changed, 14 insertions(+), 8 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 60cda489d..9289497de 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -116,7 +116,7 @@ dependencies { implementation "com.android.support:support-annotations:$support_library_version" implementation "com.android.support:customtabs:$support_library_version" - implementation 'com.android.support.constraint:constraint-layout:1.0.2' + implementation 'com.android.support.constraint:constraint-layout:1.1.0-beta6' implementation 'com.android.support:multidex:1.0.2' diff --git a/app/src/main/res/layout/catalogue_list_item.xml b/app/src/main/res/layout/catalogue_list_item.xml index 40f52022f..b2b43a826 100644 --- a/app/src/main/res/layout/catalogue_list_item.xml +++ b/app/src/main/res/layout/catalogue_list_item.xml @@ -105,7 +105,7 @@ tools:text="122" tools:visibility="visible" android:layout_marginEnd="8dp" - app:layout_constraintRight_toLeftOf="parent" + app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" android:layout_marginTop="8dp" app:layout_constraintBottom_toBottomOf="parent" diff --git a/app/src/main/res/layout/chapters_item.xml b/app/src/main/res/layout/chapters_item.xml index c62b52da2..9686a1106 100644 --- a/app/src/main/res/layout/chapters_item.xml +++ b/app/src/main/res/layout/chapters_item.xml @@ -63,7 +63,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" app:srcCompat="@drawable/ic_more_vert_black_24dp" - app:layout_constraintRight_toLeftOf="parent" + app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" android:paddingStart="24dp" android:paddingEnd="16dp" diff --git a/app/src/main/res/layout/manga_info_controller.xml b/app/src/main/res/layout/manga_info_controller.xml index 1a7332073..2df3d60cd 100644 --- a/app/src/main/res/layout/manga_info_controller.xml +++ b/app/src/main/res/layout/manga_info_controller.xml @@ -259,32 +259,38 @@ + app:layout_constraintVertical_bias="0.0" + app:layout_constraintVertical_chainStyle="packed"> + android:layout_marginLeft="16dp" + android:layout_marginRight="16dp" + android:textIsSelectable="false" /> Date: Thu, 5 Apr 2018 22:08:23 +0200 Subject: [PATCH 07/15] Fix typo in layout --- app/src/main/res/layout/manga_info_controller.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/layout/manga_info_controller.xml b/app/src/main/res/layout/manga_info_controller.xml index 2df3d60cd..fe78d3182 100644 --- a/app/src/main/res/layout/manga_info_controller.xml +++ b/app/src/main/res/layout/manga_info_controller.xml @@ -260,7 +260,7 @@ android:id="@+id/description_scrollview" android:layout_width="0dp" android:layout_height="wrap_content" - app:layout_constrainedWidth="true" + app:layout_constrainedHeight="true" app:layout_constraintBottom_toTopOf="@id/manga_genres_tags" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" From f8536105783cc59fbb2ad54a5832c58eee9a2bd3 Mon Sep 17 00:00:00 2001 From: inorichi Date: Thu, 5 Apr 2018 22:55:23 +0200 Subject: [PATCH 08/15] Show last update if date > 0 --- .../kanade/tachiyomi/ui/manga/info/MangaInfoController.kt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/info/MangaInfoController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/info/MangaInfoController.kt index 56218fde5..70b362611 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/info/MangaInfoController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/info/MangaInfoController.kt @@ -261,7 +261,11 @@ class MangaInfoController : NucleusController(), } fun setLastUpdateDate(date: Date) { - manga_last_update?.text = DateFormat.getDateInstance(DateFormat.SHORT).format(date) + if (date.time != 0L) { + manga_last_update?.text = DateFormat.getDateInstance(DateFormat.SHORT).format(date) + } else { + manga_last_update?.text = resources?.getString(R.string.unknown) + } } /** From 6931b75cc574fab1b55a36d2c665abd0d68359ec Mon Sep 17 00:00:00 2001 From: inorichi Date: Thu, 5 Apr 2018 23:01:32 +0200 Subject: [PATCH 09/15] Release v0.7.1 --- app/build.gradle | 4 ++-- app/src/main/res/raw/changelog_release.xml | 8 ++++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 9289497de..b577e0890 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -38,8 +38,8 @@ android { minSdkVersion 16 targetSdkVersion 27 testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" - versionCode 33 - versionName "0.7.0" + versionCode 34 + versionName "0.7.1" buildConfigField "String", "COMMIT_COUNT", "\"${getCommitCount()}\"" buildConfigField "String", "COMMIT_SHA", "\"${getGitSha()}\"" diff --git a/app/src/main/res/raw/changelog_release.xml b/app/src/main/res/raw/changelog_release.xml index ab9677cd7..8174ae32e 100644 --- a/app/src/main/res/raw/changelog_release.xml +++ b/app/src/main/res/raw/changelog_release.xml @@ -1,5 +1,13 @@ + + Updated Cloudflare bypass. + + Enabled TLS 1.1 and TLS 1.2 on Android KitKat and lower. + + Minor UI changes. + + Added extensions support. You can now install and update extensions within the app. If you installed any extension previously through F-Droid, you'll have to uninstall them first. From 499def3daa816980051b8d1e4653cb2202246841 Mon Sep 17 00:00:00 2001 From: inorichi Date: Fri, 6 Apr 2018 08:29:17 +0200 Subject: [PATCH 10/15] Fix downloaded text drawn outside the screen --- app/src/main/res/layout/chapters_item.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/layout/chapters_item.xml b/app/src/main/res/layout/chapters_item.xml index 9686a1106..95a5c4eaf 100644 --- a/app/src/main/res/layout/chapters_item.xml +++ b/app/src/main/res/layout/chapters_item.xml @@ -82,7 +82,7 @@ android:layout_height="wrap_content" tools:text="DOWNLOADED" android:textAllCaps="true" - app:layout_constraintRight_toLeftOf="parent" + app:layout_constraintRight_toRightOf="parent" app:layout_constraintBottom_toBottomOf="parent" android:layout_marginRight="16dp"/> From 7464497c8874e42e9bbfb9b080bd54d7d5fd8947 Mon Sep 17 00:00:00 2001 From: inorichi Date: Fri, 6 Apr 2018 10:02:01 +0200 Subject: [PATCH 11/15] Use our OkHttpClient in updates checker. It should fix the updater on KitKat due to TLS --- .../java/eu/kanade/tachiyomi/data/updater/GithubService.kt | 4 ++++ .../eu/kanade/tachiyomi/ui/setting/SettingsAboutController.kt | 1 + .../main/java/eu/kanade/tachiyomi/util/ContextExtensions.kt | 2 +- 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/updater/GithubService.kt b/app/src/main/java/eu/kanade/tachiyomi/data/updater/GithubService.kt index 42ff97324..82befdc72 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/updater/GithubService.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/updater/GithubService.kt @@ -1,10 +1,13 @@ package eu.kanade.tachiyomi.data.updater +import eu.kanade.tachiyomi.network.NetworkHelper import retrofit2.Retrofit import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory import retrofit2.converter.gson.GsonConverterFactory import retrofit2.http.GET import rx.Observable +import uy.kohesive.injekt.Injekt +import uy.kohesive.injekt.api.get /** * Used to connect with the Github API. @@ -17,6 +20,7 @@ interface GithubService { .baseUrl("https://api.github.com") .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) + .client(Injekt.get().client) .build() return restAdapter.create(GithubService::class.java) 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 b0c8ba74f..d36927b1f 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 @@ -126,6 +126,7 @@ class SettingsAboutController : SettingsController() { } } }, { error -> + activity?.toast(error.message) Timber.e(error) }) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/ContextExtensions.kt b/app/src/main/java/eu/kanade/tachiyomi/util/ContextExtensions.kt index 40ad41b55..75619dd78 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/util/ContextExtensions.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/util/ContextExtensions.kt @@ -36,7 +36,7 @@ fun Context.toast(@StringRes resource: Int, duration: Int = Toast.LENGTH_SHORT) * @param duration the duration of the toast. Defaults to short. */ fun Context.toast(text: String?, duration: Int = Toast.LENGTH_SHORT) { - Toast.makeText(this, text, duration).show() + Toast.makeText(this, text.orEmpty(), duration).show() } /** From 8017324033c2340aa1fccec4fc20a019fd74fd18 Mon Sep 17 00:00:00 2001 From: inorichi Date: Sun, 8 Apr 2018 18:58:28 +0200 Subject: [PATCH 12/15] Fix #1351 --- app/src/main/res/layout/extension_card_item.xml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/layout/extension_card_item.xml b/app/src/main/res/layout/extension_card_item.xml index 3d25905a6..23ee4e5e7 100644 --- a/app/src/main/res/layout/extension_card_item.xml +++ b/app/src/main/res/layout/extension_card_item.xml @@ -27,13 +27,16 @@ Date: Sun, 8 Apr 2018 19:10:18 +0200 Subject: [PATCH 13/15] Release v0.7.2 --- app/build.gradle | 4 ++-- app/src/main/res/raw/changelog_release.xml | 6 ++++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index b577e0890..128071c98 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -38,8 +38,8 @@ android { minSdkVersion 16 targetSdkVersion 27 testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" - versionCode 34 - versionName "0.7.1" + versionCode 35 + versionName "0.7.2" buildConfigField "String", "COMMIT_COUNT", "\"${getCommitCount()}\"" buildConfigField "String", "COMMIT_SHA", "\"${getGitSha()}\"" diff --git a/app/src/main/res/raw/changelog_release.xml b/app/src/main/res/raw/changelog_release.xml index 8174ae32e..916cc7c74 100644 --- a/app/src/main/res/raw/changelog_release.xml +++ b/app/src/main/res/raw/changelog_release.xml @@ -1,5 +1,11 @@ + + Fixed missing downloaded label in chapters screen. + + Fixed updater in KitKat and lower due to TLS. + + Updated Cloudflare bypass. From b37685542dbf8919858cbc391f0357dad4853089 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jozef=20Holl=C3=BD?= Date: Mon, 9 Apr 2018 16:25:30 +0200 Subject: [PATCH 14/15] Add new translation link (#1355) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 75db0d74c..5bb9d0ebd 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ | Build | Download | F-Droid | Contribute | Contact | |-------|----------|---------|------------|---------| -| [![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) | [![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) | [![Translation status](http://weblate.j2ghz.com/widgets/tachiyomi/-/svg-badge.svg)](https://github.com/inorichi/tachiyomi/wiki/Translation) | [![Discord](https://img.shields.io/discord/349436576037732353.svg)](https://discord.gg/2dDQBv2) | +| [![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) | [![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) | [![Translation status](https://hosted.weblate.org/widgets/tachiyomi/-/svg-badge.svg)](https://hosted.weblate.org/engage/tachiyomi/?utm_source=widget) | [![Discord](https://img.shields.io/discord/349436576037732353.svg)](https://discord.gg/2dDQBv2) | # ![app icon](./.github/readme-images/app-icon.png)Tachiyomi From 6de36a88c04363a4669b62fbec0c7b8a3f2b64c3 Mon Sep 17 00:00:00 2001 From: inorichi Date: Fri, 13 Apr 2018 16:28:09 +0200 Subject: [PATCH 15/15] Fix tracking search layout --- .../ui/manga/track/TrackSearchDialog.kt | 10 +-- .../main/res/layout/track_search_dialog.xml | 86 +++++++++---------- app/src/main/res/layout/track_search_item.xml | 3 +- 3 files changed, 47 insertions(+), 52 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/track/TrackSearchDialog.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/track/TrackSearchDialog.kt index 691800058..9856ce2e5 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/track/TrackSearchDialog.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/track/TrackSearchDialog.kt @@ -8,9 +8,9 @@ import com.jakewharton.rxbinding.widget.itemClicks import com.jakewharton.rxbinding.widget.textChanges import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.database.models.Track -import eu.kanade.tachiyomi.data.track.model.TrackSearch import eu.kanade.tachiyomi.data.track.TrackManager import eu.kanade.tachiyomi.data.track.TrackService +import eu.kanade.tachiyomi.data.track.model.TrackSearch import eu.kanade.tachiyomi.ui.base.controller.DialogController import eu.kanade.tachiyomi.util.plusAssign import kotlinx.android.synthetic.main.track_search_dialog.view.* @@ -114,14 +114,14 @@ class TrackSearchDialog : DialogController { private fun search(query: String) { val view = dialogView ?: return view.progress.visibility = View.VISIBLE - view.track_search_list.visibility = View.GONE + view.track_search_list.visibility = View.INVISIBLE trackController.presenter.search(query, service) } fun onSearchResults(results: List) { selectedItem = null val view = dialogView ?: return - view.progress.visibility = View.GONE + view.progress.visibility = View.INVISIBLE view.track_search_list.visibility = View.VISIBLE adapter?.setItems(results) } @@ -129,7 +129,7 @@ class TrackSearchDialog : DialogController { fun onSearchResultsError() { val view = dialogView ?: return view.progress.visibility = View.VISIBLE - view.track_search_list.visibility = View.GONE + view.track_search_list.visibility = View.INVISIBLE adapter?.setItems(emptyList()) } @@ -141,4 +141,4 @@ class TrackSearchDialog : DialogController { const val KEY_SERVICE = "service_id" } -} \ No newline at end of file +} diff --git a/app/src/main/res/layout/track_search_dialog.xml b/app/src/main/res/layout/track_search_dialog.xml index 84f9a3d54..0c9d8191e 100644 --- a/app/src/main/res/layout/track_search_dialog.xml +++ b/app/src/main/res/layout/track_search_dialog.xml @@ -1,10 +1,9 @@ - + android:inputType="text" + android:maxLines="1"/> - - - + android:layout_height="0dp" + android:layout_weight="1"> + + + + + + + android:background="?android:attr/divider"/> - \ No newline at end of file + diff --git a/app/src/main/res/layout/track_search_item.xml b/app/src/main/res/layout/track_search_item.xml index 2c5c7c7ee..acab56c21 100644 --- a/app/src/main/res/layout/track_search_item.xml +++ b/app/src/main/res/layout/track_search_item.xml @@ -12,7 +12,6 @@ android:layout_height="216dp" android:background="?attr/selectable_list_drawable" android:orientation="horizontal"> - > - \ No newline at end of file +