diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 7217a0407..2dcb28576 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -36,12 +36,14 @@ jobs:
keyAlias: ${{ secrets.ANDROID_KEY_ALIAS }}
keyStorePassword: ${{ secrets.ANDROID_KEYSTORE_PASSWORD }}
keyPassword: ${{ secrets.ANDROID_KEY_PASSWORD }}
- buildToolsVersion: 30.0.3
+ buildToolsVersion: 31.0.0
- name: Upload to Release Action
- uses: Shopify/upload-to-release@v1.0.1
+ uses: termux/upload-release-action@v4.1.0
with:
- name: xqe-sesame-${{ github.event.release.tag_name }}.apk
- path: ${{ steps.sign_app.outputs.signedFile }}
- repo-token: ${{ github.token }}
- content-type: application/zip
+ asset_name: xqe-sesame-${{ github.event.release.tag_name }}.apk
+ file: ${{ steps.sign_app.outputs.signedFile }}
+ repo_token: ${{ secrets.GITHUB_TOKEN }}
+ tag: ${{ github.ref }}
+ overwrite: true
+ checksums: sha256
diff --git a/app/build.gradle b/app/build.gradle
index eb471d2d3..9db35bea7 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -8,8 +8,8 @@ android {
minSdk 21
//noinspection ExpiredTargetSdkVersion
targetSdk 29
- versionCode 71
- versionName "1.2.3-beta6"
+ versionCode 73
+ versionName "1.2.4"
}
buildTypes {
release {
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 061091f9e..de84dbf5d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -28,6 +28,9 @@
android:name="xposedminversion"
android:value="54"/>
+
+
+
= 150) {
+ break;
+ } else {
+ Thread.sleep(1500L);
+ }
+ }
+ }
+ }
+ }
+ } else {
+ Log.recordLog(jo.getString("resultDesc"), s);
+ }
+ } catch (Throwable t) {
+ Log.i(TAG, "queryTaskCenterPage err:");
+ Log.printStackTrace(TAG, t);
+ }
+ }
+
+ private static void queryTask() {
+ boolean doubleCheck = false;
+ try {
+ String s = AntBookReadRpcCall.queryTaskCenterPage();
+ JSONObject jo = new JSONObject(s);
+ if (jo.getBoolean("success")) {
+ JSONObject data = jo.getJSONObject("data");
+ JSONArray userTaskGroupList = data.getJSONObject("userTaskListModuleVO")
+ .getJSONArray("userTaskGroupList");
+ for (int i = 0; i < userTaskGroupList.length(); i++) {
+ jo = userTaskGroupList.getJSONObject(i);
+ JSONArray userTaskList = jo.getJSONArray("userTaskList");
+ for (int j = 0; j < userTaskList.length(); j++) {
+ JSONObject taskInfo = userTaskList.getJSONObject(j);
+ String taskStatus = taskInfo.getString("taskStatus");
+ String taskType = taskInfo.getString("taskType");
+ String title = taskInfo.getString("title");
+ if ("TO_RECEIVE".equals(taskStatus)) {
+ if ("READ_MULTISTAGE".equals(taskType)) {
+ JSONArray multiSubTaskList = taskInfo.getJSONArray("multiSubTaskList");
+ for (int k = 0; k < multiSubTaskList.length(); k++) {
+ taskInfo = multiSubTaskList.getJSONObject(k);
+ taskStatus = taskInfo.getString("taskStatus");
+ if ("TO_RECEIVE".equals(taskStatus)) {
+ String taskId = taskInfo.getString("taskId");
+ collectTaskPrize(taskId, taskType, title);
+ }
+ }
+ } else {
+ String taskId = taskInfo.getString("taskId");
+ collectTaskPrize(taskId, taskType, title);
+ }
+ } else if ("NOT_DONE".equals(taskStatus)) {
+ if ("AD_VIDEO_TASK".equals(taskType)) {
+ String taskId = taskInfo.getString("taskId");
+ for (int m = 0; m < 5; m++) {
+ taskFinish(taskId, taskType);
+ Thread.sleep(1500L);
+ collectTaskPrize(taskId, taskType, title);
+ Thread.sleep(1500L);
+ }
+ } else if ("FOLLOW_UP".equals(taskType) || "JUMP".equals(taskType)) {
+ String taskId = taskInfo.getString("taskId");
+ taskFinish(taskId, taskType);
+ doubleCheck = true;
+ }
+ }
+ }
+ }
+ if (doubleCheck)
+ queryTask();
+ } else {
+ Log.recordLog(jo.getString("resultDesc"), s);
+ }
+ } catch (Throwable t) {
+ Log.i(TAG, "queryTask err:");
+ Log.printStackTrace(TAG, t);
+ }
+ }
+
+ private static void collectTaskPrize(String taskId, String taskType, String name) {
+ try {
+ String s = AntBookReadRpcCall.collectTaskPrize(taskId, taskType);
+ JSONObject jo = new JSONObject(s);
+ if (jo.getBoolean("success")) {
+ int coinNum = jo.getJSONObject("data").getInt("coinNum");
+ Log.other("阅读任务📖[" + name + "]#" + coinNum);
+ }
+ } catch (Throwable t) {
+ Log.i(TAG, "collectTaskPrize err:");
+ Log.printStackTrace(TAG, t);
+ }
+ }
+
+ private static void taskFinish(String taskId, String taskType) {
+ try {
+ String s = AntBookReadRpcCall.taskFinish(taskId, taskType);
+ JSONObject jo = new JSONObject(s);
+ if (jo.getBoolean("success")) {
+
+ }
+ } catch (Throwable t) {
+ Log.i(TAG, "taskFinish err:");
+ Log.printStackTrace(TAG, t);
+ }
+ }
+
+ private static void queryTreasureBox() {
+ try {
+ String s = AntBookReadRpcCall.queryTreasureBox();
+ JSONObject jo = new JSONObject(s);
+ if (jo.getBoolean("success")) {
+ JSONObject treasureBoxVo = jo.getJSONObject("data").getJSONObject("treasureBoxVo");
+ if (treasureBoxVo.has("countdown"))
+ return;
+ String status = treasureBoxVo.getString("status");
+ if ("CAN_OPEN".equals(status)) {
+ jo = new JSONObject(AntBookReadRpcCall.openTreasureBox());
+ if (jo.getBoolean("success")) {
+ int coinNum = jo.getJSONObject("data").getInt("coinNum");
+ Log.other("阅读任务📖[打开宝箱]#" + coinNum);
+ }
+ }
+ }
+ } catch (Throwable t) {
+ Log.i(TAG, "queryTreasureBox err:");
+ Log.printStackTrace(TAG, t);
+ }
+ }
+}
diff --git a/app/src/main/java/pansong291/xposed/quickenergy/AntCooperate.java b/app/src/main/java/pansong291/xposed/quickenergy/AntCooperate.java
index 085906515..09c08e370 100644
--- a/app/src/main/java/pansong291/xposed/quickenergy/AntCooperate.java
+++ b/app/src/main/java/pansong291/xposed/quickenergy/AntCooperate.java
@@ -21,8 +21,7 @@ public static void start() {
@Override
public void run() {
try {
- while (FriendIdMap.currentUid == null || FriendIdMap.currentUid.isEmpty())
- Thread.sleep(100);
+ FriendIdMap.waitingCurrentUid();
String s = AntCooperateRpcCall.queryUserCooperatePlantList();
if (s == null) {
Thread.sleep(RandomUtils.delay());
@@ -42,7 +41,7 @@ public void run() {
String name = jo.getString("name");
int waterDayLimit = jo.getInt("waterDayLimit");
CooperationIdMap.putIdMap(cooperationId, name);
- if (!Statistics.canCooperateWaterToday(FriendIdMap.currentUid, cooperationId))
+ if (!Statistics.canCooperateWaterToday(FriendIdMap.getCurrentUid(), cooperationId))
continue;
int index = -1;
for (int j = 0; j < Config.getCooperateWaterList().size(); j++) {
@@ -58,7 +57,7 @@ public void run() {
if (num > userCurrentEnergy)
num = userCurrentEnergy;
if (num > 0)
- cooperateWater(FriendIdMap.currentUid, cooperationId, num, name);
+ cooperateWater(FriendIdMap.getCurrentUid(), cooperationId, num, name);
}
}
} else {
@@ -79,7 +78,7 @@ private static void cooperateWater(String uid, String coopId, int count, String
JSONObject jo = new JSONObject(s);
if ("SUCCESS".equals(jo.getString("resultCode"))) {
Log.forest("合种浇水🚿[" + name + "]" + jo.getString("barrageText"));
- Statistics.cooperateWaterToday(FriendIdMap.currentUid, coopId);
+ Statistics.cooperateWaterToday(FriendIdMap.getCurrentUid(), coopId);
} else {
Log.i(TAG, jo.getString("resultDesc"));
}
diff --git a/app/src/main/java/pansong291/xposed/quickenergy/AntFarm.java b/app/src/main/java/pansong291/xposed/quickenergy/AntFarm.java
index ace88db90..fe23e7704 100644
--- a/app/src/main/java/pansong291/xposed/quickenergy/AntFarm.java
+++ b/app/src/main/java/pansong291/xposed/quickenergy/AntFarm.java
@@ -2,15 +2,22 @@
import org.json.JSONArray;
import org.json.JSONObject;
-import pansong291.xposed.quickenergy.hook.AntFarmRpcCall;
-import pansong291.xposed.quickenergy.util.*;
-import pansong291.xposed.quickenergy.hook.DadaDailyRpcCall;
-import java.util.HashSet;
-import java.util.Set;
-import java.util.Iterator;
import java.util.ArrayList;
+import java.util.HashSet;
import java.util.List;
+import java.util.Set;
+
+import pansong291.xposed.quickenergy.hook.AntFarmRpcCall;
+import pansong291.xposed.quickenergy.hook.DadaDailyRpcCall;
+import pansong291.xposed.quickenergy.util.Config;
+import pansong291.xposed.quickenergy.util.FriendIdMap;
+import pansong291.xposed.quickenergy.util.Log;
+import pansong291.xposed.quickenergy.util.PluginUtils;
+import pansong291.xposed.quickenergy.util.RandomUtils;
+import pansong291.xposed.quickenergy.util.Statistics;
+import pansong291.xposed.quickenergy.util.StringUtil;
+import pansong291.xposed.quickenergy.util.TimeUtil;
public class AntFarm {
private static final String TAG = AntFarm.class.getCanonicalName();
@@ -53,9 +60,9 @@ public CharSequence nickName() {
}
public enum GameType {
- starGame, jumpGame, flyGame;
+ starGame, jumpGame, flyGame, hitGame;
- public static final CharSequence[] gameNames = { "星星球", "登山赛", "飞行赛" };
+ public static final CharSequence[] gameNames = { "星星球", "登山赛", "飞行赛", "欢乐揍小鸡" };
public CharSequence gameName() {
return gameNames[ordinal()];
@@ -104,10 +111,15 @@ private static class FarmTool {
bizKeyList = new ArrayList<>();
bizKeyList.add("ADD_GONGGE_NEW");
bizKeyList.add("USER_STARVE_PUSH");
- bizKeyList.add("HIRE_LOW_ACTIVITY");
- bizKeyList.add("HEART_DONATION_ADVANCED_FOOD_V2");
+ bizKeyList.add("HIRE_LOW_ACTIVITY");//雇佣小鸡拿饲料
+ bizKeyList.add("HEART_DONATION_ADVANCED_FOOD_V2");//爱心美食任务
bizKeyList.add("YEB_PURCHASE");
- bizKeyList.add("DIANTAOHUANDUAN");
+ bizKeyList.add("DIANTAOHUANDUAN");//去点淘逛一逛
+ bizKeyList.add("TAO_GOLDEN_V2");//去逛一逛淘金币小镇
+ bizKeyList.add("WIDGET_addzujian");
+ bizKeyList.add("SHANGYEHUA_90_1");//去杂货铺逛一逛
+ bizKeyList.add("TAOBAO_tab2gzy");// 去逛一逛淘宝视频
+ bizKeyList.add("YITAO_appgyg");// 去一淘APP逛逛
}
public static void start() {
@@ -120,12 +132,10 @@ public static void start() {
@Override
public void run() {
try {
- while (FriendIdMap.currentUid == null || FriendIdMap.currentUid.isEmpty())
- Thread.sleep(100);
- String s = AntFarmRpcCall.enterFarm("", FriendIdMap.currentUid);
+ FriendIdMap.waitingCurrentUid();
+ String s = AntFarmRpcCall.enterFarm("", FriendIdMap.getCurrentUid());
if (s == null) {
- Thread.sleep(RandomUtils.delay());
- s = AntFarmRpcCall.enterFarm("", FriendIdMap.currentUid);
+ throw new RuntimeException("庄园加载失败");
}
JSONObject jo = new JSONObject(s);
if ("SUCCESS".equals(jo.getString("memo"))) {
@@ -136,9 +146,13 @@ public void run() {
harvestBenevolenceScore = joFarmVO.getDouble("harvestBenevolenceScore");
parseSyncAnimalStatusResponse(joFarmVO.toString());
userId = joFarmVO.getJSONObject("masterUserInfoVO").getString("userId");
- JSONArray cuisineList = jo.getJSONArray("cuisineList");
- if (!AnimalFeedStatus.SLEEPY.name().equals(ownerAnimal.animalFeedStatus))
- useFarmFood(cuisineList);
+
+ if (Config.useSpecialFood()) {
+ JSONArray cuisineList = jo.getJSONArray("cuisineList");
+ if (!AnimalFeedStatus.SLEEPY.name().equals(ownerAnimal.animalFeedStatus))
+ useFarmFood(cuisineList);
+ }
+
if (jo.has("lotteryPlusInfo")) {
drawLotteryPlus(jo.getJSONObject("lotteryPlusInfo"));
}
@@ -159,16 +173,15 @@ public void run() {
sendBackAnimal();
if (!AnimalInteractStatus.HOME.name().equals(ownerAnimal.animalInteractStatus)) {
- syncAnimalStatusAtOtherFarm(ownerAnimal.currentFarmId);
-
if ("ORCHARD".equals(ownerAnimal.locationType)) {
- Log.recordLog("小鸡到好友家除草了", "");
+ Log.farm("小鸡到好友家除草了" );
JSONObject joRecallAnimal = new JSONObject(AntFarmRpcCall
.orchardRecallAnimal(ownerAnimal.animalId, ownerAnimal.currentFarmMasterUserId));
int manureCount = joRecallAnimal.getInt("manureCount");
- Log.recordLog("", "召回小鸡,收获肥料" + manureCount + "g");
+ Log.farm("召回小鸡📣收获肥料" + manureCount + "g");
} else {
+ syncAnimalStatusAtOtherFarm(ownerAnimal.currentFarmId);
boolean guest = false;
switch (SubAnimalType.valueOf(ownerAnimal.subAnimalType)) {
case GUEST:
@@ -227,9 +240,10 @@ public void run() {
}
if (Config.recordFarmGame() && Config.isFarmGameTime()) {
- recordFarmGame(GameType.flyGame);
recordFarmGame(GameType.starGame);
recordFarmGame(GameType.jumpGame);
+ recordFarmGame(GameType.flyGame);
+ recordFarmGame(GameType.hitGame);
}
if (Config.kitchen()) {
@@ -256,7 +270,7 @@ public void run() {
donation();
}
- if (Config.answerQuestion() && Statistics.canAnswerQuestionToday(FriendIdMap.currentUid)) {
+ if (Config.answerQuestion() && Statistics.canAnswerQuestionToday(FriendIdMap.getCurrentUid())) {
answerQuestion();
}
@@ -288,6 +302,8 @@ public void run() {
}
+ visitAnimal();
+
// 送麦子
visit();
@@ -318,7 +334,7 @@ public void run() {
private static void animalSleep() {
try {
- String s = AntFarmRpcCall.queryLoveCabin(FriendIdMap.currentUid);
+ String s = AntFarmRpcCall.queryLoveCabin(FriendIdMap.getCurrentUid());
JSONObject jo = new JSONObject(s);
if ("SUCCESS".equals(jo.getString("memo"))) {
JSONObject sleepNotifyInfo = jo.getJSONObject("sleepNotifyInfo");
@@ -622,7 +638,7 @@ private static void answerQuestion() {
}
Log.recordLog("答题" + (correct ? "正确" : "错误") + "可领取["
+ extInfo.getString("award") + "克]");
- Statistics.answerQuestionToday(FriendIdMap.currentUid);
+ Statistics.answerQuestionToday(FriendIdMap.getCurrentUid());
JSONArray operationConfigList = joDailySubmit
.getJSONArray("operationConfigList");
@@ -653,13 +669,13 @@ private static void answerQuestion() {
case RECEIVED:
Statistics.setQuestionHint(null);
Log.recordLog("今日答题已完成", "");
- Statistics.answerQuestionToday(FriendIdMap.currentUid);
+ Statistics.answerQuestionToday(FriendIdMap.getCurrentUid());
break;
case FINISHED:
Statistics.setQuestionHint(null);
Log.recordLog("已经答过题了,饲料待领取", "");
- Statistics.answerQuestionToday(FriendIdMap.currentUid);
+ Statistics.answerQuestionToday(FriendIdMap.getCurrentUid());
break;
}
break;
@@ -689,8 +705,8 @@ private static void recordFarmGame(GameType gameType) {
JSONArray awardInfos = jo.getJSONArray("awardInfos");
StringBuilder award = new StringBuilder();
for (int i = 0; i < awardInfos.length(); i++) {
- jo = awardInfos.getJSONObject(i);
- award.append(jo.getString("awardName")).append("*").append(jo.getInt("awardCount"));
+ JSONObject awardInfo = awardInfos.getJSONObject(i);
+ award.append(awardInfo.getString("awardName")).append("*").append(awardInfo.getInt("awardCount"));
}
if (jo.has("receiveFoodCount")) {
award.append(";肥料*").append(jo.getString("receiveFoodCount"));
@@ -793,8 +809,10 @@ private static void receiveFarmTaskAward() {
jo = new JSONObject(s);
memo = jo.getString("memo");
if ("SUCCESS".equals(memo)) {
- foodStock = jo.getInt("foodStock");
- Log.farm("领取奖励🎖️[" + taskTitle + "]#" + jo.getInt("haveAddFoodStock") + "g");
+ if (jo.has("foodStock")) {
+ foodStock = jo.getInt("foodStock");
+ Log.farm("领取奖励🎖️[" + taskTitle + "]#" + jo.getInt("haveAddFoodStock") + "g");
+ }
if (unreceiveTaskAward > 0)
unreceiveTaskAward--;
} else {
@@ -934,7 +952,7 @@ private static void feedFriend() {
JSONObject jo;
for (int i = 0; i < Config.getFeedFriendAnimalList().size(); i++) {
String userId = Config.getFeedFriendAnimalList().get(i);
- if (userId.equals(FriendIdMap.currentUid))
+ if (userId.equals(FriendIdMap.getCurrentUid()))
continue;
if (!Statistics.canFeedFriendToday(userId, Config.getFeedFriendCountList().get(i)))
continue;
@@ -1019,7 +1037,7 @@ private static void notifyFriend() {
String userId = jo.getString("userId");
String userName = FriendIdMap.getNameById(userId);
if (Config.getDontNotifyFriendList().contains(userId)
- || userId.equals(FriendIdMap.currentUid))
+ || userId.equals(FriendIdMap.getCurrentUid()))
continue;
boolean starve = jo.has("actionType") && "starve_action".equals(jo.getString("actionType"));
if (jo.getBoolean("stealingAnimal") && !starve) {
@@ -1129,14 +1147,15 @@ private static void parseSyncAnimalStatusResponse(String resp) {
JSONArray jaAnimals = subFarmVO.getJSONArray("animals");
animals = new Animal[jaAnimals.length()];
for (int i = 0; i < animals.length; i++) {
- if (animals[i] == null)
- animals[i] = new Animal();
+ animals[i] = new Animal();
JSONObject animal = jaAnimals.getJSONObject(i);
animals[i].animalId = animal.getString("animalId");
animals[i].currentFarmId = animal.getString("currentFarmId");
animals[i].masterFarmId = animal.getString("masterFarmId");
animals[i].animalBuff = animal.getString("animalBuff");
animals[i].subAnimalType = animal.getString("subAnimalType");
+ animals[i].currentFarmMasterUserId = animal.getString("currentFarmMasterUserId");
+ animals[i].locationType = animal.optString("locationType", "");
JSONObject animalStatusVO = animal.getJSONObject("animalStatusVO");
animals[i].animalFeedStatus = animalStatusVO.getString("animalFeedStatus");
animals[i].animalInteractStatus = animalStatusVO.getString("animalInteractStatus");
@@ -1317,11 +1336,9 @@ private static void drawLotteryPlus(JSONObject lotteryPlusInfo) {
private static void visit() {
try {
- String s, memo;
- JSONObject jo;
for (int i = 0; i < Config.getVisitFriendList().size(); i++) {
String userId = Config.getVisitFriendList().get(i);
- if (userId.equals(FriendIdMap.currentUid))
+ if (userId.equals(FriendIdMap.getCurrentUid()))
continue;
int visitCount = Config.getVisitFriendCountList().get(i);
if (visitCount <= 0)
@@ -1400,16 +1417,12 @@ private static void queryChickenDiary(String queryDayStr) {
try {
JSONObject jo = new JSONObject(AntFarmRpcCall.queryChickenDiary(queryDayStr));
if ("SUCCESS".equals(jo.getString("resultCode"))) {
- JSONObject chickenDiary = jo.getJSONObject("data").getJSONObject("chickenDiary");
+ JSONObject data = jo.getJSONObject("data");
+ JSONObject chickenDiary = data.getJSONObject("chickenDiary");
String diaryDateStr = chickenDiary.getString("diaryDateStr");
- if (!chickenDiary.has("tietieStatus"))
- return;
- JSONObject tietieStatus = chickenDiary.getJSONObject("tietieStatus");
- Iterator it = tietieStatus.keys();
- while (it.hasNext()) {
- String key = (String) it.next();
- if (tietieStatus.optBoolean(key, false)) {
- jo = new JSONObject(AntFarmRpcCall.diaryTietie(diaryDateStr, key));
+ if (data.has("hasTietie")) {
+ if (!data.optBoolean("hasTietie", true)) {
+ jo = new JSONObject(AntFarmRpcCall.diaryTietie(diaryDateStr, "NEW"));
if ("SUCCESS".equals(jo.getString("memo"))) {
String prizeType = jo.getString("prizeType");
int prizeNum = jo.optInt("prizeNum", 0);
@@ -1417,6 +1430,23 @@ private static void queryChickenDiary(String queryDayStr) {
} else {
Log.i(jo.getString("memo"), jo.toString());
}
+ if (!chickenDiary.has("statisticsList"))
+ return;
+ JSONArray statisticsList = chickenDiary.getJSONArray("statisticsList");
+ if (statisticsList.length() > 0) {
+ for (int i = 0; i < statisticsList.length(); i++) {
+ JSONObject tietieStatus = statisticsList.getJSONObject(i);
+ String tietieRoleId = tietieStatus.getString("tietieRoleId");
+ jo = new JSONObject(AntFarmRpcCall.diaryTietie(diaryDateStr, tietieRoleId));
+ if ("SUCCESS".equals(jo.getString("memo"))) {
+ String prizeType = jo.getString("prizeType");
+ int prizeNum = jo.optInt("prizeNum", 0);
+ Log.farm("贴贴小鸡💞[" + prizeType + "*" + prizeNum + "]");
+ } else {
+ Log.i(jo.getString("memo"), jo.toString());
+ }
+ }
+ }
}
}
} else {
@@ -1452,4 +1482,40 @@ private static void queryChickenDiaryList() {
}
}
+ private static void visitAnimal() {
+ try {
+ JSONObject jo = new JSONObject(AntFarmRpcCall.visitAnimal());
+ if ("SUCCESS".equals(jo.getString("memo"))) {
+ if (!jo.has("talkConfigs"))
+ return;
+ JSONArray talkConfigs = jo.getJSONArray("talkConfigs");
+ JSONArray talkNodes = jo.getJSONArray("talkNodes");
+ JSONObject data = talkConfigs.getJSONObject(0);
+ String farmId = data.getString("farmId");
+ jo = new JSONObject(AntFarmRpcCall.feedFriendAnimalVisit(farmId));
+ if ("SUCCESS".equals(jo.getString("memo"))) {
+ for (int i = 0; i < talkNodes.length(); i++) {
+ jo = talkNodes.getJSONObject(i);
+ if (!"FEED".equals(jo.getString("type")))
+ continue;
+ String consistencyKey = jo.getString("consistencyKey");
+ jo = new JSONObject(AntFarmRpcCall.visitAnimalSendPrize(consistencyKey));
+ if ("SUCCESS".equals(jo.getString("memo"))) {
+ String prizeName = jo.getString("prizeName");
+ Log.farm("小鸡到访💞[" + prizeName + "]");
+ } else {
+ Log.i(jo.getString("memo"), jo.toString());
+ }
+ }
+ } else {
+ Log.i(jo.getString("memo"), jo.toString());
+ }
+ } else {
+ Log.i(jo.getString("resultDesc"), jo.toString());
+ }
+ } catch (Throwable t) {
+ Log.i(TAG, "visitAnimal err:");
+ Log.printStackTrace(TAG, t);
+ }
+ }
}
diff --git a/app/src/main/java/pansong291/xposed/quickenergy/AntForest.java b/app/src/main/java/pansong291/xposed/quickenergy/AntForest.java
index 55170ae53..b9007f834 100644
--- a/app/src/main/java/pansong291/xposed/quickenergy/AntForest.java
+++ b/app/src/main/java/pansong291/xposed/quickenergy/AntForest.java
@@ -83,6 +83,23 @@ private static void offerCollectQueue() {
}
}
+ private static final List AntForestTaskTypeList;
+
+ static {
+ AntForestTaskTypeList = new ArrayList<>();
+ AntForestTaskTypeList.add("VITALITYQIANDAOPUSH"); //
+ AntForestTaskTypeList.add("ONE_CLICK_WATERING_V1");// 给随机好友一键浇水
+ AntForestTaskTypeList.add("GYG_YUEDU_2");// 去森林图书馆逛15s
+ AntForestTaskTypeList.add("GYG_TBRS");// 逛一逛淘宝人生
+ AntForestTaskTypeList.add("TAOBAO_tab2_2023");// 去淘宝看科普视频
+ AntForestTaskTypeList.add("GYG_diantao");// 逛一逛点淘得红包
+ AntForestTaskTypeList.add("GYG-taote");// 逛一逛淘宝特价版
+ AntForestTaskTypeList.add("NONGCHANG_20230818");// 逛一逛淘宝芭芭农场
+ // AntForestTaskTypeList.add("GYG_haoyangmao_20240103");//逛一逛淘宝薅羊毛
+ // AntForestTaskTypeList.add("YAOYIYAO_0815");//去淘宝摇一摇领奖励
+ // AntForestTaskTypeList.add("GYG-TAOCAICAI");//逛一逛淘宝买菜
+ }
+
private static Thread mainThread;
private static final List taskThreads = new ArrayList<>();
@@ -146,7 +163,7 @@ public void run() {
isScanning = false;
if (TimeUtil.getTimeStr().compareTo("0700") < 0 || TimeUtil.getTimeStr().compareTo("0730") > 0) {
popupTask();
- if (Statistics.canSyncStepToday(FriendIdMap.currentUid)
+ if (Statistics.canSyncStepToday(FriendIdMap.getCurrentUid())
&& TimeUtil.getTimeStr().compareTo("0600") >= 0) {
new StepTask(loader).start();
}
@@ -178,16 +195,21 @@ public void run() {
antdodoCollect();
}
if (!Config.whoYouWantGiveTo().isEmpty()
- && !FriendIdMap.currentUid.equals(Config.whoYouWantGiveTo().get(0))) {
+ && !FriendIdMap.getCurrentUid().equals(Config.whoYouWantGiveTo().get(0))) {
giveProp(Config.whoYouWantGiveTo().get(0));
}
if (Config.userPatrol()) {
UserPatrol();
}
- if (Config.ExchangeEnergyDoubleClick() && Statistics.canExchangeDoubleCardToday()) {
+ if (Config.exchangeEnergyDoubleClick() && Statistics.canExchangeDoubleCardToday()) {
int exchangeCount = Config.getExchangeEnergyDoubleClickCount();
exchangeEnergyDoubleClick(exchangeCount);
}
+ if (Config.exchangeEnergyShield()) {
+ exchangeEnergyShield();
+ }
+ sendEnergyByAction("GREEN_LIFE");
+ sendEnergyByAction("ANTFOREST");
}
PluginUtils.invoke(AntForest.class, PluginUtils.PluginAction.STOP);
@@ -237,7 +259,7 @@ private static void popupTask() {
if (!signRecord.getBoolean("signed")) {
int awardCount = signRecord.getInt("awardCount");
JSONObject resData2 = new JSONObject(
- AntForestRpcCall.antiepSign(signId, FriendIdMap.currentUid));
+ AntForestRpcCall.antiepSign(signId, FriendIdMap.getCurrentUid()));
if ("100000000".equals(resData2.getString("code"))) {
collectedEnergy += awardCount;
Log.forest("过期能量💊[" + awardCount + "g]");
@@ -343,6 +365,7 @@ private static void canCollectSelfEnergy() {
try {
boolean hasMore = false;
long start = System.currentTimeMillis();
+ //TODO 修复 6秒拼手速活动导致数据错误,目前只能关闭该活动
String s = AntForestRpcCall.queryHomePage();
long end = System.currentTimeMillis();
if (s == null) {
@@ -360,7 +383,7 @@ private static void canCollectSelfEnergy() {
JSONArray jaBubbles = joHomePage.getJSONArray("bubbles");
JSONObject userEnergy = joHomePage.getJSONObject("userEnergy");
selfId = userEnergy.getString("userId");
- FriendIdMap.currentUid = selfId;
+ FriendIdMap.setCurrentUid(selfId);
String selfName = userEnergy.getString("displayName");
if (selfName.isEmpty())
selfName = "我";
@@ -439,6 +462,28 @@ private static void canCollectSelfEnergy() {
} else {
Log.recordLog("收取[我]的复活金球失败:" + joEnergy.getString("resultDesc"), str);
}
+ } else if ("baohuhuizeng".equals(bizType)) {
+ String friendId = wateringBubble.getString("userId");
+ String str = AntForestRpcCall.collectEnergy(bizType, selfId,
+ wateringBubble.getLong("id"));
+ JSONObject joEnergy = new JSONObject(str);
+ if ("SUCCESS".equals(joEnergy.getString("resultCode"))) {
+ JSONArray bubbles = joEnergy.getJSONArray("bubbles");
+ for (int j = 0; j < bubbles.length(); j++) {
+ collected = bubbles.getJSONObject(j).getInt("collectedEnergy");
+ }
+ if (collected > 0) {
+ totalCollected += collected;
+ Statistics.addData(Statistics.DataType.COLLECTED, collected);
+ String msg = "收取金球🍯[" + FriendIdMap.getNameById(friendId) + "]复活回赠[" + collected + "g]";
+ Log.forest(msg);
+ AntForestToast.show(msg);
+ } else {
+ Log.recordLog("收取[" + FriendIdMap.getNameById(friendId) + "]的复活回赠金球失败", "");
+ }
+ } else {
+ Log.recordLog("收取[" + FriendIdMap.getNameById(friendId) + "]的复活回赠金球失败:" + joEnergy.getString("resultDesc"), str);
+ }
}
Thread.sleep(1000L);
}
@@ -566,7 +611,7 @@ private static void canCollectEnergy(String userId) {
long bubbleId = bubble.getLong("id");
switch (CollectStatus.valueOf(bubble.getString("collectStatus"))) {
case AVAILABLE:
- if (Config.batchRobEnergy()) {
+ if (Config.batchRobEnergy() && jaBubbles.length() < 7) {
batchIdList.add(String.valueOf(bubbleId));
} else {
collected += collectEnergy(userId, bubbleId, bizNo);
@@ -725,12 +770,12 @@ private static int batchRobEnergy(String userId, List bubbleId, String e
FriendManager.friendWatch(userId, collected);
totalCollected += collected;
Statistics.addData(Statistics.DataType.COLLECTED, collected);
- String str = "收取能量🪂[" + FriendIdMap.getNameById(userId) + "]#" + collected + "g"
+ String str = "一键收取🪂[" + FriendIdMap.getNameById(userId) + "]#" + collected + "g"
+ (StringUtil.isEmpty(extra) ? "" : "[" + extra + "]");
Log.forest(str);
AntForestToast.show(str);
} else {
- Log.recordLog("收取[" + FriendIdMap.getNameById(userId) + "]的能量失败",
+ Log.recordLog("一键收取[" + FriendIdMap.getNameById(userId) + "]的能量失败",
",UserID:" + userId + ",BubbleId:" + bubbleId);
}
if (!bubbleId.isEmpty()) {
@@ -1017,12 +1062,16 @@ private static void receiveTaskAward() {
String taskStatus = taskBaseInfo.getString("taskStatus");
if (TaskStatus.FINISHED.name().equals(taskStatus)) {
JSONObject joAward = new JSONObject(AntForestRpcCall.receiveTaskAward(sceneCode, taskType));
- if (joAward.getBoolean("success"))
+ if (joAward.getBoolean("success")) {
Log.forest("任务奖励🎖️[" + taskTitle + "]#" + awardCount + "个");
- else
+ doubleCheck = true;
+ } else {
Log.recordLog("领取失败," + s, joAward.toString());
+ }
} else if (TaskStatus.TODO.name().equals(taskStatus)) {
- if (bizInfo.optBoolean("autoCompleteTask") || "VITALITYQIANDAOPUSH".equals(taskType)) {
+ if (bizInfo.optBoolean("autoCompleteTask", false)
+ || AntForestTaskTypeList.contains(taskType) || taskType.endsWith("_JIASUQI")
+ || taskType.endsWith("_BAOHUDI") || taskType.startsWith("GYG")) {
JSONObject joFinishTask = new JSONObject(
AntForestRpcCall.finishTask(sceneCode, taskType));
if (joFinishTask.getBoolean("success")) {
@@ -1136,7 +1185,7 @@ private static void energyRain() {
// 20230724能量雨调整为列表中没有可赠送的好友则不赠送
if ("SUCCESS".equals(joEnergyRainChance.getString("resultCode"))) {
Log.forest("送能量雨🌧️[" + FriendIdMap.getNameById(userId) + "]#"
- + FriendIdMap.getNameById(FriendIdMap.currentUid));
+ + FriendIdMap.getNameById(FriendIdMap.getCurrentUid()));
startEnergyRain();
} else {
Log.recordLog("送能量雨失败", joEnergyRainChance.toString());
@@ -1153,7 +1202,7 @@ private static void energyRain() {
// JSONObject(AntForestRpcCall.grantEnergyRainChance(userId));
// if ("SUCCESS".equals(joEnergyRainChance.getString("resultCode"))) {
// Log.forest("送能量雨🌧️[[" + FriendIdMap.getNameById(userId) + "]#" +
- // FriendIdMap.getNameById(FriendIdMap.currentUid));
+ // FriendIdMap.getNameById(FriendIdMap.getCurrentUid()));
// startEnergyRain();
// }
// }
@@ -1329,6 +1378,18 @@ private static void ecoLifeTick() {
/* 神奇物种 */
+ public static boolean antdodoLastDay(String endDate) {
+ long timeStemp = System.currentTimeMillis();
+ long endTimeStemp = Log.timeToStamp(endDate);
+ return timeStemp < endTimeStemp && (endTimeStemp - timeStemp) < 86400000L;
+ }
+
+ public static boolean antdodoIn8Days(String endDate) {
+ long timeStemp = System.currentTimeMillis();
+ long endTimeStemp = Log.timeToStamp(endDate);
+ return timeStemp < endTimeStemp && (endTimeStemp - timeStemp) < 691200000L;
+ }
+
private static void antdodoCollect() {
try {
String s = AntForestRpcCall.queryAnimalStatus();
@@ -1354,7 +1415,12 @@ private static void collectAnimalCard() {
JSONObject jo = new JSONObject(AntForestRpcCall.antdodoHomePage());
if ("SUCCESS".equals(jo.getString("resultCode"))) {
JSONObject data = jo.getJSONObject("data");
- String bookId = data.getJSONObject("animalBook").getString("bookId");
+ JSONObject animalBook = data.getJSONObject("animalBook");
+ String bookId = animalBook.getString("bookId");
+ String endDate = animalBook.getString("endDate") + " 23:59:59";
+ antdodoReceiveTaskAward();
+ if (!antdodoIn8Days(endDate) || antdodoLastDay(endDate))
+ antdodoPropList();
JSONArray ja = data.getJSONArray("limit");
int index = -1;
for (int i = 0; i < ja.length(); i++) {
@@ -1374,13 +1440,20 @@ private static void collectAnimalCard() {
String ecosystem = animal.getString("ecosystem");
String name = animal.getString("name");
Log.forest("神奇物种🦕[" + ecosystem + "]#" + name);
+ if (!Config.sendFriendCard().isEmpty()
+ && !FriendIdMap.getCurrentUid().equals(Config.sendFriendCard().get(0))) {
+ int fantasticStarQuantity = animal.optInt("fantasticStarQuantity", 0);
+ if (fantasticStarQuantity == 3) {
+ sendCard(animal, Config.sendFriendCard().get(0));
+ }
+ }
} else {
Log.i(TAG, jo.getString("resultDesc"));
}
}
}
if (!Config.sendFriendCard().isEmpty()
- && !FriendIdMap.currentUid.equals(Config.sendFriendCard().get(0))) {
+ && !FriendIdMap.getCurrentUid().equals(Config.sendFriendCard().get(0))) {
sendAntdodoCard(bookId, Config.sendFriendCard().get(0));
}
} else {
@@ -1455,6 +1528,7 @@ private static void antdodoPropList() {
JSONArray propIdList = prop.getJSONArray("propIdList");
String propId = propIdList.getString(0);
String propName = prop.getJSONObject("propConfig").getString("propName");
+ int holdsNum = prop.optInt("holdsNum", 0);
jo = new JSONObject(AntForestRpcCall.antdodoConsumeProp(propId, propType));
if ("SUCCESS".equals(jo.getString("resultCode"))) {
JSONObject useResult = jo.getJSONObject("data").getJSONObject("useResult");
@@ -1462,10 +1536,21 @@ private static void antdodoPropList() {
String ecosystem = animal.getString("ecosystem");
String name = animal.getString("name");
Log.forest("使用道具🎭[" + propName + "]#" + ecosystem + "-" + name);
+ if (!Config.sendFriendCard().isEmpty()
+ && !FriendIdMap.getCurrentUid().equals(Config.sendFriendCard().get(0))) {
+ int fantasticStarQuantity = animal.optInt("fantasticStarQuantity", 0);
+ if (fantasticStarQuantity == 3) {
+ sendCard(animal, Config.sendFriendCard().get(0));
+ }
+ }
+ if (holdsNum > 1) {
+ Thread.sleep(1000L);
+ antdodoPropList();
+ return;
+ }
} else {
Log.recordLog(jo.getString("resultDesc"), jo.toString());
}
- Thread.sleep(1000L);
}
}
}
@@ -1486,16 +1571,8 @@ private static void sendAntdodoCard(String bookId, String targetUser) {
if (count <= 0)
continue;
JSONObject animal = animalForUser.getJSONObject("animal");
- String animalId = animal.getString("animalId");
- String ecosystem = animal.getString("ecosystem");
- String name = animal.getString("name");
for (int j = 0; j < count; j++) {
- jo = new JSONObject(AntForestRpcCall.antdodoSocial(animalId, targetUser));
- if ("SUCCESS".equals(jo.getString("resultCode"))) {
- Log.forest("赠送卡片🦕[" + FriendIdMap.getNameById(targetUser) + "]#" + ecosystem + "-" + name);
- } else {
- Log.i(TAG, jo.getString("resultDesc"));
- }
+ sendCard(animal, targetUser);
Thread.sleep(500L);
}
}
@@ -1506,6 +1583,23 @@ private static void sendAntdodoCard(String bookId, String targetUser) {
}
}
+ private static void sendCard(JSONObject animal, String targetUser) {
+ try {
+ String animalId = animal.getString("animalId");
+ String ecosystem = animal.getString("ecosystem");
+ String name = animal.getString("name");
+ JSONObject jo = new JSONObject(AntForestRpcCall.antdodoSocial(animalId, targetUser));
+ if ("SUCCESS".equals(jo.getString("resultCode"))) {
+ Log.forest("赠送卡片🦕[" + FriendIdMap.getNameById(targetUser) + "]#" + ecosystem + "-" + name);
+ } else {
+ Log.i(TAG, jo.getString("resultDesc"));
+ }
+ } catch (Throwable th) {
+ Log.i(TAG, "sendCard err:");
+ Log.printStackTrace(TAG, th);
+ }
+ }
+
/* 巡护保护地 */
private static void UserPatrol() {
try {
@@ -1740,6 +1834,90 @@ private static void combineAnimalPiece(int animalId) {
}
}
+ private static void sendEnergyByAction(String sourceType) {
+ try {
+ JSONObject jo = new JSONObject(AntForestRpcCall.consultForSendEnergyByAction(sourceType));
+ if (jo.getBoolean("success")) {
+ JSONObject data = jo.getJSONObject("data");
+ if (data.optBoolean("canSendEnergy", false)) {
+ jo = new JSONObject(AntForestRpcCall.sendEnergyByAction(sourceType));
+ if (jo.getBoolean("success")) {
+ data = jo.getJSONObject("data");
+ if (data.optBoolean("canSendEnergy", false)) {
+ int receivedEnergyAmount = data.getInt("receivedEnergyAmount");
+ Log.forest("集市逛街👀[能量" + receivedEnergyAmount + "g]");
+ }
+ }
+ }
+ } else {
+ Log.i(TAG, jo.getJSONObject("data").getString("resultCode"));
+ }
+ } catch (Throwable t) {
+ Log.i(TAG, "sendEnergyByAction err:");
+ Log.printStackTrace(TAG, t);
+ }
+ }
+
+ private static void exchangeEnergyShield() {
+ try {
+ String s = AntForestRpcCall.itemList("SC_ASSETS");
+ JSONObject jo = new JSONObject(s);
+ String skuId = null;
+ String spuId = null;
+ double price = 0d;
+ if (jo.getBoolean("success")) {
+ JSONArray itemInfoVOList = jo.optJSONArray("itemInfoVOList");
+ if (itemInfoVOList != null && itemInfoVOList.length() > 0) {
+ for (int i = 0; i < itemInfoVOList.length(); i++) {
+ jo = itemInfoVOList.getJSONObject(i);
+ if ("能量保护罩".equals(jo.getString("spuName"))) {
+ spuId = jo.getString("spuId");
+ jo = new JSONObject(AntForestRpcCall.itemDetail(spuId));
+ if (jo.getBoolean("success")) {
+ JSONObject spuItemInfoVO = jo.getJSONObject("spuItemInfoVO");
+ JSONArray skuModelList = spuItemInfoVO.getJSONArray("skuModelList");
+ for (int j = 0; j < skuModelList.length(); j++) {
+ jo = skuModelList.getJSONObject(j);
+ if ("VITALITY_ENERGY_SHIELD_NO_EXPIRE_2023"
+ .equals(jo.getString("rightsConfigId"))) {
+ if (!jo.has("skuRuleResult")) {
+ skuId = jo.getString("skuId");
+ price = jo.getJSONObject("price").getDouble("amount");
+ }
+ break;
+ }
+ }
+ }
+ break;
+ }
+ }
+ }
+ if (skuId != null && spuId != null) {
+ jo = new JSONObject(AntForestRpcCall.queryVitalityStoreIndex());
+ if ("SUCCESS".equals(jo.getString("resultCode"))) {
+ int totalVitalityAmount = jo.getJSONObject("userVitalityInfoVO")
+ .getInt("totalVitalityAmount");
+ if (totalVitalityAmount > price) {
+ jo = new JSONObject(AntForestRpcCall.exchangeBenefit(spuId, skuId));
+ if ("SUCCESS".equals(jo.getString("resultCode"))) {
+ Log.forest("活力兑换🎐[永久保护罩]");
+ } else {
+ Log.recordLog(jo.getString("resultDesc"), jo.toString());
+ }
+ } else {
+ Log.recordLog("活力值不足,停止兑换!", "");
+ }
+ }
+ }
+ } else {
+ Log.recordLog(jo.getString("desc"), s);
+ }
+ } catch (Throwable t) {
+ Log.i(TAG, "exchangeEnergyShield err:");
+ Log.printStackTrace(TAG, t);
+ }
+ }
+
/**
* Execute.
*
@@ -1819,7 +1997,7 @@ public void run() {
} else {
Log.recordLog("同步运动步数失败:" + step, "");
}
- Statistics.SyncStepToday(FriendIdMap.currentUid);
+ Statistics.SyncStepToday(FriendIdMap.getCurrentUid());
} catch (Throwable t) {
Log.i(TAG, "StepTask.run err:");
Log.printStackTrace(TAG, t);
diff --git a/app/src/main/java/pansong291/xposed/quickenergy/AntMember.java b/app/src/main/java/pansong291/xposed/quickenergy/AntMember.java
index 4ca86a6eb..7a19244ba 100644
--- a/app/src/main/java/pansong291/xposed/quickenergy/AntMember.java
+++ b/app/src/main/java/pansong291/xposed/quickenergy/AntMember.java
@@ -20,23 +20,25 @@ public static void receivePoint() {
@Override
public void run() {
try {
- while (FriendIdMap.currentUid == null || FriendIdMap.currentUid.isEmpty())
- Thread.sleep(100);
- if (Statistics.canMemberSignInToday(FriendIdMap.currentUid)) {
+ FriendIdMap.waitingCurrentUid();
+ if (Statistics.canMemberSignInToday(FriendIdMap.getCurrentUid())) {
String s = AntMemberRpcCall.queryMemberSigninCalendar();
JSONObject jo = new JSONObject(s);
if ("SUCCESS".equals(jo.getString("resultCode"))) {
Log.other("每日签到📅[" + jo.getString("signinPoint") + "积分]#已签到" + jo.getString("signinSumDay")
+ "天");
- Statistics.memberSignInToday(FriendIdMap.currentUid);
+ Statistics.memberSignInToday(FriendIdMap.getCurrentUid());
} else {
Log.recordLog(jo.getString("resultDesc"), s);
}
}
+
queryPointCert(1, 8);
insBlueBean();
+ signPageTaskList();
+
if (Config.collectSesame())
zmxy();
@@ -54,6 +56,7 @@ public void run() {
kmdkSignIn();
kmdkSignUp();
}
+ taskListQuery();
} else {
Log.recordLog("商家服务未开通!");
}
@@ -254,7 +257,7 @@ private static void kmdkSignUp() {
JSONObject jo = new JSONObject(AntMemberRpcCall.queryActivity());
if (jo.getBoolean("success")) {
String activityNo = jo.getString("activityNo");
- if (!Log.getFormatDate().replace("-","").equals(activityNo.split("_")[2]))
+ if (!Log.getFormatDate().replace("-", "").equals(activityNo.split("_")[2]))
break;
if ("SIGN_UP".equals(jo.getString("signUpStatus"))) {
Log.recordLog("开门打卡今日已报名!");
@@ -304,4 +307,169 @@ private static void zcjSignIn() {
Log.printStackTrace(TAG, t);
}
}
+
+ /* 商家服务任务 */
+ private static void taskListQuery() {
+ String s = AntMemberRpcCall.taskListQuery();
+ try {
+ boolean doubleCheck = false;
+ JSONObject jo = new JSONObject(s);
+ if (jo.getBoolean("success")) {
+ JSONArray taskList = jo.getJSONObject("data").getJSONArray("taskList");
+ for (int i = 0; i < taskList.length(); i++) {
+ JSONObject task = taskList.getJSONObject(i);
+ if (!task.has("status"))
+ continue;
+ String title = task.getString("title");
+ String reward = task.getString("reward");
+ String taskStatus = task.getString("status");
+ if ("NEED_RECEIVE".equals(taskStatus)) {
+ if (task.has("pointBallId")) {
+ jo = new JSONObject(AntMemberRpcCall.ballReceive(task.getString("pointBallId")));
+ if (jo.getBoolean("success")) {
+ Log.other("商家服务🕴🏻[" + title + "]#" + reward);
+ }
+ }
+ } else if ("PROCESSING".equals(taskStatus) || "UNRECEIVED".equals(taskStatus)) {
+ if (task.has("extendLog")) {
+ JSONObject bizExtMap = task.getJSONObject("extendLog").getJSONObject("bizExtMap");
+ jo = new JSONObject(AntMemberRpcCall.taskFinish(bizExtMap.getString("bizId")));
+ if (jo.getBoolean("success")) {
+ Log.other("商家服务🕴🏻[" + title + "]#" + reward);
+ }
+ doubleCheck = true;
+ } else {
+ String taskCode = task.getString("taskCode");
+ switch (taskCode) {
+ case "XCZBJLLRWCS_TASK":
+ taskReceive(taskCode, "XCZBJLL_VIEWED", title);//逛一逛精彩内容
+ break;
+ case "BBNCLLRWX_TASK":
+ taskReceive(taskCode, "GYG_BBNC_VIEWED", title);// 逛一逛芭芭农场
+ break;
+ case "LLSQMDLB_TASK":
+ taskReceive(taskCode, "LL_SQMDLB_VIEWED", title);//浏览收钱码大礼包
+ break;
+ case "SYH_CPC_FIXED_2":
+ taskReceive(taskCode, "MRCH_CPC_FIXED_VIEWED", title);// 逛一逛商品橱窗
+ break;
+ case "SYH_CPC_ALMM_1":
+ taskReceive(taskCode, "MRCH_CPC_ALMM_VIEWED", title);
+ break;
+ case "TJBLLRW_TASK":
+ taskReceive(taskCode, "TJBLLRW_TASK_VIEWED", title);// 逛逛淘金币,购物可抵钱
+ break;
+ case "HHKLLRW_TASK":
+ taskReceive(taskCode, "HHKLLX_VIEWED", title);// 49999元花呗红包集卡抽
+ break;
+ case "ZCJ_VIEW_TRADE":
+ taskReceive(taskCode, "ZCJ_VIEW_TRADE_VIEWED", title);// 浏览攻略,赚商家积分
+ break;
+ }
+ }
+ }
+ }
+ if (doubleCheck)
+ taskListQuery();
+ } else {
+ Log.recordLog("taskListQuery err:", s);
+ }
+ } catch (Throwable t) {
+ Log.i(TAG, "taskListQuery err:");
+ Log.printStackTrace(TAG, t);
+ }
+ }
+
+ private static void taskReceive(String taskCode, String actionCode, String title) {
+ try {
+ String s = AntMemberRpcCall.taskReceive(taskCode);
+ JSONObject jo = new JSONObject(s);
+ if (jo.getBoolean("success")) {
+ jo = new JSONObject(AntMemberRpcCall.actioncode(actionCode));
+ if (jo.getBoolean("success")) {
+ jo = new JSONObject(AntMemberRpcCall.produce(actionCode));
+ if (jo.getBoolean("success")) {
+ Log.other("完成任务🕴🏻[" + title + "]");
+ }
+ }
+ } else {
+ Log.recordLog("taskReceive", s);
+ }
+ } catch (Throwable t) {
+ Log.i(TAG, "taskReceive err:");
+ Log.printStackTrace(TAG, t);
+ }
+ }
+
+ private static void signPageTaskList() {
+ try {
+ String s = AntMemberRpcCall.signPageTaskList();
+ JSONObject jo = new JSONObject(s);
+ boolean doubleCheck = false;
+ if ("SUCCESS".equals(jo.getString("resultCode"))) {
+ if (!jo.has("categoryTaskList")) {
+ return;
+ }
+ JSONArray categoryTaskList = jo.getJSONArray("categoryTaskList");
+ for (int i = 0; i < categoryTaskList.length(); i++) {
+ jo = categoryTaskList.getJSONObject(i);
+ if (!"BROWSE".equals(jo.getString("type")))
+ continue;
+ JSONArray taskList = jo.getJSONArray("taskList");
+ for (int j = 0; j < taskList.length(); j++) {
+ JSONObject task = taskList.getJSONObject(j);
+ int count = 1;
+ boolean hybrid = task.getBoolean("hybrid");
+ int PERIOD_CURRENT_COUNT = 0;
+ int PERIOD_TARGET_COUNT = 0;
+ if (hybrid) {
+ PERIOD_CURRENT_COUNT = Integer
+ .parseInt(task.getJSONObject("extInfo").getString("PERIOD_CURRENT_COUNT"));
+ PERIOD_TARGET_COUNT = Integer
+ .parseInt(task.getJSONObject("extInfo").getString("PERIOD_TARGET_COUNT"));
+ if (PERIOD_TARGET_COUNT > PERIOD_CURRENT_COUNT) {
+ count = PERIOD_TARGET_COUNT - PERIOD_CURRENT_COUNT;
+ } else {
+ count = 0;
+ }
+ }
+ if (count > 0) {
+ JSONObject taskConfigInfo = task.getJSONObject("taskConfigInfo");
+ String name = taskConfigInfo.getString("name");
+ Long id = taskConfigInfo.getLong("id");
+ String awardParamPoint = taskConfigInfo.getJSONObject("awardParam")
+ .getString("awardParamPoint");
+ String targetBusiness = taskConfigInfo.getJSONArray("targetBusiness").getString(0);
+ for (int k = 0; k < count; k++) {
+ jo = new JSONObject(AntMemberRpcCall.applyTask(name, id));
+ if ("SUCCESS".equals(jo.getString("resultCode"))) {
+ Thread.sleep(1000);
+ String[] targetBusinessArray = targetBusiness.split("#");
+ jo = new JSONObject(AntMemberRpcCall.executeTask(targetBusinessArray[2],
+ targetBusinessArray[1]));
+ if ("SUCCESS".equals(jo.getString("resultCode"))) {
+ String ex = "";
+ if (hybrid) {
+ ex = "(" + Integer.toString(PERIOD_CURRENT_COUNT + k + 1) + "/"
+ + PERIOD_TARGET_COUNT + ")";
+ }
+ Log.other("会员任务🎖️[" + name + ex + "]#" + awardParamPoint + "积分");
+ doubleCheck = true;
+ }
+ }
+ }
+ }
+ }
+ }
+ if (doubleCheck)
+ signPageTaskList();
+ } else {
+ Log.recordLog(jo.getString("resultCode"), s);
+ }
+
+ } catch (Throwable t) {
+ Log.i(TAG, "signPageTaskList err:");
+ Log.printStackTrace(TAG, t);
+ }
+ }
}
diff --git a/app/src/main/java/pansong291/xposed/quickenergy/AntOcean.java b/app/src/main/java/pansong291/xposed/quickenergy/AntOcean.java
index a710a2342..f6824e01a 100644
--- a/app/src/main/java/pansong291/xposed/quickenergy/AntOcean.java
+++ b/app/src/main/java/pansong291/xposed/quickenergy/AntOcean.java
@@ -24,8 +24,7 @@ public static void start() {
@Override
public void run() {
try {
- while (FriendIdMap.currentUid == null || FriendIdMap.currentUid.isEmpty())
- Thread.sleep(100);
+ FriendIdMap.waitingCurrentUid();
String s = AntOceanRpcCall.queryOceanStatus();
JSONObject jo = new JSONObject(s);
if ("SUCCESS".equals(jo.getString("resultCode"))) {
@@ -33,7 +32,7 @@ public void run() {
queryHomePage();
} else {
Config.setAntOcean(false);
- Log.recordLog("神奇海洋🐳请先开启神奇海洋,并完成引导教程");
+ Log.recordLog("请先开启神奇海洋,并完成引导教程");
}
} else {
Log.i(TAG, jo.getString("resultDesc"));
@@ -55,7 +54,7 @@ private static void queryHomePage() {
}
JSONObject userInfoVO = joHomePage.getJSONObject("userInfoVO");
- int rubbishNumber = userInfoVO.optInt("rubbishNumber");
+ int rubbishNumber = userInfoVO.optInt("rubbishNumber", 0);
String userId = userInfoVO.getString("userId");
cleanOcean(userId, rubbishNumber);
@@ -430,16 +429,18 @@ private static void doOceanDailyTask() {
if (!TaskStatus.TODO.name().equals(jo.getString("taskStatus")))
continue;
JSONObject bizInfo = new JSONObject(jo.getString("bizInfo"));
- if (!bizInfo.optBoolean("autoCompleteTask", false))
+ if (!jo.has("taskType"))
continue;
String taskType = jo.getString("taskType");
- String sceneCode = jo.getString("sceneCode");
- jo = new JSONObject(AntOceanRpcCall.finishTask(sceneCode, taskType));
- if (jo.getBoolean("success")) {
- String taskTitle = bizInfo.optString("taskTitle", taskType);
- Log.forest("海洋任务🧾[" + taskTitle + "]");
- } else {
- Log.recordLog(jo.getString("desc"), jo.toString());
+ if (bizInfo.optBoolean("autoCompleteTask", false) || taskType.startsWith("DAOLIU_")) {
+ String sceneCode = jo.getString("sceneCode");
+ jo = new JSONObject(AntOceanRpcCall.finishTask(sceneCode, taskType));
+ if (jo.getBoolean("success")) {
+ String taskTitle = bizInfo.optString("taskTitle", taskType);
+ Log.forest("海洋任务🧾[" + taskTitle + "]");
+ } else {
+ Log.recordLog(jo.getString("desc"), jo.toString());
+ }
}
}
} else {
diff --git a/app/src/main/java/pansong291/xposed/quickenergy/AntOrchard.java b/app/src/main/java/pansong291/xposed/quickenergy/AntOrchard.java
index e6e7a98dc..a40504bf0 100644
--- a/app/src/main/java/pansong291/xposed/quickenergy/AntOrchard.java
+++ b/app/src/main/java/pansong291/xposed/quickenergy/AntOrchard.java
@@ -5,6 +5,9 @@
import pansong291.xposed.quickenergy.hook.AntOrchardRpcCall;
import pansong291.xposed.quickenergy.util.*;
+import java.util.ArrayList;
+import java.util.List;
+
public class AntOrchard {
private static final String TAG = AntOrchard.class.getCanonicalName();
@@ -33,6 +36,9 @@ public void run() {
if (jo.has("lotteryPlusInfo"))
drawLotteryPlus(jo.getJSONObject("lotteryPlusInfo"));
extraInfoGet();
+ if (!joo.optBoolean("hireCountOnceLimit", true)
+ && !joo.optBoolean("hireCountOneDayLimit", true))
+ batchHireAnimalRecommend();
if (Config.receiveOrchardTaskAward()) {
doOrchardDailyTask(userId);
triggerTbTask();
@@ -83,17 +89,16 @@ private static String getWua() {
return "null";
}
- private static boolean canSpreadManureContinue(String stageBefore, String stageAfter) {
- Double bef = Double.parseDouble(StringUtil.getSubString(stageBefore, "施肥", "%"));
- Double aft = Double.parseDouble(StringUtil.getSubString(stageAfter, "施肥", "%"));
- if (bef - aft != 0.01)
+ private static boolean canSpreadManureContinue(int stageBefore, int stageAfter) {
+ if (stageAfter - stageBefore > 1) {
return true;
+ }
Log.recordLog("施肥只加0.01%进度今日停止施肥!");
return false;
}
private static void orchardSpreadManure() {
- try {
+ try {
JSONObject jo = new JSONObject(AntOrchardRpcCall.orchardIndex());
if ("100".equals(jo.getString("resultCode"))) {
if (jo.has("spreadManureActivity")) {
@@ -120,7 +125,7 @@ private static void orchardSpreadManure() {
return;
}
JSONObject seedStage = plantInfo.getJSONObject("seedStage");
- String stageBefore = seedStage.getString("stageText");
+ int totalValueBefore = seedStage.getInt("totalValue");
treeLevel = Integer.toString(seedStage.getInt("stageLevel"));
JSONObject accountInfo = jo.getJSONObject("gameInfo").getJSONObject("accountInfo");
int happyPoint = Integer.parseInt(accountInfo.getString("happyPoint"));
@@ -132,12 +137,14 @@ private static void orchardSpreadManure() {
if ("100".equals(jo.getString("resultCode"))) {
taobaoData = jo.getString("taobaoData");
jo = new JSONObject(taobaoData);
- String stageAfter = jo.getJSONObject("currentStage").getString("stageText");
- Log.farm("农场施肥💩[" + stageAfter + "]");
- if (!canSpreadManureContinue(stageBefore, stageAfter)) {
+ String stageText = jo.getJSONObject("currentStage").getString("stageText");
+ int totalValueAfter = jo.getJSONObject("currentStage").getInt("totalValue");
+ Log.farm("农场施肥💩[" + stageText + "]");
+ if (!canSpreadManureContinue(totalValueBefore, totalValueAfter)) {
Statistics.spreadManureToday(userId);
return;
}
+ Thread.sleep(500);
orchardSpreadManure();
} else {
Log.recordLog(jo.getString("resultDesc"), jo.toString());
@@ -230,7 +237,8 @@ private static void doOrchardDailyTask(String userId) {
if (!"TODO".equals(jo.getString("taskStatus")))
continue;
String title = jo.getJSONObject("taskDisplayConfig").getString("title");
- if ("TRIGGER".equals(jo.getString("actionType")) || "ADD_HOME".equals(jo.getString("actionType"))) {
+ if ("TRIGGER".equals(jo.getString("actionType")) || "ADD_HOME".equals(jo.getString("actionType"))
+ || "PUSH_SUBSCRIBE".equals(jo.getString("actionType"))) {
String taskId = jo.getString("taskId");
String sceneCode = jo.getString("sceneCode");
jo = new JSONObject(AntOrchardRpcCall.finishTask(userId, sceneCode, taskId));
@@ -352,4 +360,40 @@ private static void querySubplotsActivity(int taskRequire) {
Log.printStackTrace(TAG, t);
}
}
+
+ private static void batchHireAnimalRecommend() {
+ try {
+ JSONObject jo = new JSONObject(AntOrchardRpcCall.batchHireAnimalRecommend(FriendIdMap.getCurrentUid()));
+ if ("100".equals(jo.getString("resultCode"))) {
+ JSONArray recommendGroupList = jo.optJSONArray("recommendGroupList");
+ if (recommendGroupList != null && recommendGroupList.length() > 0) {
+ List GroupList = new ArrayList<>();
+ for (int i = 0; i < recommendGroupList.length(); i++) {
+ jo = recommendGroupList.getJSONObject(i);
+ String animalUserId = jo.getString("animalUserId");
+ if (Config.getDontNotifyFriendList().contains(animalUserId)) {
+ continue;
+ }
+ int earnManureCount = jo.getInt("earnManureCount");
+ String groupId = jo.getString("groupId");
+ String orchardUserId = jo.getString("orchardUserId");
+ GroupList.add("{\"animalUserId\":\"" + animalUserId + "\",\"earnManureCount\":"
+ + earnManureCount + ",\"groupId\":\"" + groupId + "\",\"orchardUserId\":\""
+ + orchardUserId + "\"}");
+ }
+ if (!GroupList.isEmpty()) {
+ jo = new JSONObject(AntOrchardRpcCall.batchHireAnimal(GroupList));
+ if ("100".equals(jo.getString("resultCode"))) {
+ Log.farm("一键捉鸡🐣[除草]");
+ }
+ }
+ }
+ } else {
+ Log.recordLog(jo.getString("resultDesc"), jo.toString());
+ }
+ } catch (Throwable t) {
+ Log.i(TAG, "batchHireAnimalRecommend err:");
+ Log.printStackTrace(TAG, t);
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/pansong291/xposed/quickenergy/AntSports.java b/app/src/main/java/pansong291/xposed/quickenergy/AntSports.java
index f505a031f..67daef65b 100644
--- a/app/src/main/java/pansong291/xposed/quickenergy/AntSports.java
+++ b/app/src/main/java/pansong291/xposed/quickenergy/AntSports.java
@@ -27,8 +27,7 @@ public Thread setData(ClassLoader cl) {
@Override
public void run() {
try {
- while (FriendIdMap.currentUid == null || FriendIdMap.currentUid.isEmpty())
- Thread.sleep(100);
+ FriendIdMap.waitingCurrentUid();
if (Config.openTreasureBox())
queryMyHomePage(loader);
@@ -38,7 +37,7 @@ public void run() {
if (Config.donateCharityCoin())
queryProjectList(loader);
- if (Config.minExchangeCount() > 0 && Statistics.canExchangeToday(FriendIdMap.currentUid))
+ if (Config.minExchangeCount() > 0 && Statistics.canExchangeToday(FriendIdMap.getCurrentUid()))
queryWalkStep(loader);
if (Config.tiyubiz()) {
@@ -359,7 +358,7 @@ private static void queryWalkStep(ClassLoader loader) {
JSONObject walkDonateHomeModel = jo.getJSONObject("walkDonateHomeModel");
JSONObject walkUserInfoModel = walkDonateHomeModel.getJSONObject("walkUserInfoModel");
if (!walkUserInfoModel.has("exchangeFlag")) {
- Statistics.exchangeToday(FriendIdMap.currentUid);
+ Statistics.exchangeToday(FriendIdMap.getCurrentUid());
return;
}
@@ -374,10 +373,10 @@ private static void queryWalkStep(ClassLoader loader) {
int userCount = donateExchangeResultModel.getInt("userCount");
double amount = donateExchangeResultModel.getJSONObject("userAmount").getDouble("amount");
Log.other("捐出活动❤️[" + userCount + "步]#兑换" + amount + "元公益金");
- Statistics.exchangeToday(FriendIdMap.currentUid);
+ Statistics.exchangeToday(FriendIdMap.getCurrentUid());
} else if (s.contains("已捐步")) {
- Statistics.exchangeToday(FriendIdMap.currentUid);
+ Statistics.exchangeToday(FriendIdMap.getCurrentUid());
} else {
Log.i(TAG, jo.getString("resultDesc"));
}
@@ -521,7 +520,7 @@ private static void pathFeatureQuery() {
int minGoStepCount = path.getInt("minGoStepCount");
if (jo.has("userPath")) {
JSONObject userPath = jo.getJSONObject("userPath");
- FriendIdMap.currentUid = userPath.getString("userId");
+ FriendIdMap.setCurrentUid(userPath.getString("userId"));
String userPathRecordStatus = userPath.getString("userPathRecordStatus");
if ("COMPLETED".equals(userPathRecordStatus)) {
pathMapHomepage(pathId);
diff --git a/app/src/main/java/pansong291/xposed/quickenergy/AntStall.java b/app/src/main/java/pansong291/xposed/quickenergy/AntStall.java
index e44a0cecc..571526f76 100644
--- a/app/src/main/java/pansong291/xposed/quickenergy/AntStall.java
+++ b/app/src/main/java/pansong291/xposed/quickenergy/AntStall.java
@@ -27,6 +27,17 @@ public Seat(String userId, int hot) {
}
}
+ private static List taskTypeList;
+
+ static {
+ taskTypeList = new ArrayList<>();
+ taskTypeList.add("ANTSTALL_NORMAL_OPEN_NOTICE");// 开启收新村收益提醒
+ taskTypeList.add("tianjiashouye");// 添加首页
+ taskTypeList.add("SHANGYEHUA_ceshi");// 【木兰市集】逛精选好物
+ taskTypeList.add("ANTSTALL_ELEME_VISIT");// 去饿了么果园逛一逛
+ taskTypeList.add("ANTSTALL_TASK_diantao202311");// 去点淘赚元宝提现
+ }
+
public static void start() {
if (!Config.enableStall()) {
return;
@@ -100,12 +111,12 @@ private static void sendBack(String billNo, String seatId, String shopId, String
s = AntStallRpcCall.shopSendBack(seatId);
jo = new JSONObject(s);
if ("SUCCESS".equals(jo.getString("resultCode"))) {
- Log.farm("蚂蚁新村⛪请走[" + FriendIdMap.getNameById(shopUserId) + "]的小摊" + (amount > 0 ? "获得金币" + amount : ""));
-
- inviteOpen(seatId);
+ Log.farm("蚂蚁新村⛪请走[" + FriendIdMap.getNameById(shopUserId) + "]的小摊"
+ + (amount > 0 ? "获得金币" + amount : ""));
} else {
Log.recordLog("sendBack err:", s);
}
+ inviteOpen(seatId);
} else {
Log.recordLog("sendBackPre err:", s);
}
@@ -155,13 +166,13 @@ private static void sendBack(JSONObject seatsMap) {
continue;
}
String rentLastUser = seat.getString("rentLastUser");
- //白名单直接跳过
+ // 白名单直接跳过
if (Config.stallWhiteList().contains(rentLastUser)) {
continue;
}
String rentLastBill = seat.getString("rentLastBill");
String rentLastShop = seat.getString("rentLastShop");
- //黑名单直接赶走
+ // 黑名单直接赶走
if (Config.stallBlackList().contains(rentLastUser)) {
sendBack(rentLastBill, seatId, rentLastShop, rentLastUser);
continue;
@@ -185,7 +196,8 @@ private static void settle(JSONObject seatsMap) {
JSONObject master = coinsMap.getJSONObject("MASTER");
String assetId = master.getString("assetId");
int settleCoin = (int) (master.getJSONObject("money").getDouble("amount"));
- if (settleCoin > 100) {
+ boolean fullShow = master.getBoolean("fullShow");
+ if (fullShow || settleCoin > 100) {
String s = AntStallRpcCall.settle(assetId, settleCoin);
JSONObject jo = new JSONObject(s);
if (jo.getString("resultCode").equals("SUCCESS")) {
@@ -345,10 +357,10 @@ private static void shopClose(String shopId, String billNo, String userId) {
Log.recordLog("shopClose err:", s);
}
} else {
- Log.recordLog("shopClose err:", s);
+ Log.recordLog("shopClose err:", s);
}
} catch (Throwable t) {
- Log.i(TAG, "shopClose err:");
+ Log.i(TAG, "shopClose err:");
Log.printStackTrace(TAG, t);
}
}
@@ -374,7 +386,7 @@ private static void taskList() {
String taskType = task.getString("taskType");
String title = bizInfo.optString("title", taskType);
if ("VISIT_AUTO_FINISH".equals(bizInfo.getString("actionType"))
- || "ANTSTALL_NORMAL_OPEN_NOTICE".equals(taskType) || "tianjiashouye".equals(taskType)) {
+ || taskTypeList.contains(taskType)) {
if (finishTask(taskType)) {
Log.farm("蚂蚁新村⛪[完成任务]#" + title);
taskList();
@@ -393,6 +405,7 @@ private static void taskList() {
shareP2P();
}
}
+ Thread.sleep(200L);
}
} else {
Log.recordLog("taskList err:", s);
@@ -401,7 +414,6 @@ private static void taskList() {
Log.i(TAG, "taskList err:");
Log.printStackTrace(TAG, t);
}
-
}
private static void signToday() {
@@ -438,7 +450,9 @@ private static void receiveTaskAward(String taskType) {
}
private static boolean finishTask(String taskType) {
- String s = AntStallRpcCall.finishTask(FriendIdMap.currentUid + "_" + taskType, taskType);
+ // String s = AntStallRpcCall.finishTask(FriendIdMap.currentUid + "_" +
+ // taskType, taskType);
+ String s = AntStallRpcCall.finishTask(taskType + "_" + System.currentTimeMillis(), taskType);
try {
JSONObject jo = new JSONObject(s);
if (jo.getBoolean("success")) {
@@ -495,7 +509,7 @@ private static void shareP2P() {
if (jo.getBoolean("success")) {
String shareId = jo.getString("shareId");
/* 保存shareId到Statistics */
- Statistics.stallShareIdToday(FriendIdMap.currentUid, shareId);
+ Statistics.stallShareIdToday(FriendIdMap.getCurrentUid(), shareId);
Log.recordLog("蚂蚁新村⛪[分享助力]");
} else {
Log.recordLog("shareP2P err:", s);
@@ -508,9 +522,9 @@ private static void shareP2P() {
private static void achieveBeShareP2P() {
try {
- if (!Statistics.canStallHelpToday(FriendIdMap.currentUid))
+ if (!Statistics.canStallHelpToday(FriendIdMap.getCurrentUid()))
return;
- List UserIdList = Statistics.stallP2PUserIdList(FriendIdMap.currentUid);
+ List UserIdList = Statistics.stallP2PUserIdList(FriendIdMap.getCurrentUid());
for (String uid : UserIdList) {
if (Statistics.canStallBeHelpToday(uid)) {
String shareId = Statistics.getStallShareId(uid);
@@ -519,15 +533,15 @@ private static void achieveBeShareP2P() {
JSONObject jo = new JSONObject(s);
if (jo.getBoolean("success")) {
Log.farm("新村助力🎈[" + FriendIdMap.getNameById(uid) + "]");
- Statistics.stallHelpToday(FriendIdMap.currentUid, false);
+ Statistics.stallHelpToday(FriendIdMap.getCurrentUid(), false);
Statistics.stallBeHelpToday(uid, false);
Statistics.stallP2PHelpeToday(uid);
} else if ("600000028".equals(jo.getString("code"))) {
Statistics.stallBeHelpToday(uid, true);
Log.recordLog("被助力次数上限:", uid);
} else if ("600000027".equals(jo.getString("code"))) {
- Statistics.stallHelpToday(FriendIdMap.currentUid, true);
- Log.recordLog("助力他人次数上限:", FriendIdMap.currentUid);
+ Statistics.stallHelpToday(FriendIdMap.getCurrentUid(), true);
+ Log.recordLog("助力他人次数上限:", FriendIdMap.getCurrentUid());
} else {
Log.recordLog("achieveBeShareP2P err:", s);
}
@@ -580,7 +594,7 @@ private static void roadmap() {
JSONObject userInfo = jo.getJSONObject("userInfo");
JSONObject currentCoin = userInfo.getJSONObject("currentCoin");
int amount = (int) currentCoin.getDouble("amount");
- if (amount < 10000) {
+ if (amount < 15000) {
return;
}
JSONArray roadList = jo.getJSONArray("roadList");
diff --git a/app/src/main/java/pansong291/xposed/quickenergy/ConsumeGold.java b/app/src/main/java/pansong291/xposed/quickenergy/ConsumeGold.java
new file mode 100644
index 000000000..0ff7efb71
--- /dev/null
+++ b/app/src/main/java/pansong291/xposed/quickenergy/ConsumeGold.java
@@ -0,0 +1,179 @@
+package pansong291.xposed.quickenergy;
+
+import org.json.JSONArray;
+import org.json.JSONObject;
+import pansong291.xposed.quickenergy.data.RuntimeInfo;
+import pansong291.xposed.quickenergy.hook.ConsumeGoldRpcCall;
+import pansong291.xposed.quickenergy.util.Config;
+import pansong291.xposed.quickenergy.util.Log;
+import pansong291.xposed.quickenergy.util.Statistics;
+
+import pansong291.xposed.quickenergy.util.*;
+
+public class ConsumeGold {
+ private static final String TAG = ConsumeGold.class.getCanonicalName();
+
+ public static void start() {
+ if (!Config.consumeGold())
+ return;
+
+ long executeTime = RuntimeInfo.getInstance().getLong("consumeGold", 0);
+ if (System.currentTimeMillis() - executeTime < 21600000) {
+ return;
+ }
+ RuntimeInfo.getInstance().put("consumeGold", System.currentTimeMillis());
+
+ new Thread() {
+ @Override
+ public void run() {
+ try {
+ signinCalendar();
+ taskV2Index("CG_TASK_LIST");
+ taskV2Index("HOME_NAVIGATION");
+ taskV2Index("CG_SIGNIN_AD_FEEDS");
+ taskV2Index("SURPRISE_TASK");
+ taskV2Index("CG_BROWSER_AD_FEEDS");
+ consumeGoldIndex();
+ } catch (Throwable t) {
+ Log.i(TAG, "start.run err:");
+ Log.printStackTrace(TAG, t);
+ }
+ }
+ }.start();
+ }
+
+ private static void taskV2Index(String taskSceneCode) {
+ boolean doubleCheck = false;
+ try {
+ String s = ConsumeGoldRpcCall.taskV2Index(taskSceneCode);
+ JSONObject jo = new JSONObject(s);
+ if (jo.getBoolean("success")) {
+ JSONArray taskList = jo.getJSONArray("taskList");
+ for (int i = 0; i < taskList.length(); i++) {
+ jo = taskList.getJSONObject(i);
+ JSONObject extInfo = jo.getJSONObject("extInfo");
+ String taskStatus = extInfo.getString("taskStatus");
+ String title = extInfo.getString("title");
+ String taskId = extInfo.getString("actionBizId");
+ if ("TO_RECEIVE".equals(taskStatus)) {
+ taskV2TriggerReceive(taskId, title);
+ } else if ("NONE_SIGNUP".equals(taskStatus)) {
+ taskV2TriggerSignUp(taskId);
+ Thread.sleep(1000L);
+ taskV2TriggerSend(taskId);
+ doubleCheck = true;
+ } else if ("SIGNUP_COMPLETE".equals(taskStatus)) {
+ taskV2TriggerSend(taskId);
+ doubleCheck = true;
+ }
+ }
+ if (doubleCheck)
+ taskV2Index(taskSceneCode);
+ } else {
+ Log.recordLog(jo.getString("resultDesc"), s);
+ }
+ } catch (Throwable t) {
+ Log.i(TAG, "taskV2Index err:");
+ Log.printStackTrace(TAG, t);
+ }
+ }
+
+ private static void taskV2TriggerReceive(String taskId, String name) {
+ try {
+ String s = ConsumeGoldRpcCall.taskV2TriggerReceive(taskId);
+ JSONObject jo = new JSONObject(s);
+ if (jo.getBoolean("success")) {
+ int receiveAmount = jo.getInt("receiveAmount");
+ Log.other("赚消费金💰[" + name + "]#" + receiveAmount);
+ }
+ } catch (Throwable t) {
+ Log.i(TAG, "taskV2TriggerReceive err:");
+ Log.printStackTrace(TAG, t);
+ }
+ }
+
+ private static void taskV2TriggerSignUp(String taskId) {
+ try {
+ String s = ConsumeGoldRpcCall.taskV2TriggerSignUp(taskId);
+ JSONObject jo = new JSONObject(s);
+ if (jo.getBoolean("success")) {
+
+ }
+ } catch (Throwable t) {
+ Log.i(TAG, "taskV2TriggerSignUp err:");
+ Log.printStackTrace(TAG, t);
+ }
+ }
+
+ private static void taskV2TriggerSend(String taskId) {
+ try {
+ String s = ConsumeGoldRpcCall.taskV2TriggerSend(taskId);
+ JSONObject jo = new JSONObject(s);
+ if (jo.getBoolean("success")) {
+
+ }
+ } catch (Throwable t) {
+ Log.i(TAG, "taskV2TriggerSend err:");
+ Log.printStackTrace(TAG, t);
+ }
+ }
+
+ private static void consumeGoldIndex() {
+ try {
+ String s = ConsumeGoldRpcCall.consumeGoldIndex();
+ JSONObject jo = new JSONObject(s);
+ if (jo.getBoolean("success")) {
+ JSONObject homePromoInfoDTO = jo.getJSONObject("homePromoInfoDTO");
+ JSONArray homePromoTokenDTOList = homePromoInfoDTO.getJSONArray("homePromoTokenDTOList");
+ int tokenLeftAmount = 0;
+ int tokenTotalAmount = 0;
+ for (int i = 0; i < homePromoTokenDTOList.length(); i++) {
+ jo = homePromoTokenDTOList.getJSONObject(i);
+ String tokenType = jo.getString("tokenType");
+ if ("CONSUME_GOLD".equals(tokenType)) {
+ tokenLeftAmount = jo.getInt("tokenLeftAmount");
+ }
+ }
+ if (tokenLeftAmount > 0) {
+ for (int j = 0; j < tokenLeftAmount; j++) {
+ jo = new JSONObject(ConsumeGoldRpcCall.promoTrigger());
+ if (jo.getBoolean("success")) {
+ JSONObject homePromoPrizeInfoDTO = jo.getJSONObject("homePromoPrizeInfoDTO");
+ int quantity = homePromoPrizeInfoDTO.getInt("quantity");
+ Log.other("赚消费金💰[投5币抽]#" + quantity);
+ if (homePromoPrizeInfoDTO.has("promoAdvertisementInfo")) {
+ JSONObject promoAdvertisementInfo = homePromoPrizeInfoDTO
+ .getJSONObject("promoAdvertisementInfo");
+ String outBizNo = promoAdvertisementInfo.getString("outBizNo");
+ jo = new JSONObject(ConsumeGoldRpcCall.advertisement(outBizNo));
+ }
+ }
+ }
+ }
+ }
+ } catch (Throwable t) {
+ Log.i(TAG, "queryTreasureBox err:");
+ Log.printStackTrace(TAG, t);
+ }
+ }
+
+ private static void signinCalendar() {
+ try {
+ String s = ConsumeGoldRpcCall.signinCalendar();
+ JSONObject jo = new JSONObject(s);
+ if (jo.getBoolean("success")) {
+ boolean signed = jo.getBoolean("isSignInToday");
+ if (!signed) {
+ jo = new JSONObject(ConsumeGoldRpcCall.openBoxAward());
+ if (jo.getBoolean("success")) {
+ int amount = jo.getInt("amount");
+ Log.other("消费金签到💰[" + amount + "金币]");
+ }
+ }
+ }
+ } catch (Throwable t) {
+ Log.i(TAG, "signinCalendar err:");
+ Log.printStackTrace(TAG, t);
+ }
+ }
+}
diff --git a/app/src/main/java/pansong291/xposed/quickenergy/OmegakoiTown.java b/app/src/main/java/pansong291/xposed/quickenergy/OmegakoiTown.java
new file mode 100644
index 000000000..218bff9be
--- /dev/null
+++ b/app/src/main/java/pansong291/xposed/quickenergy/OmegakoiTown.java
@@ -0,0 +1,172 @@
+package pansong291.xposed.quickenergy;
+
+import org.json.JSONArray;
+import org.json.JSONObject;
+import pansong291.xposed.quickenergy.data.RuntimeInfo;
+import pansong291.xposed.quickenergy.hook.OmegakoiTownRpcCall;
+import pansong291.xposed.quickenergy.util.Config;
+import pansong291.xposed.quickenergy.util.Log;
+
+public class OmegakoiTown {
+ private static final String TAG = OmegakoiTown.class.getCanonicalName();
+
+ public enum RewardType {
+ gold, diamond, dyestuff, rubber, glass, certificate, shipping, tpuPhoneCaseCertificate,
+ glassPhoneCaseCertificate, canvasBagCertificate, notebookCertificate, box, paper, cotton;
+
+ public static final CharSequence[] rewardNames = { "金币", "钻石", "颜料", "橡胶", "玻璃", "合格证", "包邮券", "TPU手机壳合格证",
+ "玻璃手机壳合格证", "帆布袋合格证", "记事本合格证", "快递包装盒", "纸张", "棉花" };
+
+ public CharSequence rewardName() {
+ return rewardNames[ordinal()];
+ }
+ }
+
+ public enum HouseType {
+ houseTrainStation, houseStop, houseBusStation, houseGas, houseSchool, houseService, houseHospital, housePolice,
+ houseBank, houseRecycle, houseWasteTreatmentPlant, houseMetro, houseKfc, houseManicureShop, housePhoto, house5g,
+ houseGame, houseLucky, housePrint, houseBook, houseGrocery, houseScience, housemarket1, houseMcd,
+ houseStarbucks, houseRestaurant, houseFruit, houseDessert, houseClothes, zhiketang, houseFlower, houseMedicine,
+ housePet, houseChick, houseFamilyMart, houseHouse, houseFlat, houseVilla, houseResident, housePowerPlant,
+ houseWaterPlant, houseDailyChemicalFactory, houseToyFactory, houseSewageTreatmentPlant, houseSports,
+ houseCinema, houseCotton, houseMarket, houseStadium, houseHotel, housebusiness, houseOrchard, housePark,
+ houseFurnitureFactory, houseChipFactory, houseChemicalPlant, houseThermalPowerPlant, houseExpressStation,
+ houseDormitory, houseCanteen, houseAdministrationBuilding, houseGourmetPalace, housePaperMill,
+ houseAuctionHouse, houseCatHouse, houseStarPickingPavilion;
+
+ public static final CharSequence[] houseNames = { "火车站", "停车场", "公交站", "加油站", "学校", "服务大厅", "医院", "警察局", "银行",
+ "回收站", "垃圾处理厂", "地铁站", "快餐店", "美甲店", "照相馆", "移动营业厅", "游戏厅", "运气屋", "打印店", "书店", "杂货店", "科普馆", "菜场",
+ "汉堡店", "咖啡厅", "餐馆", "水果店", "甜品店", "服装店", "支课堂", "花店", "药店", "宠物店", "庄园", "全家便利店", "平房", "公寓", "别墅",
+ "居民楼", "风力发电站", "自来水厂", "日化厂", "玩具厂", "污水处理厂", "体育馆", "电影院", "新疆棉花厂", "超市", "游泳馆", "酒店", "商场", "果园",
+ "公园", "家具厂", "芯片厂", "化工厂", "火电站", "快递驿站", "宿舍楼", "食堂", "行政楼", "美食城", "造纸厂", "拍卖行", "喵小馆", "神秘研究所" };
+
+ public CharSequence houseName() {
+ return houseNames[ordinal()];
+ }
+ }
+
+ public static void start() {
+ if (!Config.omegakoiTown())
+ return;
+
+ long executeTime = RuntimeInfo.getInstance().getLong("omegakoiTown", 0);
+ if (System.currentTimeMillis() - executeTime < 21600000) {
+ return;
+ }
+ RuntimeInfo.getInstance().put("omegakoiTown", System.currentTimeMillis());
+
+ new Thread() {
+ @Override
+ public void run() {
+ try {
+ getUserTasks();
+ getSignInStatus();
+ houseProduct();
+ } catch (Throwable t) {
+ Log.i(TAG, "start.run err:");
+ Log.printStackTrace(TAG, t);
+ }
+ }
+ }.start();
+ }
+
+ private static void getUserTasks() {
+ try {
+ String s = OmegakoiTownRpcCall.getUserTasks();
+ JSONObject jo = new JSONObject(s);
+ if (jo.getBoolean("success")) {
+ JSONObject result = jo.getJSONObject("result");
+ JSONArray tasks = result.getJSONArray("tasks");
+ for (int i = 0; i < tasks.length(); i++) {
+ jo = tasks.getJSONObject(i);
+ boolean done = jo.getBoolean("done");
+ boolean hasRewarded = jo.getBoolean("hasRewarded");
+ if (done && !hasRewarded) {
+ JSONObject task = jo.getJSONObject("task");
+ String name = task.getString("name");
+ String taskId = task.getString("taskId");
+ if ("dailyBuild".equals(taskId))
+ continue;
+ int amount = task.getJSONObject("reward").getInt("amount");
+ String itemId = task.getJSONObject("reward").getString("itemId");
+ try {
+ RewardType rewardType = RewardType.valueOf(itemId);
+ jo = new JSONObject(OmegakoiTownRpcCall.triggerTaskReward(taskId));
+ if (jo.getBoolean("success")) {
+ Log.other("小镇任务🌇[" + name + "]#" + amount + "[" + rewardType.rewardName() + "]");
+ }
+ } catch (Throwable th) {
+ Log.i(TAG, "spec RewardType:" + itemId + ";未知的类型");
+ }
+ }
+ }
+ } else {
+ Log.recordLog(jo.getString("resultDesc"), s);
+ }
+ } catch (Throwable t) {
+ Log.i(TAG, "getUserTasks err:");
+ Log.printStackTrace(TAG, t);
+ }
+ }
+
+ private static void getSignInStatus() {
+ try {
+ String s = OmegakoiTownRpcCall.getSignInStatus();
+ JSONObject jo = new JSONObject(s);
+ if (jo.getBoolean("success")) {
+ boolean signed = jo.getJSONObject("result").getBoolean("signed");
+ if (!signed) {
+ jo = new JSONObject(OmegakoiTownRpcCall.signIn());
+ JSONObject diffItem = jo.getJSONObject("result").getJSONArray("diffItems").getJSONObject(0);
+ int amount = diffItem.getInt("amount");
+ String itemId = diffItem.getString("itemId");
+ RewardType rewardType = RewardType.valueOf(itemId);
+ Log.other("小镇签到[" + rewardType.rewardName() + "]#" + amount);
+ }
+ }
+ } catch (Throwable t) {
+ Log.i(TAG, "getSignInStatus err:");
+ Log.printStackTrace(TAG, t);
+ }
+ }
+
+ private static void houseProduct() {
+ try {
+ String s = OmegakoiTownRpcCall.houseProduct();
+ JSONObject jo = new JSONObject(s);
+ if (jo.getBoolean("success")) {
+ JSONObject result = jo.getJSONObject("result");
+ JSONArray userHouses = result.getJSONArray("userHouses");
+ for (int i = 0; i < userHouses.length(); i++) {
+ jo = userHouses.getJSONObject(i);
+ JSONObject extraInfo = jo.getJSONObject("extraInfo");
+ if (!extraInfo.has("toBeCollected"))
+ continue;
+ JSONArray toBeCollected = extraInfo.optJSONArray("toBeCollected");
+ if (toBeCollected != null && toBeCollected.length() > 0) {
+ double amount = toBeCollected.getJSONObject(0).getDouble("amount");
+ if (amount < 500)
+ continue;
+ String houseId = jo.getString("houseId");
+ long id = jo.getLong("id");
+ jo = new JSONObject(OmegakoiTownRpcCall.collect(houseId, id));
+ if (jo.getBoolean("success")) {
+ HouseType houseType = HouseType.valueOf(houseId);
+ String itemId = jo.getJSONObject("result").getJSONArray("rewards").getJSONObject(0)
+ .getString("itemId");
+ RewardType rewardType = RewardType.valueOf(itemId);
+ Log.other("小镇收金🌇[" + houseType.houseName() + "]#" + String.format("%.2f", amount)
+ + rewardType.rewardName());
+ }
+ }
+ }
+ } else {
+ Log.recordLog(jo.getString("resultDesc"), s);
+ }
+ } catch (Throwable t) {
+ Log.i(TAG, "getUserTasks err:");
+ Log.printStackTrace(TAG, t);
+ }
+ }
+
+}
diff --git a/app/src/main/java/pansong291/xposed/quickenergy/Reserve.java b/app/src/main/java/pansong291/xposed/quickenergy/Reserve.java
index e8fb9f18c..a706ba821 100644
--- a/app/src/main/java/pansong291/xposed/quickenergy/Reserve.java
+++ b/app/src/main/java/pansong291/xposed/quickenergy/Reserve.java
@@ -32,8 +32,7 @@ public static void start() {
@Override
public void run() {
try {
- while (FriendIdMap.currentUid == null || FriendIdMap.currentUid.isEmpty())
- Thread.sleep(100);
+ FriendIdMap.waitingCurrentUid();
if (Config.reserve()) {
animalReserve();
}
@@ -168,7 +167,7 @@ private static void exchangeTree(String projectId, String itemName, int count) {
}
}
- /* 净滩行动 */
+ /* 保护海洋 */
private static void protectBeach() {
try {
@@ -185,7 +184,7 @@ private static void protectBeach() {
if (!jo.has("templateSubType"))
continue;
if (!"BEACH".equals(jo.getString("templateSubType"))
- && !"COOPERATE_SEA_TREE".equals(jo.getString("templateSubType")))
+ && !"COOPERATE_SEA_TREE".equals(jo.getString("templateSubType"))&& !"SEA_ANIMAL".equals(jo.getString("templateSubType")))
continue;
if (!"AVAILABLE".equals(jo.getString("applyAction")))
continue;
@@ -236,10 +235,10 @@ private static int queryCultivationDetail(String cultivationCode, String project
appliedTimes = certNum + 1;
}
} else {
- Log.forest("净滩行动🏖️[" + jo.getString("cultivationName") + "]#能量不足停止申请");
+ Log.forest("保护海洋🏖️[" + jo.getString("cultivationName") + "]#能量不足停止申请");
}
} else {
- Log.forest("净滩行动🏖️[" + jo.getString("cultivationName") + "]#似乎没有了");
+ Log.forest("保护海洋🏖️[" + jo.getString("cultivationName") + "]#似乎没有了");
}
} else {
Log.recordLog(jo.getString("resultDesc"), s);
@@ -268,12 +267,12 @@ private static void oceanExchangeTree(String cultivationCode, String projectCode
jo = awardInfos.getJSONObject(i);
award.append(jo.getString("name")).append("*").append(jo.getInt("num"));
}
- String str = "净滩行动🏖️[" + itemName + "]#第" + appliedTimes + "次"
+ String str = "保护海洋🏖️[" + itemName + "]#第" + appliedTimes + "次"
+ "-获得奖励" + award;
Log.forest(str);
} else {
Log.recordLog(jo.getString("resultDesc"), jo.toString());
- Log.forest("净滩行动🏖️[" + itemName + "]#发生未知错误,停止申请");
+ Log.forest("保护海洋🏖️[" + itemName + "]#发生未知错误,停止申请");
break;
}
Thread.sleep(300);
diff --git a/app/src/main/java/pansong291/xposed/quickenergy/data/RuntimeInfo.java b/app/src/main/java/pansong291/xposed/quickenergy/data/RuntimeInfo.java
index 965142f9c..337ebe103 100644
--- a/app/src/main/java/pansong291/xposed/quickenergy/data/RuntimeInfo.java
+++ b/app/src/main/java/pansong291/xposed/quickenergy/data/RuntimeInfo.java
@@ -30,13 +30,13 @@ public enum RuntimeInfoKey {
}
public static RuntimeInfo getInstance() {
- if (instance == null || !Objects.equals(instance.userId, FriendIdMap.currentUid)) {
+ if (instance == null || !Objects.equals(instance.userId, FriendIdMap.getCurrentUid())) {
instance = new RuntimeInfo();
}
return instance;
}
private RuntimeInfo() {
- userId = FriendIdMap.currentUid;
+ userId = FriendIdMap.getCurrentUid();
String content = FileUtils.readFromFile(FileUtils.runtimeInfoFile());
try {
joAll = new JSONObject(content);
@@ -64,6 +64,18 @@ public Object get(RuntimeInfoKey key) throws JSONException {
return joCurrent.opt(key.name());
}
+ public String getString(String key) {
+ return joCurrent.optString(key);
+ }
+
+ public Long getLong(String key, long def) {
+ return joCurrent.optLong(key, def);
+ }
+
+ public boolean getBool(String key, boolean def) {
+ return joCurrent.optBoolean(key, def);
+ }
+
public String getString(RuntimeInfoKey key) {
return joCurrent.optString(key.name());
}
@@ -73,8 +85,11 @@ public Long getLong(RuntimeInfoKey key) {
}
public void put(RuntimeInfoKey key, Object value) {
+ put(key.name(), value);
+ }
+ public void put(String key, Object value) {
try {
- joCurrent.put(key.name(), value);
+ joCurrent.put(key, value);
joAll.put(userId, joCurrent);
} catch (JSONException e) {
Log.i(TAG, "put err:");
diff --git a/app/src/main/java/pansong291/xposed/quickenergy/hook/AntBookReadRpcCall.java b/app/src/main/java/pansong291/xposed/quickenergy/hook/AntBookReadRpcCall.java
new file mode 100644
index 000000000..8eabb6300
--- /dev/null
+++ b/app/src/main/java/pansong291/xposed/quickenergy/hook/AntBookReadRpcCall.java
@@ -0,0 +1,143 @@
+package pansong291.xposed.quickenergy.hook;
+
+import pansong291.xposed.quickenergy.util.StringUtil;
+import pansong291.xposed.quickenergy.util.RandomUtils;
+
+/**
+ * @author cwj851
+ * @since 2024/01/18
+ */
+public class AntBookReadRpcCall {
+ private static final String VERSION = "1.0.1397";
+
+ /* 读书 */
+ public static String queryTaskCenterPage() {
+ return RpcUtil.request("com.alipay.antbookpromo.taskcenter.queryTaskCenterPage",
+ "[{\"bannerId\":\"\",\"chInfo\":\"ch_appcenter__chsub_9patch\",\"hasAddHome\":false,\"miniClientVersion\":\"1.0.0\",\"supportFeatures\":[\"prize_task_20230831\"],\"yuyanVersion\":\""
+ + VERSION + "\"}]");
+ }
+
+ public static String queryMiniTaskCenterInfo() {
+ return RpcUtil.request("com.alipay.antbookpromo.minitaskcenter.queryMiniTaskCenterInfo",
+ "[{\"chInfo\":\"ch_appcenter__chsub_9patch\",\"hasAddHome\":false,\"isFromSync\":false,\"miniClientVersion\":\"1.0.0\",\"needInfos\":\"\",\"yuyanVersion\":\""
+ + VERSION + "\"}]");
+ }
+
+ public static String syncUserReadInfo(String bookId, String chapterId) {
+ int readCount = RandomUtils.nextInt(40, 200);
+ int readTime = RandomUtils.nextInt(160, 170) * 10000;
+ return RpcUtil.request("com.alipay.antbookread.biz.mgw.syncUserReadInfo",
+ "[{\"bookId\":\"" + bookId
+ + "\",\"chInfo\":\"ch_appcenter__chsub_9patch\",\"chapterId\":\""
+ + chapterId
+ + "\",\"miniClientVersion\":\"1.0.0\",\"readCount\":" + readCount
+ + ",\"readTime\":" + readTime
+ + ",\"timeStamp\":" + System.currentTimeMillis()
+ + ",\"volumeId\":\"\",\"yuyanVersion\":\""
+ + VERSION + "\"}]");
+ }
+
+ public static String queryReaderForestEnergyInfo(String bookId) {
+ return RpcUtil.request("com.alipay.antbookread.biz.mgw.queryReaderForestEnergyInfo",
+ "[{\"bookId\":\"" + bookId
+ + "\",\"chInfo\":\"ch_appcenter__chsub_9patch\",\"miniClientVersion\":\"1.0.0\",\"yuyanVersion\":\""
+ + VERSION + "\"}]");
+ }
+
+ public static String queryHomePage() {
+ return RpcUtil.request("com.alipay.antbookread.biz.mgw.queryHomePage",
+ "[{\"chInfo\":\"ch_appcenter__chsub_9patch\",\"miniClientVersion\":\"1.0.0\",\"yuyanVersion\":\""
+ + VERSION + "\"}]");
+ }
+
+ public static String queryBookCatalogueInfo(String bookId) {
+ return RpcUtil.request("com.alipay.antbookread.biz.mgw.queryBookCatalogueInfo",
+ "[{\"bookId\":\"" + bookId
+ + "\",\"chInfo\":\"ch_appcenter__chsub_9patch\",\"isInit\":true,\"miniClientVersion\":\"1.0.0\",\"order\":1,\"yuyanVersion\":\""
+ + VERSION + "\"}]");
+ }
+
+ public static String queryReaderContent(String bookId) {
+ return RpcUtil.request("com.alipay.antbookread.biz.mgw.queryReaderContent",
+ "[{\"bookId\":\"" + bookId
+ + "\",\"chInfo\":\"ch_appcenter__chsub_9patch\",\"isInit\":true,\"miniClientVersion\":\"1.0.0\",\"queryRecommend\":false,\"yuyanVersion\":\""
+ + VERSION + "\"}]");
+ }
+
+ /* 任务 */
+ public static String queryTreasureBox() {
+ return RpcUtil.request("com.alipay.antbookpromo.taskcenter.queryTreasureBox",
+ "[{\"chInfo\":\"ch_appcenter__chsub_9patch\",\"miniClientVersion\":\"1.0.0\",\"yuyanVersion\":\"1.0.1397\"}]");
+ }
+
+ public static String taskFinish(String taskId, String taskType) {
+ return RpcUtil.request("com.alipay.antbookpromo.taskcenter.taskFinish",
+ "[{\"chInfo\":\"ch_appcenter__chsub_9patch\",\"miniClientVersion\":\"1.0.0\",\"taskId\":\""
+ + taskId
+ + "\",\"taskType\":\"" + taskType
+ + "\",\"yuyanVersion\":\"1.0.1397\"}]");
+ }
+
+ public static String collectTaskPrize(String taskId, String taskType) {
+ return RpcUtil.request("com.alipay.antbookpromo.taskcenter.collectTaskPrize",
+ "[{\"chInfo\":\"ch_appcenter__chsub_9patch\",\"miniClientVersion\":\"1.0.0\",\"taskId\":\""
+ + taskId
+ + "\",\"taskType\":\"" + taskType
+ + "\",\"yuyanVersion\":\"1.0.1397\"}]");
+ }
+
+ public static String queryApplayer() {
+ return RpcUtil.request("com.alipay.adtask.biz.mobilegw.service.applayer.query",
+ "[{\"spaceCode\":\"adPosId#2023112024200071171##sceneCode#null##mediaScene#42##rewardNum#1##spaceCode#READ_LISTEN_BOOK_TREASURE_FEEDS_FUSION##expCode#\"}]");
+ }
+
+ public static String serviceTaskFinish(String bizId) {
+ return RpcUtil.request("com.alipay.adtask.biz.mobilegw.service.task.finish",
+ "[{\"bizId\":\"" + bizId + "\"}]");
+ }
+
+ public static String serviceTaskQuery(String bizId) {
+ return RpcUtil.request("com.alipay.adtask.biz.mobilegw.service.task.query",
+ "[{\"bizId\":\"" + bizId + "\"}]");
+ }
+
+ public static String openTreasureBox() {
+ return RpcUtil.request("com.alipay.antbookpromo.taskcenter.openTreasureBox",
+ "[{\"chInfo\":\"ch_appcenter__chsub_9patch\",\"miniClientVersion\":\"1.0.0\",\"yuyanVersion\":\"1.0.1397\"}]");
+ }
+
+ /* 听书 */
+
+ public static String queryEveningForestMainPage() {
+ return RpcUtil.request("com.alipay.antbooks.biz.mgw.queryEveningForestMainPage",
+ "[{\"chInfo\":\"sy_wanansenlin_shouye\",\"miniClientVersion\":\"1.0.0\",\"yuyanVersion\":\"1.0.1397\"}]");
+ }
+
+ public static String queryAlbumDetailPage(String albumId) {
+ return RpcUtil.request("com.alipay.antbooks.biz.mgw.queryAlbumDetailPage",
+ "[{\"albumId\":" + albumId
+ + ",\"chInfo\":\"sy_wanansenlin_shouye\",\"miniClientVersion\":\"1.0.0\",\"yuyanVersion\":\"1.0.1397\"}]");
+ }
+
+ public static String querySoundUrl(String albumId, String soundId) {
+ return RpcUtil.request("com.alipay.antbooks.biz.mgw.querySoundUrl",
+ "[{\"albumId\":" + albumId
+ + ",\"chInfo\":\"sy_wanansenlin_shouye\",\"miniClientVersion\":\"1.0.0\",\"sceneId\":\"EVENING_FOREST\",\"soundId\":"
+ + soundId + ",\"yuyanVersion\":\"1.0.1397\"}]");
+ }
+
+ public static String syncUserPlayData(String albumId, String soundId) {
+ return RpcUtil.request("com.alipay.antbooks.biz.mgw.syncUserPlayData",
+ "[{\"chInfo\":\"sy_wanansenlin_shouye\",\"miniClientVersion\":\"1.0.0\",\"syncingPlayRecordRequestList\":[{\"albumId\":"
+ + albumId + ",\"position\":720,\"soundId\":" + soundId
+ + ",\"timestamp\":"
+ + System.currentTimeMillis() + "}],\"yuyanVersion\":\"1.0.1397\"}]");
+ }
+
+ public static String queryPlayPage(String albumId, String soundId) {
+ return RpcUtil.request("com.alipay.antbooks.biz.mgw.queryPlayPage",
+ "[{\"albumId\":" + albumId
+ + ",\"chInfo\":\"sy_wanansenlin_shouye\",\"miniClientVersion\":\"1.0.0\",\"sceneId\":\"EVENING_FOREST\",\"soundId\":"
+ + soundId + ",\"yuyanVersion\":\"1.0.1397\"}]");
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/pansong291/xposed/quickenergy/hook/AntFarmRpcCall.java b/app/src/main/java/pansong291/xposed/quickenergy/hook/AntFarmRpcCall.java
index 0077f4fdc..21343a245 100644
--- a/app/src/main/java/pansong291/xposed/quickenergy/hook/AntFarmRpcCall.java
+++ b/app/src/main/java/pansong291/xposed/quickenergy/hook/AntFarmRpcCall.java
@@ -3,6 +3,7 @@
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.UUID;
+
import pansong291.xposed.quickenergy.util.RandomUtils;
public class AntFarmRpcCall {
@@ -51,7 +52,7 @@ public static String recallAnimal(String animalId, String currentFarmId, String
public static String orchardRecallAnimal(String animalId, String userId) {
String args1 = "[{\"animalId\":\"" + animalId + "\",\"orchardUserId\":\"" + userId +
- "\",\"requestType\":\"NORMAL\",\"sceneCode\":\"ORCHARD\",\"source\":\"zhuangyuan_zhaohuixiaoji\",\"version\":\"\"0.1.2307042001.2\"\"}]";
+ "\",\"requestType\":\"NORMAL\",\"sceneCode\":\"ORCHARD\",\"source\":\"zhuangyuan_zhaohuixiaoji\",\"version\":\"0.1.2403061630.6\"}]";
return RpcUtil.request("com.alipay.antorchard.recallAnimal", args1);
}
@@ -191,6 +192,20 @@ public static String initFarmGame(String gameType) {
+ "\",\"requestType\":\"NORMAL\",\"sceneCode\":\"ANTFARM\",\"source\":\"H5\",\"toolTypes\":\"STEALTOOL,ACCELERATETOOL,SHARETOOL\"}]");
}
+ public static int RandomScore(String str) {
+ if ("starGame".equals(str)) {
+ return RandomUtils.nextInt(200, 300);
+ } else if ("jumpGame".equals(str)) {
+ return RandomUtils.nextInt(150, 170) * 10;
+ } else if ("flyGame".equals(str)) {
+ return RandomUtils.nextInt(5000, 8000);
+ } else if ("hitGame".equals(str)) {
+ return RandomUtils.nextInt(60, 100);
+ } else {
+ return 210;
+ }
+ }
+
public static String recordFarmGame(String gameType) {
String uuid = getUuid();
String md5String = getMD5(uuid);
@@ -210,18 +225,6 @@ public static String recordFarmGame(String gameType) {
+ "\"}]");
}
- public static int RandomScore(String str) {
- if ("starGame".equals(str)) {
- return RandomUtils.nextInt(200, 300);
- } else if ("jumpGame".equals(str)) {
- return RandomUtils.nextInt(150, 170) * 10;
- } else if ("flyGame".equals(str)) {
- return RandomUtils.nextInt(5000, 8000);
- } else {
- return 210;
- }
- }
-
private static String getUuid() {
StringBuilder sb = new StringBuilder();
for (String str : UUID.randomUUID().toString().split("-")) {
@@ -369,4 +372,22 @@ public static String diaryTietie(String diaryDate, String roleId) {
"[{\"diaryDate\":\"" + diaryDate + "\",\"requestType\":\"NORMAL\",\"roleId\":\"" + roleId
+ "\",\"sceneCode\":\"DIARY\",\"source\":\"antfarm_icon\"}]");
}
+
+ public static String visitAnimal() {
+ return RpcUtil.request("com.alipay.antfarm.visitAnimal",
+ "[{\"requestType\":\"NORMAL\",\"sceneCode\":\"ANTFARM\",\"source\":\"H5\",\"version\":\"" + VERSION +
+ "\"}]");
+ }
+
+ public static String feedFriendAnimalVisit(String friendFarmId) {
+ return RpcUtil.request("com.alipay.antfarm.feedFriendAnimal",
+ "[{\"friendFarmId\":\"" + friendFarmId + "\",\"requestType\":\"NORMAL\",\"sceneCode\":\"ANTFARM\"," +
+ "\"source\":\"visitChicken\",\"version\":\"" + VERSION + "\"}]");
+ }
+
+ public static String visitAnimalSendPrize(String token) {
+ return RpcUtil.request("com.alipay.antfarm.visitAnimalSendPrize",
+ "[{\"requestType\":\"NORMAL\",\"sceneCode\":\"ANTFARM\",\"source\":\"H5\",\"token\":\"" + token +
+ "\",\"version\":\"" + VERSION + "\"}]");
+ }
}
diff --git a/app/src/main/java/pansong291/xposed/quickenergy/hook/AntForestRpcCall.java b/app/src/main/java/pansong291/xposed/quickenergy/hook/AntForestRpcCall.java
index 9785d2a28..4c67cd68f 100644
--- a/app/src/main/java/pansong291/xposed/quickenergy/hook/AntForestRpcCall.java
+++ b/app/src/main/java/pansong291/xposed/quickenergy/hook/AntForestRpcCall.java
@@ -10,7 +10,7 @@
public class AntForestRpcCall {
- private static final String VERSION = "20230925";
+ private static final String VERSION = "20231208";
private static String getUniqueId() {
return String.valueOf(System.currentTimeMillis()) + RandomUtils.nextLong();
@@ -29,7 +29,7 @@ public static String queryEnergyRanking() {
public static String queryHomePage() {
return RpcUtil.request("alipay.antforest.forest.h5.queryHomePage",
- "[{\"configVersionMap\":{\"wateringBubbleConfig\":\"0\"},\"skipWhackMole\":false,\"source\":\"chInfo_ch_appcenter__chsub_9patch\",\"version\":\""
+ "[{\"configVersionMap\":{\"wateringBubbleConfig\":\"10\"},\"skipWhackMole\":false,\"source\":\"chInfo_ch_appcenter__chsub_9patch\",\"version\":\""
+ VERSION + "\"}]");
}
@@ -343,4 +343,13 @@ public static String collectFriendGiftBox(String targetId, String targetUserId)
"[{\"source\":\"chInfo_ch_appcenter__chsub_9patch\",\"targetId\":\"" + targetId
+ "\",\"targetUserId\":\"" + targetUserId + "\"}]");
}
+ public static String consultForSendEnergyByAction(String sourceType) {
+ return RpcUtil.request("alipay.bizfmcg.greenlife.consultForSendEnergyByAction",
+ "[{\"sourceType\":\"" + sourceType + "\"}]");
+ }
+
+ public static String sendEnergyByAction(String sourceType) {
+ return RpcUtil.request("alipay.bizfmcg.greenlife.sendEnergyByAction",
+ "[{\"actionType\":\"GOODS_BROWSE\",\"requestId\":\"" + RandomUtils.getRandom(8) + "\",\"sourceType\":\"" + sourceType + "\"}]");
+ }
}
diff --git a/app/src/main/java/pansong291/xposed/quickenergy/hook/AntMemberRpcCall.java b/app/src/main/java/pansong291/xposed/quickenergy/hook/AntMemberRpcCall.java
index ead8bf537..0d6a42c29 100644
--- a/app/src/main/java/pansong291/xposed/quickenergy/hook/AntMemberRpcCall.java
+++ b/app/src/main/java/pansong291/xposed/quickenergy/hook/AntMemberRpcCall.java
@@ -1,7 +1,13 @@
package pansong291.xposed.quickenergy.hook;
+import pansong291.xposed.quickenergy.util.RandomUtils;
+
public class AntMemberRpcCall {
+ private static String getUniqueId() {
+ return String.valueOf(System.currentTimeMillis()) + RandomUtils.nextLong();
+ }
+
/* ant member point */
public static String queryPointCert(int page, int pageSize) {
String args1 = "[{\"page\":" + page + ",\"pageSize\":" + pageSize + "}]";
@@ -14,7 +20,6 @@ public static String receivePointByUser(String certId) {
}
public static String queryMemberSigninCalendar() {
- String args1 = "[{}]";
return RpcUtil.request("com.alipay.amic.biz.rpc.signin.h5.queryMemberSigninCalendar",
"[{\"autoSignIn\":true,\"invitorUserId\":\"\",\"sceneCode\":\"QUERY\"}]");
}
@@ -105,4 +110,51 @@ public static String signUp(String activityNo) {
"[{\"activityNo\":\"" + activityNo + "\"}]");
}
+ /* 商家服务任务 */
+
+ public static String taskFinish(String bizId) {
+ return RpcUtil.request("com.alipay.adtask.biz.mobilegw.service.task.finish",
+ "[{\"bizId\":\"" + bizId + "\"}]");
+ }
+
+ public static String taskReceive(String taskCode) {
+ return RpcUtil.request("alipay.mrchservbase.sqyj.task.receive",
+ "[{\"compId\":\"ZTS_TASK_RECEIVE\",\"extInfo\":{\"taskCode\":\"" + taskCode + "\"}}]");
+ }
+
+ public static String actioncode(String actionCode) {
+ return RpcUtil.request("alipay.mrchservbase.task.query.by.actioncode",
+ "[{\"actionCode\":\"" + actionCode + "\"}]");
+ }
+
+ public static String produce(String actionCode) {
+ return RpcUtil.request("alipay.mrchservbase.biz.task.action.produce",
+ "[{\"actionCode\":\"" + actionCode + "\"}]");
+ }
+
+ public static String ballReceive(String ballIds) {
+ return RpcUtil.request("alipay.mrchservbase.mrchpoint.ball.receive",
+ "[{\"ballIds\":[\"" + ballIds
+ + "\"],\"channel\":\"MRCH_SELF\",\"outBizNo\":\"" + getUniqueId() + "\"}]");
+ }
+
+ /* 会员任务 */
+ public static String signPageTaskList() {
+ return RpcUtil.request("alipay.antmember.biz.rpc.membertask.h5.signPageTaskList",
+ "[{\"sourceBusiness\":\"antmember\",\"spaceCode\":\"ant_member_xlight_task\"}]");
+ }
+
+ public static String applyTask(String darwinName, Long taskConfigId) {
+ return RpcUtil.request("alipay.antmember.biz.rpc.membertask.h5.applyTask",
+ "[{\"darwinExpParams\":{\"darwinName\":\"" + darwinName
+ + "\"},\"sourcePassMap\":{\"innerSource\":\"\",\"source\":\"myTab\",\"unid\":\"\"},\"taskConfigId\":"
+ + taskConfigId + "}]");
+ }
+
+ public static String executeTask(String bizParam, String bizSubType) {
+ return RpcUtil.request("alipay.antmember.biz.rpc.membertask.h5.executeTask",
+ "[{\"bizOutNo\":\"" + String.valueOf(System.currentTimeMillis() - 16000L) + "\",\"bizParam\":\""
+ + bizParam + "\",\"bizSubType\":\"" + bizSubType + "\",\"bizType\":\"BROWSE\"}]");
+ }
+
}
diff --git a/app/src/main/java/pansong291/xposed/quickenergy/hook/AntOrchardRpcCall.java b/app/src/main/java/pansong291/xposed/quickenergy/hook/AntOrchardRpcCall.java
index f6c7b53dd..789716146 100644
--- a/app/src/main/java/pansong291/xposed/quickenergy/hook/AntOrchardRpcCall.java
+++ b/app/src/main/java/pansong291/xposed/quickenergy/hook/AntOrchardRpcCall.java
@@ -1,7 +1,9 @@
package pansong291.xposed.quickenergy.hook;
+import java.util.List;
+
public class AntOrchardRpcCall {
- private static final String VERSION = "0.1.2309201826.34";
+ private static final String VERSION = "0.1.2401111000.31";
public static String orchardIndex() {
return RpcUtil.request("com.alipay.antfarm.orchardIndex",
@@ -11,7 +13,21 @@ public static String orchardIndex() {
public static String mowGrassInfo() {
return RpcUtil.request("com.alipay.antorchard.mowGrassInfo",
- "[{\"requestType\":\"NORMAL\",\"sceneCode\":\"ORCHARD\",\"showRanking\":false,\"source\":\"ch_appcenter__chsub_9patch\",\"version\":\""
+ "[{\"requestType\":\"NORMAL\",\"sceneCode\":\"ORCHARD\",\"showRanking\":true,\"source\":\"ch_appcenter__chsub_9patch\",\"version\":\""
+ + VERSION + "\"}]");
+ }
+
+ public static String batchHireAnimalRecommend(String orchardUserId) {
+ return RpcUtil.request("com.alipay.antorchard.batchHireAnimalRecommend",
+ "[{\"orchardUserId\":\"" + orchardUserId
+ + "\",\"requestType\":\"NORMAL\",\"sceneCode\":\"ORCHARD\",\"sceneType\":\"weed\",\"source\":\"ch_appcenter__chsub_9patch\",\"version\":\""
+ + VERSION + "\"}]");
+ }
+
+ public static String batchHireAnimal(List recommendGroupList) {
+ return RpcUtil.request("com.alipay.antorchard.batchHireAnimal",
+ "[{\"recommendGroupList\":[" + String.join(",", recommendGroupList)
+ + "],\"requestType\":\"NORMAL\",\"sceneCode\":\"ORCHARD\",\"sceneType\":\"weed\",\"source\":\"ch_appcenter__chsub_9patch\",\"version\":\""
+ VERSION + "\"}]");
}
@@ -102,4 +118,43 @@ public static String triggerTbTask(String taskId, String taskPlantType) {
+ "\",\"version\":\"" + VERSION + "\"}]");
}
+ public static String orchardSelectSeed() {
+ return RpcUtil.request("com.alipay.antfarm.orchardSelectSeed",
+ "[{\"requestType\":\"NORMAL\",\"sceneCode\":\"ORCHARD\",\"seedCode\":\"rp\",\"source\":\"ch_appcenter__chsub_9patch\",\"version\":\""
+ + VERSION + "\"}]");
+ }
+
+ /* 砸金蛋 */
+ public static String queryGameCenter() {
+ return RpcUtil.request("com.alipay.antorchard.queryGameCenter",
+ "[{\"requestType\":\"NORMAL\",\"sceneCode\":\"ORCHARD\",\"source\":\"ch_appcenter__chsub_9patch\",\"version\":\""
+ + VERSION + "\"}]");
+ }
+
+ public static String noticeGame(String appId) {
+ return RpcUtil.request("com.alipay.antorchard.noticeGame",
+ "[{\"appId\":\"" + appId
+ + "\",\"requestType\":\"NORMAL\",\"sceneCode\":\"ORCHARD\",\"source\":\"ch_appcenter__chsub_9patch\",\"version\":\""
+ + VERSION + "\"}]");
+ }
+
+ public static String submitUserAction(String gameId) {
+ return RpcUtil.request("com.alipay.gamecenteruprod.biz.rpc.v3.submitUserAction",
+ "[{\"actionCode\":\"enterGame\",\"gameId\":\"" + gameId
+ + "\",\"paladinxVersion\":\"2.0.13\",\"source\":\"gameFramework\"}]");
+ }
+
+ public static String submitUserPlayDurationAction(String gameAppId, String source) {
+ return RpcUtil.request("com.alipay.gamecenteruprod.biz.rpc.v3.submitUserPlayDurationAction",
+ "[{\"gameAppId\":\"" + gameAppId + "\",\"playTime\":32,\"source\":\"" + source
+ + "\",\"statisticTag\":\"\"}]");
+ }
+
+ public static String smashedGoldenEgg() {
+ return RpcUtil.request("com.alipay.antorchard.smashedGoldenEgg",
+ "[{\"requestType\":\"NORMAL\",\"seneCode\":\"ORCHARD\",\"source\":\"ch_appcenter__chsub_9patch\",\"version\":\""
+ + VERSION
+ + "\"}]");
+ }
+
}
diff --git a/app/src/main/java/pansong291/xposed/quickenergy/hook/AntStallRpcCall.java b/app/src/main/java/pansong291/xposed/quickenergy/hook/AntStallRpcCall.java
index 71fcba90d..956446b69 100644
--- a/app/src/main/java/pansong291/xposed/quickenergy/hook/AntStallRpcCall.java
+++ b/app/src/main/java/pansong291/xposed/quickenergy/hook/AntStallRpcCall.java
@@ -1,15 +1,15 @@
package pansong291.xposed.quickenergy.hook;
-import org.json.JSONArray;
-
import java.util.UUID;
+import org.json.JSONArray;
+
/**
* @author Constanline
* @since 2023/08/22
*/
public class AntStallRpcCall {
- private static final String VERSION = "0.1.2308081346.4";
+ private static final String VERSION = "0.1.2312271038.27";
public static String home() {
return RpcUtil.request("com.alipay.antstall.self.home",
diff --git a/app/src/main/java/pansong291/xposed/quickenergy/hook/ConsumeGoldRpcCall.java b/app/src/main/java/pansong291/xposed/quickenergy/hook/ConsumeGoldRpcCall.java
new file mode 100644
index 000000000..a097697e9
--- /dev/null
+++ b/app/src/main/java/pansong291/xposed/quickenergy/hook/ConsumeGoldRpcCall.java
@@ -0,0 +1,73 @@
+package pansong291.xposed.quickenergy.hook;
+
+import java.util.UUID;
+import pansong291.xposed.quickenergy.util.RandomUtils;
+
+public class ConsumeGoldRpcCall {
+ // private static final String VERSION = "20230522";
+
+ private static String getRequestId() {
+ StringBuilder sb = new StringBuilder();
+ for (String str : UUID.randomUUID().toString().split("-")) {
+ sb.append(str.substring(str.length() / 2));
+ }
+ return sb.toString().toUpperCase();
+ }
+
+ public static String taskV2Index(String taskSceneCode) {
+ return RpcUtil.request("alipay.mobile.ipsponsorprod.consume.gold.taskV2.index",
+ "[{\"alipayAppVersion\":\"10.5.36.8100\",\"appClient\":\"Android\",\"appSource\":\"consumeGold\",\"cacheMap\":{},\"clientTraceId\":\""
+ + UUID.randomUUID().toString()
+ + "\",\"clientVersion\":\"6.3.0\",\"favoriteStatus\":\"LowVersion\",\"taskSceneCode\":\""
+ + taskSceneCode + "\",\"userType\":\"new\"}]");
+ }
+
+ public static String consumeGoldIndex() {
+ return RpcUtil.request("alipay.mobile.ipsponsorprod.consume.gold.index",
+ "[{\"appSource\":\"consumeGold\",\"cacheMap\":{},\"clientTraceId\":\""
+ + UUID.randomUUID().toString()
+ + "\",\"clientVersion\":\"6.3.0\",\"favoriteStatus\":\"LowVersion\"}]");
+ }
+
+ public static String signinCalendar() {
+ return RpcUtil.request("alipay.mobile.ipsponsorprod.consume.gold.task.signin.calendar",
+ "[{}]");
+ }
+
+ public static String openBoxAward() {
+ return RpcUtil.request("alipay.mobile.ipsponsorprod.consume.gold.task.openBoxAward",
+ "[{\"actionAwardDetails\":[{\"actionType\":\"date_sign_start\"}],\"bizType\":\"CONSUME_GOLD\",\"boxType\":\"CONSUME_GOLD_SIGN_DATE\",\"clientVersion\":\"6.3.0\",\"timeScaleType\":0,\"userType\":\"new\"}]");
+ }
+
+ public static String taskV2TriggerSignUp(String taskId) {
+ return RpcUtil.request("alipay.mobile.ipsponsorprod.consume.gold.taskV2.trigger",
+ "[{\"taskId\":\"" + taskId + "\",\"triggerAction\":\"SIGN_UP\"}]");
+ }
+
+ public static String taskV2TriggerSend(String taskId) {
+ return RpcUtil.request("alipay.mobile.ipsponsorprod.consume.gold.taskV2.trigger",
+ "[{\"taskId\":\"" + taskId + "\",\"triggerAction\":\"SEND\"}]");
+ }
+
+ public static String taskV2TriggerReceive(String taskId) {
+ return RpcUtil.request("alipay.mobile.ipsponsorprod.consume.gold.taskV2.trigger",
+ "[{\"taskId\":\"" + taskId + "\",\"triggerAction\":\"RECEIVE\"}]");
+ }
+
+ public static String promoTrigger() {
+ return RpcUtil.request("alipay.mobile.ipsponsorprod.consume.gold.index.promo.trigger",
+ "[{\"appSource\":\"consumeGold\",\"cacheMap\":{},\"clientTraceId\":\""
+ + UUID.randomUUID().toString()
+ + "\",\"clientVersion\":\"6.3.0\",\"favoriteStatus\":\"UnFavorite\",\"requestId\":\""
+ + getRequestId() + "\"}]");
+ }
+
+ public static String advertisement(String outBizNo) {
+ return RpcUtil.request("alipay.mobile.ipsponsorprod.consume.gold.send.promo.advertisement",
+ "[{\"appSource\":\"consumeGold\",\"cacheMap\":{},\"clientTraceId\":\""
+ + UUID.randomUUID().toString()
+ + "\",\"clientVersion\":\"6.3.0\",\"favoriteStatus\":\"UnFavorite\",\"outBizNo\":\""
+ + outBizNo
+ + "\",\"type\":\"HOME_PROMO_ADVERTISEMENT\",\"userType\":\"new\"}]");
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/pansong291/xposed/quickenergy/hook/FriendManager.java b/app/src/main/java/pansong291/xposed/quickenergy/hook/FriendManager.java
index 086027a5e..6e7e747e2 100644
--- a/app/src/main/java/pansong291/xposed/quickenergy/hook/FriendManager.java
+++ b/app/src/main/java/pansong291/xposed/quickenergy/hook/FriendManager.java
@@ -64,7 +64,7 @@ public static boolean needUpdateAll(long last) {
private static JSONObject joFriendWatch;
public static void friendWatch(String id, int collectedEnergy) {
- if (id.equals(FriendIdMap.currentUid)) {
+ if (id.equals(FriendIdMap.getCurrentUid())) {
return;
}
try {
diff --git a/app/src/main/java/pansong291/xposed/quickenergy/hook/GreenFinanceRpcCall.java b/app/src/main/java/pansong291/xposed/quickenergy/hook/GreenFinanceRpcCall.java
index 1902219e7..d1adbd1d5 100644
--- a/app/src/main/java/pansong291/xposed/quickenergy/hook/GreenFinanceRpcCall.java
+++ b/app/src/main/java/pansong291/xposed/quickenergy/hook/GreenFinanceRpcCall.java
@@ -14,7 +14,7 @@ public static String greenFinanceIndex() {
public static String batchSelfCollect(JSONArray bsnIds) {
return RpcUtil.request("com.alipay.mcaplatformunit.common.mobile.service.GreenFinancePointCollectService.batchSelfCollect",
"[{\"bsnIds\":" + bsnIds + ",\"clientVersion\":\"VERSION2\",\"custType\":\"MERCHANT\",\"uid\":\""
- + FriendIdMap.currentUid + "\"}]");
+ + FriendIdMap.getCurrentUid() + "\"}]");
}
public static String signInQuery(String sceneId) {
diff --git a/app/src/main/java/pansong291/xposed/quickenergy/hook/OmegakoiTownRpcCall.java b/app/src/main/java/pansong291/xposed/quickenergy/hook/OmegakoiTownRpcCall.java
new file mode 100644
index 000000000..fa3166364
--- /dev/null
+++ b/app/src/main/java/pansong291/xposed/quickenergy/hook/OmegakoiTownRpcCall.java
@@ -0,0 +1,123 @@
+package pansong291.xposed.quickenergy.hook;
+
+import java.util.UUID;
+import pansong291.xposed.quickenergy.util.RandomUtils;
+
+public class OmegakoiTownRpcCall {
+ private static final String version = "2.0";
+
+ private static String getUuid() {
+ StringBuilder sb = new StringBuilder();
+ for (String str : UUID.randomUUID().toString().split("-")) {
+ sb.append(str.substring(str.length() / 2));
+ }
+ return sb.toString();
+ }
+
+ public static String houseProduct() {
+ return RpcUtil.request("com.alipay.omegakoi.town.v2.house.product",
+ "[{\"outBizNo\":\"" + UUID.randomUUID().toString() + "\",\"shouldScoreReward\":true}]");
+ }
+
+ public static String houseBuild(String groundId, String houseId) {
+ return RpcUtil.request("com.alipay.omegakoi.town.v2.house.build",
+ "[{\"groundId\":\"" + groundId + "\",\"houseId\":\"" + houseId
+ + "\",\"outBizNo\":\"" + UUID.randomUUID().toString() + "\"}]");
+ }
+
+ public static String getUserScore() {
+ return RpcUtil.request("com.alipay.omegakoi.town.v2.user.getUserScore",
+ "[{\"outBizNo\":\"" + UUID.randomUUID().toString() + "\"}]");
+ }
+
+ public static String getBalloonsReadyToCollect() {
+ return RpcUtil.request("com.alipay.omegakoi.town.v2.balloon.getBalloonsReadyToCollect",
+ "[{\"outBizNo\":\"" + UUID.randomUUID().toString() + "\"}]");
+ }
+
+ public static String getUserQuests() {
+ return RpcUtil.request("com.alipay.omegakoi.town.v2.scenario.getUserQuests",
+ "[{\"disableQuests\":true,\"outBizNo\":\"" + UUID.randomUUID().toString()
+ + "\",\"scenarioId\":\"shopNewestTips\"}]");
+ }
+
+ public static String completeQuest(String questId, String scenarioId) {
+ return RpcUtil.request("com.alipay.omegakoi.town.v2.scenario.completeQuest",
+ "[{\"optionIndex\":0,\"outBizNo\":\"" + UUID.randomUUID().toString() + "\",\"questId\":\"" + questId
+ + "\",\"scenarioId\":\"" + scenarioId + "\",\"showType\":\"mayor\"}]");
+ }
+
+ public static String groundBuy(String groundId) {
+ return RpcUtil.request("com.alipay.omegakoi.town.v2.ground.buy",
+ "[{\"groundId\":\"" + groundId + "\",\"outBizNo\":\"" + UUID.randomUUID().toString() + "\"}]");
+ }
+
+ public static String getCurrentBalloonsByTarget(String groundId) {
+ return RpcUtil.request("com.alipay.omegakoi.town.v2.balloon.getCurrentBalloonsByTarget",
+ "[{\"outBizNo\":\"" + UUID.randomUUID().toString() + "\"}]");
+ }
+
+ public static String getUserTasks() {
+ return RpcUtil.request("com.alipay.omegakoi.town.v2.task.getUserTasks",
+ "[{\"outBizNo\":\"" + UUID.randomUUID().toString() + "\"}]");
+ }
+
+ public static String queryAppInfo(String app_id) {
+ return RpcUtil.request("alipay.mappconfig.queryAppInfo",
+ "[{\"baseInfoReq\":{\"appIds\":[\"" + app_id
+ + "\"],\"platform\":\"ANDROID\",\"pre\":false,\"width\":0},\"packInfoReq\":{\"bundleid\":\"com.alipay.alipaywallet\",\"channel\":\"offical\",\"client\":\"10.5.36.8100\",\"env\":\"production\",\"platform\":\"android\",\"protocol\":\"1.0\",\"query\":\"{\\\""
+ + app_id + "\\\":{\\\"app_id\\\":\\\"" + app_id
+ + "\\\",\\\"version\\\":\\\"*\\\",\\\"isTarget\\\":\\\"YES\\\"}}\",\"reqmode\":\"async\",\"sdk\":\"1.3.0.0\",\"system\":\"10\"},\"reqType\":2}]");
+ }
+
+ public static String triggerTaskReward(String taskId) {
+ return RpcUtil.request("com.alipay.omegakoi.town.v2.task.triggerTaskReward",
+ "[{\"outBizNo\":\"" + UUID.randomUUID().toString() + "\",\"taskId\":\"" + taskId + "\"}]");
+ }
+
+ public static String getShareId() {
+ return RpcUtil.request("com.alipay.omegakoi.town.v2.user.getShareId",
+ "[{\"outBizNo\":\"" + UUID.randomUUID().toString() + "\"}]");
+ }
+
+ public static String getFengdieData() {
+ return RpcUtil.request("com.alipay.omegakoi.town.v2.user.getFengdieData",
+ "[{\"outBizNo\":\"" + UUID.randomUUID().toString() + "\"}]");
+ }
+
+ public static String getSignInStatus() {
+ return RpcUtil.request("com.alipay.omegakoi.town.v2.signIn.getSignInStatus",
+ "[{\"outBizNo\":\"" + UUID.randomUUID().toString() + "\"}]");
+ }
+
+ public static String signIn() {
+ return RpcUtil.request("com.alipay.omegakoi.town.v2.signIn.signIn",
+ "[{\"outBizNo\":\"" + UUID.randomUUID().toString() + "\"}]");
+ }
+
+ public static String getProduct() {
+ return RpcUtil.request("com.alipay.omegakoi.town.v2.shop.getProduct",
+ "[{\"outBizNo\":\"" + UUID.randomUUID().toString() + "\"}]");
+ }
+
+ public static String getUserGrounds() {
+ return RpcUtil.request("com.alipay.omegakoi.town.v2.ground.getUserGrounds",
+ "[{\"outBizNo\":\"" + UUID.randomUUID().toString() + "\"}]");
+ }
+
+ public static String getUserHouses() {
+ return RpcUtil.request("com.alipay.omegakoi.town.v2.house.getUserHouses",
+ "[{\"outBizNo\":\"" + UUID.randomUUID().toString() + "\"}]");
+ }
+
+ public static String collect(String houseId, long id) {
+ return RpcUtil.request("com.alipay.omegakoi.town.v2.house.collect",
+ "[{\"houseId\":\"" + houseId + "\",\"id\":" + id
+ + ",\"outBizNo\":\"" + UUID.randomUUID().toString() + "\"}]");
+ }
+
+ public static String matchCrowd() {
+ return RpcUtil.request("com.alipay.omegakoi.common.user.matchCrowd",
+ "[{\"crowdCodes\":[\"OUW7WQPH7\",\"OM9K933XZ\"],\"outBizNo\":\"60123460-b6ac-11ee-95b2-3be423343437\"}]");
+ }
+}
diff --git a/app/src/main/java/pansong291/xposed/quickenergy/hook/ReserveRpcCall.java b/app/src/main/java/pansong291/xposed/quickenergy/hook/ReserveRpcCall.java
index d8b7acbd9..db5edc962 100644
--- a/app/src/main/java/pansong291/xposed/quickenergy/hook/ReserveRpcCall.java
+++ b/app/src/main/java/pansong291/xposed/quickenergy/hook/ReserveRpcCall.java
@@ -5,7 +5,7 @@
public class ReserveRpcCall {
private static final String VERSION = "20230501";
private static final String VERSION2 = "20230522";
- private static final String VERSION3 = "20230815";
+ private static final String VERSION3 = "20231031";
private static String getUniqueId() {
return String.valueOf(System.currentTimeMillis()) + RandomUtils.nextLong();
diff --git a/app/src/main/java/pansong291/xposed/quickenergy/hook/RpcUtil.java b/app/src/main/java/pansong291/xposed/quickenergy/hook/RpcUtil.java
index ac5f4e518..df7cffe8c 100644
--- a/app/src/main/java/pansong291/xposed/quickenergy/hook/RpcUtil.java
+++ b/app/src/main/java/pansong291/xposed/quickenergy/hook/RpcUtil.java
@@ -1,18 +1,20 @@
package pansong291.xposed.quickenergy.hook;
-import de.robv.android.xposed.XposedHelpers;
import org.json.JSONObject;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.text.DateFormat;
+
+import de.robv.android.xposed.XposedHelpers;
import pansong291.xposed.quickenergy.AntForestNotification;
import pansong291.xposed.quickenergy.AntForestToast;
import pansong291.xposed.quickenergy.data.RuntimeInfo;
import pansong291.xposed.quickenergy.util.Config;
import pansong291.xposed.quickenergy.util.Log;
+import pansong291.xposed.quickenergy.util.RandomUtils;
import pansong291.xposed.quickenergy.util.StringUtil;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.text.DateFormat;
-
public class RpcUtil {
private static final String TAG = RpcUtil.class.getCanonicalName();
private static Method rpcCallMethod;
@@ -65,61 +67,85 @@ public static String request(String args0, String args1) {
if (isInterrupted) {
return null;
}
- try {
- Object o;
- if (rpcCallMethod.getParameterTypes().length == 12) {
- o = rpcCallMethod.invoke(
- null, args0, args1, "", true, null, null, false, curH5PageImpl, 0, "", false, -1);
- } else {
- o = rpcCallMethod.invoke(
- null, args0, args1, "", true, null, null, false, curH5PageImpl, 0, "", false, -1, "");
- }
- String str = getResponse(o);
- Log.i(TAG, "argument: " + args0 + ", " + args1);
- Log.i(TAG, "response: " + str);
+ String result = null;
+ int count = 0;
+ while (count < 3) {
+ count++;
try {
- JSONObject jo = new JSONObject(str);
- if (jo.optString("memo", "").contains("系统繁忙")) {
- isInterrupted = true;
- AntForestNotification.setContentText("系统繁忙,可能需要滑动验证");
- Log.recordLog("系统繁忙,可能需要滑动验证");
- return str;
+ Object o;
+ if (rpcCallMethod.getParameterTypes().length == 12) {
+ o = rpcCallMethod.invoke(
+ null, args0, args1, "", true, null, null, false, curH5PageImpl, 0, "", false, -1);
+ } else {
+ o = rpcCallMethod.invoke(
+ null, args0, args1, "", true, null, null, false, curH5PageImpl, 0, "", false, -1, "");
}
- } catch (Throwable ignored) { }
- return str;
- } catch (Throwable t) {
- Log.i(TAG, "invoke err:");
- Log.printStackTrace(TAG, t);
- if (t instanceof InvocationTargetException) {
- String msg = t.getCause().getMessage();
- if (!StringUtil.isEmpty(msg)) {
- if (msg.contains("登录超时")) {
+ String str = getResponse(o);
+ Log.i(TAG, "argument: " + args0 + ", " + args1);
+ Log.i(TAG, "response: " + str);
+ try {
+ JSONObject jo = new JSONObject(str);
+ if (jo.optString("memo", "").contains("系统繁忙")) {
isInterrupted = true;
- AntForestNotification.setContentText("登录超时");
- if (AntForestToast.context != null) {
- if (Config.timeoutRestart()) {
- Log.recordLog("尝试重启!");
- if (Config.timeoutType() == XposedHook.StayAwakeType.ALARM) {
- XposedHook.alarmHook(AntForestToast.context, 3000, true);
- } else {
- XposedHook.alarmBroadcast(AntForestToast.context, 3000, true);
+ AntForestNotification.setContentText("系统繁忙,可能需要滑动验证");
+ Log.recordLog("系统繁忙,可能需要滑动验证");
+ return str;
+ }
+ } catch (Throwable ignored) {
+ }
+ return str;
+ } catch (Throwable t) {
+ Log.i(TAG, "rpc [" + args0 + "] err:");
+ Log.printStackTrace(TAG, t);
+ result = null;
+ if (t instanceof InvocationTargetException) {
+ String msg = t.getCause().getMessage();
+ if (!StringUtil.isEmpty(msg)) {
+ if (msg.contains("登录超时")) {
+ if (!isInterrupted && !XposedHook.getIsRestart()) {
+ isInterrupted = true;
+ AntForestNotification.setContentText("登录超时");
+ if (AntForestToast.context != null) {
+ if (Config.timeoutRestart()) {
+ Log.recordLog("尝试重启!");
+ XposedHook.restartHook(AntForestToast.context, Config.timeoutType(), 500, true);
+ }
}
}
+ try {
+ Thread.sleep(3000 + RandomUtils.delay());
+ } catch (InterruptedException e) {
+ throw new RuntimeException(e);
+ }
+ continue;
+ } else if (msg.contains("[1004]") && "alipay.antmember.forest.h5.collectEnergy".equals(args0)) {
+ if (Config.waitWhenException() > 0) {
+ long waitTime = System.currentTimeMillis() + Config.waitWhenException();
+ RuntimeInfo.getInstance().put(RuntimeInfo.RuntimeInfoKey.ForestPauseTime, waitTime);
+ AntForestNotification.setContentText("触发异常,等待至" + DateFormat.getDateTimeInstance().format(waitTime));
+ Log.recordLog("触发异常,等待至" + DateFormat.getDateTimeInstance().format(waitTime));
+ }
+ try {
+ Thread.sleep(900 + RandomUtils.delay());
+ } catch (InterruptedException e) {
+ throw new RuntimeException(e);
+ }
+ continue;
+ } else if (msg.contains("MMTPException")) {
+ result = "{\"resultCode\":\"FAIL\",\"memo\":\"MMTPException\",\"resultDesc\":\"MMTPException\"}";
+ try {
+ Thread.sleep(900 + RandomUtils.delay());
+ } catch (InterruptedException e) {
+ throw new RuntimeException(e);
+ }
+ continue;
}
- } else if (msg.contains("[1004]") && "alipay.antmember.forest.h5.collectEnergy".equals(args0)) {
- if (Config.waitWhenException() > 0) {
- long waitTime = System.currentTimeMillis() + Config.waitWhenException();
- RuntimeInfo.getInstance().put(RuntimeInfo.RuntimeInfoKey.ForestPauseTime, waitTime);
- AntForestNotification.setContentText("触发异常,等待至" + DateFormat.getDateTimeInstance().format(waitTime));
- Log.recordLog("触发异常,等待至" + DateFormat.getDateTimeInstance().format(waitTime));
- }
- } else if (msg.contains("MMTPException")) {
- return "{\"resultCode\":\"FAIL\",\"memo\":\"MMTPException\",\"resultDesc\":\"MMTPException\"}";
}
}
+ return result;
}
}
- return null;
+ return result;
}
public static String getResponse(Object resp) throws Throwable {
diff --git a/app/src/main/java/pansong291/xposed/quickenergy/hook/XposedHook.java b/app/src/main/java/pansong291/xposed/quickenergy/hook/XposedHook.java
index 81750975e..ad46c7796 100644
--- a/app/src/main/java/pansong291/xposed/quickenergy/hook/XposedHook.java
+++ b/app/src/main/java/pansong291/xposed/quickenergy/hook/XposedHook.java
@@ -12,18 +12,39 @@
import android.os.Build;
import android.os.Handler;
import android.os.PowerManager;
+
+import java.util.Calendar;
+import java.util.Map;
+
import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XC_MethodReplacement;
import de.robv.android.xposed.XposedHelpers;
import de.robv.android.xposed.callbacks.XC_LoadPackage;
-import pansong291.xposed.quickenergy.*;
+import pansong291.xposed.quickenergy.AncientTree;
+import pansong291.xposed.quickenergy.AntBookRead;
+import pansong291.xposed.quickenergy.AntCooperate;
+import pansong291.xposed.quickenergy.AntFarm;
+import pansong291.xposed.quickenergy.AntForest;
+import pansong291.xposed.quickenergy.AntForestNotification;
+import pansong291.xposed.quickenergy.AntForestToast;
+import pansong291.xposed.quickenergy.AntMember;
+import pansong291.xposed.quickenergy.AntOcean;
+import pansong291.xposed.quickenergy.AntOrchard;
+import pansong291.xposed.quickenergy.AntSports;
+import pansong291.xposed.quickenergy.AntStall;
+import pansong291.xposed.quickenergy.ConsumeGold;
+import pansong291.xposed.quickenergy.GreenFinance;
+import pansong291.xposed.quickenergy.OmegakoiTown;
+import pansong291.xposed.quickenergy.Reserve;
import pansong291.xposed.quickenergy.data.RuntimeInfo;
import pansong291.xposed.quickenergy.ui.MainActivity;
-import pansong291.xposed.quickenergy.util.*;
-
-import java.util.Calendar;
-import java.util.Map;
+import pansong291.xposed.quickenergy.util.Config;
+import pansong291.xposed.quickenergy.util.FriendIdMap;
+import pansong291.xposed.quickenergy.util.Log;
+import pansong291.xposed.quickenergy.util.PluginUtils;
+import pansong291.xposed.quickenergy.util.Statistics;
+import pansong291.xposed.quickenergy.util.TimeUtil;
public class XposedHook implements IXposedHookLoadPackage {
private static final String TAG = XposedHook.class.getCanonicalName();
@@ -37,16 +58,22 @@ public class XposedHook implements IXposedHookLoadPackage {
private static boolean isHooked = false;
+ private static boolean isRestart = false;
+
public enum StayAwakeType {
BROADCAST, ALARM, NONE;
- public static final CharSequence[] nickNames = { "广播", "闹钟", "不重启" };
+ public static final CharSequence[] nickNames = {"广播", "闹钟", "不重启"};
}
public enum StayAwakeTarget {
SERVICE, ACTIVITY;
- public static final CharSequence[] nickNames = { "Service", "Activity" };
+ public static final CharSequence[] nickNames = {"Service", "Activity"};
+ }
+
+ public static boolean getIsRestart() {
+ return isRestart;
}
@Override
@@ -75,20 +102,26 @@ protected void beforeHookedMethod(MethodHookParam param) {
}
}
+ private static void restartHandler() {
+ if (handler != null && runnable != null) {
+ handler.removeCallbacks(runnable);
+ AntForest.stop();
+ AntForestNotification.stop(service, false);
+ AntForestNotification.start(service);
+ handler.post(runnable);
+ }
+ }
+
private static void initHandler() {
Log.recordLog("尝试初始化");
if (runnable == null) {
- if (!StringUtil.isEmpty(FriendIdMap.currentUid)) {
- FriendManager.fillUser(XposedHook.classLoader);
- }
-
runnable = new Runnable() {
@Override
public void run() {
PluginUtils.invoke(XposedHook.class, PluginUtils.PluginAction.START);
String targetUid = RpcUtil.getUserId(XposedHook.classLoader);
if (targetUid != null) {
- FriendIdMap.currentUid = targetUid;
+ FriendIdMap.setCurrentUid(targetUid);
Config.shouldReload = true;
Statistics.resetToday();
@@ -101,6 +134,7 @@ public void run() {
Reserve.start();
if (TimeUtil.getTimeStr().compareTo("0800") >= 0) {
AncientTree.start();
+ AntBookRead.start();
}
AntSports.start(XposedHook.classLoader);
AntMember.receivePoint();
@@ -108,6 +142,8 @@ public void run() {
AntOrchard.start();
AntStall.start();
GreenFinance.start();
+ OmegakoiTown.start();
+ ConsumeGold.start();
}
}
if (Config.collectEnergy() || Config.enableFarm()) {
@@ -128,12 +164,8 @@ public void run() {
Config.setAlarm7(AntForestToast.context);
}
}
+ restartHandler();
AntForestToast.show("芝麻粒加载成功");
- handler.removeCallbacks(runnable);
- AntForest.stop();
- AntForestNotification.stop(service, false);
- AntForestNotification.start(service);
- handler.post(runnable);
} catch (Throwable th) {
Log.i(TAG, "initHandler err:");
Log.printStackTrace(TAG, th);
@@ -148,14 +180,23 @@ private void hookService(ClassLoader loader) {
protected void afterHookedMethod(MethodHookParam param) {
Log.i(TAG, "Activity onResume");
RpcUtil.isInterrupted = false;
- PermissionUtil.requestPermissions((Activity) param.thisObject);
+ //PermissionUtil.requestPermissions((Activity) param.thisObject);
AntForestNotification.setContentText("运行中...");
String targetUid = RpcUtil.getUserId(loader);
- if (targetUid == null || targetUid.equals(FriendIdMap.currentUid)) {
+ if (targetUid == null) {
return;
}
- FriendIdMap.currentUid = targetUid;
- if (handler != null) {
+ if (!targetUid.equals(FriendIdMap.getCurrentUid())) {
+ FriendIdMap.setCurrentUid(targetUid);
+ } else if (!isRestart) {
+ return;
+ }
+ if (isRestart) {
+ Log.i(TAG, "Activity isRestart");
+ isRestart = false;
+ restartHandler();
+ ((Activity) param.thisObject).finish();
+ } else if (handler != null) {
initHandler();
}
}
@@ -188,11 +229,7 @@ protected void afterHookedMethod(MethodHookParam param) {
wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, service.getClass().getName());
wakeLock.acquire();
- if (Config.stayAwakeType() == StayAwakeType.BROADCAST) {
- alarmBroadcast(AntForestToast.context, 30 * 60 * 1000, false);
- } else if (Config.stayAwakeType() == StayAwakeType.ALARM) {
- alarmHook(AntForestToast.context, 30 * 60 * 1000, false);
- }
+ restartHook(AntForestToast.context, Config.stayAwakeType(), 30 * 60 * 1000, false);
}
initHandler();
}
@@ -263,6 +300,14 @@ protected void afterHookedMethod(MethodHookParam param) {
}
+ public static void restartHook(Context context, StayAwakeType stayAwakeType, long delayTime, boolean force) {
+ if (stayAwakeType == StayAwakeType.ALARM) {
+ alarmHook(context, delayTime, force);
+ } else {
+ alarmBroadcast(context, delayTime, force);
+ }
+ }
+
public static void restartHook(Context context, boolean force) {
try {
Intent intent;
@@ -270,6 +315,9 @@ public static void restartHook(Context context, boolean force) {
intent = new Intent(Intent.ACTION_VIEW);
intent.setClassName(ClassMember.PACKAGE_NAME, ClassMember.CURRENT_USING_ACTIVITY);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ if (force) {
+ isRestart = true;
+ }
context.startActivity(intent);
} else {
intent = new Intent();
@@ -310,6 +358,9 @@ public static void alarmHook(Context context, long delayTime, boolean force) {
Intent it = new Intent();
it.setClassName(ClassMember.PACKAGE_NAME, ClassMember.CURRENT_USING_ACTIVITY);
pi = PendingIntent.getActivity(context, 1, it, getPendingIntentFlag());
+ if (force) {
+ isRestart = true;
+ }
} else {
Intent it = new Intent();
it.setClassName(ClassMember.PACKAGE_NAME, ClassMember.CURRENT_USING_SERVICE);
diff --git a/app/src/main/java/pansong291/xposed/quickenergy/ui/ListAdapter.java b/app/src/main/java/pansong291/xposed/quickenergy/ui/ListAdapter.java
index eccb8c2e5..c22bca30c 100644
--- a/app/src/main/java/pansong291/xposed/quickenergy/ui/ListAdapter.java
+++ b/app/src/main/java/pansong291/xposed/quickenergy/ui/ListAdapter.java
@@ -23,6 +23,8 @@ public class ListAdapter extends BaseAdapter {
public static ListAdapter get(Context c) {
if (adapter == null)
adapter = new ListAdapter(c);
+ adapter.findIndex = -1;
+ adapter.findWord = null;
return adapter;
}
@@ -32,6 +34,8 @@ public static ListAdapter get(Context c, ListDialog.ListType listType) {
viewHolderList = new ArrayList<>();
}
ListAdapter.listType = listType;
+ adapter.findIndex = -1;
+ adapter.findWord = null;
return adapter;
}
@@ -66,8 +70,7 @@ public void setSelectedList(List l) {
}
}
- public int
- findLast(CharSequence cs) {
+ public int findLast(CharSequence cs) {
if (list == null || list.isEmpty())
return -1;
if (!cs.equals(findWord)) {
@@ -116,6 +119,26 @@ public void exitFind() {
findIndex = -1;
}
+ public void selectAll(){
+ selects.clear();
+ for(IdAndName ai:list){
+ selects.add(ai.id);
+ }
+ notifyDataSetChanged();
+ }
+
+ public void SelectInvert(){
+ List newSelects = new ArrayList<>();
+ for(IdAndName ai:list){
+ if(!selects.contains(ai.id)){
+ newSelects.add(ai.id);
+ }
+ }
+ selects.clear();
+ selects.addAll(newSelects);
+ notifyDataSetChanged();
+ }
+
@Override
public int getCount() {
return list == null ? 0 : list.size();
diff --git a/app/src/main/java/pansong291/xposed/quickenergy/ui/ListDialog.java b/app/src/main/java/pansong291/xposed/quickenergy/ui/ListDialog.java
index 4d11ecfbc..b9798e511 100644
--- a/app/src/main/java/pansong291/xposed/quickenergy/ui/ListDialog.java
+++ b/app/src/main/java/pansong291/xposed/quickenergy/ui/ListDialog.java
@@ -14,6 +14,7 @@
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;
+import android.widget.RelativeLayout;
import java.util.List;
import pansong291.xposed.quickenergy.R;
import pansong291.xposed.quickenergy.entity.AlipayUser;
@@ -26,7 +27,8 @@
public class ListDialog {
static AlertDialog listDialog;
- static Button btn_find_last, btn_find_next;
+ static Button btn_find_last, btn_find_next,
+ btn_select_all, btn_select_invert;
static EditText edt_find;
static ListView lv_list;
static List selectedList;
@@ -42,6 +44,8 @@ public class ListDialog {
static AlertDialog optionsDialog;
static AlertDialog deleteDialog;
+ static RelativeLayout layout_batch_process;
+
public enum ListType {
RADIO, CHECK, SHOW
}
@@ -77,7 +81,7 @@ private static AlertDialog getListDialog(Context c) {
listDialog = new AlertDialog.Builder(c)
.setTitle("title")
.setView(getListView(c))
- .setPositiveButton(c.getString(R.string.ok), null)
+ .setPositiveButton(c.getString(R.string.close), null)
.create();
listDialog.setOnShowListener(
new OnShowListener() {
@@ -90,6 +94,9 @@ public OnShowListener setContext(Context c) {
@Override
public void onShow(DialogInterface p1) {
+ AlertDialog d = (AlertDialog) p1;
+ layout_batch_process = d.findViewById(R.id.layout_batch_process);
+ layout_batch_process.setVisibility(listType==ListType.CHECK&&countList==null?View.VISIBLE:View.GONE);
ListAdapter.get(c).notifyDataSetChanged();
}
}.setContext(c));
@@ -98,11 +105,19 @@ public void onShow(DialogInterface p1) {
private static View getListView(Context c) {
View v = LayoutInflater.from(c).inflate(R.layout.dialog_list, null);
- OnBtnClickListener onBtnClickListener = new OnBtnClickListener();
+
btn_find_last = v.findViewById(R.id.btn_find_last);
btn_find_next = v.findViewById(R.id.btn_find_next);
+ btn_select_all = v.findViewById(R.id.btn_select_all);
+ btn_select_invert = v.findViewById(R.id.btn_select_invert);
+
+ OnBtnClickListener onBtnClickListener = new OnBtnClickListener();
+ BatchBtnOnClickListener batchBtnOnClickListener = new BatchBtnOnClickListener();
btn_find_last.setOnClickListener(onBtnClickListener);
btn_find_next.setOnClickListener(onBtnClickListener);
+ btn_select_all.setOnClickListener(batchBtnOnClickListener);
+ btn_select_invert.setOnClickListener(batchBtnOnClickListener);
+
edt_find = v.findViewById(R.id.edt_find);
lv_list = v.findViewById(R.id.lv_list);
lv_list.setAdapter(ListAdapter.get(c));
@@ -351,4 +366,21 @@ public void onClick(View p1) {
}
}
+ static class BatchBtnOnClickListener implements View.OnClickListener {
+ @SuppressLint("NonConstantResourceId")
+ @Override
+ public void onClick(View p1) {
+ ListAdapter la = ListAdapter.get(p1.getContext());
+ switch (p1.getId()) {
+ case R.id.btn_select_all:
+ la.selectAll();
+ break;
+ case R.id.btn_select_invert:
+ la.SelectInvert();
+ break;
+ }
+ Config.hasChanged = true;
+ }
+ }
+
}
diff --git a/app/src/main/java/pansong291/xposed/quickenergy/ui/SettingsActivity.java b/app/src/main/java/pansong291/xposed/quickenergy/ui/SettingsActivity.java
index adb68047d..2100588a5 100644
--- a/app/src/main/java/pansong291/xposed/quickenergy/ui/SettingsActivity.java
+++ b/app/src/main/java/pansong291/xposed/quickenergy/ui/SettingsActivity.java
@@ -2,7 +2,6 @@
import android.annotation.SuppressLint;
import android.app.Activity;
-import android.content.res.Configuration;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.MotionEvent;
@@ -14,8 +13,6 @@
import android.widget.TabHost;
import android.widget.Toast;
-import java.util.Locale;
-
import pansong291.xposed.quickenergy.R;
import pansong291.xposed.quickenergy.entity.*;
import pansong291.xposed.quickenergy.util.*;
@@ -34,7 +31,7 @@ public class SettingsActivity extends Activity {
private Animation slideRightIn;
private Animation slideRightOut;
- Switch sw_immediateEffect, sw_recordLog, sw_showToast, sw_stayAwake, sw_timeoutRestart, sw_startAt7, sw_language_simplified_chinese,
+ Switch sw_immediateEffect, sw_recordLog, sw_showToast, sw_stayAwake, sw_timeoutRestart, sw_startAt7,
sw_collectWateringBubble, sw_collectProp, sw_collectEnergy, sw_helpFriendCollect, sw_receiveForestTaskAward,
sw_cooperateWater, sw_energyRain, sw_enableFarm, sw_rewardFriend, sw_sendBackAnimal,
sw_receiveFarmToolReward, sw_useNewEggTool, sw_harvestProduce, sw_donation, sw_answerQuestion,
@@ -46,7 +43,8 @@ public class SettingsActivity extends Activity {
sw_enableOnGoing, sw_backupRuntime, sw_collectSesame, sw_zcjSignIn, sw_merchantKmdk, sw_acceptGift,
sw_enableStall, sw_stallAutoClose, sw_stallAutoOpen, sw_stallAutoTask, sw_stallReceiveAward,
sw_stallOpenType, sw_stallDonate, sw_chickenDiary, sw_collectGiftBox, sw_stallInviteRegister,
- sw_stallThrowManure, sw_greenFinance, sw_totalCertCount, sw_batchRobEnergy;
+ sw_stallThrowManure, sw_greenFinance, sw_totalCertCount, sw_batchRobEnergy, sw_antBookRead, sw_consumeGold,
+ sw_omegakoiTown, sw_language_simplified_chinese, sw_special_food, sw_ExchangeEnergyShield;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -185,6 +183,7 @@ private void initSwitch() {
sw_receiveFarmToolReward = findViewById(R.id.sw_receiveFarmToolReward);
sw_recordFarmGame = findViewById(R.id.sw_recordFarmGame);
sw_kitchen = findViewById(R.id.sw_kitchen);
+ sw_special_food = findViewById(R.id.sw_special_food);
sw_useNewEggTool = findViewById(R.id.sw_useNewEggTool);
sw_harvestProduce = findViewById(R.id.sw_harvestProduce);
sw_donation = findViewById(R.id.sw_donation);
@@ -205,6 +204,7 @@ private void initSwitch() {
sw_limitCollect = findViewById(R.id.sw_limitCollect);
sw_doubleCard = findViewById(R.id.sw_doubleCard);
sw_ExchangeEnergyDoubleClick = findViewById(R.id.sw_ExchangeEnergyDoubleClick);
+ sw_ExchangeEnergyShield = findViewById(R.id.sw_ExchangeEnergyShield);
sw_ecoLifeTick = findViewById(R.id.sw_ecoLifeTick);
sw_tiyubiz = findViewById(R.id.sw_tiyubiz);
sw_insBlueBeanExchange = findViewById(R.id.sw_insBlueBeanExchange);
@@ -229,6 +229,9 @@ private void initSwitch() {
sw_stallInviteRegister = findViewById(R.id.sw_stallInviteRegister);
sw_stallThrowManure = findViewById(R.id.sw_stallThrowManure);
sw_greenFinance = findViewById(R.id.sw_greenFinance);
+ sw_antBookRead = findViewById(R.id.sw_antBookRead);
+ sw_consumeGold = findViewById(R.id.sw_consumeGold);
+ sw_omegakoiTown = findViewById(R.id.sw_omegakoiTown);
}
@Override
@@ -261,6 +264,7 @@ protected void onResume() {
sw_receiveFarmToolReward.setChecked(Config.receiveFarmToolReward());
sw_recordFarmGame.setChecked(Config.recordFarmGame());
sw_kitchen.setChecked(Config.kitchen());
+ sw_special_food.setChecked(Config.useSpecialFood());
sw_useNewEggTool.setChecked(Config.useNewEggTool());
sw_harvestProduce.setChecked(Config.harvestProduce());
sw_donation.setChecked(Config.donation());
@@ -280,7 +284,8 @@ protected void onResume() {
sw_kbSignIn.setChecked(Config.kbSginIn());
sw_limitCollect.setChecked(Config.isLimitCollect());
sw_doubleCard.setChecked(Config.doubleCard());
- sw_ExchangeEnergyDoubleClick.setChecked(Config.ExchangeEnergyDoubleClick());
+ sw_ExchangeEnergyDoubleClick.setChecked(Config.exchangeEnergyDoubleClick());
+ sw_ExchangeEnergyShield.setChecked(Config.exchangeEnergyShield());
sw_ecoLifeTick.setChecked(Config.ecoLifeTick());
sw_tiyubiz.setChecked(Config.tiyubiz());
sw_insBlueBeanExchange.setChecked(Config.insBlueBeanExchange());
@@ -305,6 +310,9 @@ protected void onResume() {
sw_stallInviteRegister.setChecked(Config.stallInviteRegister());
sw_stallThrowManure.setChecked(Config.stallThrowManure());
sw_greenFinance.setChecked(Config.greenFinance());
+ sw_antBookRead.setChecked(Config.antBookRead());
+ sw_consumeGold.setChecked(Config.consumeGold());
+ sw_omegakoiTown.setChecked(Config.omegakoiTown());
}
@SuppressLint("NonConstantResourceId")
@@ -398,6 +406,10 @@ public void onClick(View v) {
Config.setExchangeEnergyDoubleClick(sw.isChecked());
break;
+ case R.id.sw_ExchangeEnergyShield:
+ Config.setExchangeEnergyShield(sw.isChecked());
+ break;
+
case R.id.sw_reserve:
Config.setReserve(sw.isChecked());
break;
@@ -430,6 +442,10 @@ public void onClick(View v) {
Config.setKitchen(sw.isChecked());
break;
+ case R.id.sw_special_food:
+ Config.setUseSpecialFood(sw.isChecked());
+ break;
+
case R.id.sw_useNewEggTool:
Config.setUseNewEggTool(sw.isChecked());
break;
@@ -589,6 +605,18 @@ public void onClick(View v) {
case R.id.sw_greenFinance:
Config.setGreenFinance(sw.isChecked());
break;
+
+ case R.id.sw_antBookRead:
+ Config.setAntBookRead(sw.isChecked());
+ break;
+
+ case R.id.sw_consumeGold:
+ Config.setConsumeGold(sw.isChecked());
+ break;
+
+ case R.id.sw_omegakoiTown:
+ Config.setOmegakoiTown(sw.isChecked());
+ break;
}
} else if (v instanceof Button) {
Button btn = (Button) v;
diff --git a/app/src/main/java/pansong291/xposed/quickenergy/util/Config.java b/app/src/main/java/pansong291/xposed/quickenergy/util/Config.java
index 46f03af29..90a09269e 100644
--- a/app/src/main/java/pansong291/xposed/quickenergy/util/Config.java
+++ b/app/src/main/java/pansong291/xposed/quickenergy/util/Config.java
@@ -89,6 +89,8 @@ public CharSequence nickName() {
public static final String jn_receiveFarmToolReward = "receiveFarmToolReward";
public static final String jn_recordFarmGame = "recordFarmGame";
public static final String jn_kitchen = "kitchen";
+
+ public static final String jn_useSpecialFood = "useSpecialFood";
public static final String jn_useNewEggTool = "useNewEggTool";
public static final String jn_harvestProduce = "harvestProduce";
public static final String jn_donation = "donation";
@@ -148,6 +150,9 @@ public CharSequence nickName() {
public static final String jn_zcjSignIn = "zcjSignIn";
public static final String jn_merchantKmdk = "merchantKmdk";
public static final String jn_greenFinance = "greenFinance";
+ public static final String jn_antBookRead = "antBookRead";
+ public static final String jn_consumeGold = "consumeGold";
+ public static final String jn_omegakoiTown = "omegakoiTown";
public static volatile boolean shouldReload;
public static volatile boolean hasChanged;
@@ -214,6 +219,8 @@ public CharSequence nickName() {
private boolean exchangeEnergyDoubleClick;
private int exchangeEnergyDoubleClickCount;
+ private boolean exchangeEnergyShield;
+ private int exchangeEnergyShieldCount;
private boolean antdodoCollect;
private boolean antOcean;
private boolean userPatrol;
@@ -231,6 +238,7 @@ public CharSequence nickName() {
private boolean receiveFarmToolReward;
private boolean recordFarmGame;
private boolean kitchen;
+ private boolean useSpecialFood;
private boolean useNewEggTool;
private boolean harvestProduce;
private boolean donation;
@@ -287,6 +295,9 @@ public CharSequence nickName() {
private boolean zcjSignIn;
private boolean merchantKmdk;
private boolean greenFinance;
+ private boolean antBookRead;
+ private boolean consumeGold;
+ private boolean omegakoiTown;
/* base */
private static volatile Config config;
@@ -696,7 +707,7 @@ public static boolean energyRain() {
return getConfig().energyRain;
}
- public static boolean ExchangeEnergyDoubleClick() {
+ public static boolean exchangeEnergyDoubleClick() {
return getConfig().exchangeEnergyDoubleClick;
}
@@ -714,6 +725,24 @@ public static void setExchangeEnergyDoubleClickCount(int i) {
hasChanged = true;
}
+
+ public static boolean exchangeEnergyShield() {
+ return getConfig().exchangeEnergyShield;
+ }
+
+ public static void setExchangeEnergyShield(boolean b) {
+ getConfig().exchangeEnergyShield = b;
+ hasChanged = true;
+ }
+
+ public static int getExchangeEnergyShieldCount() {
+ return getConfig().exchangeEnergyShieldCount;
+ }
+
+ public static void setExchangeEnergyShieldCount(int i) {
+ getConfig().exchangeEnergyShieldCount = i;
+ hasChanged = true;
+ }
public static void setAncientTreeOnlyWeek(boolean b) {
getConfig().ancientTreeOnlyWeek = b;
hasChanged = true;
@@ -863,6 +892,15 @@ public static boolean kitchen() {
return getConfig().kitchen;
}
+ public static void setUseSpecialFood(boolean b) {
+ getConfig().useSpecialFood = b;
+ hasChanged = true;
+ }
+
+ public static boolean useSpecialFood() {
+ return getConfig().useSpecialFood;
+ }
+
public static void setUseNewEggTool(boolean b) {
getConfig().useNewEggTool = b;
hasChanged = true;
@@ -1320,14 +1358,41 @@ public static boolean greenFinance() {
return getConfig().greenFinance;
}
+ public static void setAntBookRead(boolean b) {
+ getConfig().antBookRead = b;
+ hasChanged = true;
+ }
+
+ public static boolean antBookRead() {
+ return getConfig().antBookRead;
+ }
+
+ public static void setConsumeGold(boolean b) {
+ getConfig().consumeGold = b;
+ hasChanged = true;
+ }
+
+ public static boolean consumeGold() {
+ return getConfig().consumeGold;
+ }
+
+ public static void setOmegakoiTown(boolean b) {
+ getConfig().omegakoiTown = b;
+ hasChanged = true;
+ }
+
+ public static boolean omegakoiTown() {
+ return getConfig().omegakoiTown;
+ }
+
/* base */
private static synchronized Config getConfig() {
if (config == null || shouldReload && config.immediateEffect) {
shouldReload = false;
Log.i(TAG, "get config from" + RuntimeInfo.process);
String confJson = null;
- if (FileUtils.getConfigFile(FriendIdMap.currentUid).exists())
- confJson = FileUtils.readFromFile(FileUtils.getConfigFile(FriendIdMap.currentUid));
+ if (FileUtils.getConfigFile(FriendIdMap.getCurrentUid()).exists())
+ confJson = FileUtils.readFromFile(FileUtils.getConfigFile(FriendIdMap.getCurrentUid()));
config = json2Config(confJson);
}
return config;
@@ -1400,6 +1465,8 @@ public static Config defInit() {
c.giveEnergyRainList = new ArrayList<>();
c.exchangeEnergyDoubleClick = false;
c.exchangeEnergyDoubleClickCount = 6;
+ c.exchangeEnergyShield = false;
+ c.exchangeEnergyShieldCount = 6;
c.ancientTreeOnlyWeek = true;
c.antdodoCollect = true;
c.antOcean = true;
@@ -1418,6 +1485,7 @@ public static Config defInit() {
c.receiveFarmToolReward = true;
c.recordFarmGame = true;
c.kitchen = true;
+ c.useSpecialFood = false;
c.useNewEggTool = true;
c.harvestProduce = true;
c.donation = true;
@@ -1478,6 +1546,9 @@ public static Config defInit() {
c.zcjSignIn = false;
c.merchantKmdk = false;
c.greenFinance = false;
+ c.antBookRead = false;
+ c.consumeGold = false;
+ c.omegakoiTown = false;
return c;
}
@@ -1716,6 +1787,12 @@ public static Config json2Config(String json) {
config.exchangeEnergyDoubleClickCount = jo.optInt("exchangeEnergyDoubleClickCount", 6);
Log.i(TAG, "exchangeEnergyDoubleClickCount" + ":" + config.exchangeEnergyDoubleClickCount);
+ config.exchangeEnergyShield = jo.optBoolean("exchangeEnergyShield", false);
+ Log.i(TAG, "exchangeEnergyShield" + ":" + config.exchangeEnergyShield);
+
+ config.exchangeEnergyShieldCount = jo.optInt("exchangeEnergyShieldCount", 6);
+ Log.i(TAG, "exchangeEnergyShieldCount" + ":" + config.exchangeEnergyShieldCount);
+
config.ancientTreeOnlyWeek = jo.optBoolean(jn_ancientTreeOnlyWeek, true);
//Log.i(TAG, jn_ancientTreeOnlyWeek + ":" + config.ancientTreeOnlyWeek);
@@ -1771,6 +1848,8 @@ public static Config json2Config(String json) {
config.kitchen = jo.optBoolean(jn_kitchen, true);
//Log.i(TAG, jn_kitchen + ":" + config.kitchen);
+ config.useSpecialFood = jo.optBoolean(jn_useSpecialFood, false);
+
config.useNewEggTool = jo.optBoolean(jn_useNewEggTool, true);
//Log.i(TAG, jn_useNewEggTool + ":" + config.useNewEggTool);
@@ -1969,17 +2048,20 @@ public static Config json2Config(String json) {
config.insBlueBeanExchange = jo.optBoolean(jn_insBlueBeanExchange, true);
//Log.i(TAG, jn_insBlueBeanExchange + ":" + config.insBlueBeanExchange);
- config.collectSesame = jo.optBoolean(jn_collectSesame, true);
- //Log.i(TAG, jn_collectSesame + ":" + config.collectSesame);
+ config.collectSesame = jo.optBoolean(jn_collectSesame, false);
- config.zcjSignIn = jo.optBoolean(jn_zcjSignIn, true);
- //Log.i(TAG, jn_zcjSignIn + ":" + config.zcjSignIn);
+ config.zcjSignIn = jo.optBoolean(jn_zcjSignIn, false);
- config.merchantKmdk = jo.optBoolean(jn_merchantKmdk, true);
- //Log.i(TAG, jn_merchantKmdk + ":" + config.merchantKmdk);
+ config.merchantKmdk = jo.optBoolean(jn_merchantKmdk, false);
config.greenFinance = jo.optBoolean(jn_greenFinance, false);
- //Log.i(TAG, jn_greenFinance + ":" + config.greenFinance);
+
+ config.antBookRead = jo.optBoolean(jn_antBookRead, false);
+
+ config.consumeGold = jo.optBoolean(jn_consumeGold, false);
+
+ config.omegakoiTown = jo.optBoolean(jn_omegakoiTown, false);
+
} catch (Throwable t) {
Log.printStackTrace(TAG, t);
if (json != null) {
@@ -2147,6 +2229,10 @@ public static String config2Json(Config config) {
jo.put("exchangeEnergyDoubleClickCount", config.exchangeEnergyDoubleClickCount);
+ jo.put("exchangeEnergyShield", config.exchangeEnergyShield);
+
+ jo.put("exchangeEnergyShieldCount", config.exchangeEnergyShieldCount);
+
jo.put(jn_ancientTreeOnlyWeek, config.ancientTreeOnlyWeek);
jo.put(jn_antdodoCollect, config.antdodoCollect);
@@ -2184,6 +2270,8 @@ public static String config2Json(Config config) {
jo.put(jn_kitchen, config.kitchen);
+ jo.put(jn_useSpecialFood, config.useSpecialFood);
+
jo.put(jn_useNewEggTool, config.useNewEggTool);
jo.put(jn_harvestProduce, config.harvestProduce);
@@ -2313,6 +2401,12 @@ public static String config2Json(Config config) {
jo.put(jn_greenFinance, config.greenFinance);
+ jo.put(jn_antBookRead, config.antBookRead);
+
+ jo.put(jn_consumeGold, config.consumeGold);
+
+ jo.put(jn_omegakoiTown, config.omegakoiTown);
+
} catch (Throwable t) {
Log.printStackTrace(TAG, t);
}
@@ -2320,15 +2414,15 @@ public static String config2Json(Config config) {
}
public static String formatJson(JSONObject jo, boolean removeQuote) {
- String formated;
+ String formatted;
try {
- formated = jo.toString(4);
+ formatted = jo.toString(4);
} catch (Throwable t) {
return jo.toString();
}
if (!removeQuote)
- return formated;
- StringBuilder sb = new StringBuilder(formated);
+ return formatted;
+ StringBuilder sb = new StringBuilder(formatted);
char currentChar, lastNonSpaceChar = 0;
for (int i = 0; i < sb.length(); i++) {
currentChar = sb.charAt(i);
@@ -2354,8 +2448,8 @@ public static String formatJson(JSONObject jo, boolean removeQuote) {
lastNonSpaceChar = currentChar;
}
}
- formated = sb.toString();
- return formated;
+ formatted = sb.toString();
+ return formatted;
}
private static PendingIntent alarm7Pi;
diff --git a/app/src/main/java/pansong291/xposed/quickenergy/util/FriendIdMap.java b/app/src/main/java/pansong291/xposed/quickenergy/util/FriendIdMap.java
index 2ef48f763..e732b81da 100644
--- a/app/src/main/java/pansong291/xposed/quickenergy/util/FriendIdMap.java
+++ b/app/src/main/java/pansong291/xposed/quickenergy/util/FriendIdMap.java
@@ -6,16 +6,31 @@
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
+import pansong291.xposed.quickenergy.hook.FriendManager;
+import pansong291.xposed.quickenergy.hook.XposedHook;
+
public class FriendIdMap {
private static final String TAG = FriendIdMap.class.getCanonicalName();
public static boolean shouldReload = false;
- public static String currentUid = null;
+ private static String currentUid = null;
private static Map idMap;
private static boolean hasChanged = false;
+ public static void setCurrentUid(String uid) {
+ if (currentUid == null || !currentUid.equals(uid)) {
+ currentUid = uid;
+ FriendManager.fillUser(XposedHook.classLoader);
+ PluginUtils.invoke(FriendIdMap.class, PluginUtils.PluginAction.INIT);
+ }
+ }
+
+ public static String getCurrentUid() {
+ return currentUid;
+ }
+
public static void putIdMapIfEmpty(String key, String value) {
if (key == null || key.isEmpty())
return;
@@ -109,7 +124,7 @@ public static Map getIdMap() {
shouldReload = false;
idMap = new ConcurrentHashMap<>();
String str = FileUtils.readFromFile(FileUtils.getFriendIdMapFile());
- if (str != null && str.length() > 0) {
+ if (str != null && !str.isEmpty()) {
try {
String[] idSet = str.split("\n");
for (String s : idSet) {
@@ -126,4 +141,16 @@ public static Map getIdMap() {
return idMap;
}
+ public static void waitingCurrentUid() throws InterruptedException {
+ int count = 1;
+ while (getCurrentUid() == null || getCurrentUid().isEmpty()) {
+ if (count > 3) {
+ throw new InterruptedException("获取当前用户超时");
+ } else {
+ count++;
+ Thread.sleep(1000);
+ }
+ }
+ }
+
}
diff --git a/app/src/main/java/pansong291/xposed/quickenergy/util/Log.java b/app/src/main/java/pansong291/xposed/quickenergy/util/Log.java
index afacf6d2b..6dc18bfe8 100644
--- a/app/src/main/java/pansong291/xposed/quickenergy/util/Log.java
+++ b/app/src/main/java/pansong291/xposed/quickenergy/util/Log.java
@@ -1,5 +1,6 @@
package pansong291.xposed.quickenergy.util;
+import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
@@ -60,4 +61,18 @@ public static String getFormatTime() {
return getFormatDateTime().split(" ")[1];
}
+ /* //日期转换为时间戳 */
+ public static long timeToStamp(String timers) {
+ Date d = new Date();
+ long timeStemp = 0;
+ try {
+ SimpleDateFormat sf = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss", Locale.getDefault());
+ d = sf.parse(timers);// 日期转换为时间戳
+ } catch (ParseException e) {
+ e.printStackTrace();
+ }
+ timeStemp = d.getTime();
+ return timeStemp;
+ }
+
}
diff --git a/app/src/main/java/pansong291/xposed/quickenergy/util/RandomUtils.java b/app/src/main/java/pansong291/xposed/quickenergy/util/RandomUtils.java
index 9254e169a..e2ad7b6ee 100644
--- a/app/src/main/java/pansong291/xposed/quickenergy/util/RandomUtils.java
+++ b/app/src/main/java/pansong291/xposed/quickenergy/util/RandomUtils.java
@@ -18,6 +18,12 @@ public static long nextLong() {
return rnd.nextLong();
}
+ public static long nextLong(long min, long max) {
+ if (min >= max) return min;
+ long o = max - min;
+ return rnd.nextLong() % o + min;
+ }
+
public static double nextDouble() {
return rnd.nextDouble();
}
diff --git a/app/src/main/java/pansong291/xposed/quickenergy/util/Statistics.java b/app/src/main/java/pansong291/xposed/quickenergy/util/Statistics.java
index bf7c188a1..2a81d6c08 100644
--- a/app/src/main/java/pansong291/xposed/quickenergy/util/Statistics.java
+++ b/app/src/main/java/pansong291/xposed/quickenergy/util/Statistics.java
@@ -127,6 +127,8 @@ public StallHelpedCountLog(String id) {
private ArrayList protectBubbleList;
private int exchangeDoubleCard = 0;
private int exchangeTimes = 0;
+ private int exchangeShieldCard = 0;
+ private int exchangeShieldTimes = 0;
private int doubleTimes = 0;
// farm
@@ -225,7 +227,7 @@ public static String getText() {
}
public static boolean canWaterFriendToday(String id, int count) {
- id = FriendIdMap.currentUid + "-" + id;
+ id = FriendIdMap.getCurrentUid() + "-" + id;
Statistics stat = getStatistics();
int index = -1;
for (int i = 0; i < stat.waterFriendLogList.size(); i++)
@@ -240,7 +242,7 @@ public static boolean canWaterFriendToday(String id, int count) {
}
public static void waterFriendToday(String id, int count) {
- id = FriendIdMap.currentUid + "-" + id;
+ id = FriendIdMap.getCurrentUid() + "-" + id;
Statistics stat = getStatistics();
WaterFriendLog wfl;
int index = -1;
@@ -425,7 +427,7 @@ public static void feedFriendToday(String id) {
}
public static boolean canVisitFriendToday(String id, int count) {
- id = FriendIdMap.currentUid + "-" + id;
+ id = FriendIdMap.getCurrentUid() + "-" + id;
Statistics stat = getStatistics();
int index = -1;
for (int i = 0; i < stat.visitFriendLogList.size(); i++)
@@ -440,7 +442,7 @@ public static boolean canVisitFriendToday(String id, int count) {
}
public static void visitFriendToday(String id, int count) {
- id = FriendIdMap.currentUid + "-" + id;
+ id = FriendIdMap.getCurrentUid() + "-" + id;
Statistics stat = getStatistics();
VisitFriendLog vfl;
int index = -1;
@@ -617,13 +619,13 @@ public static void spreadManureToday(String uid) {
}
public static boolean canStallP2PHelpToday(String uid) {
- uid = FriendIdMap.currentUid + "-" + uid;
+ uid = FriendIdMap.getCurrentUid() + "-" + uid;
Statistics stat = getStatistics();
return !stat.stallP2PHelpedList.contains(uid);
}
public static void stallP2PHelpeToday(String uid) {
- uid = FriendIdMap.currentUid + "-" + uid;
+ uid = FriendIdMap.getCurrentUid() + "-" + uid;
Statistics stat = getStatistics();
if (!stat.stallP2PHelpedList.contains(uid)) {
stat.stallP2PHelpedList.add(uid);
@@ -664,6 +666,13 @@ public static boolean canExchangeDoubleCardToday() {
} else return stat.exchangeTimes < Config.getExchangeEnergyDoubleClickCount();
}
+ public static boolean canExchangeShieldCardToday() {
+ Statistics stat = getStatistics();
+ if (stat.exchangeShieldCard < stat.day.time) {
+ return true;
+ } else return stat.exchangeShieldTimes < Config.getExchangeEnergyShieldCount();
+ }
+
public static void exchangeDoubleCardToday(boolean isSuccess) {
Statistics stat = getStatistics();
if (stat.exchangeDoubleCard != stat.day.time) {
@@ -677,11 +686,29 @@ public static void exchangeDoubleCardToday(boolean isSuccess) {
save();
}
+ public static void exchangeShieldToday(boolean isSuccess) {
+ Statistics stat = getStatistics();
+ if (stat.exchangeShieldCard != stat.day.time) {
+ stat.exchangeShieldCard = stat.day.time;
+ }
+ if (isSuccess) {
+ stat.exchangeShieldTimes += 1;
+ } else {
+ stat.exchangeShieldTimes = Config.getExchangeEnergyShieldCount();
+ }
+ save();
+ }
+
public static int getExchangeTimes() {
Statistics stat = getStatistics();
return stat.exchangeTimes;
}
+ public static int getExchangeShieldTimes() {
+ Statistics stat = getStatistics();
+ return stat.exchangeShieldTimes;
+ }
+
public static boolean canDoubleToday() {
Statistics stat = getStatistics();
return stat.doubleTimes < Config.getDoubleCountLimit();
diff --git a/app/src/main/java/pansong291/xposed/quickenergy/util/TimeUtil.java b/app/src/main/java/pansong291/xposed/quickenergy/util/TimeUtil.java
index e2b2d44ca..9ac687e98 100644
--- a/app/src/main/java/pansong291/xposed/quickenergy/util/TimeUtil.java
+++ b/app/src/main/java/pansong291/xposed/quickenergy/util/TimeUtil.java
@@ -46,4 +46,17 @@ public static boolean checkInTime(int ms, String strTime) {
String max = TimeUtil.getTimeStr();
return min.compareTo(strTime) <= 0 && max.compareTo(strTime) > 0;
}
+
+ public static Calendar getToday() {
+ Calendar c = Calendar.getInstance();
+ c.set(Calendar.HOUR_OF_DAY, 0);
+ c.set(Calendar.MINUTE, 0);
+ c.set(Calendar.SECOND, 0);
+ c.set(Calendar.MILLISECOND, 0);
+ return c;
+ }
+
+ public static int getHour() {
+ return Calendar.getInstance().get(Calendar.HOUR_OF_DAY);
+ }
}
diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml
index c70750e0c..59027d09b 100644
--- a/app/src/main/res/layout/activity_settings.xml
+++ b/app/src/main/res/layout/activity_settings.xml
@@ -35,6 +35,7 @@
android:layout_height="wrap_content"
android:text="@string/immediate_effect"
android:onClick="onClick"
+ android:checked="true"
android:minHeight="50dp"
android:id="@+id/sw_immediateEffect" />
@@ -528,6 +529,16 @@
android:minHeight="50dp"
android:id="@+id/sw_ExchangeEnergyDoubleClick" />
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/dialog_list.xml b/app/src/main/res/layout/dialog_list.xml
index 3bddfbf12..c0b755244 100644
--- a/app/src/main/res/layout/dialog_list.xml
+++ b/app/src/main/res/layout/dialog_list.xml
@@ -5,6 +5,38 @@
android:layout_height="match_parent"
android:orientation="vertical">
+
+
+
+
+
+
+
+
神奇物种开卡
神奇海洋
每次浇水克数(10 18 33 66)
- 净滩行动
- 净滩行动列表(总数)
+ 保护海洋
+ 保护海洋列表(总数)
测试
超时重启方式
7点时启动(实验性功能)
@@ -120,9 +120,9 @@
备份runtime日志
界面始终使用中文
重启当前app生效
- 施肥
- 收取施肥任务奖励
- 施肥次数
+ 开启农场
+ 收取农场任务奖励
+ 农场每日施肥次数
收集道具
赠送道具给谁(赠送所有可送道具)
收芝麻粒
@@ -151,5 +151,13 @@
记录证书总数
送好友卡片(赠送当前图鉴所有卡片)
一键收能量
+ 全选
+ 反选
+ 关闭
+ 读书听书
+ 支小镇
+ 支付宝消费金
+ 使用特殊食品
+ 活力值兑换能量罩
diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml
new file mode 100644
index 000000000..af0edee2a
--- /dev/null
+++ b/app/src/main/res/values/arrays.xml
@@ -0,0 +1,5 @@
+
+
+ - com.eg.android.AlipayGphone
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index daeb0b968..3a23309cd 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -155,5 +155,13 @@
Total cert count
Send friend card
Batch rob energy
+ Select All
+ Select Invert
+ Close
+ Ant book Read
+ Omegakoi Town
+ Consume Gold
+ Use Special Food
+ Exchange Energy Shield