admin
2024-07-03 a40e0e51331e5e6f69e8bed5940512b29150c7a9
app/src/main/java/com/taoke/autopay/android/service/ZfbJob.java
@@ -8,7 +8,6 @@
import android.os.Handler;
import android.os.Message;
import android.text.TextUtils;
import android.util.Log;
import android.util.Pair;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityNodeInfo;
@@ -20,7 +19,6 @@
import com.apkfuns.logutils.LogUtils;
import com.taoke.autopay.android.App;
import com.taoke.autopay.android.Constant;
import com.taoke.autopay.android.RxBus;
import com.taoke.autopay.android.data.local.LocalStore;
import com.taoke.autopay.android.data.local.entity.TaskQueueInfo;
import com.taoke.autopay.android.data.network.RestAPI;
@@ -33,7 +31,9 @@
import com.taoke.autopay.android.utils.accessibility.TextContainsNodeFilter;
import com.taoke.autopay.android.utils.accessibility.TextNodeFilter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import java.util.regex.Matcher;
@@ -61,11 +61,11 @@
    private final Subject<Pair<AccessibilityService, AccessibilityEvent>> subject = PublishSubject.create();
    private Disposable mDisposableTimeout;
    private Disposable mDisposable;
    private Disposable mDisposableClipboardTimeout;
    private List<Disposable> mDisposableList;
    public ZfbJob(Order order) {
        mDisposableList = new ArrayList<>();
        this.order = order;
        this.payTimes = LocalStore.getInstance().getPayTimes();
        this.payedTimes = LocalStore.getInstance().getPayedTimes();
@@ -108,11 +108,11 @@
        }
        extraState = 0;
        mDisposableTimeout = Single
        mDisposableList.add(Single
                .just(true)
                .delay(40, TimeUnit.SECONDS)
                .subscribe(aBoolean -> notifyCancel()); // 一分钟超时,自动取消。
        mDisposableClipboardTimeout = Single
                .subscribe(aBoolean -> notifyCancel())); // 一分钟超时,自动取消。
        mDisposableList.add(Single
                .just(true)
                .delay(15, TimeUnit.SECONDS)
                .subscribe(aBoolean -> {
@@ -120,8 +120,8 @@
                        LogUtils.tag(TAG).w("支付宝粘贴板弹出超时");
                        notifyCancel();
                    }
                });// 任务启动到支付宝粘贴板推荐弹出超时时间
        mDisposable = subject
                }));// 任务启动到支付宝粘贴板推荐弹出超时时间
        Disposable mDisposable = subject
                .debounce(2, TimeUnit.SECONDS)
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(pair -> {
@@ -162,7 +162,7 @@
                            btnPay.performAction(AccessibilityNodeInfoCompat.ACTION_CLICK);
                        }
                    } else {
                        Disposable mDisposable = RestAPI.getInstance().apiService()
                        Disposable mDisposable1 = RestAPI.getInstance().apiService()
                                .setOrderNo(
                                        String.valueOf(LocalStore.getInstance().getUser().id),
                                        order.id,
@@ -185,7 +185,7 @@
                                                    extraState = 2;
                                                    btnPay.performAction(AccessibilityNodeInfoCompat.ACTION_CLICK);
                                                    // 防止弹出不是好友
                                                    Single
                                                    mDisposableList.add(Single
                                                            .just(true)
                                                            .delay(5, TimeUnit.SECONDS)
                                                            .subscribe(aBoolean -> {
@@ -197,7 +197,7 @@
                                                                                    AccessibilityNodeInfoUtils.FILTER_CLICKABLE)
                                                                            .performAction(AccessibilityNodeInfoCompat.ACTION_CLICK);
                                                                }
                                                            });// 任务启动到支付宝粘贴板推荐弹出超时时间
                                                            }));// 任务启动到支付宝粘贴板推荐弹出超时时间
                                                }
                                            } else {
@@ -209,8 +209,10 @@
                                            notifyCancel();
                                            Toast.makeText(service.getApplicationContext(), throwable.getMessage(), Toast.LENGTH_SHORT).show();
                                        });
                        mDisposableList.add(mDisposable1);
                    }
                });
        mDisposableList.add(mDisposable);
        // 下面代码避免内存泄漏和设置自动运行结果
        addJobListener(new JobListener() {
@@ -219,9 +221,15 @@
                // 100表示任务终止
                extraState = 100;
                sendUIMsg(new TaskQueueInfo(TaskQueueInfo.STATE_JOB_FINISH));
                mDisposableTimeout.dispose();
                mDisposableClipboardTimeout.dispose();
                mDisposable.dispose();
                for (Disposable d : mDisposableList) {
                    try {
                        if (d != null) {
                            d.dispose();
                        }
                    } catch (Exception ignored) {
                    }
                }
                removeJobListener(this);
                // 调用设置结果接口
                RestAPI.getInstance().apiService()
@@ -241,9 +249,14 @@
            public void onFinished() {
                extraState = 100;
                sendUIMsg(new TaskQueueInfo(TaskQueueInfo.STATE_JOB_FINISH));
                mDisposableTimeout.dispose();
                mDisposableClipboardTimeout.dispose();
                mDisposable.dispose();
                for (Disposable d : mDisposableList) {
                    try {
                        if (d != null) {
                            d.dispose();
                        }
                    } catch (Exception ignored) {
                    }
                }
                removeJobListener(this);
                // 调用设置结果接口
                RestAPI.getInstance().apiService()
@@ -266,9 +279,14 @@
            @Override
            public void onPayCountLimit() {
                extraState = 100;
                mDisposableTimeout.dispose();
                mDisposableClipboardTimeout.dispose();
                mDisposable.dispose();
                for (Disposable d : mDisposableList) {
                    try {
                        if (d != null) {
                            d.dispose();
                        }
                    } catch (Exception ignored) {
                    }
                }
                removeJobListener(this);
                // 通知页面弹出更改支付宝
                sendUIMsg(new TaskQueueInfo(TaskQueueInfo.STATE_PAY_COUNT_LIMIT));
@@ -327,6 +345,7 @@
    /**
     * 获取字母输入键盘(简版)
     *
     * @param service
     * @param rootNodeInfoCompat
     * @return
@@ -363,6 +382,7 @@
    /**
     * 获取字母输入键盘
     *
     * @param service
     * @param rootNodeInfoCompat
     * @return
@@ -463,7 +483,19 @@
        } else if (extraState == 2 && TextUtils.equals("com.alipay.android.msp.ui.views.MspContainerActivity", className)) {//eventType == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED
            extraState = 3;
            LogUtils.tag(TAG).i("支付页面弹出");
        } else if (extraState == 3) {
            //判断是否长久没进入下一步
            mDisposableList.add(Single
                    .just(true)
                    .delay(4, TimeUnit.SECONDS)
                    .subscribe(aBoolean -> {
                        if (extraState == 3) {
                            LogUtils.tag(TAG).i("长时间没检测到键盘");
                            // 支付被手机安全保护,无法获取到节点,需要回到支付宝界面才能重新开启节点
                            sendUIMsg(new TaskQueueInfo(TaskQueueInfo.STATE_PAY_SAFE_LIMIT));
                        }
                    }));
        } else if (extraState == 3 || extraState == 31) {
            extraState = 31;
            AccessibilityNodeInfoCompat btnConfirm = AccessibilityNodeInfoUtils
                    .getSelfOrMatchingAncestor(
                            service,
@@ -527,7 +559,7 @@
                        }
                        extraState = 4;
                        LogUtils.tag(TAG).i("企业支付宝密码输入成功");
                        Single
                        mDisposableList.add(Single
                                .just(true)
                                .delay(5, TimeUnit.SECONDS)
                                .subscribe(aBoolean -> {
@@ -540,7 +572,7 @@
                                        surePayBtn.performAction(AccessibilityNodeInfo.ACTION_CLICK);
                                        extraState = 5;
                                    }
                                });// 任务启动到支付宝粘贴板推荐弹出超时时间
                                }));// 任务启动到支付宝粘贴板推荐弹出超时时间
                        // 获取确认按钮
                    }
                } else {