diff --git a/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java b/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java
index 1a2e2722c..229e3d9d5 100644
--- a/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java
+++ b/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java
@@ -42,6 +42,7 @@ import com.hippo.ehviewer.client.EhUrlOpener;
import com.hippo.ehviewer.client.EhUtils;
import com.hippo.ehviewer.ui.scene.AnalyticsScene;
import com.hippo.ehviewer.ui.scene.BaseScene;
+import com.hippo.ehviewer.ui.scene.CookieSignInScene;
import com.hippo.ehviewer.ui.scene.DownloadLabelScene;
import com.hippo.ehviewer.ui.scene.DownloadsScene;
import com.hippo.ehviewer.ui.scene.FavoritesScene;
@@ -97,6 +98,7 @@ public final class MainActivity extends StageActivity
registerLaunchMode(AnalyticsScene.class, SceneFragment.LAUNCH_MODE_SINGLE_TASK);
registerLaunchMode(SignInScene.class, SceneFragment.LAUNCH_MODE_SINGLE_TASK);
registerLaunchMode(WebViewSignInScene.class, SceneFragment.LAUNCH_MODE_SINGLE_TASK);
+ registerLaunchMode(CookieSignInScene.class, SceneFragment.LAUNCH_MODE_SINGLE_TASK);
registerLaunchMode(GalleryListScene.class, SceneFragment.LAUNCH_MODE_SINGLE_TOP);
registerLaunchMode(QuickSearchScene.class, SceneFragment.LAUNCH_MODE_SINGLE_TASK);
registerLaunchMode(GalleryDetailScene.class, SceneFragment.LAUNCH_MODE_STANDARD);
diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/CookieSignInScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/CookieSignInScene.java
new file mode 100644
index 000000000..5a753d062
--- /dev/null
+++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/CookieSignInScene.java
@@ -0,0 +1,206 @@
+/*
+ * 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.ui.scene;
+
+import android.content.Context;
+import android.content.DialogInterface;
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.support.design.widget.TextInputLayout;
+import android.support.v7.app.AlertDialog;
+import android.text.TextUtils;
+import android.view.KeyEvent;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.EditText;
+import android.widget.TextView;
+
+import com.hippo.ehviewer.EhApplication;
+import com.hippo.ehviewer.R;
+import com.hippo.ehviewer.client.EhCookieStore;
+import com.hippo.ehviewer.client.EhUrl;
+import com.hippo.rippleold.RippleSalon;
+import com.hippo.util.ActivityHelper;
+import com.hippo.yorozuya.AssertUtils;
+import com.hippo.yorozuya.ViewUtils;
+
+import okhttp3.Cookie;
+
+public class CookieSignInScene extends BaseScene implements EditText.OnEditorActionListener,
+ View.OnClickListener {
+
+ /*---------------
+ View life cycle
+ ---------------*/
+ @Nullable
+ private TextInputLayout mIpbMemberIdLayout;
+ @Nullable
+ private TextInputLayout mIpbPassHashLayout;
+ @Nullable
+ private EditText mIpbMemberId;
+ @Nullable
+ private EditText mIpbPassHash;
+ @Nullable
+ private View mOk;
+
+ @Override
+ public boolean needShowLeftDrawer() {
+ return false;
+ }
+
+ @Nullable
+ @Override
+ public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
+ View view = inflater.inflate(R.layout.scene_cookie_sign_in, container, false);
+ mIpbMemberIdLayout = (TextInputLayout) ViewUtils.$$(view, R.id.ipb_member_id_layout);
+ mIpbMemberId = mIpbMemberIdLayout.getEditText();
+ AssertUtils.assertNotNull(mIpbMemberId);
+ mIpbPassHashLayout = (TextInputLayout) ViewUtils.$$(view, R.id.ipb_pass_hash_layout);
+ mIpbPassHash = mIpbPassHashLayout.getEditText();
+ AssertUtils.assertNotNull(mIpbPassHash);
+ mOk = ViewUtils.$$(view, R.id.ok);
+
+ mIpbPassHash.setOnEditorActionListener(this);
+
+ mOk.setOnClickListener(this);
+
+ RippleSalon.addRipple(mOk, true);
+
+ return view;
+ }
+
+
+ @Override
+ public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+
+ ActivityHelper.showSoftInput(getActivity(), mIpbMemberId);
+ }
+
+ @Override
+ public void onDestroyView() {
+ super.onDestroyView();
+
+ mIpbMemberIdLayout = null;
+ mIpbPassHashLayout = null;
+ mIpbMemberId = null;
+ mIpbPassHash = null;
+ }
+
+ @Override
+ public void onClick(View v) {
+ if (mOk == v) {
+ enter();
+ }
+ }
+
+ @Override
+ public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
+ if (mIpbPassHash == v) {
+ enter();
+ }
+ return true;
+ }
+
+ // false for error
+ private static boolean checkIpbMemberId(String id) {
+ for (int i = 0, n = id.length(); i < n; i++) {
+ char ch = id.charAt(i);
+ if (!(ch >= '0' && ch <= '9')) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ private static boolean checkIpbPassHash(String hash) {
+ if (32 != hash.length()) {
+ return false;
+ }
+
+ for (int i = 0, n = hash.length(); i < n; i++) {
+ char ch = hash.charAt(i);
+ if (!(ch >= '0' && ch <= '9') && !(ch >= 'a' && ch <= 'z')) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ public void enter() {
+ if (null == mIpbMemberIdLayout || null == mIpbPassHashLayout ||
+ null == mIpbMemberId || null == mIpbPassHash) {
+ return;
+ }
+
+ final String ipbMemberId = mIpbMemberId.getText().toString().trim();
+ final String ipbPassHash = mIpbPassHash.getText().toString().trim();
+
+ if (TextUtils.isEmpty(ipbMemberId)) {
+ mIpbMemberIdLayout.setError(getString(R.string.text_is_empty));
+ return;
+ } else {
+ mIpbMemberIdLayout.setError(null);
+ }
+ if (TextUtils.isEmpty(ipbPassHash)) {
+ mIpbPassHashLayout.setError(getString(R.string.text_is_empty));
+ return;
+ } else {
+ mIpbPassHashLayout.setError(null);
+ }
+
+ ActivityHelper.hideSoftInput(getActivity());
+
+ if (!checkIpbMemberId(ipbMemberId) || !(checkIpbPassHash(ipbPassHash))) {
+ new AlertDialog.Builder(getContext()).setTitle(R.string.waring)
+ .setMessage(R.string.wrong_cookie_warning)
+ .setNegativeButton(R.string.i_dont_think_so, null)
+ .setPositiveButton(R.string.i_will_check_it, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ storeCookie(ipbMemberId, ipbPassHash);
+ setResult(RESULT_OK, null);
+ finish();
+ }
+ }).show();
+ } else {
+ storeCookie(ipbMemberId, ipbPassHash);
+ setResult(RESULT_OK, null);
+ finish();
+ }
+ }
+
+ private static Cookie newCookie(String name, String value, String domain) {
+ return new Cookie.Builder().name(name).value(value)
+ .domain(domain).expiresAt(Long.MAX_VALUE).build();
+ }
+
+ private void storeCookie(String id, String hash) {
+ Context context = getContext();
+ if (null == context) {
+ return;
+ }
+
+ EhCookieStore store = EhApplication.getEhCookieStore(context);
+ store.removeAll();
+ store.add(newCookie(EhCookieStore.KEY_IPD_MEMBER_ID, id, EhUrl.DOMAIN_E));
+ store.add(newCookie(EhCookieStore.KEY_IPD_MEMBER_ID, id, EhUrl.DOMAIN_EX));
+ store.add(newCookie(EhCookieStore.KEY_IPD_PASS_HASH, hash, EhUrl.DOMAIN_E));
+ store.add(newCookie(EhCookieStore.KEY_IPD_PASS_HASH, hash, EhUrl.DOMAIN_EX));
+ }
+}
diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/SignInScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/SignInScene.java
index 57b4c7c3a..9fb43ba3d 100644
--- a/app/src/main/java/com/hippo/ehviewer/ui/scene/SignInScene.java
+++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/SignInScene.java
@@ -55,6 +55,7 @@ public final class SignInScene extends BaseScene implements EditText.OnEditorAct
private static final String KEY_REQUEST_ID = "request_id";
private static final int REQUEST_CODE_WEBVIEW = 0;
+ private static final int REQUEST_CODE_COOKIE = 0;
/*---------------
View life cycle
@@ -220,7 +221,7 @@ public final class SignInScene extends BaseScene implements EditText.OnEditorAct
} else if (mSignInViaWebView == v) {
startScene(new Announcer(WebViewSignInScene.class).setRequestCode(this, REQUEST_CODE_WEBVIEW));
} else if (mSignInViaCookies == v) {
-
+ startScene(new Announcer(CookieSignInScene.class).setRequestCode(this, REQUEST_CODE_COOKIE));
} else if (mSkipSigningIn == v) {
redirectTo();
}
diff --git a/app/src/main/res/drawable/v_cookie_brown_x48.xml b/app/src/main/res/drawable/v_cookie_brown_x48.xml
new file mode 100644
index 000000000..27cde1d7a
--- /dev/null
+++ b/app/src/main/res/drawable/v_cookie_brown_x48.xml
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/scene_cookie_sign_in.xml b/app/src/main/res/layout/scene_cookie_sign_in.xml
new file mode 100644
index 000000000..da175efdb
--- /dev/null
+++ b/app/src/main/res/layout/scene_cookie_sign_in.xml
@@ -0,0 +1,112 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index 0bc9aebb2..c81c0b183 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -37,6 +37,15 @@
昵称
昵称为空
+ Little Hippo
+
+ Cookie 是存储在浏览器里的一小块数据。如果您不清楚 Cookie 什么或者怎么获取 Cookie,最好搜索一下。\n\n可以通过输入特定的 Cookie 来登陆。
+ 文本为空
+ 警告
+ 看起来您输入的 Cookie 是错误的,最好检查一下。
+ 好的
+ 我没输错
+
错误的状态码:%d
超时
未知主机
@@ -67,9 +76,9 @@
登陆失败。这可能是网站更新导致的,也有可能是发生了奇怪的事情。您可以选择在登陆按钮下方通过网页登陆或者输入 cookie,或者跳过登陆。跳过登陆可能导致无法正常使用应用。
再按一次退出
点击重试
- EhViewer 将申请设备存储空间访问权限以便下载画廊。你愿意授权吗?
+ EhViewer 将申请设备存储空间访问权限以便下载画廊。您愿意授权吗?
好痛
- 你同意让开发者收集你的设备信息与使用情况吗?这将对开发有很大帮助。<br><br>数据统计服务由 Google Analytics 提供,其隐私政策可在 <a href="https://www.google.com/policies/privacy/">https://www.google.com/policies/privacy/</a> 查看。<br><br>若您同意参与数据统计,您的设备信息与应用使用情况将会被记录,其包括但不限于:Android API 版本、设备型号、语言所在地、本应用版本号、会话时长、应用功能使用次数。开发者承诺以下信息并不会被记录:电话号码、电子邮件地址、IMEI。<br><br>在您同意参与数据统计之前,您的信息不会被记录。<br><br>被记录的数据会由 Google Analytics 进行分析,分析报表仅可被本应用开发者访问。
+ 您同意让开发者收集您的设备信息与使用情况吗?这将对开发有很大帮助。<br><br>数据统计服务由 Google Analytics 提供,其隐私政策可在 <a href="https://www.google.com/policies/privacy/">https://www.google.com/policies/privacy/</a> 查看。<br><br>若您同意参与数据统计,您的设备信息与应用使用情况将会被记录,其包括但不限于:Android API 版本、设备型号、语言所在地、本应用版本号、会话时长、应用功能使用次数。开发者承诺以下信息并不会被记录:电话号码、电子邮件地址、IMEI。<br><br>在您同意参与数据统计之前,您的信息不会被记录。<br><br>被记录的数据会由 Google Analytics 进行分析,分析报表仅可被本应用开发者访问。
知道了
@@ -286,8 +295,8 @@
下载路径
无效的下载路径
无法获取下载路径
- 在 KitKat 中你无法把数据写入外置 SD 卡,除非你做了奇怪的事情
- Lollipop 提供了新的写入外置 SD 卡的 API。如果你想把下载路径设置到外置 SD 卡上,点击 \"文档\" 按钮
+ 在 KitKat 中您无法把数据写入外置 SD 卡,除非您做了奇怪的事情
+ Lollipop 提供了新的写入外置 SD 卡的 API。如果您想把下载路径设置到外置 SD 卡上,点击 \"文档\" 按钮
文档
关于
diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml
index 52553cb05..3eab9415d 100644
--- a/app/src/main/res/values-zh-rHK/strings.xml
+++ b/app/src/main/res/values-zh-rHK/strings.xml
@@ -37,6 +37,15 @@
暱稱
暱稱為空
+ Little Hippo
+
+ Cookie 是存儲在瀏覽器裏的一小塊數據。如果您不清楚 Cookie 什麼或者怎麼獲取 Cookie,最好搜索一下。\n\n可以通過輸入特定的 Cookie 來登陸。
+ 文本為空
+ 警告
+ 看起來您輸入的 Cookie 是錯誤的,最好檢查一下。
+ 好的
+ 我沒輸錯
+
錯誤的狀態碼:%d
超時
未知主機
@@ -67,9 +76,9 @@
登陸失敗。這可能是網站更新導致的,也有可能是發生了奇怪的事情。您可以選擇在登陸按鈕下方通過網頁登陸或者輸入 cookie,或者跳過登陸。跳過登陸可能導致無法正常使用應用。
再按一次退出
點擊重試
- EhViewer 將申請設備存儲空間訪問權限以便下載畫廊。你願意授權嗎?
+ EhViewer 將申請設備存儲空間訪問權限以便下載畫廊。您願意授權嗎?
好痛
- 你同意讓開發者收集你的設備信息與使用情況嗎?這將對開發有很大幫助。<br><br>數據統計服務由 Google Analytics 提供,其隱私政策可在 <a href="https://www.google.com/policies/privacy/">https://www.google.com/policies/privacy/</a> 查看。<br><br>若您同意參與數據統計,您的設備信息與應用使用情況將會被記錄,其包括但不限於:Android API 版本、設備型號、語言所在地、本應用版本號、會話時長、應用功能使用次數。開發者承諾以下信息並不會被記錄:電話號碼、電子郵件地址、IMEI。<br><br>在您同意參與數據統計之前,您的信息不會被記錄。<br><br>被記錄的數據會由 Google Analytics 進行分析,分析報表僅可被本應用開發者訪問。
+ 您同意讓開發者收集您的設備信息與使用情況嗎?這將對開發有很大幫助。<br><br>數據統計服務由 Google Analytics 提供,其隱私政策可在 <a href="https://www.google.com/policies/privacy/">https://www.google.com/policies/privacy/</a> 查看。<br><br>若您同意參與數據統計,您的設備信息與應用使用情況將會被記錄,其包括但不限於:Android API 版本、設備型號、語言所在地、本應用版本號、會話時長、應用功能使用次數。開發者承諾以下信息並不會被記錄:電話號碼、電子郵件地址、IMEI。<br><br>在您同意參與數據統計之前,您的信息不會被記錄。<br><br>被記錄的數據會由 Google Analytics 進行分析,分析報表僅可被本應用開發者訪問。
知道了
@@ -286,8 +295,8 @@
下載路徑
無效的下載路徑
無法獲取下載路徑
- 在 KitKat 中你無法把數據寫入外置 SD 卡,除非你做了奇怪的事情
- Lollipop 提供了新的寫入外置 SD 卡的 API。如果你想把下載路徑設置到外置 SD 卡上,點擊 \"文檔\" 按鈕
+ 在 KitKat 中您無法把數據寫入外置 SD 卡,除非您做了奇怪的事情
+ Lollipop 提供了新的寫入外置 SD 卡的 API。如果您想把下載路徑設置到外置 SD 卡上,點擊 \"文檔\" 按鈕
文檔
關於
diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml
index fa7d21cab..b7149b48f 100644
--- a/app/src/main/res/values-zh-rTW/strings.xml
+++ b/app/src/main/res/values-zh-rTW/strings.xml
@@ -37,6 +37,15 @@
暱稱
暱稱為空
+ Little Hippo
+
+ Cookie 是儲存在瀏覽器裡的一小塊資料。如果您不清楚 Cookie 什麼或者怎麼獲取 Cookie,最好搜尋一下。\n\n可以通過輸入特定的 Cookie 來登陸。
+ 文字為空
+ 警告
+ 看起來您輸入的 Cookie 是錯誤的,最好檢查一下。
+ 好的
+ 我沒輸錯
+
錯誤的狀態碼:%d
超時
未知主機
@@ -67,9 +76,9 @@
登陸失敗。這可能是網站更新導致的,也有可能是發生了奇怪的事情。您可以選擇在登陸按鈕下方通過網頁登陸或者輸入 cookie,或者跳過登陸。跳過登陸可能導致無法正常使用應用。
再按一次退出
點選重試
- EhViewer 將申請裝置儲存空間訪問許可權以便下載畫廊。你願意授權嗎?
+ EhViewer 將申請裝置儲存空間訪問許可權以便下載畫廊。您願意授權嗎?
好痛
- 你同意讓開發者收集你的裝置資訊與使用情況嗎?這將對開發有很大幫助。<br><br>資料統計服務由 Google Analytics 提供,其隱私政策可在 <a href="https://www.google.com/policies/privacy/">https://www.google.com/policies/privacy/</a> 檢視。<br><br>若您同意參與資料統計,您的裝置資訊與應用使用情況將會被記錄,其包括但不限於:Android API 版本、裝置型號、語言所在地、本應用版本號、會話時長、應用功能使用次數。開發者承諾以下資訊並不會被記錄:電話號碼、電子郵件地址、IMEI。<br><br>在您同意參與資料統計之前,您的資訊不會被記錄。<br><br>被記錄的資料會由 Google Analytics 進行分析,分析報表僅可被本應用開發者訪問。
+ 您同意讓開發者收集您的裝置資訊與使用情況嗎?這將對開發有很大幫助。<br><br>資料統計服務由 Google Analytics 提供,其隱私政策可在 <a href="https://www.google.com/policies/privacy/">https://www.google.com/policies/privacy/</a> 檢視。<br><br>若您同意參與資料統計,您的裝置資訊與應用使用情況將會被記錄,其包括但不限於:Android API 版本、裝置型號、語言所在地、本應用版本號、會話時長、應用功能使用次數。開發者承諾以下資訊並不會被記錄:電話號碼、電子郵件地址、IMEI。<br><br>在您同意參與資料統計之前,您的資訊不會被記錄。<br><br>被記錄的資料會由 Google Analytics 進行分析,分析報表僅可被本應用開發者訪問。
知道了
@@ -286,8 +295,8 @@
下載路徑
無效的下載路徑
無法獲取下載路徑
- 在 KitKat 中你無法把資料寫入外接 SD 卡,除非你做了奇怪的事情
- Lollipop 提供了新的寫入外接 SD 卡的 API。如果你想把下載路徑設定到外接 SD 卡上,點選 \"文件\" 按鈕
+ 在 KitKat 中您無法把資料寫入外接 SD 卡,除非您做了奇怪的事情
+ Lollipop 提供了新的寫入外接 SD 卡的 API。如果您想把下載路徑設定到外接 SD 卡上,點選 \"文件\" 按鈕
文件
關於
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index 93c6738a7..106f738c2 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -53,6 +53,7 @@
#ffff7043
#ff9e9e9e
#ffeeeeee
+ #ff795548
@color/teal_500
@color/teal_700
diff --git a/app/src/main/res/values/pathdata.xml b/app/src/main/res/values/pathdata.xml
index 046ed68c0..f0eb34560 100644
--- a/app/src/main/res/values/pathdata.xml
+++ b/app/src/main/res/values/pathdata.xml
@@ -52,6 +52,7 @@
M5,3H19A2,2 0 0,1 21,5V19A2,2 0 0,1 19,21H5A2,2 0 0,1 3,19V5A2,2 0 0,1 5,3M12,17L12.72,16.34C15.3,14 17,12.46 17,10.57C17,9.03 15.79,7.82 14.25,7.82C13.38,7.82 12.55,8.23 12,8.87C11.45,8.23 10.62,7.82 9.75,7.82C8.21,7.82 7,9.03 7,10.57C7,12.46 8.7,14 11.28,16.34L12,17Z
M19,3H5C3.9,3,3,3.9,3,5V19C3,20.1,3.9,21,5,21H19C20.1,21,21,20.1,21,19V5C21,3.9,20.1,3,19,3ZM12,17L7,12H10V8H14V12H17L12,17Z
M16,11.78L20.24,4.45L21.97,5.45L16.74,14.5L10.23,10.75L5.46,19H22V21H2V3H4V17.54L9.5,8L16,11.78Z
+ M12,3A9,9 0 0,0 3,12A9,9 0 0,0 12,21A9,9 0 0,0 21,12C21,11.5 20.96,11 20.87,10.5C20.6,10 20,10 20,10H18V9C18,8 17,8 17,8H15V7C15,6 14,6 14,6H13V4C13,3 12,3 12,3M9.5,6A1.5,1.5 0 0,1 11,7.5A1.5,1.5 0 0,1 9.5,9A1.5,1.5 0 0,1 8,7.5A1.5,1.5 0 0,1 9.5,6M6.5,10A1.5,1.5 0 0,1 8,11.5A1.5,1.5 0 0,1 6.5,13A1.5,1.5 0 0,1 5,11.5A1.5,1.5 0 0,1 6.5,10M11.5,11A1.5,1.5 0 0,1 13,12.5A1.5,1.5 0 0,1 11.5,14A1.5,1.5 0 0,1 10,12.5A1.5,1.5 0 0,1 11.5,11M16.5,13A1.5,1.5 0 0,1 18,14.5A1.5,1.5 0 0,1 16.5,16H16.5A1.5,1.5 0 0,1 15,14.5H15A1.5,1.5 0 0,1 16.5,13M11,16A1.5,1.5 0 0,1 12.5,17.5A1.5,1.5 0 0,1 11,19A1.5,1.5 0 0,1 9.5,17.5A1.5,1.5 0 0,1 11,16Z
M13,0C20.2,0,26,5.9,26,13.2,26,16.9,24,20.8,18.7,26.1L13,32,7.2,26.2C2,20.8,0,16.9,0,13.3,0,5.9,5.8,0,13,0Z
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 8c99ac470..f689602af 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -52,6 +52,13 @@
Little Hippo
+ A cookie is a small piece of data stored in web browser. Search it if you don\'t know what it is or how to get it.\n\nYou can sign in by entering special cookies.
+ Text is empty
+ Warning
+ It seems that the cookies you entered are wrong. You\'d better check them.
+ I will check it
+ I don\'t think so
+
Bad Request
Unauthorized
Payment Required