Просмотр исходного кода

任务详情添加缓存机制

zengjiebin лет назад: 7
Родитель
Сommit
b73b01674d

+ 3 - 2
app/src/main/java/com/kfzs/duanduan/fragment/FgtSmallSheep.java

@@ -360,6 +360,7 @@ public class FgtSmallSheep extends BaseCompatFragment implements SmallSheepContr
         releaseEtyLists.clear();
         tryMakeMoneyAdp.clear();
         tryMakeMoneyAdp.addType(1);
+        tryMakeMoneyAdp.addPresenter(tryMakeMoneyPresenter);
         for (int i = 0; i < 2; i++) {
             tryMakeMoneyAdp.add(RecyleObj.make(RecyleType.NONE, null));
         }
@@ -563,10 +564,10 @@ public class FgtSmallSheep extends BaseCompatFragment implements SmallSheepContr
     }
 
     @Override
-    public void giveUpTaskSuccesView(Object o) {
+    public void giveUpTaskSuccesView(Object object) {
         G.showToast("取消任务成功");
         DataUtil.getInstance().reInitAcceptedTaskList();
-
+        initOtherTaskList();
     }
 
     @Override

+ 1 - 0
app/src/main/java/com/sheep/gamegroup/model/util/AutoTaskListUtil.java

@@ -9,6 +9,7 @@ import com.sheep.gamegroup.model.entity.BaseMessage;
 import com.sheep.gamegroup.model.entity.TaskAcceptedEty;
 import com.sheep.gamegroup.model.entity.TaskEty;
 import com.sheep.gamegroup.model.entity.TaskReleaseEty;
+import com.sheep.gamegroup.util.DataUtil;
 import com.sheep.gamegroup.util.LogUtil;
 import com.sheep.jiuyan.samllsheep.SheepApp;
 

+ 3 - 3
app/src/main/java/com/sheep/gamegroup/presenter/TryMakeMoneyPresenter.java

@@ -98,8 +98,8 @@ public class TryMakeMoneyPresenter implements TryMakeMoneyContract.Presenter {
     }
 
     @Override
-    public void giveUpTask(int id) {
-        apiService.giveUpTask(id)
+    public void giveUpTask(final int acceptedId) {
+        apiService.giveUpTask(acceptedId)
                 .subscribeOn(Schedulers.io())
                 .observeOn(AndroidSchedulers.mainThread())
                 .subscribe(new SheepSubscriber<BaseMessage>(SheepApp.mContext) {
@@ -110,7 +110,7 @@ public class TryMakeMoneyPresenter implements TryMakeMoneyContract.Presenter {
 
                     @Override
                     public void onNext(BaseMessage baseMessage) {
-                        view.giveUpTaskSuccesView(baseMessage);
+                        view.giveUpTaskSuccesView(acceptedId);
                     }
                 });
     }

+ 71 - 5
app/src/main/java/com/sheep/gamegroup/util/DataUtil.java

@@ -10,6 +10,7 @@ import com.sheep.gamegroup.model.api.BaseMessageConverter;
 import com.sheep.gamegroup.model.entity.BaseMessage;
 import com.sheep.gamegroup.model.entity.TaskAcceptedEty;
 import com.sheep.gamegroup.model.entity.UserEntity;
+import com.sheep.gamegroup.model.util.AutoTaskListUtil;
 import com.sheep.gamegroup.model.util.SheepSubscriber;
 import com.sheep.jiuyan.samllsheep.BuildConfig;
 import com.sheep.jiuyan.samllsheep.SheepApp;
@@ -23,6 +24,7 @@ import java.util.ArrayList;
 import java.util.List;
 
 import rx.android.schedulers.AndroidSchedulers;
+import rx.functions.Action1;
 import rx.schedulers.Schedulers;
 
 /**
@@ -179,7 +181,7 @@ public class DataUtil {
     }
 
     /**
-     * 设置缓存数据的时间
+     * 设置key的saveTime缓存时间为当前时间
      * @param key
      */
     public void setSaveTime(String key) {
@@ -188,7 +190,7 @@ public class DataUtil {
     }
 
     /**
-     * 获取缓存数据的时间
+     * 获取缓存的key的saveTime时间
      * @param key
      * @return
      */
@@ -197,6 +199,23 @@ public class DataUtil {
         return NumberFormatUtils.parseLong(aCache.getAsString(key + "saveTime"));
     }
     /**
+     * 设置taskAcceptedEty的saveTime缓存时间为time
+     * @param taskAcceptedEty
+     */
+    public void saveTaskAcceptedSaveTime(TaskAcceptedEty taskAcceptedEty) {
+        ACache aCache = ACache.get(SheepApp.getInstance());
+        aCache.put(TaskAcceptedEty.class.getSimpleName()+taskAcceptedEty.getId() + "saveTime", String.valueOf(taskAcceptedEty.getEnd_time()));
+    }
+    /**
+     * 获取taskAcceptedEty的saveTime缓存时间为
+     * @param taskAcceptedEty
+     */
+    public long getTaskAcceptedSaveTime(TaskAcceptedEty taskAcceptedEty) {
+        ACache aCache = ACache.get(SheepApp.getInstance());
+        return NumberFormatUtils.parseLong(aCache.getAsString(TaskAcceptedEty.class.getSimpleName()+taskAcceptedEty.getId() + "saveTime"));
+    }
+
+    /**
      * 获取缓存数据的时间
      * @param key
      * @return
@@ -229,24 +248,40 @@ public class DataUtil {
     }
     //刷新数据
     public void reInitAcceptedTaskList(){
+        reInitAcceptedTaskList(null);
+    }
+    //刷新数据
+    public void reInitAcceptedTaskList(final Action1<BaseMessage> action1){
         SheepApp.getInstance().getNetComponent().getApiService().returnTask(3)
                         .subscribeOn(Schedulers.io())
                         .observeOn(AndroidSchedulers.mainThread())
                         .subscribe(new SheepSubscriber<BaseMessage>(SheepApp.getInstance()) {
                             @Override
                             public void onNext(BaseMessage baseMessage) {
-                                DataUtil.getInstance().setSaveTime(ApiKey.new_run_task(3));
-                                reloadAcceptedTaskList(baseMessage.getDataList(TaskAcceptedEty.class));
+                                reloadAcceptedTaskListAndSaveTime(baseMessage.getDataList(TaskAcceptedEty.class));
+                                AutoTaskListUtil.getInstance().loadList(baseMessage.getDataList(TaskAcceptedEty.class));
                                 EventBus.getDefault().post(new BigEvent().setEventTypes(EventTypes.ONFRESH_FGT_FAMLLSHEEP));
+                                if(action1 != null)
+                                    action1.call(baseMessage);
                             }
 
                             @Override
                             public void onError(BaseMessage baseMessage) {
                                 clearAcceptedTaskList();
+                                if(action1 != null)
+                                    action1.call(null);
                             }
                         });
     }
 
+    public void reloadAcceptedTaskListAndSaveTime(List<TaskAcceptedEty> acceptedTaskList) {
+        setSaveTime(ApiKey.new_run_task(3));
+        clearAcceptedTaskList();
+        for (TaskAcceptedEty taskAcceptedEty : acceptedTaskList) {
+            saveTaskAcceptedSaveTime(taskAcceptedEty);
+            addAcceptedTask(taskAcceptedEty);
+        }
+    }
     public void reloadAcceptedTaskList(List<TaskAcceptedEty> acceptedTaskList) {
         clearAcceptedTaskList();
         for (TaskAcceptedEty taskAcceptedEty : acceptedTaskList) {
@@ -289,7 +324,8 @@ public class DataUtil {
             ListUtil.removeItem(taskList, new ListUtil.CallBack<TaskAcceptedEty, Boolean>() {
                 @Override
                 public Boolean call(TaskAcceptedEty taskAcceptedEty) {
-                    long newEndTime = taskAcceptedEty.getEnd_time() - (System.currentTimeMillis() - saveTime) / 1000;
+                    long endTime = getTaskAcceptedSaveTime(taskAcceptedEty);
+                    long newEndTime = endTime - (System.currentTimeMillis() - saveTime) / 1000;
                     if (newEndTime < 1) {//时间到了,删除该任务
                         return true;
                     }
@@ -317,5 +353,35 @@ public class DataUtil {
         return gameTaskList;
     }
 
+    /**
+     * 根据releaseTaskId来获取对应的正在进行的任务
+     * @param releaseTaskId
+     * @return
+     */
+    public TaskAcceptedEty getTaskAcceptedTaskByReleaseTaskId(int releaseTaskId) {
+        List<TaskAcceptedEty> allTaskAcceptedTaskList = getAllTaskAcceptedTaskList();
+        if(allTaskAcceptedTaskList != null){
+            for (TaskAcceptedEty taskAcceptedEty : allTaskAcceptedTaskList) {
+                if(taskAcceptedEty != null && taskAcceptedEty.getRelease_task() != null && taskAcceptedEty.getRelease_task().getId() == releaseTaskId)
+                    return taskAcceptedEty;
+            }
+        }
+        return null;
+    }
+
+    public TaskAcceptedEty removeAcceptedTask(final int acceptedId) {
+        List<TaskAcceptedEty>  removeList= ListUtil.removeItem(allTaskAcceptedTaskList, new ListUtil.CallBack<TaskAcceptedEty, Boolean>() {
+            @Override
+            public Boolean call(TaskAcceptedEty taskAcceptedEty) {
+                return taskAcceptedEty == null || taskAcceptedEty.getId() == acceptedId;
+            }
+        });
+        if(ListUtil.isEmpty(removeList)){
+            return null;
+        }
+        clearCache(ApiKey.new_run_task(3));
+        return removeList.get(0);
+    }
+
     //-----------------------------------------进行任务部分-----------------------------------------------------结束
 }

+ 3 - 2
app/src/main/java/com/sheep/gamegroup/util/ListUtil.java

@@ -87,9 +87,9 @@ public class ListUtil {
         return list;
     }
 
-    public static <T> void removeItem(List<T> list, CallBack<T, Boolean> callBack) {
+    public static <T> List<T> removeItem(List<T> list, CallBack<T, Boolean> callBack) {
         if(isEmpty(list)){
-            return;
+            return null;
         }
         List<T> removeList = emptyList();
         for (T t : list) {
@@ -97,6 +97,7 @@ public class ListUtil {
                 removeList.add(t);
         }
         list.removeAll(removeList);
+        return removeList;
     }
 
     public static interface CallBack<I, R>{

+ 11 - 10
app/src/main/java/com/sheep/gamegroup/util/SysAppUtil.java

@@ -246,16 +246,17 @@ public class SysAppUtil {
                 .map(new Func1<Integer, Integer>() {
                     @Override
                     public Integer call(Integer integer) {
-                        int result = -1;
-                        Runtime runtime = Runtime.getRuntime();
-                        try {
-                            Process p = runtime.exec("ping -c 1 -w 2 www.baidu.com");//-c 1,表示只发送一个icmp echo_request 包  -w 1 表示等待1s
-                            result = p.waitFor();
-                            LogUtil.println("ping", "Process:"+result);
-                        } catch (Exception e) {
-                            e.printStackTrace();
-                        }
-                        return result;
+//                        int result = -1;
+//                        Runtime runtime = Runtime.getRuntime();
+//                        try {
+//                            Process p = runtime.exec("ping -c 1 -w 2 www.baidu.com");//-c 1,表示只发送一个icmp echo_request 包  -w 1 表示等待1s
+//                            result = p.waitFor();
+//                            LogUtil.println("ping", "Process:"+result);
+//                        } catch (Exception e) {
+//                            e.printStackTrace();
+//                        }
+//                        return result;
+                        return 0;
                     }
                 })
                 .subscribeOn(Schedulers.io())

+ 45 - 32
app/src/main/java/com/sheep/gamegroup/view/activity/TaskDetailAct.java

@@ -24,8 +24,6 @@ import com.arialyy.aria.core.Aria;
 import com.arialyy.aria.core.download.DownloadTarget;
 import com.arialyy.aria.core.download.DownloadTask;
 import com.arialyy.aria.core.inf.IEntity;
-import com.bumptech.glide.Glide;
-import com.bumptech.glide.request.RequestOptions;
 import com.kfzs.duanduan.datashare.provider.download.DownLoadInfo;
 import com.kfzs.duanduan.event.BigEvent;
 import com.kfzs.duanduan.event.EventTypes;
@@ -52,6 +50,7 @@ import com.sheep.gamegroup.presenter.TaskDetailContract;
 import com.sheep.gamegroup.presenter.TaskDetailPresenter;
 import com.sheep.gamegroup.usage.AppUsageManager;
 import com.sheep.gamegroup.util.CommonUtil;
+import com.sheep.gamegroup.util.DataUtil;
 import com.sheep.gamegroup.util.DeviceUtil;
 import com.sheep.gamegroup.util.GlideImageLoader;
 import com.sheep.gamegroup.util.Jump2View;
@@ -72,6 +71,7 @@ import com.sheep.jiuyan.samllsheep.utils.G;
 import com.sheep.jiuyan.samllsheep.utils.PackageUtil;
 import com.sheep.jiuyan.samllsheep.utils.TitleBarUtils;
 
+import org.afinal.simplecache.ApiKey;
 import org.greenrobot.eventbus.EventBus;
 
 import java.util.ArrayList;
@@ -179,7 +179,7 @@ public class TaskDetailAct extends AbsChooseImageActivity implements TaskDetailC
     //接口获取
     private TaskAcceptedEty gettaskAcceptedEty;
 
-    private int taskId = -1;
+    private int releaseTaskId = -1;
     private String game_id;
     private int game_type = -1;
 
@@ -206,10 +206,10 @@ public class TaskDetailAct extends AbsChooseImageActivity implements TaskDetailC
         activity = this;
         btn_show = getIntent().getBooleanExtra("btn_show", false);
         isFromTaskList = getIntent().getBooleanExtra("is_from_task_list", false);
-        taskId = getIntent().getIntExtra("task_id", -1);
+        releaseTaskId = getIntent().getIntExtra("task_id", -1);
         game_id = getIntent().getStringExtra("game_id");
         game_type = getIntent().getIntExtra("game_type", -1);
-        LogUtil.println("TaskDetailAct", "btn_show =", btn_show, "isFromTaskList =", isFromTaskList, "taskId =", taskId, "game_id =", game_id, "game_type =", game_type);
+        LogUtil.println("TaskDetailAct", "btn_show =", btn_show, "isFromTaskList =", isFromTaskList, "taskId =", releaseTaskId, "game_id =", game_id, "game_type =", game_type);
         DaggerTaskDetailComponent.builder()
                 .netComponent(SheepApp.get(activity).getNetComponent())
                 .taskDetailModule(new TaskDetailModule(this))
@@ -233,9 +233,9 @@ public class TaskDetailAct extends AbsChooseImageActivity implements TaskDetailC
 
     @Override
     public void initData() {
-        if (taskId != -1 && !isGetTaskDesc) {
+        if (releaseTaskId != -1 && !isGetTaskDesc) {
             isGetTaskDesc = true;
-            accepteTaskDetail(taskId);
+            accepteTaskDetail(releaseTaskId);
             return;
         }
     }
@@ -626,7 +626,7 @@ public class TaskDetailAct extends AbsChooseImageActivity implements TaskDetailC
                     }
                     break;
                 case R.id.detail_share_friend_tv:
-                    Jump2View.getInstance().tryShare(activity,"task_desc_url", "task_id", taskId);
+                    Jump2View.getInstance().tryShare(activity,"task_desc_url", "task_id", releaseTaskId);
                     break;
             }
         } catch (Exception e) {
@@ -844,7 +844,6 @@ public class TaskDetailAct extends AbsChooseImageActivity implements TaskDetailC
      * 领取任务
      */
     private void acceptedTask() {
-        hideProgress();
         showProgress(true);
         JSONObject object = new JSONObject();
         object.put("device_id", DeviceUtil.getDeviceId(activity));
@@ -864,12 +863,23 @@ public class TaskDetailAct extends AbsChooseImageActivity implements TaskDetailC
 
                     @Override
                     public void onNext(BaseMessage baseMessage) {
-                        hideProgress();
-                        initData();
+                        DataUtil.getInstance().reInitAcceptedTaskList(new Action1<BaseMessage>() {
+                            @Override
+                            public void call(BaseMessage baseMessage) {
+                                hideProgress();
+                                if(baseMessage != null) {
+                                    gettaskAcceptedEty = DataUtil.getInstance().getTaskAcceptedTaskByReleaseTaskId(releaseTaskId);
+                                    taskReleaseEty = gettaskAcceptedEty.getRelease_task();
+                                    taskReleaseEty.setIs_running(true);
+                                    taskReleaseEty.getTask().setRelease_task_id(taskReleaseEty.getId());
+                                    CommonUtil.getInstance().setTAskEnty(taskReleaseEty.getTask());
+                                    empty_view.setVisibility(View.GONE);
+                                    initWigget();
+                                    isGetTaskDesc = false;
+                                }
+                            }
+                        });
 
-                        taskReleaseEty.getTask().setRelease_task_id(taskReleaseEty.getId());
-                        CommonUtil.getInstance().setTAskEnty(taskReleaseEty.getTask());
-//                        EventBus.getDefault().post(new BigEvent().setEventTypes(EventTypes.ONFRESH_TRYMAKEMANY_PAGE));
                     }
                 });
         UMConfigUtils.onEvent(UMConfigUtils.Event.TASK_ACCEPT);
@@ -972,9 +982,9 @@ public class TaskDetailAct extends AbsChooseImageActivity implements TaskDetailC
     private boolean isGetTaskDesc = false;
 
     public void freshData() {
-        if (taskId != -1 && !isGetTaskDesc && !isFresh) {
+        if (releaseTaskId != -1 && !isGetTaskDesc && !isFresh) {
             isGetTaskDesc = true;
-            accepteTaskDetail(taskId);
+            accepteTaskDetail(releaseTaskId);
         }
     }
 
@@ -1161,22 +1171,25 @@ public class TaskDetailAct extends AbsChooseImageActivity implements TaskDetailC
     /**
      * 接受任务详情
      */
-    private void accepteTaskDetail(int id){
-        showProgress();
-        CommonUtil.getInstance()
-                .getTaskAllDetail(id, new Action1<BaseMessage>() {
-                    @Override
-                    public void call(BaseMessage baseMessage) {
-                        presenter.taskDesc(taskId);
-                        try{
-                            if(baseMessage.getCode() == 0)
-                                gettaskAcceptedEty = baseMessage.getData(TaskAcceptedEty.class);
-
-                        }catch (Exception e){
-                            e.printStackTrace();
-                        }
-                    }
-                });
+    private void accepteTaskDetail(int releaseTaskId){
+        gettaskAcceptedEty = DataUtil.getInstance().getTaskAcceptedTaskByReleaseTaskId(releaseTaskId);
+        if(gettaskAcceptedEty == null){//不是正在进行的任务
+            taskReleaseEty = DataUtil.getInstance().getCacheResult(ApiKey.releaseTaskDesc(releaseTaskId), TaskReleaseEty.class);
+            if(taskReleaseEty == null) {//没有缓存的任务详情
+                showProgress();
+                presenter.taskDesc(releaseTaskId);
+            } else {//获取到缓存的任务详情
+                empty_view.setVisibility(View.GONE);
+                initWigget();
+                isGetTaskDesc = false;
+            }
+        } else {//是正在运行的任务
+            taskReleaseEty = gettaskAcceptedEty.getRelease_task();
+            taskReleaseEty.setIs_running(true);
+            empty_view.setVisibility(View.GONE);
+            initWigget();
+            isGetTaskDesc = false;
+        }
     }
 
     @Override

+ 4 - 0
app/src/main/java/org/afinal/simplecache/ApiKey.java

@@ -53,5 +53,9 @@ public class ApiKey {
     public static String advertisements(int type){
         return "app/advertising/advertisements?type="+type;
     }
+    //获取任务详情
+    public static String releaseTaskDesc(int releaseTaskId){
+        return String.format(Locale.CHINA, "app/release_task/%d/desc", releaseTaskId);
+    }
 
 }

+ 4 - 2
app/src/main/res/layout/task_detail_layout.xml

@@ -18,7 +18,7 @@
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:orientation="vertical">
-        <ScrollView
+        <android.support.v4.widget.NestedScrollView
             android:layout_width="match_parent"
             android:layout_height="0dp"
             android:layout_weight="1"
@@ -26,6 +26,8 @@
             <LinearLayout
                 android:layout_width="match_parent"
                 android:layout_height="match_parent"
+                android:focusable="true"
+                android:focusableInTouchMode="true"
                 android:orientation="vertical">
 
                 <RelativeLayout
@@ -335,7 +337,7 @@
                 <include
                     layout="@layout/taskdetail_item_supplement_explain"/>
             </LinearLayout>
-        </ScrollView>
+        </android.support.v4.widget.NestedScrollView>
 
 
         <LinearLayout