From eabc3c4d49975a853c60043a2b802f10ea301179 Mon Sep 17 00:00:00 2001 From: "pansong291@sina.com" Date: Fri, 20 Sep 2019 21:31:12 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=90=8E=E5=8F=B0=E6=94=B6?= =?UTF-8?q?=E5=8F=96=E8=83=BD=E9=87=8F=E5=8A=9F=E8=83=BD=EF=BC=9B=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E5=81=B7=E5=A4=9A=E5=8F=8D=E6=B0=B4=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=EF=BC=9B=E4=BF=AE=E5=A4=8D=E5=A2=9E=E5=8A=A0=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E4=BC=9A=E9=87=8D=E7=BD=AE=E7=9A=84bug=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xposed/quickenergy/AntForest.java | 201 +++++++++++--- .../quickenergy/AntForestNotification.java | 90 +++++++ .../xposed/quickenergy/ClassMember.java | 5 +- .../pansong291/xposed/quickenergy/Config.java | 254 ++++++++++-------- .../xposed/quickenergy/RpcCall.java | 62 ++--- .../xposed/quickenergy/XposedHook.java | 111 ++++++-- .../xposed/quickenergy/ui/EditDialog.java | 148 ++++++++++ .../xposed/quickenergy/ui/ListAdapter.java | 2 +- .../xposed/quickenergy/ui/ListDialog.java | 2 +- .../xposed/quickenergy/ui/MainActivity.java | 41 ++- app/src/main/res/layout/include_main.xml | 70 ++++- 11 files changed, 772 insertions(+), 214 deletions(-) create mode 100644 app/src/main/java/pansong291/xposed/quickenergy/AntForestNotification.java create mode 100644 app/src/main/java/pansong291/xposed/quickenergy/ui/EditDialog.java diff --git a/app/src/main/java/pansong291/xposed/quickenergy/AntForest.java b/app/src/main/java/pansong291/xposed/quickenergy/AntForest.java index 89b5476..86126bb 100644 --- a/app/src/main/java/pansong291/xposed/quickenergy/AntForest.java +++ b/app/src/main/java/pansong291/xposed/quickenergy/AntForest.java @@ -1,8 +1,12 @@ package pansong291.xposed.quickenergy; +import android.content.Intent; +import java.util.Timer; +import java.util.TimerTask; import org.json.JSONArray; import org.json.JSONObject; import pansong291.xposed.quickenergy.AntFarm.TaskStatus; +import pansong291.xposed.quickenergy.AntForestNotification; public class AntForest { @@ -11,6 +15,8 @@ public class AntForest private static int collectedEnergy = 0; private static int helpCollectedEnergy = 0; private static int onceHelpCollected = 0; + private static int totalCollected = 0; + private static int totalHelpCollected = 0; public enum TaskAwardType { BUBBLE_BOOST, DRESS; @@ -28,11 +34,18 @@ public enum ThreadStatus private static boolean forestEnd = false; private static boolean hasMore = true; private static boolean checkingIds = false; + private static long serverTime = -1; + private static long offsetTime = -1; + private static long laterTime = -1; + private static final Timer timer = new Timer(true); + private static boolean hasNextTask = false; + private static long nextTime = -1; public static void start(ClassLoader loader, String args0, String args1, String resp) { - if(!args0.equals("alipay.antmember.forest.h5.queryNextAction") - || args1.contains("\"userId\"")) return; + if(!args0.equals("alipay.antmember.forest.h5.queryNextAction") || + !args1.contains("\"userId\":\"\"") && args1.contains("\"userId\"")) + return; new Thread( new Runnable() @@ -73,7 +86,7 @@ public void run() for(String userId: Config.getWaterFriendList()) { - waterFriendEnergy(loader, userId); + waterFriendEnergy(loader, userId, 3); } if(Config.receiveForestTaskAward())receiveTaskAward(loader); @@ -82,7 +95,7 @@ public void run() Log.i(TAG, "start err:"); Log.printStackTrace(TAG, t); } - if(forestEnd) Log.showToastAndRecordLog("森林功能结束", ""); + if(forestEnd) onForestEnd(loader); else forestEnd = true; } }.setData(loader, resp)).start(); @@ -120,6 +133,13 @@ public void run() for(int i = 0; i < jaFriendRanking.length(); i++) { jo = jaFriendRanking.getJSONObject(i); + long canCollectLaterTime = jo.getLong("canCollectLaterTime"); + if(canCollectLaterTime > 0 && canCollectLaterTime > serverTime) + if(laterTime < 0 || canCollectLaterTime < laterTime) + { + laterTime = canCollectLaterTime; + Log.i(TAG, laterTime - serverTime + "ms 后能量成熟"); + } boolean optBoolean = jo.getBoolean("canCollectEnergy") || jo.getBoolean("canHelpCollect"); String userId = jo.getString("userId"); @@ -187,11 +207,14 @@ private static void canCollectEnergy(ClassLoader loader, String userId) { String s = rpcCall_queryNextAction(loader, userId); JSONObject jo = new JSONObject(s); + String bizNo; if(jo.getString("resultCode").equals("SUCCESS")) { + bizNo = jo.getString("bizNo"); JSONArray jaBubbles = jo.getJSONArray("bubbles"); jo = jo.getJSONObject("userEnergy"); String userName = jo.getString("displayName"); + int collected = 0; for(int i = 0; i < jaBubbles.length(); i++) { jo = jaBubbles.getJSONObject(i); @@ -201,7 +224,7 @@ private static void canCollectEnergy(ClassLoader loader, String userId) if(Config.dontCollect(userId)) Log.showDialogAndRecordLog("不偷取【" + userName + "】", ", userId=" + userId); else - collectEnergy(loader, userId, bubbleId, userName); + collected += collectEnergy(loader, userId, bubbleId, userName); } if(jo.getBoolean("canHelpCollect")) { @@ -215,6 +238,16 @@ private static void canCollectEnergy(ClassLoader loader, String userId) Log.showDialogAndRecordLog("不帮收【" + userName + "】", ", userId=" + userId); } } + if(Config.returnWater30() > 0 && collected >= Config.returnWater30()) + { + returnFriendWater(loader, userId, userName, bizNo, 3); + }else if(Config.returnWater20() > 0 && collected >= Config.returnWater20()) + { + returnFriendWater(loader, userId, userName, bizNo, 2); + }else if(Config.returnWater10() > 0 && collected >= Config.returnWater10()) + { + returnFriendWater(loader, userId, userName, bizNo, 1); + } }else { Log.showDialogAndRecordLog(jo.getString("resultDesc"), s); @@ -226,7 +259,7 @@ private static void canCollectEnergy(ClassLoader loader, String userId) } } - private static void collectEnergy(ClassLoader loader, String userId, Long bubbleId, String userName) + private static int collectEnergy(ClassLoader loader, String userId, Long bubbleId, String userName) { try { @@ -249,6 +282,7 @@ private static void collectEnergy(ClassLoader loader, String userId, Long bubble { Log.showDialogAndRecordLog("偷取【" + userName + "】的能量失败", ",UserID:" + userId + ",BubbleId:" + bubbleId); } + return collected; }else { s = jo.getString("resultDesc"); @@ -261,6 +295,7 @@ private static void collectEnergy(ClassLoader loader, String userId, Long bubble Log.i(TAG, "collectEnergy err:"); Log.printStackTrace(TAG, t); } + return 0; } private static void forFriendCollectEnergy(ClassLoader loader, String targetUserId, Long bubbleId, String userName) @@ -300,7 +335,7 @@ private static void forFriendCollectEnergy(ClassLoader loader, String targetUser } } - private static void waterFriendEnergy(ClassLoader loader, String userId) + private static void waterFriendEnergy(ClassLoader loader, String userId, int count) { try { @@ -311,29 +346,7 @@ private static void waterFriendEnergy(ClassLoader loader, String userId) String bizNo = jo.getString("bizNo"); jo = jo.getJSONObject("userEnergy"); String userName = jo.getString("displayName"); - for(int waterCount = 1; waterCount <= 3; waterCount++) - { - s = rpcCall_transferEnergy(loader, userId, bizNo, waterCount); - jo = new JSONObject(s); - s = jo.getString("resultCode"); - if(s.equals("SUCCESS")) - { - s = jo.getJSONObject("treeEnergy").getString("currentEnergy"); - Log.showDialogAndRecordLog("给【" + userName + "】浇水成功,剩余能量【" + s + "克】", ""); - Thread.sleep(2000); - }else if(s.equals("WATERING_TIMES_LIMIT")) - { - Log.showDialogAndRecordLog("今日给【" + userName + "】浇水已达上限", ""); - break; - }else if(s.equals("LOW_VERSION")) - { - Log.showDialogAndRecordLog("给【" + userName + "】浇水失败," + s, ""); - break; - }else - { - Log.showDialogAndRecordLog(jo.getString("resultDesc"), jo.toString()); - } - } + returnFriendWater(loader, userId, userName, bizNo, count); }else { Log.showDialogAndRecordLog(jo.getString("resultDesc"), s); @@ -345,6 +358,42 @@ private static void waterFriendEnergy(ClassLoader loader, String userId) } } + private static void returnFriendWater(ClassLoader loader, String userId, String userName, String bizNo, int count) + { + try + { + String s; + JSONObject jo; + for(int waterCount = 1; waterCount <= count; waterCount++) + { + s = rpcCall_transferEnergy(loader, userId, bizNo, waterCount); + jo = new JSONObject(s); + s = jo.getString("resultCode"); + if(s.equals("SUCCESS")) + { + s = jo.getJSONObject("treeEnergy").getString("currentEnergy"); + Log.showDialogAndRecordLog("给【" + userName + "】浇水成功,剩余能量【" + s + "克】", ""); + Thread.sleep(2000); + }else if(s.equals("WATERING_TIMES_LIMIT")) + { + Log.showDialogAndRecordLog("今日给【" + userName + "】浇水已达上限", ""); + break; + }else if(s.equals("LOW_VERSION")) + { + Log.showDialogAndRecordLog("给【" + userName + "】浇水失败," + s, ""); + break; + }else + { + Log.showDialogAndRecordLog(jo.getString("resultDesc"), jo.toString()); + } + } + }catch(Throwable t) + { + Log.i(TAG, "returnFriendWater err:"); + Log.printStackTrace(TAG, t); + } + } + private static void receiveTaskAward(ClassLoader loader) { try @@ -558,12 +607,12 @@ private static void updateThreadCount(ThreadStatus ts, ClassLoader loader) { case START: threadCount++; - //Log.showDialog("新线程开始"+threadCount,""); + Log.i(TAG, "新线程开始" + threadCount); break; case END: threadCount--; - //Log.showDialog("线程结束"+threadCount,""); + Log.i(TAG, "线程结束" + threadCount); if(!hasMore && threadCount == 0) { hasMore = true; @@ -571,7 +620,7 @@ private static void updateThreadCount(ThreadStatus ts, ClassLoader loader) helpCollectedEnergy == 0 && onceHelpCollected == 0) { Log.showDialogOrToastAndRecordLog("暂时没有可收取的能量", ""); - if(forestEnd) Log.showToastAndRecordLog("森林功能结束", ""); + if(forestEnd) onForestEnd(loader); else forestEnd = true; }else if(onceHelpCollected != 0) { @@ -582,17 +631,95 @@ private static void updateThreadCount(ThreadStatus ts, ClassLoader loader) }else { Log.showDialogOrToastAndRecordLog("共收取【" + collectedEnergy + "克】,帮收【" + helpCollectedEnergy + "克】", ""); - collectedEnergy = 0; - helpCollectedEnergy = 0; + totalCollected += collectedEnergy; + totalHelpCollected += helpCollectedEnergy; Config.saveIdMap(); - if(forestEnd) Log.showToastAndRecordLog("森林功能结束", ""); + if(forestEnd) onForestEnd(loader); else forestEnd = true; + collectedEnergy = 0; + helpCollectedEnergy = 0; } } break; } } + private static void onForestEnd(ClassLoader loader) + { + Log.showToastAndRecordLog("森林功能结束", ""); + if(RpcCall.loginActivity != null && Config.onTimeCollect()) + { + String str = " 收:" + totalCollected + ",帮:" + totalHelpCollected; + Log.recordLog(str, ""); + AntForestNotification.setContentText(Log.getFormatDate() + str); + } + long delay = laterTime + offsetTime - System.currentTimeMillis(); +// if(delay < 0) +// { +// delay = Config.TimeInterval(); +// } + if(Config.onTimeCollect() && delay > 0 && delay < Config.timeInterval()) + { + laterTime = -1; + if(nextTime < System.currentTimeMillis()) + hasNextTask = false; + if(!hasNextTask) + { + hasNextTask = true; + delay += 1000; + nextTime = System.currentTimeMillis() + delay; + Log.showDialogOrToastAndRecordLog(delay / 1000 + "秒后尝试检测能量", ""); + timer.schedule( + new TimerTask() + { + ClassLoader loader; + + public TimerTask setData(ClassLoader cl) + { + loader = cl; + return this; + } + + @Override + public void run() + { + //rpcCall_queryNextAction(loader, ""); + //queryEnergyRanking(loader, "1"); + checkEnergyRanking(loader); + hasNextTask = false; + } + }.setData(loader), delay); + }else + { + Log.showDialogOrToastAndRecordLog( + (nextTime - System.currentTimeMillis()) / 1000 + + "秒后已有检测任务", ""); + } + } + } + + public static void checkEnergyRanking(ClassLoader loader) + { + Log.recordLog("定时执行开始", ""); + new Thread( + new Runnable(){ + ClassLoader loader; + + public Runnable setData(ClassLoader cl) + { + loader = cl; + return this; + } + + @Override + public void run() + { + rpcCall_queryNextAction(loader, Config.getSelfId()); + queryEnergyRanking(loader, "1"); + } + }.setData(loader)).start(); + } + public static void saveUserIdAndName(String args0, String resp) { if(!args0.equals("alipay.antmember.forest.h5.queryNextAction")) @@ -602,6 +729,8 @@ public static void saveUserIdAndName(String args0, String resp) JSONObject jo = new JSONObject(resp); if(jo.has("userEnergy")) { + serverTime = jo.getLong("now"); + offsetTime = System.currentTimeMillis() - serverTime; jo = jo.getJSONObject("userEnergy"); String userName = jo.getString("displayName"); String loginId = userName; diff --git a/app/src/main/java/pansong291/xposed/quickenergy/AntForestNotification.java b/app/src/main/java/pansong291/xposed/quickenergy/AntForestNotification.java new file mode 100644 index 0000000..b965687 --- /dev/null +++ b/app/src/main/java/pansong291/xposed/quickenergy/AntForestNotification.java @@ -0,0 +1,90 @@ +package pansong291.xposed.quickenergy; + +import android.app.Notification; +import android.app.NotificationChannel; +import android.app.NotificationManager; +import android.app.PendingIntent; +import android.app.Service; +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.os.Build; + +public class AntForestNotification +{ + public static final int ANTFOREST_NOTIFICATION_ID = 46; + private static NotificationManager mNotifyManager; + public static final String CHANNEL_ID = "CHANNELID0"; + private static Notification mNotification; + private static Notification.Builder builder; + private static boolean isStart = false; + + private AntForestNotification() + {} + + public static boolean isAntForestNotificationStart() + { + return isStart; + } + + public static void start(Context context) + { + if(mNotification == null) + { + Intent it = new Intent(Intent.ACTION_VIEW); + it.setData(Uri.parse("alipays://platformapi/startapp?appId=60000002")); + PendingIntent pi = PendingIntent.getActivity(context, 0, it, PendingIntent.FLAG_UPDATE_CURRENT); + + if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) + { + NotificationChannel notificationChannel = new NotificationChannel(CHANNEL_ID, "ChannelName", NotificationManager.IMPORTANCE_DEFAULT); + mNotifyManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); + if(mNotifyManager != null) + { + mNotifyManager.createNotificationChannel(notificationChannel); + } + builder = new Notification.Builder(context, CHANNEL_ID); + }else + { + builder = new Notification.Builder(context); + } + mNotification = builder + .setSmallIcon(android.R.drawable.sym_def_app_icon) + .setContentTitle("XQuickEnergy") + .setContentText("点此启动蚂蚁森林") + .setAutoCancel(true) + .setContentIntent(pi) + .build(); + } + if(!isStart) + { + if(context instanceof Service) + ((Service)context).startForeground(ANTFOREST_NOTIFICATION_ID, mNotification); + else + mNotifyManager.notify(ANTFOREST_NOTIFICATION_ID, mNotification); + isStart = true; + } + } + + public static void setContentText(CharSequence cs) + { + if(isStart) + { + mNotification = builder.setContentText(cs).build(); + mNotifyManager.notify(ANTFOREST_NOTIFICATION_ID, mNotification); + } + } + + public static void stop(Context context, boolean remove) + { + if(isStart) + { + if(context instanceof Service) + ((Service)context).stopForeground(remove); + else + mNotifyManager.cancel(ANTFOREST_NOTIFICATION_ID); + isStart = false; + } + } + +} diff --git a/app/src/main/java/pansong291/xposed/quickenergy/ClassMember.java b/app/src/main/java/pansong291/xposed/quickenergy/ClassMember.java index cfe9186..b1df872 100644 --- a/app/src/main/java/pansong291/xposed/quickenergy/ClassMember.java +++ b/app/src/main/java/pansong291/xposed/quickenergy/ClassMember.java @@ -4,6 +4,9 @@ public class ClassMember { public static final String com_eg_android_AlipayGphone = "com.eg.android.AlipayGphone", + com_eg_android_AlipayGphone_AlipayLogin = "com.eg.android.AlipayGphone.AlipayLogin", + com_alipay_mobile_nebulaappproxy_api_rpc_H5AppRpcUpdate = "com.alipay.mobile.nebulaappproxy.api.rpc.H5AppRpcUpdate", + matchVersion = "matchVersion", a = "a", h = "h", com_alipay_mobile_h5container_api_H5Page = "com.alipay.mobile.h5container.api.H5Page", com_alibaba_fastjson_JSONObject = "com.alibaba.fastjson.JSONObject", @@ -13,7 +16,7 @@ public class ClassMember com_alipay_mobile_nebulacore_ui_H5Fragment = "com.alipay.mobile.nebulacore.ui.H5Fragment", pushFragment = "pushFragment", com_alipay_mobile_nebulacore_ui_H5Activity = "com.alipay.mobile.nebulacore.ui.H5Activity", - onResume = "onResume", + onCreate = "onCreate", onResume = "onResume", onDestroy = "onDestroy", getResponse = "getResponse"; public static final String diff --git a/app/src/main/java/pansong291/xposed/quickenergy/Config.java b/app/src/main/java/pansong291/xposed/quickenergy/Config.java index 85c0da4..ebf99ca 100644 --- a/app/src/main/java/pansong291/xposed/quickenergy/Config.java +++ b/app/src/main/java/pansong291/xposed/quickenergy/Config.java @@ -39,14 +39,16 @@ public CharSequence nickName() jn_immediateEffect = "immediateEffect", jn_showMode = "showMode", jn_recordLog = "recordLog", jn_enableForest = "enableForest", jn_enableFarm = "enableFarm", /* forest */ - jn_collectEnergy = "collectEnergy", jn_helpFriendCollect = "helpFriendCollect", jn_dontCollectList = "dontCollectList", - jn_dontHelpCollectList = "dontHelpCollectList", jn_receiveForestTaskAward = "receiveForestTaskAward", jn_waterFriendList = "waterFriendList", + jn_collectEnergy = "collectEnergy", jn_ReturnWater30 = "returnWater30", jn_ReturnWater20 = "returnWater20", + jn_ReturnWater10 = "returnWater10", jn_helpFriendCollect = "helpFriendCollect", jn_dontCollectList = "dontCollectList", + jn_dontHelpCollectList = "dontHelpCollectList", jn_onTimeCollect = "onTimeCollect", jn_timeInterval = "timeInterval", + jn_receiveForestTaskAward = "receiveForestTaskAward", jn_waterFriendList = "waterFriendList", /* farm */ jn_rewardFriend = "rewardFriend", jn_sendBackAnimal = "sendBackAnimal", jn_sendType = "sendType", jn_sendTypeExcludeList = "sendTypeExcludeList", jn_recallAnimalType = "recallAnimalType", jn_receiveFarmToolReward = "receiveFarmToolReward", jn_useNewEggTool = "useNewEggTool", jn_harvestProduce = "harvestProduce", jn_donation = "donation", jn_answerQuestion = "answerQuestion", jn_receiveFarmTaskAward = "receiveFarmTaskAward", jn_feedAnimal = "feedAnimal", - jn_useAccelerateTool = "useAccelerateTool", jn_notifyFriend = "notifyFriend", jn_feedFriendAnimalList = "feedFriendAnimalList", + jn_useAccelerateTool = "useAccelerateTool", jn_feedFriendAnimalList = "feedFriendAnimalList", jn_notifyFriend = "notifyFriend", /* member */ jn_receivePoint = "receivePoint"; @@ -62,9 +64,14 @@ public CharSequence nickName() /* forest */ private boolean collectEnergy; + private int returnWater30; + private int returnWater20; + private int returnWater10; private boolean helpFriendCollect; private List dontCollectList; private List dontHelpCollectList; + private boolean onTimeCollect; + private long timeInterval; private boolean receiveForestTaskAward; private List waterFriendList; @@ -82,8 +89,8 @@ public CharSequence nickName() private boolean receiveFarmTaskAward; private boolean feedAnimal; private boolean useAccelerateTool; - private boolean notifyFriend; private List feedFriendAnimalList; + private boolean notifyFriend; /* member */ private boolean receivePoint; @@ -163,6 +170,39 @@ public static boolean collectEnergy() return getConfig().collectEnergy; } + public static void setReturnWater30(int i) + { + getConfig().returnWater30 = i; + hasConfigChanged = true; + } + + public static int returnWater30() + { + return getConfig().returnWater30; + } + + public static void setReturnWater20(int i) + { + getConfig().returnWater20 = i; + hasConfigChanged = true; + } + + public static int returnWater20() + { + return getConfig().returnWater20; + } + + public static void setReturnWater10(int i) + { + getConfig().returnWater10 = i; + hasConfigChanged = true; + } + + public static int returnWater10() + { + return getConfig().returnWater10; + } + public static void setHelpFriendCollect(boolean b) { getConfig().helpFriendCollect = b; @@ -194,6 +234,28 @@ public static boolean dontHelpCollect(String id) return getConfig().dontHelpCollectList.contains(id); } + public static void setOnTimeCollect(boolean b) + { + getConfig().onTimeCollect = b; + hasConfigChanged = true; + } + + public static boolean onTimeCollect() + { + return getConfig().onTimeCollect; + } + + public static void setTimeInterval(long l) + { + getConfig().timeInterval = l; + hasConfigChanged = true; + } + + public static long timeInterval() + { + return getConfig().timeInterval; + } + public static void setReceiveForestTaskAward(boolean b) { getConfig().receiveForestTaskAward = b; @@ -352,17 +414,6 @@ public static boolean useAccelerateTool() return getConfig().useAccelerateTool; } - public static void setNotifyFriend(boolean b) - { - getConfig().notifyFriend = b; - hasConfigChanged = true; - } - - public static boolean notifyFriend() - { - return getConfig().notifyFriend; - } - public static List getFeedFriendAnimal() { return getConfig().feedFriendAnimalList; @@ -378,6 +429,17 @@ public static boolean feedFriendAnimal(String id) return getConfig().feedFriendAnimalList.contains(id); } + public static void setNotifyFriend(boolean b) + { + getConfig().notifyFriend = b; + hasConfigChanged = true; + } + + public static boolean notifyFriend() + { + return getConfig().notifyFriend; + } + /* member */ public static void setReceivePoint(boolean b) { @@ -482,7 +544,7 @@ public static String[] getUnknownIds() for(int i = 0; i < ids.length; i++) { ids[i] = idList.get(i); - Log.i(TAG, "unknown id: "+ids[i]); + Log.i(TAG, "unknown id: " + ids[i]); } return ids; } @@ -529,9 +591,14 @@ public static Config defInit() c.enableFarm = true; c.collectEnergy = true; + c.returnWater30 = 0; + c.returnWater20 = 0; + c.returnWater10 = 0; c.helpFriendCollect = true; if(c.dontCollectList == null) c.dontCollectList = new ArrayList<>(); if(c.dontHelpCollectList == null) c.dontHelpCollectList = new ArrayList<>(); + c.onTimeCollect = true; + c.timeInterval = 120_000; c.receiveForestTaskAward = true; if(c.waterFriendList == null) c.waterFriendList = new ArrayList<>(); @@ -548,8 +615,8 @@ public static Config defInit() c.receiveFarmTaskAward = true; c.feedAnimal = true; c.useAccelerateTool = true; - c.notifyFriend = true; if(c.feedFriendAnimalList == null) c.feedFriendAnimalList = new ArrayList<>(); + c.notifyFriend = true; c.receivePoint = true; return c; @@ -572,65 +639,62 @@ public static Config json2Config(String json) if(jo.has(jn_immediateEffect)) config.immediateEffect = jo.getBoolean(jn_immediateEffect); else - { - config.reInit = true; config.immediateEffect = true; - } Log.i(TAG, jn_immediateEffect + ":" + config.immediateEffect); if(jo.has(jn_showMode)) config.showMode = ShowMode.valueOf(jo.getString(jn_showMode)); else - { - config.reInit = true; config.showMode = ShowMode.DIALOG; - } Log.i(TAG, jn_showMode + ":" + config.showMode.name()); if(jo.has(jn_recordLog)) config.recordLog = jo.getBoolean(jn_recordLog); else - { - config.reInit = true; config.recordLog = true; - } Log.i(TAG, jn_recordLog + ":" + config.recordLog); if(jo.has(jn_enableForest)) config.enableForest = jo.getBoolean(jn_enableForest); else - { - config.reInit = true; config.enableForest = true; - } Log.i(TAG, jn_enableForest + ":" + config.enableForest); if(jo.has(jn_enableFarm)) config.enableFarm = jo.getBoolean(jn_enableFarm); else - { - config.reInit = true; config.enableFarm = true; - } Log.i(TAG, jn_enableFarm + ":" + config.enableFarm); /* forest */ if(jo.has(jn_collectEnergy)) config.collectEnergy = jo.getBoolean(jn_collectEnergy); else - { - config.reInit = true; config.collectEnergy = true; - } Log.i(TAG, jn_collectEnergy + ":" + config.collectEnergy); + if(jo.has(jn_ReturnWater30)) + config.returnWater30 = jo.getInt(jn_ReturnWater30); + else + config.returnWater30 = 0; + Log.i(TAG, jn_ReturnWater30 + ":" + config.returnWater30); + + if(jo.has(jn_ReturnWater20)) + config.returnWater20 = jo.getInt(jn_ReturnWater20); + else + config.returnWater20 = 0; + Log.i(TAG, jn_ReturnWater20 + ":" + config.returnWater20); + + if(jo.has(jn_ReturnWater10)) + config.returnWater10 = jo.getInt(jn_ReturnWater10); + else + config.returnWater10 = 0; + Log.i(TAG, jn_ReturnWater10 + ":" + config.returnWater10); + if(jo.has(jn_helpFriendCollect)) config.helpFriendCollect = jo.getBoolean(jn_helpFriendCollect); else - { - config.reInit = true; config.helpFriendCollect = true; - } Log.i(TAG, jn_helpFriendCollect + ":" + config.helpFriendCollect); config.dontCollectList = new ArrayList<>(); @@ -643,8 +707,7 @@ public static Config json2Config(String json) config.dontCollectList.add(ja.getString(i)); Log.i(TAG, " " + config.dontCollectList.get(i) + ","); } - }else - config.reInit = true; + } config.dontHelpCollectList = new ArrayList<>(); Log.i(TAG, jn_dontHelpCollectList + ":["); @@ -656,16 +719,24 @@ public static Config json2Config(String json) config.dontHelpCollectList.add(ja.getString(i)); Log.i(TAG, " " + config.dontHelpCollectList.get(i) + ","); } - }else - config.reInit = true; + } + + if(jo.has(jn_onTimeCollect)) + config.onTimeCollect = jo.getBoolean(jn_onTimeCollect); + else + config.onTimeCollect = true; + Log.i(TAG, jn_onTimeCollect + ":" + config.onTimeCollect); + + if(jo.has(jn_timeInterval)) + config.timeInterval = jo.getLong(jn_timeInterval); + else + config.timeInterval = 120_000; + Log.i(TAG, jn_timeInterval + ":" + config.timeInterval); if(jo.has(jn_receiveForestTaskAward)) config.receiveForestTaskAward = jo.getBoolean(jn_receiveForestTaskAward); else - { - config.reInit = true; config.receiveForestTaskAward = true; - } Log.i(TAG, jn_receiveForestTaskAward + ":" + config.receiveForestTaskAward); config.waterFriendList = new ArrayList<>(); @@ -678,35 +749,25 @@ public static Config json2Config(String json) config.waterFriendList.add(ja.getString(i)); Log.i(TAG, " " + config.waterFriendList.get(i) + ","); } - }else - config.reInit = true; + } /* farm */ if(jo.has(jn_rewardFriend)) config.rewardFriend = jo.getBoolean(jn_rewardFriend); else - { - config.reInit = true; config.rewardFriend = true; - } Log.i(TAG, jn_rewardFriend + ":" + config.rewardFriend); if(jo.has(jn_sendBackAnimal)) config.sendBackAnimal = jo.getBoolean(jn_sendBackAnimal); else - { - config.reInit = true; config.sendBackAnimal = true; - } Log.i(TAG, jn_sendBackAnimal + ":" + config.sendBackAnimal); if(jo.has(jn_sendType)) config.sendType = SendType.valueOf(jo.getString(jn_sendType)); else - { - config.reInit = true; config.sendType = SendType.HIT; - } Log.i(TAG, jn_sendType + ":" + config.sendType.name()); config.sendTypeExcludeList = new ArrayList<>(); @@ -719,99 +780,62 @@ public static Config json2Config(String json) config.sendTypeExcludeList.add(ja.getString(i)); Log.i(TAG, " " + config.sendTypeExcludeList.get(i) + ","); } - }else - config.reInit = true; + } if(jo.has(jn_recallAnimalType)) config.recallAnimalType = RecallAnimalType.valueOf(jo.getString(jn_recallAnimalType)); else - { - config.reInit = true; config.recallAnimalType = RecallAnimalType.ALWAYS; - } Log.i(TAG, jn_recallAnimalType + ":" + config.recallAnimalType.name()); if(jo.has(jn_receiveFarmToolReward)) config.receiveFarmToolReward = jo.getBoolean(jn_receiveFarmToolReward); else - { - config.reInit = true; config.receiveFarmToolReward = true; - } Log.i(TAG, jn_receiveFarmToolReward + ":" + config.receiveFarmToolReward); if(jo.has(jn_useNewEggTool)) config.useNewEggTool = jo.getBoolean(jn_useNewEggTool); else - { - config.reInit = true; config.useNewEggTool = true; - } Log.i(TAG, jn_useNewEggTool + ":" + config.useNewEggTool); if(jo.has(jn_harvestProduce)) config.harvestProduce = jo.getBoolean(jn_harvestProduce); else - { - config.reInit = true; config.harvestProduce = true; - } Log.i(TAG, jn_harvestProduce + ":" + config.harvestProduce); if(jo.has(jn_donation)) config.donation = jo.getBoolean(jn_donation); else - { - config.reInit = true; config.donation = true; - } Log.i(TAG, jn_donation + ":" + config.donation); if(jo.has(jn_answerQuestion)) config.answerQuestion = jo.getBoolean(jn_answerQuestion); else - { - config.reInit = true; config.answerQuestion = true; - } Log.i(TAG, jn_answerQuestion + ":" + config.answerQuestion); if(jo.has(jn_receiveFarmTaskAward)) config.receiveFarmTaskAward = jo.getBoolean(jn_receiveFarmTaskAward); else - { - config.reInit = true; config.receiveFarmTaskAward = true; - } Log.i(TAG, jn_receiveFarmTaskAward + ":" + config.receiveFarmTaskAward); if(jo.has(jn_feedAnimal)) config.feedAnimal = jo.getBoolean(jn_feedAnimal); else - { - config.reInit = true; config.feedAnimal = true; - } Log.i(TAG, jn_feedAnimal + ":" + config.feedAnimal); if(jo.has(jn_useAccelerateTool)) config.useAccelerateTool = jo.getBoolean(jn_useAccelerateTool); else - { - config.reInit = true; config.useAccelerateTool = true; - } Log.i(TAG, jn_useAccelerateTool + ":" + config.useAccelerateTool); - if(jo.has(jn_notifyFriend)) - config.notifyFriend = jo.getBoolean(jn_notifyFriend); - else - { - config.reInit = true; - config.notifyFriend = true; - } - Log.i(TAG, jn_notifyFriend + ":" + config.notifyFriend); - config.feedFriendAnimalList = new ArrayList<>(); Log.i(TAG, jn_feedFriendAnimalList + ":["); if(jo.has(jn_feedFriendAnimalList)) @@ -822,17 +846,19 @@ public static Config json2Config(String json) config.feedFriendAnimalList.add(ja.getString(i)); Log.i(TAG, " " + config.feedFriendAnimalList.get(i) + ","); } - }else - config.reInit = true; + } + + if(jo.has(jn_notifyFriend)) + config.notifyFriend = jo.getBoolean(jn_notifyFriend); + else + config.notifyFriend = true; + Log.i(TAG, jn_notifyFriend + ":" + config.notifyFriend); /* member */ if(jo.has(jn_receivePoint)) config.receivePoint = jo.getBoolean(jn_receivePoint); else - { - config.reInit = true; config.receivePoint = true; - } Log.i(TAG, jn_receivePoint + ":" + config.receivePoint); }catch(Throwable t) @@ -844,19 +870,13 @@ public static Config json2Config(String json) FileUtils.write2File(json, FileUtils.getBackupFile(FileUtils.getConfigFile())); } config = defInit(); + FileUtils.write2File(config2Json(config), FileUtils.getConfigFile()); } - if(config.reInit) + String formated = config2Json(config); + if(!formated.equals(json)) { - Log.i(TAG, "Reset config.json"); - saveConfigFile(); - }else - { - String formated = config2Json(config); - if(!formated.equals(json)) - { - Log.i(TAG, "Reformat config.json"); - FileUtils.write2File(formated, FileUtils.getConfigFile()); - } + Log.i(TAG, "Reformat config.json"); + FileUtils.write2File(formated, FileUtils.getConfigFile()); } return config; } @@ -881,6 +901,12 @@ public static String config2Json(Config config) /* forest */ jo.put(jn_collectEnergy, config.collectEnergy); + jo.put(jn_ReturnWater30, config.returnWater30); + + jo.put(jn_ReturnWater20, config.returnWater20); + + jo.put(jn_ReturnWater10, config.returnWater10); + jo.put(jn_helpFriendCollect, config.helpFriendCollect); JSONArray ja = new JSONArray(); @@ -897,6 +923,10 @@ public static String config2Json(Config config) } jo.put(jn_dontHelpCollectList, ja); + jo.put(jn_onTimeCollect, config.onTimeCollect); + + jo.put(jn_timeInterval, config.timeInterval); + jo.put(jn_receiveForestTaskAward, config.receiveForestTaskAward); ja = new JSONArray(); @@ -938,8 +968,6 @@ public static String config2Json(Config config) jo.put(jn_useAccelerateTool, config.useAccelerateTool); - jo.put(jn_notifyFriend, config.notifyFriend); - ja = new JSONArray(); for(String s: config.feedFriendAnimalList) { @@ -947,6 +975,8 @@ public static String config2Json(Config config) } jo.put(jn_feedFriendAnimalList, ja); + jo.put(jn_notifyFriend, config.notifyFriend); + /* member */ jo.put(jn_receivePoint, config.receivePoint); diff --git a/app/src/main/java/pansong291/xposed/quickenergy/RpcCall.java b/app/src/main/java/pansong291/xposed/quickenergy/RpcCall.java index d82ffb5..97b58c9 100644 --- a/app/src/main/java/pansong291/xposed/quickenergy/RpcCall.java +++ b/app/src/main/java/pansong291/xposed/quickenergy/RpcCall.java @@ -9,9 +9,9 @@ public class RpcCall private static final String TAG = RpcCall.class.getCanonicalName(); private static Method rpcCallMethod; private static Method getResponseMethod; - public static Object curH5Fragment; +// public static Object curH5Fragment; private static Object curH5PageImpl; - public static Activity h5Activity; + public static Activity h5Activity, loginActivity; public static Object invoke(ClassLoader loader, String args0, String args1) throws Exception { @@ -20,22 +20,22 @@ public static Object invoke(ClassLoader loader, String args0, String args1) thro try { Class rpcClazz = loader.loadClass(ClassMember.com_alipay_mobile_nebulabiz_rpc_H5RpcUtil); - Field aF = curH5Fragment.getClass().getDeclaredField(ClassMember.a); - aF.setAccessible(true); - Object viewHolder = aF.get(curH5Fragment); - Field hF = viewHolder.getClass().getDeclaredField(ClassMember.h); - hF.setAccessible(true); - curH5PageImpl = hF.get(viewHolder); +// Field aF = curH5Fragment.getClass().getDeclaredField(ClassMember.a); +// aF.setAccessible(true); +// Object viewHolder = aF.get(curH5Fragment); +// Field hF = viewHolder.getClass().getDeclaredField(ClassMember.h); +// hF.setAccessible(true); +// curH5PageImpl = hF.get(viewHolder); Class h5PageClazz = loader.loadClass(ClassMember.com_alipay_mobile_h5container_api_H5Page); Class jsonClazz = loader.loadClass(ClassMember.com_alibaba_fastjson_JSONObject); - if(curH5PageImpl != null) - { - rpcCallMethod = rpcClazz.getMethod( - ClassMember.rpcCall, String.class, String.class, String.class, - boolean.class, jsonClazz, String.class, boolean.class, h5PageClazz, - int.class, String.class, boolean.class, int.class); - Log.i(TAG, "get Old RpcCallMethod successfully"); - } +// if(curH5PageImpl != null) +// { + rpcCallMethod = rpcClazz.getMethod( + ClassMember.rpcCall, String.class, String.class, String.class, + boolean.class, jsonClazz, String.class, boolean.class, h5PageClazz, + int.class, String.class, boolean.class, int.class); + Log.i(TAG, "get Old RpcCallMethod successfully"); +// } }catch(Throwable t) { Log.i(TAG, "get Old RpcCallMethod err:"); @@ -45,23 +45,23 @@ public static Object invoke(ClassLoader loader, String args0, String args1) thro if(rpcCallMethod == null) try { - Field aF = curH5Fragment.getClass().getDeclaredField(ClassMember.a); - aF.setAccessible(true); - Object viewHolder = aF.get(curH5Fragment); - Field hF = viewHolder.getClass().getDeclaredField(ClassMember.h); - hF.setAccessible(true); - curH5PageImpl = hF.get(viewHolder); +// Field aF = curH5Fragment.getClass().getDeclaredField(ClassMember.a); +// aF.setAccessible(true); +// Object viewHolder = aF.get(curH5Fragment); +// Field hF = viewHolder.getClass().getDeclaredField(ClassMember.h); +// hF.setAccessible(true); +// curH5PageImpl = hF.get(viewHolder); Class h5PageClazz = loader.loadClass(ClassMember.com_alipay_mobile_h5container_api_H5Page); Class jsonClazz = loader.loadClass(ClassMember.com_alibaba_fastjson_JSONObject); Class rpcClazz = loader.loadClass(ClassMember.com_alipay_mobile_nebulaappproxy_api_rpc_H5RpcUtil); - if(curH5PageImpl != null) - { - rpcCallMethod = rpcClazz.getMethod( - ClassMember.rpcCall, String.class, String.class, String.class, - boolean.class, jsonClazz, String.class, boolean.class, h5PageClazz, - int.class, String.class, boolean.class, int.class, String.class); - Log.i(TAG, "get RpcCallMethod successfully"); - } +// if(curH5PageImpl != null) +// { + rpcCallMethod = rpcClazz.getMethod( + ClassMember.rpcCall, String.class, String.class, String.class, + boolean.class, jsonClazz, String.class, boolean.class, h5PageClazz, + int.class, String.class, boolean.class, int.class, String.class); + Log.i(TAG, "get RpcCallMethod successfully"); +// } }catch(Throwable t) { Log.i(TAG, "get RpcCallMethod err:"); @@ -69,7 +69,7 @@ public static Object invoke(ClassLoader loader, String args0, String args1) thro } } - Log.i(TAG, "rpcCall params count: "+rpcCallMethod.getParameterTypes().length); + Log.i(TAG, "rpcCall params count: " + rpcCallMethod.getParameterTypes().length); switch(rpcCallMethod.getParameterTypes().length) { case 13: diff --git a/app/src/main/java/pansong291/xposed/quickenergy/XposedHook.java b/app/src/main/java/pansong291/xposed/quickenergy/XposedHook.java index ebe977c..2f4342a 100644 --- a/app/src/main/java/pansong291/xposed/quickenergy/XposedHook.java +++ b/app/src/main/java/pansong291/xposed/quickenergy/XposedHook.java @@ -1,23 +1,26 @@ package pansong291.xposed.quickenergy; import android.app.Activity; -import android.app.Application; -import android.content.Context; import android.os.Bundle; +import android.os.PowerManager; 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 java.lang.reflect.Method; -import org.json.JSONObject; +import java.util.Map; +import java.util.Timer; +import java.util.TimerTask; import org.json.JSONArray; +import org.json.JSONObject; +import pansong291.xposed.quickenergy.AntForestNotification; import pansong291.xposed.quickenergy.ui.MainActivity; public class XposedHook implements IXposedHookLoadPackage { - private static final String TAG = XposedHook.class.getCanonicalName(); + private static PowerManager.WakeLock wakeLock; + private static Timer timer; @Override public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable @@ -38,7 +41,8 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { Log.i(TAG, lpparam.packageName); //hookSecurity(lpparam); - hookRpcCall(lpparam); + hookLoginActivity(lpparam.classLoader); + hookRpcCall(lpparam.classLoader); } } @@ -73,28 +77,103 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable } } - private void hookRpcCall(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable + private void hookLoginActivity(final ClassLoader loader) + { + XposedHelpers.findAndHookMethod(Activity.class, ClassMember.onCreate, Bundle.class, new XC_MethodHook() + { + @Override + protected void afterHookedMethod(MethodHookParam param) throws Throwable + { + if(ClassMember.com_eg_android_AlipayGphone_AlipayLogin + .equals(param.thisObject.getClass().getCanonicalName())) + { + Activity activity = (Activity) param.thisObject; + RpcCall.loginActivity = activity; + PowerManager pm = (PowerManager) activity.getSystemService(activity.POWER_SERVICE); + wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, activity.getClass().getName()); + wakeLock.acquire(); + if(Config.onTimeCollect() && timer == null) + { + AntForestNotification.start(activity); + timer = new Timer(true); + timer.scheduleAtFixedRate(new TimerTask() + { + @Override + public void run() + { + AntForest.checkEnergyRanking(loader); + } + }, 0, Config.timeInterval()); + } + } + } + }); + + XposedHelpers.findAndHookMethod(Activity.class, ClassMember.onDestroy, new XC_MethodHook() + { + @Override + protected void afterHookedMethod(MethodHookParam param) throws Throwable + { + if(ClassMember.com_eg_android_AlipayGphone_AlipayLogin + .equals(param.thisObject.getClass().getCanonicalName())) + { + Activity activity = (Activity) param.thisObject; + if(wakeLock != null) + { + wakeLock.release(); + wakeLock = null; + } + if(timer != null) + { + timer.cancel(); + timer = null; + } + } + } + }); + } + + private void hookRpcCall(final ClassLoader loader) { - final ClassLoader loader = lpparam.classLoader; Class clazz = null; +// try +// { +// clazz = loader.loadClass(ClassMember.com_alipay_mobile_nebulacore_ui_H5FragmentManager); +// Class h5FragmentClazz = loader.loadClass(ClassMember.com_alipay_mobile_nebulacore_ui_H5Fragment); +// XposedHelpers.findAndHookMethod(clazz, ClassMember.pushFragment, h5FragmentClazz, +// boolean.class, Bundle.class, boolean.class, boolean.class, new XC_MethodHook() +// { +// @Override +// protected void afterHookedMethod(MethodHookParam param) throws Throwable +// { +// Log.i(TAG, "cur fragment: " + param.args[0]); +// if(RpcCall.curH5Fragment == null && param.args[0] != null) +// RpcCall.curH5Fragment = param.args[0]; +// } +// }); +// Log.i(TAG, "hook " + ClassMember.pushFragment + " successfully"); +// }catch(Throwable t) +// { +// Log.i(TAG, "hook " + ClassMember.pushFragment + " err:"); +// Log.printStackTrace(TAG, t); +// } + try { - clazz = loader.loadClass(ClassMember.com_alipay_mobile_nebulacore_ui_H5FragmentManager); - Class h5FragmentClazz = loader.loadClass(ClassMember.com_alipay_mobile_nebulacore_ui_H5Fragment); - XposedHelpers.findAndHookMethod(clazz, ClassMember.pushFragment, h5FragmentClazz, - boolean.class, Bundle.class, boolean.class, boolean.class, new XC_MethodHook() + clazz = loader.loadClass(ClassMember.com_alipay_mobile_nebulaappproxy_api_rpc_H5AppRpcUpdate); + Class H5PageClazz = loader.loadClass(ClassMember.com_alipay_mobile_h5container_api_H5Page); + XposedHelpers.findAndHookMethod(clazz, ClassMember.matchVersion, H5PageClazz, Map.class, String.class, new XC_MethodHook() { @Override protected void afterHookedMethod(MethodHookParam param) throws Throwable { - Log.i(TAG, "cur fragment: " + param.args[0]); - RpcCall.curH5Fragment = param.args[0]; + param.setResult(false); } }); - Log.i(TAG, "hook " + ClassMember.pushFragment + " successfully"); + Log.i(TAG, "hook " + ClassMember.matchVersion + " successfully"); }catch(Throwable t) { - Log.i(TAG, "hook " + ClassMember.pushFragment + " err:"); + Log.i(TAG, "hook " + ClassMember.matchVersion + " err:"); Log.printStackTrace(TAG, t); } diff --git a/app/src/main/java/pansong291/xposed/quickenergy/ui/EditDialog.java b/app/src/main/java/pansong291/xposed/quickenergy/ui/EditDialog.java new file mode 100644 index 0000000..d5592be --- /dev/null +++ b/app/src/main/java/pansong291/xposed/quickenergy/ui/EditDialog.java @@ -0,0 +1,148 @@ +package pansong291.xposed.quickenergy.ui; + +import android.app.AlertDialog; +import android.content.Context; +import android.content.DialogInterface; +import android.content.DialogInterface.OnClickListener; +import android.widget.EditText; +import android.widget.Toast; +import pansong291.xposed.quickenergy.Config; + +public class EditDialog +{ + private static AlertDialog editDialog; + private static EditText edt; + public enum EditMode + { TIME_INTERVAL, RETURN_WATER_30, RETURN_WATER_20, RETURN_WATER_10 } + private static EditMode mode; + + public static void showReturnWaterDialog(Context c, CharSequence title, EditMode em) + { + mode = em; + try + { + getEditDialog(c, title).show(); + }catch(Throwable t) + { + editDialog = null; + getEditDialog(c, title).show(); + } + editDialog.setTitle(title); + } + + public static void showTimeIntervalDialog(Context c, CharSequence title) + { + mode = EditMode.TIME_INTERVAL; + try + { + getEditDialog(c, title).show(); + }catch(Throwable t) + { + editDialog = null; + getEditDialog(c, title).show(); + } + editDialog.setTitle(title); + } + + private static AlertDialog getEditDialog(Context c, CharSequence title) + { + if(editDialog == null) + { + edt = new EditText(c); + editDialog = new AlertDialog.Builder(c) + .setTitle(title) + .setView(edt) + .setPositiveButton( + "确定", + new OnClickListener() + { + Context context; + + public OnClickListener setData(Context c) + { + context = c; + return this; + } + + @Override + public void onClick(DialogInterface p1, int p2) + { + switch(mode) + { + case TIME_INTERVAL: + try + { + long l = Long.parseLong(edt.getText().toString()); + if(l >= 0) + { + Config.setTimeInterval(l); + Toast.makeText(context, "需要重启支付宝生效", 1).show(); + } + }catch(Throwable t) + {} + break; + + case RETURN_WATER_30: + try + { + int i = Integer.parseInt(edt.getText().toString()); + if(i >= 0) + { + Config.setReturnWater30(i); + } + }catch(Throwable t) + {} + break; + + case RETURN_WATER_20: + try + { + int i = Integer.parseInt(edt.getText().toString()); + if(i >= 0) + { + Config.setReturnWater20(i); + } + }catch(Throwable t) + {} + break; + + case RETURN_WATER_10: + try + { + int i = Integer.parseInt(edt.getText().toString()); + if(i >= 0) + { + Config.setReturnWater10(i); + } + }catch(Throwable t) + {} + break; + } + } + }.setData(c)) + .create(); + } + String str = ""; + switch(mode) + { + case TIME_INTERVAL: + str = String.valueOf(Config.timeInterval()); + break; + + case RETURN_WATER_30: + str = String.valueOf(Config.returnWater30()); + break; + + case RETURN_WATER_20: + str = String.valueOf(Config.returnWater20()); + break; + + case RETURN_WATER_10: + str = String.valueOf(Config.returnWater10()); + break; + } + edt.setText(str); + return editDialog; + } + +} 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 1826356..b459292 100644 --- a/app/src/main/java/pansong291/xposed/quickenergy/ui/ListAdapter.java +++ b/app/src/main/java/pansong291/xposed/quickenergy/ui/ListAdapter.java @@ -1,6 +1,7 @@ package pansong291.xposed.quickenergy.ui; import android.content.Context; +import android.graphics.Color; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -9,7 +10,6 @@ import android.widget.TextView; import java.util.List; import pansong291.xposed.quickenergy.R; -import android.graphics.Color; public class ListAdapter extends BaseAdapter { 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 359015b..d05751e 100644 --- a/app/src/main/java/pansong291/xposed/quickenergy/ui/ListDialog.java +++ b/app/src/main/java/pansong291/xposed/quickenergy/ui/ListDialog.java @@ -11,10 +11,10 @@ import android.widget.Button; import android.widget.EditText; import android.widget.ListView; +import android.widget.Toast; import java.util.List; import pansong291.xposed.quickenergy.Config; import pansong291.xposed.quickenergy.R; -import android.widget.Toast; public class ListDialog { diff --git a/app/src/main/java/pansong291/xposed/quickenergy/ui/MainActivity.java b/app/src/main/java/pansong291/xposed/quickenergy/ui/MainActivity.java index 1770550..4a178a2 100644 --- a/app/src/main/java/pansong291/xposed/quickenergy/ui/MainActivity.java +++ b/app/src/main/java/pansong291/xposed/quickenergy/ui/MainActivity.java @@ -1,11 +1,15 @@ package pansong291.xposed.quickenergy.ui; import android.app.Activity; +import android.content.ComponentName; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; +import android.content.pm.PackageManager; import android.net.Uri; import android.os.Bundle; +import android.view.Menu; +import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.widget.CheckBox; @@ -14,20 +18,16 @@ import pansong291.xposed.quickenergy.Config; import pansong291.xposed.quickenergy.R; import pansong291.xposed.quickenergy.RpcCall; -import android.view.Menu; -import android.view.MenuItem; -import android.content.pm.PackageManager; -import android.content.ComponentName; public class MainActivity extends Activity { CheckBox cb_immediateEffect, cb_recordLog, cb_enableForest, cb_enableFarm, cb_collectEnergy, cb_helpFriendCollect, - cb_receiveForestTaskAward, cb_rewardFriend, cb_sendBackAnimal, - cb_receiveFarmToolReward, cb_useNewEggTool, cb_harvestProduce, - cb_donation, cb_answerQuestion, cb_receiveFarmTaskAward, - cb_feedAnimal, cb_useAccelerateTool, cb_notifyFriend, - cb_receivePoint; + cb_onTimeCollect, cb_receiveForestTaskAward, cb_rewardFriend, + cb_sendBackAnimal, cb_receiveFarmToolReward, cb_useNewEggTool, + cb_harvestProduce, cb_donation, cb_answerQuestion, + cb_receiveFarmTaskAward, cb_feedAnimal, cb_useAccelerateTool, + cb_notifyFriend, cb_receivePoint; @Override protected void onCreate(Bundle savedInstanceState) @@ -45,6 +45,7 @@ protected void onCreate(Bundle savedInstanceState) cb_enableFarm = findViewById(R.id.cb_enableFarm); cb_collectEnergy = findViewById(R.id.cb_collectEnergy); cb_helpFriendCollect = findViewById(R.id.cb_helpFriendCollect); + cb_onTimeCollect = findViewById(R.id.cb_onTimeCollect); cb_receiveForestTaskAward = findViewById(R.id.cb_receiveForestTaskAward); cb_rewardFriend = findViewById(R.id.cb_rewardFriend); cb_sendBackAnimal = findViewById(R.id.cb_sendBackAnimal); @@ -70,6 +71,7 @@ protected void onResume() cb_enableFarm.setChecked(Config.enableFarm()); cb_collectEnergy.setChecked(Config.collectEnergy()); cb_helpFriendCollect.setChecked(Config.helpFriendCollect()); + cb_onTimeCollect.setChecked(Config.onTimeCollect()); cb_receiveForestTaskAward.setChecked(Config.receiveForestTaskAward()); cb_rewardFriend.setChecked(Config.rewardFriend()); cb_sendBackAnimal.setChecked(Config.sendBackAnimal()); @@ -115,6 +117,18 @@ public void onClick(View v) Config.setCollectEnergy(cb.isChecked()); break; + case R.id.btn_returnWater30: + EditDialog.showReturnWaterDialog(this, btn.getText(), EditDialog.EditMode.RETURN_WATER_30); + break; + + case R.id.btn_returnWater20: + EditDialog.showReturnWaterDialog(this, btn.getText(), EditDialog.EditMode.RETURN_WATER_20); + break; + + case R.id.btn_returnWater10: + EditDialog.showReturnWaterDialog(this, btn.getText(), EditDialog.EditMode.RETURN_WATER_10); + break; + case R.id.cb_helpFriendCollect: Config.setHelpFriendCollect(cb.isChecked()); break; @@ -127,6 +141,15 @@ public void onClick(View v) ListDialog.show(this, btn.getText(), Config.getDontHelpCollectList()); break; + case R.id.cb_onTimeCollect: + Config.setOnTimeCollect(cb.isChecked()); + Toast.makeText(this, "需要重启支付宝生效", 1).show(); + break; + + case R.id.btn_timeInterval: + EditDialog.showTimeIntervalDialog(this, btn.getText()); + break; + case R.id.cb_receiveForestTaskAward: Config.setReceiveForestTaskAward(cb.isChecked()); break; diff --git a/app/src/main/res/layout/include_main.xml b/app/src/main/res/layout/include_main.xml index 61b5d3d..ec80142 100644 --- a/app/src/main/res/layout/include_main.xml +++ b/app/src/main/res/layout/include_main.xml @@ -86,6 +86,42 @@ android:minHeight="50dp" android:id="@+id/cb_collectEnergy"/> +