Import cookies from clipboard

This commit is contained in:
NekoInverter committed 2020-11-07 09:50:59 +08:00
1 parent fbfcca8013
commit 3ac42b4d72
4 files changed
+105 -1

No files matched your search

@@ -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();
}
}
}