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
index 201b44d74..93e808bdc 100644
--- a/app/src/main/java/com/hippo/ehviewer/ui/scene/CookieSignInScene.java
+++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/CookieSignInScene.java
@@ -16,10 +16,15 @@
package com.hippo.ehviewer.ui.scene;
+import android.content.ClipData;
+import android.content.ClipDescription;
+import android.content.ClipboardManager;
import android.content.Context;
import android.content.SharedPreferences;
+import android.graphics.Paint;
import android.os.Bundle;
import android.text.TextUtils;
+import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
@@ -61,6 +66,10 @@ public class CookieSignInScene extends SolidScene implements EditText.OnEditorAc
private EditText mIgneous;
@Nullable
private View mOk;
+ @Nullable
+ private TextView mFromClipboard;
+ @Nullable
+ private ClipboardManager clipboardManager;
// false for error
private static boolean checkIpbMemberId(String id) {
@@ -112,10 +121,14 @@ public class CookieSignInScene extends SolidScene implements EditText.OnEditorAc
mIgneous = mIgneousLayout.getEditText();
AssertUtils.assertNotNull(mIgneous);
mOk = ViewUtils.$$(view, R.id.ok);
+ mFromClipboard = (TextView) ViewUtils.$$(view, R.id.from_clipboard);
+
+ mFromClipboard.setPaintFlags(mFromClipboard.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG | Paint.ANTI_ALIAS_FLAG);
mIpbPassHash.setOnEditorActionListener(this);
mOk.setOnClickListener(this);
+ mFromClipboard.setOnClickListener(this);
// Try to get old version cookie info
Context context = getContext2();
@@ -147,7 +160,7 @@ public class CookieSignInScene extends SolidScene implements EditText.OnEditorAc
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
-
+ clipboardManager = (ClipboardManager) requireActivity().getSystemService(Context.CLIPBOARD_SERVICE);
showSoftInput(mIpbMemberId);
}
@@ -167,6 +180,8 @@ public class CookieSignInScene extends SolidScene implements EditText.OnEditorAc
public void onClick(View v) {
if (mOk == v) {
enter();
+ } else if (mFromClipboard == v) {
+ fillCookiesFromClipboard();
}
}
@@ -239,4 +254,68 @@ public class CookieSignInScene extends SolidScene implements EditText.OnEditorAc
store.addCookie(newCookie(EhCookieStore.KEY_IGNEOUS, igneous, EhUrl.DOMAIN_EX));
}
}
+
+ private void fillCookiesFromClipboard() {
+ hideSoftInput();
+ try {
+ String pasteData;
+ if (!clipboardManager.hasPrimaryClip()/* || !clipboardManager.getPrimaryClipDescription().hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN)*/) {
+ showTip(R.string.from_clipboard_error, LENGTH_SHORT);
+ } else {
+ ClipData.Item item = clipboardManager.getPrimaryClip().getItemAt(0);
+ pasteData = String.valueOf(item.coerceToText(requireContext()));
+ if (!TextUtils.isEmpty(pasteData)) {
+ String[] kvs;
+ if (pasteData.contains(";")) {
+ kvs = pasteData.split(";");
+ } else if (pasteData.contains("\n")) {
+ kvs = pasteData.split("\n");
+ } else {
+ showTip(R.string.from_clipboard_error, LENGTH_SHORT);
+ return;
+ }
+ if (kvs.length < 3) {
+ showTip(R.string.from_clipboard_error, LENGTH_SHORT);
+ return;
+ }
+ for (String s : kvs) {
+ String[] kv;
+ if (s.contains("=")) {
+ kv = s.split("=");
+ } else if (s.contains(":")) {
+ kv = s.split(":");
+ } else {
+ continue;
+ }
+ if (kv.length != 2) {
+ continue;
+ }
+ switch (kv[0].trim().toLowerCase()) {
+ case "ipb_member_id":
+ if (mIpbMemberId != null) {
+ mIpbMemberId.setText(kv[1].trim());
+ }
+ break;
+ case "ipb_pass_hash":
+ if (mIpbPassHash != null) {
+ mIpbPassHash.setText(kv[1].trim());
+ }
+ break;
+ case "igneous":
+ if (mIgneous != null) {
+ mIgneous.setText(kv[1].trim());
+ }
+ break;
+ }
+ }
+ enter();
+ } else {
+ showTip(R.string.from_clipboard_error, LENGTH_SHORT);
+ }
+ }
+ } catch (Exception e) {
+ showTip(R.string.from_clipboard_error, LENGTH_SHORT);
+ e.printStackTrace();
+ }
+ }
}
diff --git a/app/src/main/res/layout/scene_cookie_sign_in.xml b/app/src/main/res/layout/scene_cookie_sign_in.xml
index 5aae2c623..1a9ad97c0 100644
--- a/app/src/main/res/layout/scene_cookie_sign_in.xml
+++ b/app/src/main/res/layout/scene_cookie_sign_in.xml
@@ -136,4 +136,25 @@
android:text="@android:string/ok" />
+
+
+
+
+
+
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index c363c97f3..5ee4336b7 100755
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -731,4 +731,6 @@
不,这不是
是的,这很正确
投票成功
+ 从剪贴板导入
+ 未在剪贴板中发现 Cookeis。
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 053fe13f9..9eaa70c49 100755
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -795,4 +795,6 @@
Vote down
Vote up
Vote successfully
+ From clipboard
+ No cookies found in clipboard.