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" /> + +