Compare commits
31
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d7fcda1f83 | ||
|
|
b832c24185 | ||
|
|
3b04f8c695 | ||
|
|
0ef11b58d2 | ||
|
|
bf13bbf506 | ||
|
|
92c94aa22a | ||
|
|
1c0785432b | ||
|
|
dcb9a50061 | ||
|
|
de7f4bdb6e | ||
|
|
73d636dba6 | ||
|
|
3f1c453ff6 | ||
|
|
ecb6baaebb | ||
|
|
e1cba45486 | ||
|
|
ea4181b243 | ||
|
|
6c5b9f8851 | ||
|
|
c1fccaf240 | ||
|
|
e7c223da7d | ||
|
|
6bfe1ba876 | ||
|
|
574e5dab18 | ||
|
|
5dc9b83831 | ||
|
|
57a214a9a4 | ||
|
|
cf48eb94af | ||
|
|
683f1e488a | ||
|
|
e888ae4da7 | ||
|
|
4512f2a375 | ||
|
|
68442afa0f | ||
|
|
ddf4d0cbc3 | ||
|
|
4be185e428 | ||
|
|
f75e66ac19 | ||
|
|
abda781f02 | ||
|
|
c1533ec66d |
No files matched your search
@@ -73,6 +73,12 @@ with Material Design 3 and Dynamic Color Support
|
||||

|
||||

|
||||
|
||||
# Localization
|
||||
|
||||
Thank you to each of the **Ehviewer Overhauled** translators, and if you would like to contribute, please submit a translation via [Weblate](https://hosted.weblate.org/engage/ehviewer-overhauled/).
|
||||
|
||||
[<img src="https://hosted.weblate.org/widgets/ehviewer-overhauled/-/horizontal-auto.svg" alt="" />](https://hosted.weblate.org/engage/ehviewer-overhauled/)
|
||||
|
||||
# Thanks
|
||||
|
||||
Here is the libraries
|
||||
|
||||
+6
-5
@@ -32,9 +32,9 @@ android {
|
||||
applicationId "moe.tarsin.ehviewer"
|
||||
minSdkVersion 28
|
||||
targetSdkVersion 33
|
||||
versionCode 180030
|
||||
versionName "1.8.5.3-alpha06"
|
||||
resConfigs 'zh', 'zh-rCN', 'zh-rHK', 'zh-rTW', 'es', 'ja', 'ko', 'fr', 'de', 'th'
|
||||
versionCode 180031
|
||||
versionName "1.8.5.3"
|
||||
resConfigs 'zh', 'zh-rCN', 'zh-rHK', 'zh-rTW', 'es', 'ja', 'ko', 'fr', 'de', 'th', 'nb-rNO'
|
||||
}
|
||||
|
||||
externalNativeBuild {
|
||||
@@ -94,7 +94,7 @@ android {
|
||||
}
|
||||
|
||||
composeOptions {
|
||||
kotlinCompilerExtensionVersion = "1.4.0-dev-k1.8.0-33c0ad36f83"
|
||||
kotlinCompilerExtensionVersion = "1.4.0"
|
||||
}
|
||||
|
||||
namespace 'com.hippo.ehviewer'
|
||||
@@ -154,7 +154,8 @@ dependencies {
|
||||
implementation 'dev.rikka.rikkax.preference:simplemenu-preference:1.0.3'
|
||||
implementation 'dev.rikka.rikkax.material:material-preference:2.0.0'
|
||||
// https://coil-kt.github.io/coil/changelog/
|
||||
implementation 'io.coil-kt:coil:2.2.2'
|
||||
// implementation 'io.coil-kt:coil:2.2.2'
|
||||
implementation 'com.github.Ehviewer-Overhauled.coil:coil:d65881d'
|
||||
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4'
|
||||
implementation 'org.jsoup:jsoup:1.15.3'
|
||||
}
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
~ Copyright 2016 Hippo Seven
|
||||
~
|
||||
~ Licensed under the Apache License, Version 2.0 (the "License");
|
||||
~ you may not use this file except in compliance with the License.
|
||||
~ You may obtain a copy of the License at
|
||||
~
|
||||
~ http://www.apache.org/licenses/LICENSE-2.0
|
||||
~
|
||||
~ Unless required by applicable law or agreed to in writing, software
|
||||
~ distributed under the License is distributed on an "AS IS" BASIS,
|
||||
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
~ See the License for the specific language governing permissions and
|
||||
~ limitations under the License.
|
||||
-->
|
||||
|
||||
<resources>
|
||||
|
||||
<string name="app_name" translatable="false">EhViewer Debug</string>
|
||||
|
||||
</resources>
|
||||
@@ -34,7 +34,7 @@
|
||||
android:theme="@style/AppTheme"
|
||||
tools:targetApi="tiramisu">
|
||||
<activity
|
||||
android:name=".ui.LoginActivity"
|
||||
android:name=".ui.login.LoginActivity"
|
||||
android:exported="false"
|
||||
android:theme="@style/AppTheme"
|
||||
android:windowSoftInputMode="adjustResize"/>
|
||||
|
||||
@@ -291,7 +291,7 @@ public class Hosts {
|
||||
}
|
||||
}
|
||||
|
||||
private boolean contains(String host) {
|
||||
public boolean contains(String host) {
|
||||
try (Cursor cursor = db.rawQuery("SELECT * FROM " + TABLE_HOSTS + " WHERE " + COLUMN_HOST + " = ?;", new String[]{host})) {
|
||||
return cursor.moveToNext();
|
||||
}
|
||||
|
||||
@@ -85,6 +85,7 @@ public class Settings {
|
||||
public static final int DEFAULT_READ_CACHE_SIZE = 320;
|
||||
public static final String KEY_BUILT_IN_HOSTS = "built_in_hosts_2";
|
||||
public static final String KEY_DOMAIN_FRONTING = "domain_fronting";
|
||||
public static final String KEY_BYPASS_VPN = "bypass_vpn";
|
||||
public static final String KEY_LIST_THUMB_SIZE = "list_tile_size";
|
||||
private static final String KEY_HIDE_HV_EVENTS = "hide_hv_events";
|
||||
private static final boolean DEFAULT_HIDE_HV_EVENTS = true;
|
||||
@@ -179,6 +180,7 @@ public class Settings {
|
||||
private static final boolean DEFAULT_SAVE_CRASH_LOG = true;
|
||||
private static final boolean DEFAULT_BUILT_IN_HOSTS = false;
|
||||
private static final boolean DEFAULT_FRONTING = false;
|
||||
private static final boolean DEFAULT_BYPASS_VPN = true;
|
||||
private static final String KEY_PROXY_TYPE = "proxy_type";
|
||||
private static final int DEFAULT_PROXY_TYPE = EhProxySelector.TYPE_SYSTEM;
|
||||
private static final String KEY_PROXY_IP = "proxy_ip";
|
||||
@@ -673,6 +675,10 @@ public class Settings {
|
||||
putBoolean(KEY_DOMAIN_FRONTING, value);
|
||||
}
|
||||
|
||||
public static boolean getBypassVPN() {
|
||||
return getBoolean(KEY_BYPASS_VPN, DEFAULT_BYPASS_VPN);
|
||||
}
|
||||
|
||||
public static int getProxyType() {
|
||||
return getInt(KEY_PROXY_TYPE, DEFAULT_PROXY_TYPE);
|
||||
}
|
||||
|
||||
@@ -123,4 +123,8 @@ object EhDns : Dns {
|
||||
return hosts[hostname] ?: builtInHosts[hostname].takeIf { Settings.getBuiltInHosts() }
|
||||
?: Dns.SYSTEM.lookup(hostname)
|
||||
}
|
||||
}
|
||||
|
||||
fun isInHosts(hostname: String): Boolean {
|
||||
return hosts.contains(hostname) || (builtInHosts.contains(hostname) && Settings.getBuiltInHosts())
|
||||
}
|
||||
}
|
||||
@@ -34,8 +34,8 @@ object EhSSLSocketFactory : SSLSocketFactory() {
|
||||
}
|
||||
|
||||
override fun createSocket(s: Socket, host: String, port: Int, autoClose: Boolean): Socket {
|
||||
val address = s.inetAddress.hostAddress
|
||||
val socket = sslSocketFactory.createSocket(s, address, port, autoClose) as SSLSocket
|
||||
val address = s.inetAddress.hostAddress.takeIf { EhDns.isInHosts(host) }
|
||||
val socket = sslSocketFactory.createSocket(s, address ?: host, port, autoClose) as SSLSocket
|
||||
val sslSession = socket.session
|
||||
Log.d(
|
||||
"EhSSLSocketFactory",
|
||||
|
||||
@@ -49,6 +49,8 @@ object EhUrl {
|
||||
const val ORIGIN_EX = REFERER_EX
|
||||
const val REFERER_E = "https://$DOMAIN_E"
|
||||
const val ORIGIN_E = REFERER_E
|
||||
const val URL_PREFIX_THUMB_E = "https://ehgt.org/"
|
||||
const val URL_PREFIX_THUMB_EX = "https://exhentai.org/t/"
|
||||
|
||||
val host: String
|
||||
get() = when (Settings.getGallerySite()) {
|
||||
@@ -161,4 +163,12 @@ object EhUrl {
|
||||
fun getTagDefinitionUrl(tag: String): String {
|
||||
return "https://ehwiki.org/wiki/" + tag.replace(' ', '_')
|
||||
}
|
||||
|
||||
fun getThumbUrlPrefix(): String {
|
||||
return when (Settings.getGallerySite()) {
|
||||
SITE_E -> URL_PREFIX_THUMB_E
|
||||
SITE_EX -> URL_PREFIX_THUMB_EX
|
||||
else -> URL_PREFIX_THUMB_E
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,190 +0,0 @@
|
||||
/*
|
||||
* Copyright 2016 Hippo Seven
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.hippo.ehviewer.client;
|
||||
|
||||
import android.graphics.Color;
|
||||
import android.text.TextUtils;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.hippo.ehviewer.EhApplication;
|
||||
import com.hippo.ehviewer.Settings;
|
||||
import com.hippo.ehviewer.client.data.GalleryInfo;
|
||||
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
public class EhUtils {
|
||||
|
||||
public static final int NONE = -1; // Use it for homepage
|
||||
public static final int PRIVATE = 0x400;
|
||||
public static final int UNKNOWN = 0x800;
|
||||
|
||||
public static final int BG_COLOR_DOUJINSHI = 0xfff44336;
|
||||
public static final int BG_COLOR_MANGA = 0xffff9800;
|
||||
public static final int BG_COLOR_ARTIST_CG = 0xfffbc02d;
|
||||
public static final int BG_COLOR_GAME_CG = 0xff4caf50;
|
||||
public static final int BG_COLOR_WESTERN = 0xff8bc34a;
|
||||
public static final int BG_COLOR_NON_H = 0xff2196f3;
|
||||
public static final int BG_COLOR_IMAGE_SET = 0xff3f51b5;
|
||||
public static final int BG_COLOR_COSPLAY = 0xff9c27b0;
|
||||
public static final int BG_COLOR_ASIAN_PORN = 0xff9575cd;
|
||||
public static final int BG_COLOR_MISC = 0xfff06292;
|
||||
public static final int BG_COLOR_UNKNOWN = Color.BLACK;
|
||||
|
||||
// Remove [XXX], (XXX), {XXX}, ~XXX~ stuff
|
||||
public static final Pattern PATTERN_TITLE_PREFIX = Pattern.compile(
|
||||
"^(?:\\([^)]*\\)|\\[[^]]*]|\\{[^}]*\\}|~[^~]*~|\\s+)*");
|
||||
// Remove [XXX], (XXX), {XXX}, ~XXX~ stuff and something like ch. 1-23
|
||||
public static final Pattern PATTERN_TITLE_SUFFIX = Pattern.compile(
|
||||
"(?:\\s+ch.[\\s\\d-]+)?(?:\\([^)]*\\)|\\[[^]]*]|\\{[^}]*\\}|~[^~]*~|\\s+)*$",
|
||||
Pattern.CASE_INSENSITIVE);
|
||||
|
||||
private static final int[] CATEGORY_VALUES = {
|
||||
EhConfig.MISC,
|
||||
EhConfig.DOUJINSHI,
|
||||
EhConfig.MANGA,
|
||||
EhConfig.ARTIST_CG,
|
||||
EhConfig.GAME_CG,
|
||||
EhConfig.IMAGE_SET,
|
||||
EhConfig.COSPLAY,
|
||||
EhConfig.ASIAN_PORN,
|
||||
EhConfig.NON_H,
|
||||
EhConfig.WESTERN,
|
||||
PRIVATE,
|
||||
UNKNOWN};
|
||||
|
||||
private static final String[][] CATEGORY_STRINGS = {
|
||||
new String[]{"misc"},
|
||||
new String[]{"doujinshi"},
|
||||
new String[]{"manga"},
|
||||
new String[]{"artistcg", "Artist CG Sets", "Artist CG"},
|
||||
new String[]{"gamecg", "Game CG Sets", "Game CG"},
|
||||
new String[]{"imageset", "Image Sets", "Image Set"},
|
||||
new String[]{"cosplay"},
|
||||
new String[]{"asianporn", "Asian Porn"},
|
||||
new String[]{"non-h"},
|
||||
new String[]{"western"},
|
||||
new String[]{"private"},
|
||||
new String[]{"unknown"}
|
||||
};
|
||||
|
||||
public static int getCategory(String type) {
|
||||
int i;
|
||||
for (i = 0; i < CATEGORY_STRINGS.length - 1; i++) {
|
||||
for (String str : CATEGORY_STRINGS[i])
|
||||
if (str.equalsIgnoreCase(type))
|
||||
return CATEGORY_VALUES[i];
|
||||
}
|
||||
|
||||
return CATEGORY_VALUES[i];
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public static String getCategory(int type) {
|
||||
int i;
|
||||
for (i = 0; i < CATEGORY_VALUES.length - 1; i++) {
|
||||
if (CATEGORY_VALUES[i] == type)
|
||||
break;
|
||||
}
|
||||
return CATEGORY_STRINGS[i][0];
|
||||
}
|
||||
|
||||
public static int getCategoryColor(int category) {
|
||||
return switch (category) {
|
||||
case EhConfig.DOUJINSHI -> BG_COLOR_DOUJINSHI;
|
||||
case EhConfig.MANGA -> BG_COLOR_MANGA;
|
||||
case EhConfig.ARTIST_CG -> BG_COLOR_ARTIST_CG;
|
||||
case EhConfig.GAME_CG -> BG_COLOR_GAME_CG;
|
||||
case EhConfig.WESTERN -> BG_COLOR_WESTERN;
|
||||
case EhConfig.NON_H -> BG_COLOR_NON_H;
|
||||
case EhConfig.IMAGE_SET -> BG_COLOR_IMAGE_SET;
|
||||
case EhConfig.COSPLAY -> BG_COLOR_COSPLAY;
|
||||
case EhConfig.ASIAN_PORN -> BG_COLOR_ASIAN_PORN;
|
||||
case EhConfig.MISC -> BG_COLOR_MISC;
|
||||
default -> BG_COLOR_UNKNOWN;
|
||||
};
|
||||
}
|
||||
|
||||
public static void signOut() {
|
||||
EhApplication.getEhCookieStore().signOut();
|
||||
Settings.putAvatar(null);
|
||||
Settings.putDisplayName(null);
|
||||
Settings.putGallerySite(EhUrl.SITE_E);
|
||||
Settings.putNeedSignIn(true);
|
||||
}
|
||||
|
||||
public static boolean needSignedIn() {
|
||||
return Settings.getNeedSignIn() && !EhApplication.getEhCookieStore().hasSignedIn();
|
||||
}
|
||||
|
||||
public static String getSuitableTitle(GalleryInfo gi) {
|
||||
if (Settings.getShowJpnTitle()) {
|
||||
return TextUtils.isEmpty(gi.getTitleJpn()) ? gi.getTitle() : gi.getTitleJpn();
|
||||
} else {
|
||||
return TextUtils.isEmpty(gi.getTitle()) ? gi.getTitleJpn() : gi.getTitle();
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static String extractTitle(String title) {
|
||||
if (null == title) {
|
||||
return null;
|
||||
}
|
||||
title = PATTERN_TITLE_PREFIX.matcher(title).replaceFirst("");
|
||||
title = PATTERN_TITLE_SUFFIX.matcher(title).replaceFirst("");
|
||||
// Sometimes title is combined by romaji and english translation.
|
||||
// Only need romaji.
|
||||
// TODO But not sure every '|' means that
|
||||
int index = title.indexOf('|');
|
||||
if (index >= 0) {
|
||||
title = title.substring(0, index);
|
||||
}
|
||||
if (title.isEmpty()) {
|
||||
return null;
|
||||
} else {
|
||||
return title;
|
||||
}
|
||||
}
|
||||
|
||||
public static String handleThumbUrlResolution(String url) {
|
||||
if (null == url) {
|
||||
return null;
|
||||
}
|
||||
|
||||
String resolution;
|
||||
switch (Settings.getThumbResolution()) {
|
||||
default:
|
||||
case 0: // Auto
|
||||
return url;
|
||||
case 1: // 250
|
||||
resolution = "250";
|
||||
break;
|
||||
case 2: // 300
|
||||
resolution = "300";
|
||||
break;
|
||||
}
|
||||
|
||||
int index1 = url.lastIndexOf('_');
|
||||
int index2 = url.lastIndexOf('.');
|
||||
if (index1 >= 0 && index2 >= 0 && index1 < index2) {
|
||||
return url.substring(0, index1 + 1) + resolution + url.substring(index2);
|
||||
} else {
|
||||
return url;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,158 @@
|
||||
/*
|
||||
* Copyright 2016 Hippo Seven
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.hippo.ehviewer.client
|
||||
|
||||
import android.text.TextUtils
|
||||
import com.hippo.ehviewer.EhApplication.Companion.ehCookieStore
|
||||
import com.hippo.ehviewer.Settings
|
||||
import com.hippo.ehviewer.client.data.GalleryInfo
|
||||
import java.util.regex.Pattern
|
||||
|
||||
object EhUtils {
|
||||
const val NONE = -1 // Use it for homepage
|
||||
const val PRIVATE = 0x400
|
||||
const val UNKNOWN = 0x800
|
||||
|
||||
// https://youtrack.jetbrains.com/issue/KT-4749
|
||||
private const val BG_COLOR_DOUJINSHI = 0xfff44336u
|
||||
private const val BG_COLOR_MANGA = 0xffff9800u
|
||||
private const val BG_COLOR_ARTIST_CG = 0xfffbc02du
|
||||
private const val BG_COLOR_GAME_CG = 0xff4caf50u
|
||||
private const val BG_COLOR_WESTERN = 0xff8bc34au
|
||||
private const val BG_COLOR_NON_H = 0xff2196f3u
|
||||
private const val BG_COLOR_IMAGE_SET = 0xff3f51b5u
|
||||
private const val BG_COLOR_COSPLAY = 0xff9c27b0u
|
||||
private const val BG_COLOR_ASIAN_PORN = 0xff9575cdu
|
||||
private const val BG_COLOR_MISC = 0xfff06292u
|
||||
private const val BG_COLOR_UNKNOWN = 0xff000000u
|
||||
|
||||
// Remove [XXX], (XXX), {XXX}, ~XXX~ stuff
|
||||
private val PATTERN_TITLE_PREFIX = Pattern.compile(
|
||||
"^(?:\\([^)]*\\)|\\[[^]]*]|\\{[^}]*\\}|~[^~]*~|\\s+)*"
|
||||
)
|
||||
|
||||
// Remove [XXX], (XXX), {XXX}, ~XXX~ stuff and something like ch. 1-23
|
||||
private val PATTERN_TITLE_SUFFIX = Pattern.compile(
|
||||
"(?:\\s+ch.[\\s\\d-]+)?(?:\\([^)]*\\)|\\[[^]]*]|\\{[^}]*\\}|~[^~]*~|\\s+)*$",
|
||||
Pattern.CASE_INSENSITIVE
|
||||
)
|
||||
|
||||
private val CATEGORY_VALUES = hashMapOf(
|
||||
EhConfig.MISC to arrayOf("misc"),
|
||||
EhConfig.DOUJINSHI to arrayOf("doujinshi"),
|
||||
EhConfig.MANGA to arrayOf("manga"),
|
||||
EhConfig.ARTIST_CG to arrayOf("artistcg", "Artist CG Sets", "Artist CG"),
|
||||
EhConfig.GAME_CG to arrayOf("gamecg", "Game CG Sets", "Game CG"),
|
||||
EhConfig.IMAGE_SET to arrayOf("imageset", "Image Sets", "Image Set"),
|
||||
EhConfig.COSPLAY to arrayOf("cosplay"),
|
||||
EhConfig.ASIAN_PORN to arrayOf("asianporn", "Asian Porn"),
|
||||
EhConfig.NON_H to arrayOf("non-h"),
|
||||
EhConfig.WESTERN to arrayOf("western"),
|
||||
PRIVATE to arrayOf("private"),
|
||||
UNKNOWN to arrayOf("unknown")
|
||||
)
|
||||
private val CATEGORY_STRINGS = CATEGORY_VALUES.entries.map { (k, v) -> v to k }
|
||||
|
||||
@JvmStatic
|
||||
fun getCategory(type: String?): Int {
|
||||
for (entry in CATEGORY_STRINGS) {
|
||||
for (str in entry.first)
|
||||
if (str.equals(type, ignoreCase = true))
|
||||
return entry.second
|
||||
}
|
||||
return UNKNOWN
|
||||
}
|
||||
|
||||
fun getCategory(type: Int): String {
|
||||
return CATEGORY_VALUES.getOrDefault(type, CATEGORY_VALUES[UNKNOWN])!![0]
|
||||
}
|
||||
|
||||
fun getCategoryColor(category: Int): Int {
|
||||
return when (category) {
|
||||
EhConfig.DOUJINSHI -> BG_COLOR_DOUJINSHI
|
||||
EhConfig.MANGA -> BG_COLOR_MANGA
|
||||
EhConfig.ARTIST_CG -> BG_COLOR_ARTIST_CG
|
||||
EhConfig.GAME_CG -> BG_COLOR_GAME_CG
|
||||
EhConfig.WESTERN -> BG_COLOR_WESTERN
|
||||
EhConfig.NON_H -> BG_COLOR_NON_H
|
||||
EhConfig.IMAGE_SET -> BG_COLOR_IMAGE_SET
|
||||
EhConfig.COSPLAY -> BG_COLOR_COSPLAY
|
||||
EhConfig.ASIAN_PORN -> BG_COLOR_ASIAN_PORN
|
||||
EhConfig.MISC -> BG_COLOR_MISC
|
||||
else -> BG_COLOR_UNKNOWN
|
||||
}.toInt()
|
||||
}
|
||||
|
||||
fun signOut() {
|
||||
ehCookieStore.signOut()
|
||||
Settings.putAvatar(null)
|
||||
Settings.putDisplayName(null)
|
||||
Settings.putGallerySite(EhUrl.SITE_E)
|
||||
Settings.putNeedSignIn(true)
|
||||
}
|
||||
|
||||
fun needSignedIn(): Boolean {
|
||||
return Settings.getNeedSignIn() && !ehCookieStore.hasSignedIn()
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun getSuitableTitle(gi: GalleryInfo): String? {
|
||||
return if (Settings.getShowJpnTitle()) {
|
||||
if (TextUtils.isEmpty(gi.titleJpn)) gi.title else gi.titleJpn
|
||||
} else {
|
||||
if (TextUtils.isEmpty(gi.title)) gi.titleJpn else gi.title
|
||||
}
|
||||
}
|
||||
|
||||
fun extractTitle(fullTitle: String?): String? {
|
||||
var title: String = fullTitle ?: return null
|
||||
title = PATTERN_TITLE_PREFIX.matcher(title).replaceFirst("")
|
||||
title = PATTERN_TITLE_SUFFIX.matcher(title).replaceFirst("")
|
||||
// Sometimes title is combined by romaji and english translation.
|
||||
// Only need romaji.
|
||||
// TODO But not sure every '|' means that
|
||||
val index = title.indexOf('|')
|
||||
if (index >= 0) {
|
||||
title = title.substring(0, index)
|
||||
}
|
||||
return title.ifEmpty { null }
|
||||
}
|
||||
|
||||
fun fixThumbUrl(url: String): String {
|
||||
return EhUrl.getThumbUrlPrefix() +
|
||||
url.removePrefix(EhUrl.URL_PREFIX_THUMB_E).removePrefix(EhUrl.URL_PREFIX_THUMB_EX)
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun handleThumbUrlResolution(url: String?): String? {
|
||||
if (null == url) {
|
||||
return null
|
||||
}
|
||||
val resolution = when (Settings.getThumbResolution()) {
|
||||
0 -> return url
|
||||
1 -> "250"
|
||||
2 -> "300"
|
||||
else -> return url
|
||||
}
|
||||
val index1 = url.lastIndexOf('_')
|
||||
val index2 = url.lastIndexOf('.')
|
||||
return if (index1 >= 0 && index2 >= 0 && index1 < index2) {
|
||||
url.substring(0, index1 + 1) + resolution + url.substring(index2)
|
||||
} else {
|
||||
url
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -24,15 +24,20 @@ import android.content.pm.verify.domain.DomainVerificationManager
|
||||
import android.content.pm.verify.domain.DomainVerificationUserState
|
||||
import android.graphics.Bitmap
|
||||
import android.net.ConnectivityManager
|
||||
import android.net.Network
|
||||
import android.net.NetworkCapabilities
|
||||
import android.net.NetworkRequest
|
||||
import android.net.Uri
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.text.TextUtils
|
||||
import android.util.Log
|
||||
import android.view.View
|
||||
import android.widget.Toast
|
||||
import androidx.activity.OnBackPressedCallback
|
||||
import androidx.annotation.RequiresApi
|
||||
import androidx.annotation.StringRes
|
||||
import androidx.core.content.getSystemService
|
||||
import androidx.core.view.GravityCompat
|
||||
import androidx.customview.widget.Openable
|
||||
import androidx.drawerlayout.widget.DrawerLayout
|
||||
@@ -58,6 +63,7 @@ import com.hippo.ehviewer.client.parser.GalleryListUrlParser
|
||||
import com.hippo.ehviewer.client.parser.GalleryPageUrlParser
|
||||
import com.hippo.ehviewer.databinding.ActivityMainBinding
|
||||
import com.hippo.ehviewer.download.DownloadService
|
||||
import com.hippo.ehviewer.ui.login.LoginActivity
|
||||
import com.hippo.ehviewer.ui.scene.BaseScene
|
||||
import com.hippo.ehviewer.ui.scene.GalleryDetailScene
|
||||
import com.hippo.ehviewer.ui.scene.GalleryListScene
|
||||
@@ -82,6 +88,8 @@ import java.io.OutputStream
|
||||
class MainActivity : EhActivity() {
|
||||
private lateinit var binding: ActivityMainBinding
|
||||
private lateinit var navController: NavController
|
||||
private lateinit var connectivityManager: ConnectivityManager
|
||||
private val availableNetworks: MutableList<Network> = mutableListOf()
|
||||
|
||||
private fun saveImageToTempFile(file: UniFile?): File? {
|
||||
file ?: return null
|
||||
@@ -216,6 +224,10 @@ class MainActivity : EhActivity() {
|
||||
}
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
connectivityManager = getSystemService()!!
|
||||
if (Settings.getDF() && Settings.getBypassVPN()) {
|
||||
bypassVPN()
|
||||
}
|
||||
if (EhUtils.needSignedIn())
|
||||
startActivity(Intent(this, LoginActivity::class.java))
|
||||
super.onCreate(savedInstanceState)
|
||||
@@ -275,6 +287,19 @@ class MainActivity : EhActivity() {
|
||||
}
|
||||
}
|
||||
|
||||
private fun bypassVPN() {
|
||||
val network = connectivityManager.activeNetwork
|
||||
val capabilities = connectivityManager.getNetworkCapabilities(network)
|
||||
capabilities?.let {
|
||||
if (it.hasTransport(NetworkCapabilities.TRANSPORT_VPN)) {
|
||||
val builder = NetworkRequest.Builder()
|
||||
.addCapability(NetworkCapabilities.NET_CAPABILITY_FOREGROUND)
|
||||
.addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_VPN)
|
||||
connectivityManager.registerNetworkCallback(builder.build(), mNetworkCallback)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@RequiresApi(Build.VERSION_CODES.S)
|
||||
@Throws(PackageManager.NameNotFoundException::class)
|
||||
private fun checkAppLinkVerify() {
|
||||
@@ -333,8 +358,7 @@ class MainActivity : EhActivity() {
|
||||
}
|
||||
|
||||
private fun checkMeteredNetwork() {
|
||||
val cm = getSystemService(CONNECTIVITY_SERVICE) as ConnectivityManager
|
||||
if (cm.isActiveNetworkMetered) {
|
||||
if (connectivityManager.isActiveNetworkMetered) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
||||
Snackbar.make(
|
||||
binding.drawView,
|
||||
@@ -502,4 +526,25 @@ class MainActivity : EhActivity() {
|
||||
override fun onDrawerClosed(drawerView: View) {}
|
||||
override fun onDrawerStateChanged(newState: Int) {}
|
||||
}
|
||||
|
||||
private val mNetworkCallback = object : ConnectivityManager.NetworkCallback() {
|
||||
private val TAG = "mNetworkCallback"
|
||||
|
||||
override fun onAvailable(network: Network) {
|
||||
Log.d(TAG, "onAvailable: $network")
|
||||
connectivityManager.bindProcessToNetwork(network)
|
||||
availableNetworks.add(network)
|
||||
}
|
||||
|
||||
override fun onLost(network: Network) {
|
||||
Log.d(TAG, "onLost: $network")
|
||||
val activeNetwork = availableNetworks.last()
|
||||
availableNetworks.remove(network)
|
||||
if (network == activeNetwork) {
|
||||
connectivityManager.bindProcessToNetwork(
|
||||
availableNetworks.takeIf { it.isNotEmpty() }?.last()
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -231,7 +231,6 @@ class AdvancedFragment : BasePreferenceFragment() {
|
||||
addPreferencesFromResource(R.xml.advanced_settings)
|
||||
val dumpLogcat = findPreference<Preference>(KEY_DUMP_LOGCAT)
|
||||
val appLanguage = findPreference<Preference>(KEY_APP_LANGUAGE)
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) appLanguage!!.isVisible = false
|
||||
val importData = findPreference<Preference>(KEY_IMPORT_DATA)
|
||||
val exportData = findPreference<Preference>(KEY_EXPORT_DATA)
|
||||
val backupFavorite = findPreference<Preference>(KEY_BACKUP_FAVORITE)
|
||||
@@ -378,7 +377,7 @@ class AdvancedFragment : BasePreferenceFragment() {
|
||||
|
||||
override fun onPreferenceChange(preference: Preference, newValue: Any): Boolean {
|
||||
val key = preference.key
|
||||
if (KEY_APP_LANGUAGE == key && Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) {
|
||||
if (KEY_APP_LANGUAGE == key) {
|
||||
if ("system" == newValue) {
|
||||
AppCompatDelegate.setApplicationLocales(LocaleListCompat.getEmptyLocaleList())
|
||||
} else {
|
||||
|
||||
+1
-2
@@ -1,4 +1,4 @@
|
||||
package com.hippo.ehviewer.ui.compose
|
||||
package com.hippo.ehviewer.ui.login
|
||||
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.foundation.layout.Box
|
||||
@@ -53,7 +53,6 @@ import com.hippo.ehviewer.client.EhCookieStore
|
||||
import com.hippo.ehviewer.client.EhEngine
|
||||
import com.hippo.ehviewer.client.EhUrl
|
||||
import com.hippo.ehviewer.client.EhUtils
|
||||
import com.hippo.ehviewer.ui.LoginActivity.Companion.SELECT_SITE_ROUTE_NAME
|
||||
import com.hippo.util.ExceptionUtils
|
||||
import eu.kanade.tachiyomi.util.lang.launchIO
|
||||
import eu.kanade.tachiyomi.util.lang.withUIContext
|
||||
+8
-14
@@ -1,19 +1,15 @@
|
||||
package com.hippo.ehviewer.ui
|
||||
package com.hippo.ehviewer.ui.login
|
||||
|
||||
import android.os.Bundle
|
||||
import androidx.activity.ComponentActivity
|
||||
import androidx.activity.compose.setContent
|
||||
import androidx.navigation.ActivityNavigator
|
||||
import androidx.navigation.compose.NavHost
|
||||
import androidx.navigation.compose.composable
|
||||
import androidx.navigation.compose.rememberNavController
|
||||
import com.google.accompanist.themeadapter.material3.Mdc3Theme
|
||||
import com.hippo.ehviewer.ui.compose.CookieSignInScene
|
||||
import com.hippo.ehviewer.ui.compose.SelectSiteScreen
|
||||
import com.hippo.ehviewer.ui.compose.SignInScreen
|
||||
import com.hippo.ehviewer.ui.compose.WebviewSignInScreen
|
||||
import com.hippo.ehviewer.ui.EhActivity
|
||||
|
||||
class LoginActivity : ComponentActivity() {
|
||||
class LoginActivity : EhActivity() {
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContent {
|
||||
@@ -47,11 +43,9 @@ class LoginActivity : ComponentActivity() {
|
||||
super.finish()
|
||||
ActivityNavigator.applyPopAnimationsToPendingTransition(this)
|
||||
}
|
||||
|
||||
companion object {
|
||||
const val SIGN_IN_ROUTE_NAME = "SignIn"
|
||||
const val WEBVIEW_SIGN_IN_ROUTE_NAME = "WebViewSignIn"
|
||||
const val COOKIE_SIGN_IN_ROUTE_NAME = "CookieSignIn"
|
||||
const val SELECT_SITE_ROUTE_NAME = "SelectSite"
|
||||
}
|
||||
}
|
||||
|
||||
const val SIGN_IN_ROUTE_NAME = "SignIn"
|
||||
const val WEBVIEW_SIGN_IN_ROUTE_NAME = "WebViewSignIn"
|
||||
const val COOKIE_SIGN_IN_ROUTE_NAME = "CookieSignIn"
|
||||
const val SELECT_SITE_ROUTE_NAME = "SelectSite"
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package com.hippo.ehviewer.ui.compose
|
||||
package com.hippo.ehviewer.ui.login
|
||||
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.border
|
||||
+1
-4
@@ -1,4 +1,4 @@
|
||||
package com.hippo.ehviewer.ui.compose
|
||||
package com.hippo.ehviewer.ui.login
|
||||
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.foundation.layout.Box
|
||||
@@ -57,9 +57,6 @@ import com.hippo.ehviewer.UrlOpener
|
||||
import com.hippo.ehviewer.client.EhEngine
|
||||
import com.hippo.ehviewer.client.EhUrl
|
||||
import com.hippo.ehviewer.client.EhUtils
|
||||
import com.hippo.ehviewer.ui.LoginActivity.Companion.COOKIE_SIGN_IN_ROUTE_NAME
|
||||
import com.hippo.ehviewer.ui.LoginActivity.Companion.SELECT_SITE_ROUTE_NAME
|
||||
import com.hippo.ehviewer.ui.LoginActivity.Companion.WEBVIEW_SIGN_IN_ROUTE_NAME
|
||||
import com.hippo.util.ExceptionUtils
|
||||
import eu.kanade.tachiyomi.util.lang.launchIO
|
||||
import eu.kanade.tachiyomi.util.lang.withUIContext
|
||||
+4
-5
@@ -1,4 +1,4 @@
|
||||
package com.hippo.ehviewer.ui.compose
|
||||
package com.hippo.ehviewer.ui.login
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.graphics.Color
|
||||
@@ -14,7 +14,6 @@ import com.hippo.ehviewer.EhApplication
|
||||
import com.hippo.ehviewer.client.EhCookieStore
|
||||
import com.hippo.ehviewer.client.EhUrl
|
||||
import com.hippo.ehviewer.client.EhUtils
|
||||
import com.hippo.ehviewer.ui.LoginActivity.Companion.SELECT_SITE_ROUTE_NAME
|
||||
import com.hippo.ehviewer.widget.DialogWebChromeClient
|
||||
import okhttp3.Cookie
|
||||
import okhttp3.HttpUrl
|
||||
@@ -69,9 +68,9 @@ fun WebviewSignInScreen(navController: NavController) {
|
||||
EhCookieStore.newCookie(
|
||||
cookie,
|
||||
domain,
|
||||
true,
|
||||
true,
|
||||
true
|
||||
forcePersistent = true,
|
||||
forceLongLive = true,
|
||||
forceNotHostOnly = true
|
||||
)
|
||||
)
|
||||
}
|
||||
@@ -1029,8 +1029,8 @@ class DownloadsScene : BaseToolbarScene(), DownloadInfoListener, OnClickFabListe
|
||||
return
|
||||
}
|
||||
val info = mList!![position]
|
||||
if (info.thumb != null) {
|
||||
holder.thumb.load(EhCacheKeyFactory.getThumbKey(info.gid), info.thumb!!)
|
||||
info.thumb?.let {
|
||||
holder.thumb.load(EhCacheKeyFactory.getThumbKey(info.gid), EhUtils.fixThumbUrl(it))
|
||||
}
|
||||
holder.title.text = EhUtils.getSuitableTitle(info)
|
||||
holder.uploader.text = info.uploader
|
||||
|
||||
@@ -32,6 +32,7 @@ import com.hippo.ehviewer.Settings
|
||||
import com.hippo.ehviewer.client.EhCacheKeyFactory
|
||||
import com.hippo.ehviewer.client.EhUtils
|
||||
import com.hippo.ehviewer.client.data.GalleryInfo
|
||||
import com.hippo.ehviewer.dao.LocalFavoriteInfo
|
||||
import com.hippo.ehviewer.download.DownloadManager
|
||||
import com.hippo.ehviewer.widget.TileThumb
|
||||
import com.hippo.widget.recyclerview.AutoStaggeredGridLayoutManager
|
||||
@@ -169,6 +170,9 @@ internal abstract class GalleryAdapter(
|
||||
@SuppressLint("SetTextI18n")
|
||||
override fun onBindViewHolder(holder: GalleryHolder, position: Int) {
|
||||
val gi = getDataAt(position) ?: return
|
||||
if (gi is LocalFavoriteInfo) {
|
||||
gi.thumb = EhUtils.fixThumbUrl(gi.thumb!!)
|
||||
}
|
||||
when (mType) {
|
||||
TYPE_LIST -> {
|
||||
holder.thumb.load(EhCacheKeyFactory.getThumbKey(gi.gid), gi.thumb!!)
|
||||
|
||||
@@ -401,12 +401,7 @@ class GalleryListScene : SearchBarScene(), OnDragHandlerListener, SearchLayout.H
|
||||
val colorID = theme.resolveColor(com.google.android.material.R.attr.colorOnSurface)
|
||||
mActionFabDrawable = AddDeleteDrawable(context, colorID)
|
||||
binding.fabLayout.primaryFab!!.setImageDrawable(mActionFabDrawable)
|
||||
mSearchFab!!.setOnClickListener {
|
||||
if (STATE_NORMAL != mState) {
|
||||
onApplySearch()
|
||||
hideSoftInput()
|
||||
}
|
||||
}
|
||||
mSearchFab!!.setOnClickListener { onApplySearch() }
|
||||
|
||||
// Update list url builder
|
||||
onUpdateUrlBuilder()
|
||||
@@ -701,7 +696,7 @@ class GalleryListScene : SearchBarScene(), OnDragHandlerListener, SearchLayout.H
|
||||
|
||||
override fun onSearchViewExpanded() {
|
||||
super.onSearchViewExpanded()
|
||||
selectSearchFab(true)
|
||||
if (mState == STATE_NORMAL) selectSearchFab(true)
|
||||
}
|
||||
|
||||
override fun onSearchViewHidden() {
|
||||
@@ -1279,11 +1274,11 @@ class GalleryListScene : SearchBarScene(), OnDragHandlerListener, SearchLayout.H
|
||||
return if (null != mHelper) mHelper!!.size() else 0
|
||||
}
|
||||
|
||||
public override fun onItemClick(view: View, position: Int) {
|
||||
override fun onItemClick(view: View, position: Int) {
|
||||
this@GalleryListScene.onItemClick(position)
|
||||
}
|
||||
|
||||
public override fun onItemLongClick(view: View, position: Int): Boolean {
|
||||
override fun onItemLongClick(view: View, position: Int): Boolean {
|
||||
return this@GalleryListScene.onItemLongClick(position)
|
||||
}
|
||||
|
||||
|
||||
@@ -396,7 +396,9 @@ class HistoryScene : BaseToolbarScene() {
|
||||
override fun onBindViewHolder(holder: HistoryHolder, position: Int) {
|
||||
val gi: GalleryInfo? = getItem(position)
|
||||
gi ?: return
|
||||
gi.thumb?.let { holder.thumb.load(EhCacheKeyFactory.getThumbKey(gi.gid), it) }
|
||||
gi.thumb?.let {
|
||||
holder.thumb.load(EhCacheKeyFactory.getThumbKey(gi.gid), EhUtils.fixThumbUrl(it))
|
||||
}
|
||||
holder.title.text = EhUtils.getSuitableTitle(gi)
|
||||
holder.uploader.text = gi.uploader
|
||||
holder.rating.rating = gi.rating
|
||||
|
||||
@@ -53,8 +53,6 @@ abstract class SearchBarScene : BaseScene(), ToolBarScene {
|
||||
updateSuggestions()
|
||||
}
|
||||
binding.searchview.editText.setOnEditorActionListener { _, _, _ ->
|
||||
binding.toolbar.text = binding.searchview.text
|
||||
binding.searchview.hide()
|
||||
onApplySearch()
|
||||
true
|
||||
}
|
||||
@@ -157,6 +155,8 @@ abstract class SearchBarScene : BaseScene(), ToolBarScene {
|
||||
}
|
||||
|
||||
fun onApplySearch() {
|
||||
binding.toolbar.text = binding.searchview.text
|
||||
binding.searchview.hide()
|
||||
val query = binding.toolbar.text.toString().trim()
|
||||
if (!mAllowEmptySearch && query.isEmpty()) {
|
||||
return
|
||||
|
||||
@@ -35,7 +35,6 @@ class AdvanceSearchTable @JvmOverloads constructor(
|
||||
) : LinearLayout(context, attrs) {
|
||||
private var mSh: CheckBox
|
||||
private var mSto: CheckBox
|
||||
private var mSr: CheckBox
|
||||
private var mMinRating: TextInputLayout
|
||||
private var mSp: CheckBox
|
||||
private var mSpf: EditText
|
||||
@@ -53,8 +52,7 @@ class AdvanceSearchTable @JvmOverloads constructor(
|
||||
mSh = row0.getChildAt(0) as CheckBox
|
||||
mSto = row0.getChildAt(1) as CheckBox
|
||||
val row1 = getChildAt(1) as ViewGroup
|
||||
mSr = row1.getChildAt(0) as CheckBox
|
||||
mMinRating = row1.getChildAt(1) as TextInputLayout
|
||||
mMinRating = row1.getChildAt(0) as TextInputLayout
|
||||
val row2 = getChildAt(2) as ViewGroup
|
||||
mSp = row2.getChildAt(0) as CheckBox
|
||||
mSpf = row2.getChildAt(1) as EditText
|
||||
@@ -72,11 +70,6 @@ class AdvanceSearchTable @JvmOverloads constructor(
|
||||
true
|
||||
}
|
||||
|
||||
mMinRating.isEnabled = mSr.isChecked
|
||||
mSr.setOnCheckedChangeListener { _: CompoundButton, isChecked: Boolean ->
|
||||
mMinRating.isEnabled = isChecked
|
||||
}
|
||||
|
||||
mSpt.isEnabled = mSp.isChecked
|
||||
mSpf.isEnabled = mSp.isChecked
|
||||
mSp.setOnCheckedChangeListener { _: CompoundButton, isChecked: Boolean ->
|
||||
@@ -105,22 +98,17 @@ class AdvanceSearchTable @JvmOverloads constructor(
|
||||
var minRating: Int
|
||||
get() {
|
||||
val position = mArray.indexOf(mMinRating.editText!!.text.toString())
|
||||
return if (mSr.isChecked && position >= 0) {
|
||||
position + 2
|
||||
return if (position > 0) {
|
||||
position + 1
|
||||
} else {
|
||||
-1
|
||||
}
|
||||
}
|
||||
set(minRating) {
|
||||
if (minRating in 2..5) {
|
||||
mSr.isChecked = true
|
||||
(mMinRating.editText!! as AutoCompleteTextView).setText(
|
||||
mArray[minRating - 2],
|
||||
false
|
||||
)
|
||||
} else {
|
||||
mSr.isChecked = false
|
||||
}
|
||||
(mMinRating.editText!! as AutoCompleteTextView).setText(
|
||||
mArray[if (minRating in 2..5) minRating - 1 else 0],
|
||||
false
|
||||
)
|
||||
}
|
||||
var pageFrom: Int
|
||||
get() = if (mSp.isChecked) {
|
||||
|
||||
@@ -103,8 +103,8 @@ class SearchLayout @JvmOverloads constructor(
|
||||
mChip.isChecked = NumberUtils.int2boolean(mPair.first and mCategoryStored)
|
||||
mChip.setOnLongClickListener {
|
||||
if (mChip.isChecked) {
|
||||
for (i in 1 until mCategoryGroup.childCount + 1) {
|
||||
mCategoryGroup.check(i)
|
||||
for (i in 0 until mCategoryGroup.childCount) {
|
||||
(mCategoryGroup.getChildAt(i) as Chip).isChecked = true
|
||||
}
|
||||
mChip.isChecked = false
|
||||
} else {
|
||||
|
||||
@@ -28,41 +28,35 @@ import com.hippo.ehviewer.EhApplication
|
||||
import java.nio.ByteBuffer
|
||||
import kotlin.math.min
|
||||
|
||||
class Image private constructor(source: Source, private var releaseCall: (() -> Unit)? = null) {
|
||||
var mObtainedDrawable: Drawable?
|
||||
|
||||
init {
|
||||
mObtainedDrawable =
|
||||
ImageDecoder.decodeDrawable(source) { decoder: ImageDecoder, info: ImageInfo, _: Source ->
|
||||
decoder.setTargetColorSpace(colorSpace)
|
||||
decoder.setTargetSampleSize(
|
||||
min(
|
||||
info.size.width / (2 * screenWidth),
|
||||
info.size.height / (2 * screenHeight)
|
||||
).coerceAtLeast(1)
|
||||
)
|
||||
class Image private constructor(source: Source, private var src: ByteBufferSource?) {
|
||||
var mObtainedDrawable: Drawable? =
|
||||
ImageDecoder.decodeDrawable(source) { decoder: ImageDecoder, info: ImageInfo, _: Source ->
|
||||
decoder.setTargetColorSpace(colorSpace)
|
||||
decoder.setTargetSampleSize(
|
||||
min(
|
||||
info.size.width / (2 * screenWidth),
|
||||
info.size.height / (2 * screenHeight)
|
||||
).coerceAtLeast(1)
|
||||
)
|
||||
}.also {
|
||||
(it as? BitmapDrawable)?.run {
|
||||
src?.close()
|
||||
src = null
|
||||
}
|
||||
if (mObtainedDrawable is BitmapDrawable) {
|
||||
releaseCall?.invoke()
|
||||
releaseCall = null
|
||||
}
|
||||
}
|
||||
private set
|
||||
|
||||
val width: Int
|
||||
get() = mObtainedDrawable?.intrinsicWidth ?: 0
|
||||
val height: Int
|
||||
get() = mObtainedDrawable?.intrinsicHeight ?: 0
|
||||
val size: Int
|
||||
get() = mObtainedDrawable!!.run { intrinsicHeight * intrinsicWidth * 4 * if (this is Animatable) 4 else 1 }
|
||||
|
||||
@Synchronized
|
||||
fun recycle() {
|
||||
(mObtainedDrawable as? Animatable)?.run {
|
||||
stop()
|
||||
releaseCall?.invoke()
|
||||
releaseCall = null
|
||||
}
|
||||
(mObtainedDrawable as? BitmapDrawable)?.run { bitmap.recycle() }
|
||||
(mObtainedDrawable as? Animatable)?.stop()
|
||||
(mObtainedDrawable as? BitmapDrawable)?.bitmap?.recycle()
|
||||
mObtainedDrawable?.callback = null
|
||||
mObtainedDrawable = null
|
||||
src?.close()
|
||||
src = null
|
||||
}
|
||||
|
||||
companion object {
|
||||
@@ -82,9 +76,7 @@ class Image private constructor(source: Source, private var releaseCall: (() ->
|
||||
check(directBuffer.isDirect)
|
||||
rewriteGifSource(directBuffer)
|
||||
return runCatching {
|
||||
Image(ImageDecoder.createSource(directBuffer)) {
|
||||
src.close()
|
||||
}
|
||||
Image(ImageDecoder.createSource(directBuffer), src)
|
||||
}.onFailure {
|
||||
src.close()
|
||||
it.printStackTrace()
|
||||
|
||||
@@ -28,6 +28,7 @@ import androidx.core.content.ContextCompat
|
||||
import coil.imageLoader
|
||||
import coil.request.Disposable
|
||||
import coil.request.ImageRequest
|
||||
import coil.size.Size
|
||||
import com.hippo.drawable.PreciselyClipDrawable
|
||||
import com.hippo.ehviewer.R
|
||||
|
||||
@@ -134,7 +135,8 @@ open class LoadImageView @JvmOverloads constructor(
|
||||
clearRetry()
|
||||
task?.dispose()
|
||||
mRequest =
|
||||
ImageRequest.Builder(context).data(url).memoryCacheKey(key).diskCacheKey(key).target(
|
||||
ImageRequest.Builder(context).data(url).memoryCacheKey(key).diskCacheKey(key)
|
||||
.size(Size.ORIGINAL).target(
|
||||
{ onWait() },
|
||||
{ onFailure() },
|
||||
{ onGetValue(it, isLoaded) }
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package eu.kanade.tachiyomi.ui.reader.loader
|
||||
|
||||
import android.graphics.drawable.Animatable
|
||||
import androidx.annotation.CallSuper
|
||||
import androidx.collection.LruCache
|
||||
import com.hippo.image.Image
|
||||
@@ -100,8 +99,7 @@ abstract class PageLoader {
|
||||
}
|
||||
|
||||
override fun sizeOf(key: Int, value: Image): Int {
|
||||
if (value.mObtainedDrawable is Animatable) return value.height * value.width * 15
|
||||
return value.height * value.width * 4
|
||||
return value.size
|
||||
}
|
||||
|
||||
override fun entryRemoved(evicted: Boolean, key: Int, oldValue: Image, newValue: Image?) {
|
||||
|
||||
@@ -39,8 +39,7 @@
|
||||
android:name="androidx.navigation.fragment.NavHostFragment"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
app:defaultNavHost="true"
|
||||
app:navGraph="@navigation/nav_graph" />
|
||||
app:defaultNavHost="true" />
|
||||
</com.hippo.ehviewer.widget.AboveSnackerLayout>
|
||||
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
||||
|
||||
|
||||
@@ -50,7 +50,8 @@
|
||||
<com.hippo.widget.FabLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:paddingRight="@dimen/corner_fab_margin"
|
||||
android:elevation="6dp"
|
||||
android:paddingEnd="@dimen/corner_fab_margin"
|
||||
android:paddingBottom="@dimen/corner_fab_margin"
|
||||
app:fitsSystemWindowsInsets="top|bottom">
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginRight="@dimen/advance_search_table_item_margin"
|
||||
android:layout_marginEnd="@dimen/advance_search_table_item_margin"
|
||||
android:layout_weight="1"
|
||||
android:minWidth="0dp"
|
||||
android:minHeight="0dp"
|
||||
@@ -34,7 +34,7 @@
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginLeft="@dimen/advance_search_table_item_margin"
|
||||
android:layout_marginStart="@dimen/advance_search_table_item_margin"
|
||||
android:layout_weight="1"
|
||||
android:minWidth="0dp"
|
||||
android:minHeight="0dp"
|
||||
@@ -45,17 +45,8 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/advance_search_table_item_margin"
|
||||
android:layout_marginBottom="@dimen/advance_search_table_item_margin">
|
||||
|
||||
<com.google.android.material.checkbox.MaterialCheckBox
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginRight="@dimen/advance_search_table_item_margin"
|
||||
android:layout_weight="1"
|
||||
android:minWidth="0dp"
|
||||
android:minHeight="0dp"
|
||||
android:text="@string/search_sr" />
|
||||
android:layout_marginBottom="@dimen/advance_search_table_item_margin"
|
||||
android:baselineAligned="false">
|
||||
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
style="@style/Widget.Material3.TextInputLayout.OutlinedBox.ExposedDropdownMenu"
|
||||
@@ -63,6 +54,7 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginStart="@dimen/advance_search_table_item_margin"
|
||||
android:layout_marginEnd="@dimen/advance_search_table_item_margin"
|
||||
android:layout_weight="1"
|
||||
android:hint="@string/search_sr">
|
||||
|
||||
@@ -70,6 +62,7 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:inputType="none"
|
||||
android:text="@string/unlimited"
|
||||
app:simpleItems="@array/search_min_rating" />
|
||||
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
@@ -85,7 +78,7 @@
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginRight="@dimen/advance_search_table_item_margin"
|
||||
android:layout_marginEnd="@dimen/advance_search_table_item_margin"
|
||||
android:minWidth="0dp"
|
||||
android:minHeight="0dp"
|
||||
android:text="@string/search_sp" />
|
||||
@@ -98,6 +91,7 @@
|
||||
android:layout_marginLeft="@dimen/advance_search_table_item_margin"
|
||||
android:layout_marginRight="@dimen/advance_search_table_item_margin"
|
||||
android:imeOptions="actionNext"
|
||||
android:importantForAutofill="no"
|
||||
android:inputType="number"
|
||||
android:maxLines="1" />
|
||||
|
||||
@@ -118,6 +112,7 @@
|
||||
android:layout_marginLeft="@dimen/advance_search_table_item_margin"
|
||||
android:layout_marginRight="@dimen/advance_search_table_item_margin"
|
||||
android:imeOptions="actionNone"
|
||||
android:importantForAutofill="no"
|
||||
android:inputType="number"
|
||||
android:maxLines="1" />
|
||||
|
||||
@@ -125,7 +120,7 @@
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginLeft="@dimen/advance_search_table_item_margin"
|
||||
android:layout_marginStart="@dimen/advance_search_table_item_margin"
|
||||
android:text="@string/search_sp_suffix"
|
||||
android:textColor="?android:attr/textColorPrimary" />
|
||||
</LinearLayout>
|
||||
@@ -153,7 +148,7 @@
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginRight="@dimen/advance_search_table_item_margin"
|
||||
android:layout_marginEnd="@dimen/advance_search_table_item_margin"
|
||||
android:layout_weight="1"
|
||||
android:minWidth="0dp"
|
||||
android:minHeight="0dp"
|
||||
@@ -174,7 +169,7 @@
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginLeft="@dimen/advance_search_table_item_margin"
|
||||
android:layout_marginStart="@dimen/advance_search_table_item_margin"
|
||||
android:layout_weight="1"
|
||||
android:minWidth="0dp"
|
||||
android:minHeight="0dp"
|
||||
|
||||
@@ -16,7 +16,6 @@
|
||||
|
||||
<!-- German translations by UShimamura -->
|
||||
<resources>
|
||||
<string name="app_name">EhViewer</string>
|
||||
<string name="homepage">Startseite</string>
|
||||
<string name="subscription">Gefolgte Etiketten</string>
|
||||
<string name="whats_hot">Beliebt</string>
|
||||
|
||||
@@ -16,8 +16,6 @@
|
||||
|
||||
<resources>
|
||||
|
||||
<string name="app_name">EhViewer</string>
|
||||
|
||||
<!-- Category -->
|
||||
|
||||
<string name="homepage">Página de inicio</string>
|
||||
|
||||
@@ -16,8 +16,6 @@
|
||||
<!-- French translations by UShimamura -->
|
||||
<resources>
|
||||
|
||||
<string name="app_name">EhViewer</string>
|
||||
|
||||
<!-- Category -->
|
||||
|
||||
<string name="homepage">Page d\'acceuil</string>
|
||||
|
||||
@@ -16,8 +16,6 @@
|
||||
<!-- Japanese translations by UShimamura, trhjew, Rouryi and onlymash -->
|
||||
<resources>
|
||||
|
||||
<string name="app_name">EhViewer</string>
|
||||
|
||||
<string name="homepage">ホームページ</string>
|
||||
<string name="subscription">タグの購読</string>
|
||||
<string name="whats_hot">人気</string>
|
||||
|
||||
@@ -16,8 +16,6 @@
|
||||
|
||||
<resources>
|
||||
|
||||
<string name="app_name">EhViewer</string>
|
||||
|
||||
<!-- Theme -->
|
||||
|
||||
<string name="homepage">홈</string>
|
||||
|
||||
@@ -0,0 +1,261 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="text_is_empty">Tekst tom</string>
|
||||
<string name="waring">Advarsel</string>
|
||||
<string name="clipboard_gallery_url_snack_action">Vis</string>
|
||||
<string name="error_bad_status_code">Feil statuskode: %d</string>
|
||||
<string name="error_timeout">Tidsavbrudd</string>
|
||||
<string name="error_unknown_host">Ukjent vert</string>
|
||||
<string name="error_redirection">For mange videresendinger</string>
|
||||
<string name="error_socket">Nettverksfeil</string>
|
||||
<string name="password">Passord</string>
|
||||
<string name="sign_in_via_webview">Logg inn via WebView</string>
|
||||
<string name="downloads">Nedlastninger</string>
|
||||
<string name="register">Registrering</string>
|
||||
<string name="error_invalid_number">Ugyldig nummer</string>
|
||||
<string name="similar_gallery">Lignende</string>
|
||||
<string name="homepage">Hjemmeside</string>
|
||||
<string name="history">Historikk</string>
|
||||
<string name="subscription">Abonnement</string>
|
||||
<string name="settings">Innstillinger</string>
|
||||
<string name="username">Brukernavn</string>
|
||||
<string name="sign_in_via_cookies">Logg inn via informasjonskapsler</string>
|
||||
<string name="sign_in">Logg inn</string>
|
||||
<string name="sign_in_first">Logg inn først</string>
|
||||
<string name="download">Last ned</string>
|
||||
<string name="quick_search">Hurtigsøk</string>
|
||||
<string name="star_2">2 stjerner</string>
|
||||
<string name="readme">LESMEG</string>
|
||||
<string name="star_4">4 stjerner</string>
|
||||
<string name="no_torrents">Ingen torrenter</string>
|
||||
<string name="search_sfl">Språk</string>
|
||||
<string name="search_osc">Kun søk i omslag</string>
|
||||
<string name="error_empty_html">Tom side</string>
|
||||
<string name="tourist_mode">Fortsett uten å logge inn</string>
|
||||
<string name="select_scene">Hvilken galleriside vil du besøke\?</string>
|
||||
<string name="favored_times">♥ %d</string>
|
||||
<string name="torrent_count">Torrent (%d)</string>
|
||||
<string name="share">Del</string>
|
||||
<string name="gallery_list_search_bar_open_gallery">Åpne galleriet</string>
|
||||
<string name="search_normal_search">Normalt søk</string>
|
||||
<string name="search_subscription_search">Abonnementssøk</string>
|
||||
<string name="search_sp_to">til</string>
|
||||
<string name="search_sfu">Opplaster</string>
|
||||
<string name="delete">Slett</string>
|
||||
<string name="search">Søk</string>
|
||||
<string name="image_search">Bildesøk</string>
|
||||
<string name="search_normal">Normalt søk</string>
|
||||
<string name="search_cover">Søk i omslag</string>
|
||||
<string name="search_image">Bildesøk</string>
|
||||
<string name="search_specify_uploader">Angi opplaster</string>
|
||||
<string name="search_specify_tag">Angi etikett</string>
|
||||
<string name="select_image">Velg bilde</string>
|
||||
<string name="star_3">3 stjerner</string>
|
||||
<string name="read">Les</string>
|
||||
<string name="no_comments">Ingen kommentarer</string>
|
||||
<string name="duplicate_name">Dette navnet er allerede i bruk.</string>
|
||||
<string name="star_5">5 stjerner</string>
|
||||
<string name="no_tags">Ingen etiketter</string>
|
||||
<string name="no_previews">Ingen forhåndsvisninger</string>
|
||||
<string name="no_more_previews">Ingen flere forhåndsvisninger</string>
|
||||
<string name="no_more_comments">Ingen flere kommentarer</string>
|
||||
<string name="open_in_other_app">Åpne med et annet program</string>
|
||||
<string name="torrents">Torrenter</string>
|
||||
<string name="more_previews">Flere forhåndsvisninger</string>
|
||||
<string name="refresh">Gjenoppfrisk</string>
|
||||
<string name="get_it">Skjønner</string>
|
||||
<string name="keyword_search">Nøkkelordssøk</string>
|
||||
<string name="search_sp">Sider:</string>
|
||||
<string name="search_sft">Etiketter</string>
|
||||
<string name="unlimited">Ubegrenset</string>
|
||||
<plurals name="page_count">
|
||||
<item quantity="one">%d side</item>
|
||||
<item quantity="other">%d sider</item>
|
||||
</plurals>
|
||||
<string name="more_comment">Flere kommentarer</string>
|
||||
<string name="tag_vote_up">Stem opp</string>
|
||||
<string name="pref_grayscale">Gråskala</string>
|
||||
<string name="action_share">Del</string>
|
||||
<string name="download_torrent_started">Nedlasting av torrent startet</string>
|
||||
<string name="filter_the_tag">Blokker etiketten «%s»\?</string>
|
||||
<string name="rating9">Underbar</string>
|
||||
<string name="error_invalid_url">Ugyldig nettadresse</string>
|
||||
<string name="error_cannot_parse_the_url">Kan ikke tolke nettadressen</string>
|
||||
<string name="rating4">Dårlig</string>
|
||||
<string name="error_cant_find_activity">Finner ikke programmet</string>
|
||||
<string name="error_509">509</string>
|
||||
<string name="rating7">Bra</string>
|
||||
<string name="rating5">Middelmådig</string>
|
||||
<string name="rating3">Elending</string>
|
||||
<string name="error_decoding_failed">Dekoding mislyktes</string>
|
||||
<string name="error_reading_failed">Lesing mislyktes</string>
|
||||
<string name="error_parse_error">Tolkningsfeil</string>
|
||||
<string name="filter_the_uploader">Blokker opplasteren «%s»\?</string>
|
||||
<string name="error_write_failed">Skriving mislyktes</string>
|
||||
<string name="rating10">Mesterverk</string>
|
||||
<string name="rating8">Storslått</string>
|
||||
<string name="rating6">OK</string>
|
||||
<string name="rating2">Pinlig</string>
|
||||
<string name="key_pages">Sider</string>
|
||||
<string name="invalid_ip">Ugyldig IP</string>
|
||||
<string name="share_image">Del bilde</string>
|
||||
<string name="settings_eh_sign_out">Logg ut</string>
|
||||
<string name="settings_eh_identity_cookies_tourist">Turistmodus</string>
|
||||
<string name="settings_eh_identity_cookies_copy">Kopier informasjonskapsler</string>
|
||||
<string name="settings_about_version">Byggversjon</string>
|
||||
<string name="settings_my_tags">Mine etiketter</string>
|
||||
<string name="settings_eh_tag_translations_source">Plassholder</string>
|
||||
<string name="settings_eh_show_gallery_pages">Vis gallerisider</string>
|
||||
<string name="settings_advanced">Avansert</string>
|
||||
<string name="settings_about">Om</string>
|
||||
<string name="proxy_host_or_ip">Vert eller IP</string>
|
||||
<string name="settings_advanced_export_data">Eksporter data</string>
|
||||
<string name="settings_advanced_export_data_to">Data eksportert til %s</string>
|
||||
<string name="settings_advanced_import_data">Importer data</string>
|
||||
<string name="proxy_system">System-mellomtjener</string>
|
||||
<string name="settings_about_source">Kildekode</string>
|
||||
<string name="proxy_direct">Direkte</string>
|
||||
<string name="proxy_port">Port</string>
|
||||
<string name="proxy_invalid_port">Ugyldig port</string>
|
||||
<string name="rating1">Utolererbar</string>
|
||||
<string name="rating0">Katastrofe</string>
|
||||
<string name="gallery_info">Galleri-info</string>
|
||||
<string name="header_key">Nøkkel</string>
|
||||
<string name="add_host">Legg til en vert</string>
|
||||
<string name="settings_eh_list_mode">Listemodus</string>
|
||||
<string name="copied_to_clipboard">Kopiert til utklippstavlen</string>
|
||||
<string name="header_value">Verdi</string>
|
||||
<string name="key_title">Navn</string>
|
||||
<string name="stat_download_action_stop_all">Stopp alle</string>
|
||||
<string name="default_download_label_name">Forvalg</string>
|
||||
<string name="settings_u_config">EHentai-innstillinger</string>
|
||||
<string name="key_token">Symbol</string>
|
||||
<string name="key_language">Språk</string>
|
||||
<string name="go_to">Gå til</string>
|
||||
<string name="key_url">Nettadresse</string>
|
||||
<string name="cant_read_the_file">Kan ikke lese filen</string>
|
||||
<string name="key_category">Kategori</string>
|
||||
<string name="key_uploader">Opplaster</string>
|
||||
<string name="key_visible">Synlig</string>
|
||||
<string name="key_size">Størrelse</string>
|
||||
<string name="download_move_dialog_title">Flytt</string>
|
||||
<string name="key_torrents">Torrenter</string>
|
||||
<string name="no_one_comments_gallery">Ingen kommentar.</string>
|
||||
<string name="gallery_comments">Gallerikommentarer</string>
|
||||
<string name="download_state_wait">Venter</string>
|
||||
<string name="download_state_failed">Mislykket</string>
|
||||
<string name="download_state_failed_2">%d ufullstendig</string>
|
||||
<string name="download_labels">Last ned etiketter</string>
|
||||
<string name="download_start_all">Start alle</string>
|
||||
<string name="edit_comment">Rediger kommentar</string>
|
||||
<string name="stat_509_alert_title">509-advarsel</string>
|
||||
<string name="stat_download_done_title">Nedlasting fullført</string>
|
||||
<string name="gallery_previews">Galleriforhåndsvisninger</string>
|
||||
<string name="download_state_none">Pauset</string>
|
||||
<string name="download_state_downloading">Laster ned</string>
|
||||
<string name="download_state_downloaded">Nedlastet</string>
|
||||
<string name="download_state_finish">Ferdig</string>
|
||||
<string name="download_remove_dialog_check_text">Slett bildefiler</string>
|
||||
<string name="add_host_add">Legg til</string>
|
||||
<string name="settings_eh_gallery_site">Galleriside</string>
|
||||
<string name="download_stop_all">Stopp alle</string>
|
||||
<string name="invalid_host">Ugyldig vert</string>
|
||||
<string name="image_saved">Bilde lagret i %s</string>
|
||||
<string name="settings_download_download_origin_image">Last ned opprinnelig bilde</string>
|
||||
<string name="edit_host">Rediger verten</string>
|
||||
<string name="edit_host_confirm">Bekreft</string>
|
||||
<string name="edit_host_delete">Slett</string>
|
||||
<string name="settings_privacy_secure">Forhindre skjermavbildninger</string>
|
||||
<string name="download_service">Nedlastingstjeneste</string>
|
||||
<string name="proxy_type_name">Mellomtjenertype</string>
|
||||
<string name="action_copy">Kopier</string>
|
||||
<string name="toplist">Toppliste</string>
|
||||
<string name="toplist_pastyear">Forrige år</string>
|
||||
<string name="toplist_yesterday">I går</string>
|
||||
<string name="action_add_tag">Legg til etikett</string>
|
||||
<string name="reset_download_location">Tilbakestill til forvalg</string>
|
||||
<string name="dont_show_again">Ikke vis igjen</string>
|
||||
<string name="comment_user_uploader">%s (opplaster)</string>
|
||||
<string name="copy_trans">Kopier oversettelse</string>
|
||||
<string name="pref_rotation_type">Forvalgt rotasjonstype</string>
|
||||
<string name="viewer">Lesemodus</string>
|
||||
<string name="nav_zone_prev">Forrige</string>
|
||||
<string name="open_settings">Åpne innstillingene</string>
|
||||
<string name="open_by_default">Åpne som forvalg</string>
|
||||
<string name="settings_privacy_require_unlock">Krev opplåsing</string>
|
||||
<string name="archive_passwd">passord</string>
|
||||
<string name="account_name">Konto</string>
|
||||
<string name="action_settings">Innstillinger</string>
|
||||
<string name="nav_zone_left">Venstre</string>
|
||||
<string name="pref_fullscreen">Fullskjermsvisning</string>
|
||||
<string name="pref_inverted_colors">Invertert</string>
|
||||
<string name="action_menu">Meny</string>
|
||||
<string name="nav_zone_next">Neste</string>
|
||||
<string name="action_retry">Prøv igjen</string>
|
||||
<string name="label_default">Forvalg</string>
|
||||
<string name="tapping_inverted_horizontal">Vannrett</string>
|
||||
<string name="pref_category_reading_mode">Lesemodus</string>
|
||||
<string name="automatic_background">Automatisk</string>
|
||||
<string name="nav_zone_right">Høyre</string>
|
||||
<string name="pref_read_with_long_tap">Vis ved lang-trykk</string>
|
||||
<string name="pref_custom_color_filter">Egendefinert fargefilter</string>
|
||||
<string name="filter_mode_screen">Skjerm</string>
|
||||
<string name="pref_keep_screen_on">Behold skjerm påslått</string>
|
||||
<string name="tapping_inverted_vertical">Loddrett</string>
|
||||
<string name="tapping_inverted_both">Begge</string>
|
||||
<string name="white_background">Hvit</string>
|
||||
<string name="pref_reader_theme">Bakgrunnsfarge</string>
|
||||
<string name="black_background">Svart</string>
|
||||
<string name="gray_background">Grå</string>
|
||||
<string name="edge_nav">Kant</string>
|
||||
<string name="scale_type_stretch">Strekk</string>
|
||||
<string name="right_and_left_nav">Høyre og venstre</string>
|
||||
<string name="settings_eh_thumb_resolution_auto">Automatisk</string>
|
||||
<string name="db_version_too_high">Databaseversjonen er for høy</string>
|
||||
<string name="app_language_system">Systemspråk (forvalg)</string>
|
||||
<string name="error_something_wrong_happened">Noe gikk galt</string>
|
||||
<string name="need_sign_in">Innlogging kreves</string>
|
||||
<string name="just_now">Akkurat nå</string>
|
||||
<string name="move_favorites_dialog_title">Flytt favoritter</string>
|
||||
<string name="let_me_select">La meg velge</string>
|
||||
<string name="toplist_pastmonth">Forrige måned</string>
|
||||
<string name="from_clipboard">Fra utklippstavlen</string>
|
||||
<string name="delete_search_history">Slett «%s» fra søkehistorikk\?</string>
|
||||
<string name="collections">Samlinger</string>
|
||||
<string name="tag_vote_down">Stem ned</string>
|
||||
<plurals name="some_minutes_ago">
|
||||
<item quantity="one">Et minutt siden</item>
|
||||
<item quantity="other">%d minutter siden</item>
|
||||
</plurals>
|
||||
<plurals name="minute">
|
||||
<item quantity="one">min</item>
|
||||
<item quantity="other">min</item>
|
||||
</plurals>
|
||||
<plurals name="some_hours_ago">
|
||||
<item quantity="one">Én time siden</item>
|
||||
<item quantity="other">%d timer siden</item>
|
||||
</plurals>
|
||||
<string name="yesterday">I går</string>
|
||||
<string name="some_days_ago">%d dager siden</string>
|
||||
<plurals name="hour">
|
||||
<item quantity="one">time</item>
|
||||
<item quantity="other">timer</item>
|
||||
</plurals>
|
||||
<string name="download_all">Alle</string>
|
||||
<string name="action_save">Lagre</string>
|
||||
<plurals name="second">
|
||||
<item quantity="one">sek</item>
|
||||
<item quantity="other">sek</item>
|
||||
</plurals>
|
||||
<string name="settings_privacy">Personvern</string>
|
||||
<plurals name="day">
|
||||
<item quantity="one">dag</item>
|
||||
<item quantity="other">dager</item>
|
||||
</plurals>
|
||||
<plurals name="year">
|
||||
<item quantity="one">år</item>
|
||||
<item quantity="other">år</item>
|
||||
</plurals>
|
||||
<string name="no_archives">Ingen arkiver</string>
|
||||
<string name="action_save_to">Lagre i …</string>
|
||||
</resources>
|
||||
@@ -16,8 +16,6 @@
|
||||
|
||||
<resources>
|
||||
|
||||
<string name="app_name">EhViewer</string>
|
||||
|
||||
<!-- Theme -->
|
||||
|
||||
<string name="homepage">หน้าหลัก</string>
|
||||
|
||||
Executable → Regular
+14
-75
@@ -1,4 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?><!--
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
~ Copyright 2016 Hippo Sevenerror_please_login_first
|
||||
~
|
||||
~ Licensed under the Apache License, Version 2.0 (the "License");
|
||||
@@ -12,14 +13,8 @@
|
||||
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
~ See the License for the specific language governing permissions and
|
||||
~ limitations under the License.
|
||||
-->
|
||||
|
||||
<resources>
|
||||
|
||||
<string name="app_name">EhViewer</string>
|
||||
|
||||
--><resources>
|
||||
<!-- Theme -->
|
||||
|
||||
<string name="homepage">主页</string>
|
||||
<string name="subscription">订阅</string>
|
||||
<string name="whats_hot">热门</string>
|
||||
@@ -27,26 +22,20 @@
|
||||
<string name="history">历史</string>
|
||||
<string name="downloads">下载</string>
|
||||
<string name="settings">设置</string>
|
||||
|
||||
<string name="username">用户名</string>
|
||||
<string name="password">密码</string>
|
||||
|
||||
<string name="sign_in">登录</string>
|
||||
<string name="register">注册</string>
|
||||
<string name="sign_in_via_webview">通过网页登录</string>
|
||||
<string name="sign_in_via_cookies">通过 Cookie 登录</string>
|
||||
<string name="sign_in_first">请先登录</string>
|
||||
|
||||
<string name="cookie_explain">Cookie 是存储在浏览器里的一小块数据。如果您不清楚 Cookie 什么或者怎么获取 Cookie,最好搜索一下。\n\n请输入特定的 Cookie 来登录。</string>
|
||||
<string name="text_is_empty">文本为空</string>
|
||||
<string name="waring">警告</string>
|
||||
<string name="wrong_cookie_warning">看起来您输入的 Cookie 是错误的,最好检查一下。</string>
|
||||
|
||||
<string name="invalid_download_location">似乎下载路径不可用。请到重新设置下载路径。</string>
|
||||
|
||||
<string name="clipboard_gallery_url_snack_message">剪切板里有画廊链接</string>
|
||||
<string name="clipboard_gallery_url_snack_action">查看</string>
|
||||
|
||||
<string name="error_bad_status_code">错误状态码:%d</string>
|
||||
<string name="error_timeout">超时</string>
|
||||
<string name="error_unknown_host">未知主机</string>
|
||||
@@ -68,9 +57,7 @@
|
||||
<string name="error_invalid_number">非法数字</string>
|
||||
<string name="error_please_login_first">请先登陆</string>
|
||||
<string name="error_empty_html">页面内容为空</string>
|
||||
|
||||
<string name="kokomade_tip">设置->Eh->画廊站点->e-hentai</string>
|
||||
|
||||
<string name="kokomade_tip">设置->Eh->画廊站点->e-hentai</string>
|
||||
<string name="app_waring">本应用中内容来自互联网,部分内容可能对您的生理及心理造成难以恢复的伤害。本应用作者不会对由本应用造成的任何后果负责。\n\n未成年人应在监护人指导下使用本应用。\n\n继续使用即代表您同意上述条款。</string>
|
||||
<string name="error_username_cannot_empty">用户名不可为空</string>
|
||||
<string name="error_password_cannot_empty">密码不可为空</string>
|
||||
@@ -78,25 +65,19 @@
|
||||
<string name="sign_in_failed">登录失败</string>
|
||||
<string name="sign_in_failed_tip">若持续出错,请尝试“通过网页登录”或“通过 Cookie 登录”。</string>
|
||||
<string name="get_it">知道了</string>
|
||||
|
||||
<!-- Select scene -->
|
||||
<string name="select_scene">你想选择哪个画廊站点?</string>
|
||||
<string name="select_scene_explain">e-hentai:对任何人开放\nexhentai:仅对登录用户开放</string>
|
||||
|
||||
<!-- Update -->
|
||||
|
||||
<!-- Gallery List -->
|
||||
<string name="gallery_list_search_bar_hint_exhentai">搜索 ExHentai</string>
|
||||
<string name="gallery_list_search_bar_hint_e_hentai">搜索 E-Hentai</string>
|
||||
<string name="gallery_list_search_bar_open_gallery">打开画廊</string>
|
||||
<string name="gallery_list_empty_hit">什么都没有找到</string>
|
||||
<string name="gallery_list_empty_hit_subscription">请至 设置->EH->我的标签 订阅标签</string>
|
||||
|
||||
<string name="gallery_list_empty_hit_subscription">请至 设置->EH->我的标签 订阅标签</string>
|
||||
<string name="search">搜索</string>
|
||||
|
||||
<string name="keyword_search">关键字搜索</string>
|
||||
<string name="image_search">图片搜索</string>
|
||||
|
||||
<string name="search_normal">普通搜索</string>
|
||||
<string name="search_advance">高级选项</string>
|
||||
<string name="search_image">图片搜索</string>
|
||||
@@ -105,9 +86,7 @@
|
||||
<string name="search_specify_uploader">指定上传者</string>
|
||||
<string name="search_specify_tag">指定标签</string>
|
||||
<string name="search_enable_advance">启用高级选项</string>
|
||||
|
||||
<string name="search_tip">一般搜索:就是搜索。\n\n订阅搜素:在订阅中搜索。\n\n指定上传者:列出该上传者上传的画廊。其他选项会被忽略。\n\n指定标签:列出含有该标签的画廊。其他选项会被忽略。</string>
|
||||
|
||||
<string name="search_sh">仅显示被删除的画廊</string>
|
||||
<string name="search_sto">仅显示有种子的画廊</string>
|
||||
<string name="search_sr">最低评分:</string>
|
||||
@@ -119,17 +98,13 @@
|
||||
<string name="search_sfl">语言</string>
|
||||
<string name="search_sfu">上传者</string>
|
||||
<string name="search_sft">标签</string>
|
||||
|
||||
<string name="select_image">选择图片</string>
|
||||
<string name="search_uss">使用相似搜索</string>
|
||||
<string name="search_osc">只搜索封面</string>
|
||||
<string name="select_image_first">请先选择图片</string>
|
||||
|
||||
<string name="add_to_favourites">收藏</string>
|
||||
<string name="remove_from_favourites">移除收藏</string>
|
||||
|
||||
<string name="delete_downloads">删除下载</string>
|
||||
|
||||
<string name="quick_search">快速搜索</string>
|
||||
<string name="quick_search_tip">点击“+”来添加快速搜索</string>
|
||||
<string name="add_quick_search_dialog_title">添加快速搜索</string>
|
||||
@@ -142,15 +117,13 @@
|
||||
<string name="duplicate_name">已存在相同名称</string>
|
||||
<string name="save_progress">保存进度</string>
|
||||
<string name="delete_quick_search">删除快速搜索“%s”?</string>
|
||||
|
||||
<string name="go_to_hint">第 %1$d 页,共 %2$d 页</string>
|
||||
|
||||
<!-- search_min_rating -->
|
||||
<string name="unlimited">不限</string>
|
||||
<string name="star_2">2 星</string>
|
||||
<string name="star_3">3 星</string>
|
||||
<string name="star_4">4 星</string>
|
||||
<string name="star_5">5 星</string>
|
||||
|
||||
<!-- Gallery detail -->
|
||||
<string name="error_cannot_find_gallery">找不到画廊</string>
|
||||
<string name="download">下载</string>
|
||||
@@ -193,7 +166,6 @@
|
||||
<string name="filter_added">已添加屏蔽项</string>
|
||||
<string name="newer_version_avaliable">此画廊有新版本可用。</string>
|
||||
<string name="newer_version_title">%1$s, 添加于 %2$s</string>
|
||||
|
||||
<!-- Rating -->
|
||||
<string name="rating10">根本把持不住</string>
|
||||
<string name="rating9">好极了</string>
|
||||
@@ -206,13 +178,12 @@
|
||||
<string name="rating2">瞎眼</string>
|
||||
<string name="rating1">快要窒息了</string>
|
||||
<string name="rating0">…</string>
|
||||
|
||||
<!-- Gallery Info -->
|
||||
<string name="gallery_info">画廊信息</string>
|
||||
<string name="copied_to_clipboard">已复制到剪切板</string>
|
||||
<string name="header_key">键</string>
|
||||
<string name="header_value">值</string>
|
||||
<string name="key_gid">Gid</string>
|
||||
<string name="key_gid">GID</string>
|
||||
<string name="key_token">Token</string>
|
||||
<string name="key_url">链接</string>
|
||||
<string name="key_title">标题</string>
|
||||
@@ -231,8 +202,7 @@
|
||||
<string name="key_rating_count">评价次数</string>
|
||||
<string name="key_rating">评分</string>
|
||||
<string name="key_torrents">种子个数</string>
|
||||
<string name="key_torrent_url">种子</string>
|
||||
|
||||
<string name="key_torrent_url">种子链接</string>
|
||||
<!-- Gallery Comments -->
|
||||
<string name="gallery_comments">画廊评论</string>
|
||||
<string name="no_one_comments_gallery">暂时没有评论</string>
|
||||
@@ -256,11 +226,9 @@
|
||||
<string name="check_vote_status">查看投票情况</string>
|
||||
<string name="click_more_comments">点击加载更多评论</string>
|
||||
<string name="last_edited">上次修改时间:%s</string>
|
||||
|
||||
<!-- Gallery Previews -->
|
||||
<string name="gallery_previews">画廊预览</string>
|
||||
<string name="go_to">跳页</string>
|
||||
|
||||
<!-- Download -->
|
||||
<string name="scene_download_title">下载 - %s</string>
|
||||
<string name="no_download_info">这里是下载项目</string>
|
||||
@@ -297,7 +265,6 @@
|
||||
<string name="remember_download_label">记住下载标签</string>
|
||||
<string name="default_download_label">默认下载标签</string>
|
||||
<string name="added_to_download_list">已添加至下载列表</string>
|
||||
|
||||
<!-- Download label -->
|
||||
<string name="add">添加</string>
|
||||
<string name="new_label_title">新标签</string>
|
||||
@@ -306,12 +273,10 @@
|
||||
<string name="label_text_exist">标签已存在</string>
|
||||
<string name="rename_label_title">重命名标签</string>
|
||||
<string name="delete_label">删除标签“%s”?</string>
|
||||
|
||||
<!-- History -->
|
||||
<string name="no_history">这里是阅读历史</string>
|
||||
<string name="clear_all">全部清除</string>
|
||||
<string name="clear_all_history">清除所有阅读历史?</string>
|
||||
|
||||
<!-- Filter -->
|
||||
<string name="filter">屏蔽列表</string>
|
||||
<string name="filter_title">标题</string>
|
||||
@@ -326,17 +291,13 @@
|
||||
<string name="show_definition">查看定义</string>
|
||||
<string name="filter_text">屏蔽项文本</string>
|
||||
<string name="filter_tip">该屏蔽系统会在 EHentai 网站屏蔽系统的基础上继续屏蔽画廊。\n\n标题屏蔽项:排除标题含有该关键字的画廊。\n\n上传者屏蔽项:排除该上传者上传的画廊。\n\n标签屏蔽项:排除包含该标签的画廊,这会使获取画廊列表花费更多时间。\n\n标签组屏蔽项:排除包含该标签组的画廊,这会使获取画廊列表花费更多时间。\n\n评论者屏蔽项:排除该评论者发布的评论。\n\n评论屏蔽项:排除匹配该正则表达式的评论。</string>
|
||||
|
||||
<!-- Set Security -->
|
||||
|
||||
<!-- UConfig Activity -->
|
||||
<string name="u_config">EHentai 设置</string>
|
||||
<string name="apply">应用</string>
|
||||
<string name="apply_tip">点击右上角的对勾来保存设置</string>
|
||||
|
||||
<!-- My Tags Activity -->
|
||||
<string name="my_tags">我的标签</string>
|
||||
|
||||
<!-- Hosts Activity -->
|
||||
<string name="hosts">自定义 hosts.txt</string>
|
||||
<string name="hosts_host">Host</string>
|
||||
@@ -348,11 +309,9 @@
|
||||
<string name="edit_host_delete">删除</string>
|
||||
<string name="invalid_host">无效的 host</string>
|
||||
<string name="invalid_ip">无效的 IP</string>
|
||||
|
||||
<!-- Gallery Activity -->
|
||||
<string name="share_image">分享图片</string>
|
||||
<string name="image_saved">图片已保存至 %s</string>
|
||||
|
||||
<!-- Settings -->
|
||||
<string name="settings_eh">EH</string>
|
||||
<string name="settings_eh_sign_out">退出登录</string>
|
||||
@@ -388,10 +347,8 @@
|
||||
<string name="settings_eh_tag_translations_source_url">https://github.com/EhTagTranslation/Editor/wiki</string>
|
||||
<string name="settings_eh_filter">屏蔽列表</string>
|
||||
<string name="settings_eh_filter_summary">根据标题、上传者、标签、评论者屏蔽画廊或评论</string>
|
||||
|
||||
<string name="settings_read_volume_page">使用音量键翻页</string>
|
||||
<string name="settings_read_reverse_volume">翻转音量键</string>
|
||||
|
||||
<string name="settings_download">下载</string>
|
||||
<string name="settings_download_download_location">下载路径</string>
|
||||
<string name="settings_download_invalid_download_location">无效的下载路径</string>
|
||||
@@ -417,7 +374,6 @@
|
||||
<string name="settings_download_clean_redundancy_summary">清理下载目录中不在下载列表里的图片文件</string>
|
||||
<string name="settings_download_clean_redundancy_no_redundancy">未发现冗余</string>
|
||||
<string name="settings_download_clean_redundancy_done">完成冗余清理,共清理 %d 项</string>
|
||||
|
||||
<string name="settings_advanced">高级</string>
|
||||
<string name="settings_advanced_save_parse_error_body">解析失败时保存页面内容</string>
|
||||
<string name="settings_advanced_save_parse_error_body_summary">页面内容可能含有隐私敏感信息</string>
|
||||
@@ -436,6 +392,10 @@
|
||||
<string name="settings_advanced_built_in_hosts_summary">应用提供的主机到IP的映射\n可被自定义 hosts.txt 覆盖</string>
|
||||
<string name="settings_advanced_custom_hosts_title">自定义 hosts.txt</string>
|
||||
<string name="settings_advanced_custom_hosts_summary">将主机名称映射到相应的IP地址\n可覆盖内置 hosts.txt</string>
|
||||
<string name="settings_advanced_domain_fronting_title">域名前置(重启应用后生效)</string>
|
||||
<string name="settings_advanced_domain_fronting_summary">绕过 SNI 封锁\n启用时会禁用代理设置</string>
|
||||
<string name="settings_advanced_bypass_vpn_title">绕过VPN</string>
|
||||
<string name="settings_advanced_bypass_vpn_summary">启用域名前置时尝试绕过VPN</string>
|
||||
<string name="settings_advanced_export_data">导出数据</string>
|
||||
<string name="settings_advanced_export_data_summary">保存数据至外置存储器,例如下载列表,快速搜索列表</string>
|
||||
<string name="settings_advanced_export_data_to">已导出数据至 %s</string>
|
||||
@@ -449,7 +409,6 @@
|
||||
<string name="settings_advanced_backup_favorite_nothing">没有可以备份的收藏列表</string>
|
||||
<string name="settings_advanced_backup_favorite_success">备份收藏列表成功</string>
|
||||
<string name="settings_advanced_backup_favorite_failed">备份收藏列表失败</string>
|
||||
|
||||
<string name="settings_about">关于</string>
|
||||
<string name="settings_about_declaration_summary">EhViewer 与 E-Hentai.org 无任何联系</string>
|
||||
<string name="settings_about_author">作者</string>
|
||||
@@ -457,26 +416,18 @@
|
||||
<string name="settings_about_source">源码</string>
|
||||
<string name="settings_about_version">版本号</string>
|
||||
<string name="settings_about_check_for_updates">检查更新</string>
|
||||
|
||||
<!-- ExcludedLanguagesScene -->
|
||||
|
||||
<string name="please_wait">请稍候</string>
|
||||
|
||||
<string name="proxy_direct">直接连接</string>
|
||||
<string name="proxy_system">系统代理</string>
|
||||
<string name="proxy_host_or_ip">主机或 IP</string>
|
||||
<string name="proxy_port">端口</string>
|
||||
<string name="proxy_invalid_port">无效的端口</string>
|
||||
|
||||
<string name="cant_read_the_file">无法读取文件</string>
|
||||
<string name="db_version_too_high">数据库版本过高</string>
|
||||
|
||||
<string name="app_language_system">系统语言(默认)</string>
|
||||
|
||||
<!-- License -->
|
||||
|
||||
<!-- Dir Picker-->
|
||||
|
||||
<!-- Favorites -->
|
||||
<string name="cloud_favorites">云端收藏</string>
|
||||
<string name="local_favorites">本地收藏</string>
|
||||
@@ -490,12 +441,9 @@
|
||||
<string name="let_me_select">让我选择</string>
|
||||
<string name="collections">收藏夹</string>
|
||||
<string name="need_sign_in">需要登录</string>
|
||||
|
||||
<!-- Progress Scene -->
|
||||
<string name="error_something_wrong_happened">被玩坏了</string>
|
||||
|
||||
<!-- Guide -->
|
||||
|
||||
<!-- Readable Time -->
|
||||
<string name="from_the_future">来自未来</string>
|
||||
<string name="just_now">刚刚</string>
|
||||
@@ -507,7 +455,6 @@
|
||||
</plurals>
|
||||
<string name="yesterday">昨天</string>
|
||||
<string name="some_days_ago">%d 天前</string>
|
||||
|
||||
<plurals name="second">
|
||||
<item quantity="other">秒</item>
|
||||
</plurals>
|
||||
@@ -536,17 +483,14 @@
|
||||
<string name="settings_privacy">隐私</string>
|
||||
<string name="settings_privacy_secure">不允许屏幕抓取</string>
|
||||
<string name="settings_privacy_secure_summary">启用后,将不能截取该应用的屏幕截图,同时,将不会在系统任务切换器中显示该应用的内容预览,重新加载应用以生效此更改</string>
|
||||
|
||||
<string name="download_service">下载服务</string>
|
||||
<string name="favorite_name">收藏画廊</string>
|
||||
|
||||
<string name="black_dark_theme">纯黑深色主题</string>
|
||||
<string name="download_filter">过滤</string>
|
||||
<string name="download_all">全部</string>
|
||||
<string name="download_start_all_reversed">全部开始(倒序)</string>
|
||||
<string name="settings_download_download_delay">下载延时</string>
|
||||
<string name="settings_download_download_delay_summary">每次下载延时 %s 毫秒</string>
|
||||
|
||||
<string name="no_browser_installed">请安装一个浏览器。</string>
|
||||
<string name="toplist_alltime">从始至终</string>
|
||||
<string name="toplist_pastyear">过去一年</string>
|
||||
@@ -559,8 +503,6 @@
|
||||
<string name="from_clipboard">从剪贴板导入</string>
|
||||
<string name="from_clipboard_error">未在剪贴板中发现 Cookies。</string>
|
||||
<string name="delete_search_history">从搜索记录中删除“%s”?</string>
|
||||
<string name="settings_advanced_domain_fronting_title">域名前置(重启应用后生效)</string>
|
||||
<string name="settings_advanced_domain_fronting_summary">绕过 SNI 封锁\n启用时会禁用代理</string>
|
||||
<string name="action_add_tag">添加标签</string>
|
||||
<string name="action_add_tag_tip">添加新标签,用逗号「,」分割</string>
|
||||
<string name="comment_user_uploader">%s (上传者)</string>
|
||||
@@ -577,28 +519,25 @@
|
||||
<string name="app_link_not_verified_message">对于 Android 12 及更新的版本,您需要手动添加链接到已验证链接才能在 EhViewer 中打开 E-Hentai 链接。</string>
|
||||
<string name="app_link_not_verified_title">应用链接未验证</string>
|
||||
<string name="open_by_default">默认打开</string>
|
||||
|
||||
<string name="settings_privacy_require_unlock">需要解锁</string>
|
||||
<string name="settings_privacy_require_unlock_delay">锁定延迟</string>
|
||||
<string name="settings_privacy_require_unlock_delay_summary">离开应用并在 %s 分钟内返回时不需要解锁</string>
|
||||
<string name="settings_privacy_require_unlock_delay_summary_immediately">无论何时回到应用均要求解锁</string>
|
||||
<string name="proxy_type_name">代理类型</string>
|
||||
<string name="filter_label">屏蔽项类型</string>
|
||||
|
||||
<string name="archive_passwd">归档文件密码</string>
|
||||
<string name="archive_need_passwd">归档文件需要密码</string>
|
||||
<string name="passwd_wrong">密码错误</string>
|
||||
<string name="passwd_cannot_be_empty">密码不能为空</string>
|
||||
<string name="list_tile_thumb_size">详情模式下缩略图大小</string>
|
||||
<string name="account_name">账户</string>
|
||||
|
||||
<!-- Tachiyomi Reader Start-->
|
||||
<string name="action_settings">设置</string>
|
||||
<string name="action_retry">重试</string>
|
||||
<string name="action_share">分享</string>
|
||||
<string name="action_copy">复制</string>
|
||||
<string name="action_save">保存</string>
|
||||
<string name="action_save_to">保存到…</string>
|
||||
<string name="action_save_to">保存到…</string>
|
||||
<string name="pref_category_general">通用</string>
|
||||
<string name="pref_fullscreen">全屏</string>
|
||||
<string name="pref_page_transitions">页面过渡动画</string>
|
||||
@@ -682,4 +621,4 @@
|
||||
<string name="disabled_nav">关闭</string>
|
||||
<string name="wide_color_gamut">使用Display P3色彩空间</string>
|
||||
<!-- Tachiyomi Reader End-->
|
||||
</resources>
|
||||
</resources>
|
||||
@@ -16,8 +16,6 @@
|
||||
|
||||
<resources>
|
||||
|
||||
<string name="app_name">EhViewer</string>
|
||||
|
||||
<!-- Theme -->
|
||||
|
||||
<string name="homepage">主頁</string>
|
||||
|
||||
@@ -16,8 +16,6 @@
|
||||
|
||||
<resources>
|
||||
|
||||
<string name="app_name">EhViewer</string>
|
||||
|
||||
<!-- Theme -->
|
||||
|
||||
<string name="homepage">首頁</string>
|
||||
|
||||
@@ -72,7 +72,8 @@
|
||||
<item>2</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="search_min_rating">
|
||||
<string-array name="search_min_rating" translatable="false">
|
||||
<item>@string/unlimited</item>
|
||||
<item>@string/star_2</item>
|
||||
<item>@string/star_3</item>
|
||||
<item>@string/star_4</item>
|
||||
@@ -194,6 +195,7 @@
|
||||
<item>@string/app_language_zh_cn</item>
|
||||
<item>@string/app_language_zh_hk</item>
|
||||
<item>@string/app_language_zh_tw</item>
|
||||
<item>@string/app_language_nb_no</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="app_language_entry_values">
|
||||
@@ -208,6 +210,7 @@
|
||||
<item>zh-CN</item>
|
||||
<item>zh-HK</item>
|
||||
<item>zh-TW</item>
|
||||
<item>nb-NO</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="tag_translation_metadata" tools:ignore="InconsistentArrays">
|
||||
|
||||
Executable → Regular
+27
-89
@@ -1,4 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?><!--
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
~ Copyright 2016 Hippo Seven
|
||||
~
|
||||
~ Licensed under the Apache License, Version 2.0 (the "License");
|
||||
@@ -12,17 +13,11 @@
|
||||
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
~ See the License for the specific language governing permissions and
|
||||
~ limitations under the License.
|
||||
-->
|
||||
|
||||
<resources>
|
||||
|
||||
<string name="app_name">EhViewer</string>
|
||||
|
||||
--><resources>
|
||||
<string name="app_name" translatable="false">EhViewer</string>
|
||||
<string name="site_e" translatable="false">e-hentai</string>
|
||||
<string name="site_ex" translatable="false">exhentai</string>
|
||||
|
||||
<!-- Theme -->
|
||||
|
||||
<!-- Category -->
|
||||
<string name="doujinshi" translatable="false">DOUJINSHI</string>
|
||||
<string name="manga" translatable="false">MANGA</string>
|
||||
@@ -34,7 +29,6 @@
|
||||
<string name="cosplay" translatable="false">COSPLAY</string>
|
||||
<string name="asian_porn" translatable="false">ASIAN PORN</string>
|
||||
<string name="misc" translatable="false">MISC</string>
|
||||
|
||||
<string name="homepage">Homepage</string>
|
||||
<string name="subscription">Subscription</string>
|
||||
<string name="whats_hot">What\'s hot</string>
|
||||
@@ -43,26 +37,20 @@
|
||||
<string name="downloads">Downloads</string>
|
||||
<string name="settings">Settings</string>
|
||||
<string name="stub" translatable="false">Stub</string>
|
||||
|
||||
<string name="username">Username</string>
|
||||
<string name="password">Password</string>
|
||||
|
||||
<string name="sign_in">Sign in</string>
|
||||
<string name="register">Register</string>
|
||||
<string name="sign_in_via_webview">Sign in via WebView</string>
|
||||
<string name="sign_in_via_cookies">Sign in via cookies</string>
|
||||
<string name="sign_in_first">Please sign in first</string>
|
||||
|
||||
<string name="cookie_explain">A cookie is a small piece of data stored in web browser. Google it if you don\'t know what it is or how to get it.\n\nPlease enter special cookies to sign in.</string>
|
||||
<string name="text_is_empty">Text is empty</string>
|
||||
<string name="waring">Warning</string>
|
||||
<string name="wrong_cookie_warning">It seems that the cookies you entered are wrong. You\'d better check them.</string>
|
||||
|
||||
<string name="invalid_download_location">It seems download location is not available. Please set it in Settings.</string>
|
||||
|
||||
<string name="clipboard_gallery_url_snack_message">There is a gallery url in the clipboard</string>
|
||||
<string name="clipboard_gallery_url_snack_message">There is a gallery URL in the clipboard</string>
|
||||
<string name="clipboard_gallery_url_snack_action">View</string>
|
||||
|
||||
<string name="error_status_code_400" translatable="false">Bad Request</string>
|
||||
<string name="error_status_code_401" translatable="false">Unauthorized</string>
|
||||
<string name="error_status_code_402" translatable="false">Payment Required</string>
|
||||
@@ -81,14 +69,12 @@
|
||||
<string name="error_status_code_415" translatable="false">Unsupported Media Type</string>
|
||||
<string name="error_status_code_416" translatable="false">Requested Range Not Satisfiable</string>
|
||||
<string name="error_status_code_417" translatable="false">Expectation Failed</string>
|
||||
|
||||
<string name="error_status_code_500" translatable="false">Internal Server Error</string>
|
||||
<string name="error_status_code_501" translatable="false">Not Implemented</string>
|
||||
<string name="error_status_code_502" translatable="false">Bad Gateway</string>
|
||||
<string name="error_status_code_503" translatable="false">Service Unavailable</string>
|
||||
<string name="error_status_code_504" translatable="false">Gateway Timeout</string>
|
||||
<string name="error_status_code_505" translatable="false">HTTP Version Not Supported</string>
|
||||
|
||||
<string name="error_bad_status_code">Bad status code: %d</string>
|
||||
<string name="error_timeout">Timeout</string>
|
||||
<string name="error_unknown_host">Unknown host</string>
|
||||
@@ -96,60 +82,50 @@
|
||||
<string name="error_socket">Network error</string>
|
||||
<string name="error_unknown">Weird</string>
|
||||
<string name="error_cant_find_activity">Can\'t find the application</string>
|
||||
<string name="error_cannot_parse_the_url">Can\'t parse the url</string>
|
||||
<string name="error_cannot_parse_the_url">Can\'t parse the URL</string>
|
||||
<string name="error_decoding_failed">Decoding failed</string>
|
||||
<string name="error_reading_failed">Reading Failed</string>
|
||||
<string name="error_out_of_range">Out of range</string>
|
||||
<string name="error_write_failed">Write failed</string>
|
||||
<string name="error_parse_error">Parse error</string>
|
||||
<string name="error_509">509</string>
|
||||
<string name="error_invalid_url">Invalid url</string>
|
||||
<string name="error_invalid_url">Invalid URL</string>
|
||||
<string name="error_get_ptoken_error">Get pToken error</string>
|
||||
<string name="error_cant_create_temp_file">Couldn\'t create temp file</string>
|
||||
<string name="error_cant_save_image">Can\'t save image</string>
|
||||
<string name="error_invalid_number">Invalid number</string>
|
||||
<string name="error_please_login_first">Please login first</string>
|
||||
<string name="error_please_login_first">Please log in first</string>
|
||||
<string name="error_empty_html">Empty page</string>
|
||||
|
||||
<string name="kokomade_tip">Settings->Eh->Gallery Site->e-hentai</string>
|
||||
|
||||
<string name="kokomade_tip">Settings->Eh->Gallery Site->e-hentai</string>
|
||||
<string name="app_waring">The content of this application is from the Internet. Some of it may do physical or mental harm to you. You have learnt the risks above and would like to undertake them. By continuing to use it, you agree to the above terms.</string>
|
||||
<string name="error_username_cannot_empty">Username cannot be an empty string</string>
|
||||
<string name="error_password_cannot_empty">Password cannot be an empty string</string>
|
||||
<string name="tourist_mode">Continue without signing in</string>
|
||||
<string name="sign_in_failed">Sign in failed</string>
|
||||
<string name="sign_in_failed_tip">If this issue continues, try \"Sign in via WebView\" or \"Sign in via cookies\"</string>
|
||||
<string name="sign_in_failed_tip">If this issue continues, try \"Sign in via WebView\" or \"Sign in via cookies\".</string>
|
||||
<string name="get_it">Got it</string>
|
||||
|
||||
<!-- Select scene -->
|
||||
<string name="select_scene">Which gallery site do you want to visit?</string>
|
||||
<string name="select_scene_explain">e-hentai: available for anyone\nexhentai: available for who has signed in</string>
|
||||
|
||||
<!-- Update -->
|
||||
|
||||
<!-- Gallery List -->
|
||||
<string name="gallery_list_search_bar_hint_exhentai">Search ExHentai</string>
|
||||
<string name="gallery_list_search_bar_hint_e_hentai">Search E-Hentai</string>
|
||||
<string name="gallery_list_search_bar_open_gallery">Open the gallery</string>
|
||||
<string name="gallery_list_empty_hit">The World is Big and the panda sit alone</string>
|
||||
<string name="gallery_list_empty_hit_subscription">Subscribe to tags in Settings->EH->My tags</string>
|
||||
|
||||
<string name="gallery_list_empty_hit_subscription">Subscribe to tags in Settings->EH->My tags</string>
|
||||
<string name="search">Search</string>
|
||||
|
||||
<string name="keyword_search">Keyword search</string>
|
||||
<string name="image_search">Image search</string>
|
||||
|
||||
<string name="search_normal">Normal Search</string>
|
||||
<string name="search_advance">Advance Options</string>
|
||||
<string name="search_advance">Advanced Options</string>
|
||||
<string name="search_image">Image Search</string>
|
||||
<string name="search_normal_search">Normal search</string>
|
||||
<string name="search_subscription_search">Subscription search</string>
|
||||
<string name="search_specify_uploader">Specify uploader</string>
|
||||
<string name="search_specify_tag">Specify tag</string>
|
||||
<string name="search_enable_advance">Enable advance options</string>
|
||||
|
||||
<string name="search_tip">Normal search: Simply search.\n\nSubscription search: Search in subscriptions.\n\nSpecify uploader: Search for galleries uploaded by the specified uploader. All other options will be ignored.\n\nSpecify tag: Search for galleries that contain the specified tag. Only one tag accepted. Other options will be ignored.</string>
|
||||
|
||||
<string name="search_sh">Only Show Expunged Galleries</string>
|
||||
<string name="search_sto">Only Show Galleries With Torrents</string>
|
||||
<string name="search_sr">Minimum Rating:</string>
|
||||
@@ -158,22 +134,18 @@
|
||||
<string name="search_sp_err1">The page range maximum cannot be below 10</string>
|
||||
<string name="search_sp_err2">The page range must be at least 20</string>
|
||||
<!-- A placeholder for other languages -->
|
||||
<string name="search_sp_suffix" />
|
||||
<string name="search_sp_suffix"/>
|
||||
<string name="search_sf">Disable default filters for:</string>
|
||||
<string name="search_sfl">Language</string>
|
||||
<string name="search_sfu">Uploader</string>
|
||||
<string name="search_sft">Tags</string>
|
||||
|
||||
<string name="select_image">Select image</string>
|
||||
<string name="search_uss">Use similarity scan</string>
|
||||
<string name="search_osc">Only search covers</string>
|
||||
<string name="select_image_first">Please select image first</string>
|
||||
|
||||
<string name="add_to_favourites">Add to favourites</string>
|
||||
<string name="remove_from_favourites">Remove from favourites</string>
|
||||
|
||||
<string name="delete_downloads">Delete downloads</string>
|
||||
|
||||
<string name="quick_search">Quick search</string>
|
||||
<string name="quick_search_tip">Tap \"+\" to add Quick Search</string>
|
||||
<string name="add_quick_search_dialog_title">Add Quick Search</string>
|
||||
@@ -186,15 +158,13 @@
|
||||
<string name="duplicate_name">This name is already in use.</string>
|
||||
<string name="save_progress">Save progress</string>
|
||||
<string name="delete_quick_search">Delete quick search \"%s\"?</string>
|
||||
|
||||
<string name="go_to_hint">Page %1$d, total %2$d pages</string>
|
||||
|
||||
<!-- search_min_rating -->
|
||||
<string name="unlimited">Unlimited</string>
|
||||
<string name="star_2">2 stars</string>
|
||||
<string name="star_3">3 stars</string>
|
||||
<string name="star_4">4 stars</string>
|
||||
<string name="star_5">5 stars</string>
|
||||
|
||||
<!-- Gallery detail -->
|
||||
<string name="error_cannot_find_gallery">Couldn\'t find the gallery</string>
|
||||
<string name="download">Download</string>
|
||||
@@ -238,7 +208,6 @@
|
||||
<string name="filter_added">Blocker added</string>
|
||||
<string name="newer_version_avaliable">There are newer versions of this gallery available.</string>
|
||||
<string name="newer_version_title">%1$s, added %2$s</string>
|
||||
|
||||
<!-- Rating -->
|
||||
<string name="rating10">MASTERPIECE</string>
|
||||
<string name="rating9">AMAZING</string>
|
||||
@@ -252,15 +221,14 @@
|
||||
<string name="rating1">UNBEARABLE</string>
|
||||
<string name="rating0">DISASTER</string>
|
||||
<string name="rating_none" translatable="false">(´_ゝ`)</string>
|
||||
|
||||
<!-- Gallery Info -->
|
||||
<string name="gallery_info">Gallery Info</string>
|
||||
<string name="copied_to_clipboard">Copied to clipboard</string>
|
||||
<string name="header_key">Key</string>
|
||||
<string name="header_value">Value</string>
|
||||
<string name="key_gid">Gid</string>
|
||||
<string name="key_gid">GID</string>
|
||||
<string name="key_token">Token</string>
|
||||
<string name="key_url">Url</string>
|
||||
<string name="key_url">URL</string>
|
||||
<string name="key_title">Title</string>
|
||||
<string name="key_title_jpn">Jpn Title</string>
|
||||
<string name="key_thumb">Thumb</string>
|
||||
@@ -277,8 +245,7 @@
|
||||
<string name="key_rating_count">Rating count</string>
|
||||
<string name="key_rating">Rating</string>
|
||||
<string name="key_torrents">Torrents</string>
|
||||
<string name="key_torrent_url">Torrent Url</string>
|
||||
|
||||
<string name="key_torrent_url">Torrent URL</string>
|
||||
<!-- Gallery Comments -->
|
||||
<string name="gallery_comments">Gallery Comments</string>
|
||||
<string name="no_one_comments_gallery">No comment.</string>
|
||||
@@ -302,11 +269,9 @@
|
||||
<string name="check_vote_status">View vote details</string>
|
||||
<string name="click_more_comments">Click to load more comments</string>
|
||||
<string name="last_edited">Last edited: %s</string>
|
||||
|
||||
<!-- Gallery Previews -->
|
||||
<string name="gallery_previews">Gallery Previews</string>
|
||||
<string name="go_to">Go to</string>
|
||||
|
||||
<!-- Download -->
|
||||
<string name="scene_download_title">Download - %s</string>
|
||||
<string name="no_download_info">Download items will be shown here</string>
|
||||
@@ -343,7 +308,6 @@
|
||||
<string name="remember_download_label">Remember download label</string>
|
||||
<string name="default_download_label">Default download label</string>
|
||||
<string name="added_to_download_list">Added to download list</string>
|
||||
|
||||
<!-- Download label -->
|
||||
<string name="add">Add</string>
|
||||
<string name="new_label_title">New label</string>
|
||||
@@ -352,12 +316,10 @@
|
||||
<string name="label_text_exist">Label exists</string>
|
||||
<string name="rename_label_title">Rename label</string>
|
||||
<string name="delete_label">Delete label \"%s\"?</string>
|
||||
|
||||
<!-- History -->
|
||||
<string name="no_history">Viewed galleries will be shown here</string>
|
||||
<string name="clear_all">Clear all</string>
|
||||
<string name="clear_all_history">Clear all history?</string>
|
||||
|
||||
<!-- Filter -->
|
||||
<string name="filter">Blockers</string>
|
||||
<string name="filter_title">Title</string>
|
||||
@@ -372,21 +334,17 @@
|
||||
<string name="show_definition">Show definition</string>
|
||||
<string name="filter_text">Blocker text</string>
|
||||
<string name="filter_tip">This blocking system filters the result of EHentai website blocking system.\n\nTitle Blocker: exclude the gallery whose title contains the word.\n\nUploader Blocker: exclude the gallery which was uploaded by the uploader.\n\nTag Blocker: exclude the gallery which contain the tag, it takes more time to get gallery list.\n\nTag Namespace Blocker: exclude the gallery which contain the tag namespace, it takes more time to get gallery list.\n\nCommenter Blocker: exclude the comments posted by the commenter.\n\nComment Blocker: exclude the comments matching the regex.</string>
|
||||
|
||||
<!-- Set Security -->
|
||||
|
||||
<!-- UConfig Activity -->
|
||||
<string name="u_config">EHentai settings</string>
|
||||
<string name="apply">Apply</string>
|
||||
<string name="apply_tip">Tap the check mark to save the settings</string>
|
||||
|
||||
<!-- My Tags Activity -->
|
||||
<string name="my_tags">My tags</string>
|
||||
|
||||
<!-- Hosts Activity -->
|
||||
<string name="hosts">Custom hosts.txt</string>
|
||||
<string name="hosts_host">Host</string>
|
||||
<string name="hosts_ip">IP1(+IP2+IP3…)</string>
|
||||
<string name="hosts_ip">IP1(+IP2+IP3…)</string>
|
||||
<string name="add_host">Add a host</string>
|
||||
<string name="add_host_add">Add</string>
|
||||
<string name="edit_host">Edit the host</string>
|
||||
@@ -394,11 +352,9 @@
|
||||
<string name="edit_host_delete">Delete</string>
|
||||
<string name="invalid_host">Invalid host</string>
|
||||
<string name="invalid_ip">Invalid IP</string>
|
||||
|
||||
<!-- Gallery Activity -->
|
||||
<string name="share_image">Share image</string>
|
||||
<string name="image_saved">Image saved to %s</string>
|
||||
|
||||
<string name="settings_eh">EH</string>
|
||||
<string name="settings_eh_sign_out">Sign out</string>
|
||||
<string name="settings_eh_sign_out_tip">You have signed out. Restart the application to sign in again</string>
|
||||
@@ -433,10 +389,8 @@
|
||||
<string name="settings_eh_tag_translations_source_url">https://placeholder</string>
|
||||
<string name="settings_eh_filter">Blockers</string>
|
||||
<string name="settings_eh_filter_summary">Block gallery or comment by title, uploader, tags and commenter</string>
|
||||
|
||||
<string name="settings_read_volume_page">Use volume key to turn pages</string>
|
||||
<string name="settings_read_reverse_volume">Reverse volume key</string>
|
||||
|
||||
<string name="settings_download">Download</string>
|
||||
<string name="settings_download_download_location">Download location</string>
|
||||
<string name="settings_download_invalid_download_location">Invalid download location</string>
|
||||
@@ -464,9 +418,8 @@
|
||||
<string name="settings_download_clean_redundancy_summary">Remove gallery images which are not in download list but in download location</string>
|
||||
<string name="settings_download_clean_redundancy_no_redundancy">No redundancy</string>
|
||||
<string name="settings_download_clean_redundancy_done">Redundancy cleaning completed, clean-up %d items totally</string>
|
||||
|
||||
<string name="settings_advanced">Advanced</string>
|
||||
<string name="settings_advanced_save_parse_error_body">Save html content when parsing error</string>
|
||||
<string name="settings_advanced_save_parse_error_body">Save HTML content when parsing error</string>
|
||||
<string name="settings_advanced_save_parse_error_body_summary">Html content may be privacy-sensitive</string>
|
||||
<string name="settings_advanced_save_crash_log">Save crash log when app crashes</string>
|
||||
<string name="settings_advanced_save_crash_log_summary">Crash logs help developers fix bugs</string>
|
||||
@@ -483,6 +436,8 @@
|
||||
<string name="settings_advanced_built_in_hosts_summary">Apply the built-in host-to-IP mapping provided by the app.\nIt can be overridden by custom hosts.txt.</string>
|
||||
<string name="settings_advanced_domain_fronting_title">Domain fronting</string>
|
||||
<string name="settings_advanced_domain_fronting_summary">Bypass SNI blocking.</string>
|
||||
<string name="settings_advanced_bypass_vpn_title">Bypass VPN</string>
|
||||
<string name="settings_advanced_bypass_vpn_summary">Try to bypass VPN when domain fronting is enabled</string>
|
||||
<string name="settings_advanced_custom_hosts_title">Custom hosts.txt</string>
|
||||
<string name="settings_advanced_custom_hosts_summary">Map hostnames to IP addresses.\nIt can override built-in hosts.txt.</string>
|
||||
<string name="settings_advanced_export_data">Export data</string>
|
||||
@@ -491,14 +446,13 @@
|
||||
<string name="settings_advanced_export_data_failed">Failed to export data</string>
|
||||
<string name="settings_advanced_import_data">Import data</string>
|
||||
<string name="settings_advanced_import_data_summary">Load data which were previously saved</string>
|
||||
<string name="settings_advanced_import_data_successfully">Data imported successfully</string>
|
||||
<string name="settings_advanced_import_data_successfully">Data imported</string>
|
||||
<string name="settings_advanced_backup_favorite">Backup favorite list</string>
|
||||
<string name="settings_advanced_backup_favorite_summary">Backup remote favorite list to local</string>
|
||||
<string name="settings_advanced_backup_favorite_start">Backing up favorite list %s</string>
|
||||
<string name="settings_advanced_backup_favorite_nothing">Nothing to backup</string>
|
||||
<string name="settings_advanced_backup_favorite_success">Backup favorite list success</string>
|
||||
<string name="settings_advanced_backup_favorite_failed">Backup favorite list failed</string>
|
||||
|
||||
<string name="settings_about">About</string>
|
||||
<string name="settings_about_declaration" translatable="false">EhViewer</string>
|
||||
<string name="settings_about_declaration_summary">EhViewer is not affiliated with E-Hentai.org in any way</string>
|
||||
@@ -508,18 +462,15 @@
|
||||
<string name="settings_about_source">Source</string>
|
||||
<string name="settings_about_version">Build version</string>
|
||||
<string name="settings_about_check_for_updates">Check for updates</string>
|
||||
|
||||
<string name="proxy_direct">Direct</string>
|
||||
<string name="proxy_system">System Proxy</string>
|
||||
<string name="proxy_host_or_ip">Host or IP</string>
|
||||
<string name="proxy_port">Port</string>
|
||||
<string name="proxy_invalid_port">Invalid port</string>
|
||||
|
||||
<string name="cant_read_the_file">Can\'t read the file</string>
|
||||
<string name="db_version_too_high">Database version too high</string>
|
||||
|
||||
<string name="app_language_system">System Language (Default)</string>
|
||||
<string name="app_language_de">Deutsch</string>
|
||||
<string name="app_language_de" translatable="false">Deutsch</string>
|
||||
<string name="app_language_en" translatable="false">English</string>
|
||||
<string name="app_language_es" translatable="false">Español</string>
|
||||
<string name="app_language_fr" translatable="false">Français</string>
|
||||
@@ -529,15 +480,11 @@
|
||||
<string name="app_language_zh_cn" translatable="false">中文(大陆)</string>
|
||||
<string name="app_language_zh_hk" translatable="false">中文(香港)</string>
|
||||
<string name="app_language_zh_tw" translatable="false">國文(臺灣)</string>
|
||||
|
||||
<string name="app_language_nb_no" translatable="false">Norwegian Bokmål</string>
|
||||
<!-- ExcludedLanguagesScene -->
|
||||
|
||||
<string name="please_wait">Pleas wait</string>
|
||||
|
||||
<string name="please_wait">Please wait</string>
|
||||
<!-- License -->
|
||||
|
||||
<!-- Dir Picker-->
|
||||
|
||||
<!-- Favorites -->
|
||||
<string name="cloud_favorites">Cloud Favorites</string>
|
||||
<string name="local_favorites">Local Favorites</string>
|
||||
@@ -551,12 +498,9 @@
|
||||
<string name="let_me_select">Let me select</string>
|
||||
<string name="collections">Collections</string>
|
||||
<string name="need_sign_in">Signing in is required</string>
|
||||
|
||||
<!-- Progress Scene -->
|
||||
<string name="error_something_wrong_happened">Something wrong happened</string>
|
||||
|
||||
<!-- Guide -->
|
||||
|
||||
<!-- Readable Time -->
|
||||
<string name="from_the_future">From the future</string>
|
||||
<string name="just_now">Just now</string>
|
||||
@@ -603,15 +547,12 @@
|
||||
<string name="settings_privacy">Privacy</string>
|
||||
<string name="settings_privacy_secure">Prevent screenshots</string>
|
||||
<string name="settings_privacy_secure_summary">Prevent the content of the app from being taken screenshots of or shown in the \"Recent Apps\" list.</string>
|
||||
|
||||
<string name="download_service">Download Service</string>
|
||||
<string name="favorite_name">Favorite</string>
|
||||
|
||||
<string name="black_dark_theme">Black dark theme</string>
|
||||
<string name="download_filter">Filter</string>
|
||||
<string name="download_all">All</string>
|
||||
<string name="download_start_all_reversed">Start all (reversed)</string>
|
||||
|
||||
<string name="no_browser_installed">Just install a browser please.</string>
|
||||
<string name="toplist_alltime">All-Time</string>
|
||||
<string name="toplist_pastyear">Past Year</string>
|
||||
@@ -640,21 +581,18 @@
|
||||
<string name="app_link_not_verified_message">For Android 12 and newer, you need to manually add link to verified links in order to open E-Hentai links in EhViewer.</string>
|
||||
<string name="app_link_not_verified_title">App links not verified</string>
|
||||
<string name="open_by_default">Open by default</string>
|
||||
|
||||
<string name="settings_privacy_require_unlock">Require Unlock</string>
|
||||
<string name="settings_privacy_require_unlock_delay">Lock Delay</string>
|
||||
<string name="settings_privacy_require_unlock_delay_summary">No unlock is required when leaving App and returning within %s minute(s)</string>
|
||||
<string name="settings_privacy_require_unlock_delay_summary_immediately">Unlock is required whenever you return to this App</string>
|
||||
<string name="proxy_type_name">Proxy Type</string>
|
||||
<string name="filter_label">Blocker Type</string>
|
||||
|
||||
<string name="archive_passwd">password</string>
|
||||
<string name="archive_need_passwd">Archive need password</string>
|
||||
<string name="passwd_wrong">Password Wrong</string>
|
||||
<string name="passwd_cannot_be_empty">Password can\'t be empty</string>
|
||||
<string name="list_tile_thumb_size">Thumb size in thumb mode</string>
|
||||
<string name="account_name">Account</string>
|
||||
|
||||
<!-- Tachiyomi Reader Start-->
|
||||
<string name="action_settings">Settings</string>
|
||||
<string name="pref_rotation_type">Default rotation type</string>
|
||||
@@ -703,7 +641,7 @@
|
||||
<string name="white_background">White</string>
|
||||
<string name="gray_background">Gray</string>
|
||||
<string name="black_background">Black</string>
|
||||
<string name="automatic_background">Automatic</string>
|
||||
<string name="automatic_background">Auto</string>
|
||||
<string name="l_nav">L shaped</string>
|
||||
<string name="kindlish_nav">Kindle-ish</string>
|
||||
<string name="edge_nav">Edge</string>
|
||||
@@ -742,7 +680,7 @@
|
||||
<string name="action_share">Share</string>
|
||||
<string name="action_copy">Copy</string>
|
||||
<string name="action_save">Save</string>
|
||||
<string name="action_save_to">Save to…</string>
|
||||
<string name="action_save_to">Save to…</string>
|
||||
<string name="wide_color_gamut">Use Display P3 color space</string>
|
||||
<!-- Tachiyomi Reader End-->
|
||||
</resources>
|
||||
@@ -43,8 +43,8 @@
|
||||
android:title="@string/settings_advanced_read_cache_size"
|
||||
app:entries="@array/read_cache_size_entries"
|
||||
app:entryValues="@array/read_cache_size_entry_values"
|
||||
app:useSimpleSummaryProvider="true"
|
||||
app:iconSpaceReserved="false" />
|
||||
app:iconSpaceReserved="false"
|
||||
app:useSimpleSummaryProvider="true" />
|
||||
|
||||
<rikka.preference.SimpleMenuPreference
|
||||
android:defaultValue="system"
|
||||
@@ -52,8 +52,8 @@
|
||||
android:title="@string/settings_advanced_app_language_title"
|
||||
app:entries="@array/app_language_entries"
|
||||
app:entryValues="@array/app_language_entry_values"
|
||||
app:useSimpleSummaryProvider="true"
|
||||
app:iconSpaceReserved="false" />
|
||||
app:iconSpaceReserved="false"
|
||||
app:useSimpleSummaryProvider="true" />
|
||||
|
||||
<com.hippo.ehviewer.preference.ProxyPreference
|
||||
android:key="proxy"
|
||||
@@ -80,6 +80,13 @@
|
||||
android:title="@string/settings_advanced_domain_fronting_title"
|
||||
app:iconSpaceReserved="false" />
|
||||
|
||||
<rikka.material.preference.MaterialSwitchPreference
|
||||
android:defaultValue="true"
|
||||
android:key="bypass_vpn"
|
||||
android:summary="@string/settings_advanced_bypass_vpn_summary"
|
||||
android:title="@string/settings_advanced_bypass_vpn_title"
|
||||
app:iconSpaceReserved="false" />
|
||||
|
||||
<Preference
|
||||
android:key="export_data"
|
||||
android:summary="@string/settings_advanced_export_data_summary"
|
||||
|
||||
@@ -26,4 +26,5 @@
|
||||
<locale android:name="zh-CN" />
|
||||
<locale android:name="zh-HK" />
|
||||
<locale android:name="zh-TW" />
|
||||
<locale android:name="nb-NO" />
|
||||
</locale-config>
|
||||
Reference in new issue
Block a user