|
@@ -3,25 +3,29 @@ package com.atmob.task.adapter;
|
|
|
import android.annotation.SuppressLint;
|
|
import android.annotation.SuppressLint;
|
|
|
import android.os.Bundle;
|
|
import android.os.Bundle;
|
|
|
import android.text.TextUtils;
|
|
import android.text.TextUtils;
|
|
|
-import android.util.Log;
|
|
|
|
|
import android.view.LayoutInflater;
|
|
import android.view.LayoutInflater;
|
|
|
import android.view.View;
|
|
import android.view.View;
|
|
|
import android.view.ViewGroup;
|
|
import android.view.ViewGroup;
|
|
|
-import android.widget.TextView;
|
|
|
|
|
import android.widget.Toast;
|
|
import android.widget.Toast;
|
|
|
|
|
|
|
|
-import androidx.annotation.IdRes;
|
|
|
|
|
import androidx.annotation.NonNull;
|
|
import androidx.annotation.NonNull;
|
|
|
import androidx.annotation.Nullable;
|
|
import androidx.annotation.Nullable;
|
|
|
import androidx.recyclerview.widget.AsyncListDiffer;
|
|
import androidx.recyclerview.widget.AsyncListDiffer;
|
|
|
import androidx.recyclerview.widget.DiffUtil;
|
|
import androidx.recyclerview.widget.DiffUtil;
|
|
|
import androidx.recyclerview.widget.RecyclerView;
|
|
import androidx.recyclerview.widget.RecyclerView;
|
|
|
|
|
|
|
|
|
|
+import com.atmob.http.BaseHttpObserver;
|
|
|
|
|
+import com.atmob.manager.HttpFailManager;
|
|
|
import com.atmob.task.AppTaskAdapter;
|
|
import com.atmob.task.AppTaskAdapter;
|
|
|
|
|
+import com.atmob.task.AppTaskView.AppTaskViewHolder;
|
|
|
import com.atmob.task.bean.AdAppInfoData;
|
|
import com.atmob.task.bean.AdAppInfoData;
|
|
|
import com.atmob.task.bean.AppTaskBean;
|
|
import com.atmob.task.bean.AppTaskBean;
|
|
|
import com.atmob.task.bean.AppTaskDownloadWrapper;
|
|
import com.atmob.task.bean.AppTaskDownloadWrapper;
|
|
|
|
|
+import com.atmob.task.bean.AppTaskUpdateRequest;
|
|
|
|
|
+import com.atmob.task.bean.AppTaskUpdateResponse;
|
|
|
import com.atmob.task.data.LocalData;
|
|
import com.atmob.task.data.LocalData;
|
|
|
|
|
+import com.atmob.task.data.NetworkClient;
|
|
|
|
|
+import com.atmob.task.utils.ATLog;
|
|
|
import com.atmob.task.utils.AppTaskEvent;
|
|
import com.atmob.task.utils.AppTaskEvent;
|
|
|
import com.atmob.task.utils.InstallFaultToleranceUtils;
|
|
import com.atmob.task.utils.InstallFaultToleranceUtils;
|
|
|
import com.atmob.task.utils.RetrofitDownloader;
|
|
import com.atmob.task.utils.RetrofitDownloader;
|
|
@@ -45,7 +49,7 @@ import atmob.io.reactivex.rxjava3.disposables.CompositeDisposable;
|
|
|
import atmob.io.reactivex.rxjava3.disposables.Disposable;
|
|
import atmob.io.reactivex.rxjava3.disposables.Disposable;
|
|
|
import atmob.io.reactivex.rxjava3.schedulers.Schedulers;
|
|
import atmob.io.reactivex.rxjava3.schedulers.Schedulers;
|
|
|
|
|
|
|
|
-public class AppTaskItemAdapter extends RecyclerView.Adapter<AppTaskItemAdapter.AppTaskItemViewHolder> {
|
|
|
|
|
|
|
+public class AppTaskItemAdapter<T extends AppTaskViewHolder> extends RecyclerView.Adapter<T> {
|
|
|
|
|
|
|
|
private static final String TAG = AppTaskItemAdapter.class.getSimpleName();
|
|
private static final String TAG = AppTaskItemAdapter.class.getSimpleName();
|
|
|
|
|
|
|
@@ -62,32 +66,34 @@ public class AppTaskItemAdapter extends RecyclerView.Adapter<AppTaskItemAdapter.
|
|
|
|
|
|
|
|
private final CompositeDisposable compositeDisposable;
|
|
private final CompositeDisposable compositeDisposable;
|
|
|
|
|
|
|
|
|
|
+ private RecyclerView recyclerView;
|
|
|
|
|
+
|
|
|
private OnItemActionCallback onItemActionCallback;
|
|
private OnItemActionCallback onItemActionCallback;
|
|
|
|
|
|
|
|
- private AppTaskAdapter appTaskAdapter;
|
|
|
|
|
|
|
+ private AppTaskAdapter<T> appTaskAdapter;
|
|
|
|
|
|
|
|
- public AppTaskItemAdapter(AppTaskAdapter appTaskAdapter, CompositeDisposable compositeDisposable) {
|
|
|
|
|
|
|
+ public AppTaskItemAdapter(RecyclerView recyclerView, AppTaskAdapter<T> appTaskAdapter, CompositeDisposable compositeDisposable) {
|
|
|
this.compositeDisposable = compositeDisposable;
|
|
this.compositeDisposable = compositeDisposable;
|
|
|
this.appTaskAdapter = appTaskAdapter;
|
|
this.appTaskAdapter = appTaskAdapter;
|
|
|
|
|
+ this.recyclerView = recyclerView;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@NonNull
|
|
@NonNull
|
|
|
@Override
|
|
@Override
|
|
|
- public AppTaskItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
|
|
|
|
|
|
+ public T onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
|
|
if (appTaskAdapter == null) {
|
|
if (appTaskAdapter == null) {
|
|
|
throw new IllegalStateException("appTaskAdapter can't not be null.");
|
|
throw new IllegalStateException("appTaskAdapter can't not be null.");
|
|
|
}
|
|
}
|
|
|
- View view = appTaskAdapter.onCreateView(LayoutInflater.from(parent.getContext()), parent);
|
|
|
|
|
- AppTaskItemViewHolder appTaskItemViewHolder = new AppTaskItemViewHolder(view);
|
|
|
|
|
- bindClickListener();
|
|
|
|
|
- return appTaskItemViewHolder;
|
|
|
|
|
|
|
+ T appTaskViewHolder = appTaskAdapter.onCreateViewHolder(LayoutInflater.from(parent.getContext()), parent);
|
|
|
|
|
+ bindClickListener(appTaskViewHolder);
|
|
|
|
|
+ return appTaskViewHolder;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- private void bindClickListener() {
|
|
|
|
|
|
|
+ private void bindClickListener(T appTaskViewHolder) {
|
|
|
if (appTaskAdapter == null) {
|
|
if (appTaskAdapter == null) {
|
|
|
throw new IllegalStateException("appTaskAdapter can't not be null.");
|
|
throw new IllegalStateException("appTaskAdapter can't not be null.");
|
|
|
}
|
|
}
|
|
|
- View[] clickViews = appTaskAdapter.getClickViews();
|
|
|
|
|
|
|
+ View[] clickViews = appTaskAdapter.getClickViews(appTaskViewHolder);
|
|
|
if (clickViews == null || clickViews.length == 0) {
|
|
if (clickViews == null || clickViews.length == 0) {
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
@@ -99,7 +105,7 @@ public class AppTaskItemAdapter extends RecyclerView.Adapter<AppTaskItemAdapter.
|
|
|
|
|
|
|
|
@SuppressLint("ResourceType")
|
|
@SuppressLint("ResourceType")
|
|
|
@Override
|
|
@Override
|
|
|
- public void onBindViewHolder(@NonNull AppTaskItemViewHolder holder, int position) {
|
|
|
|
|
|
|
+ public void onBindViewHolder(@NonNull T holder, int position) {
|
|
|
if (appTaskAdapter == null) {
|
|
if (appTaskAdapter == null) {
|
|
|
throw new IllegalStateException("appTaskAdapter can't not be null.");
|
|
throw new IllegalStateException("appTaskAdapter can't not be null.");
|
|
|
}
|
|
}
|
|
@@ -111,18 +117,18 @@ public class AppTaskItemAdapter extends RecyclerView.Adapter<AppTaskItemAdapter.
|
|
|
// app icon
|
|
// app icon
|
|
|
appTaskAdapter.onRenderAppIcon(holder, appTaskDownloadWrapper, appTaskDownloadWrapper.getAppIcon());
|
|
appTaskAdapter.onRenderAppIcon(holder, appTaskDownloadWrapper, appTaskDownloadWrapper.getAppIcon());
|
|
|
// click view
|
|
// click view
|
|
|
- setTag2ClickViews(appTaskDownloadWrapper);
|
|
|
|
|
|
|
+ setTag2ClickViews(holder, appTaskDownloadWrapper);
|
|
|
// task status
|
|
// task status
|
|
|
appTaskAdapter.onRenderTaskStatus(holder, appTaskDownloadWrapper, appTaskDownloadWrapper.getTaskStatus());
|
|
appTaskAdapter.onRenderTaskStatus(holder, appTaskDownloadWrapper, appTaskDownloadWrapper.getTaskStatus());
|
|
|
// download progress
|
|
// download progress
|
|
|
appTaskAdapter.onRenderDownloadProgress(holder, appTaskDownloadWrapper.getTotal(), appTaskDownloadWrapper.getProgress());
|
|
appTaskAdapter.onRenderDownloadProgress(holder, appTaskDownloadWrapper.getTotal(), appTaskDownloadWrapper.getProgress());
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- private void setTag2ClickViews(AppTaskDownloadWrapper appTaskDownloadWrapper) {
|
|
|
|
|
|
|
+ private void setTag2ClickViews(T holder, AppTaskDownloadWrapper appTaskDownloadWrapper) {
|
|
|
if (appTaskAdapter == null) {
|
|
if (appTaskAdapter == null) {
|
|
|
throw new IllegalStateException("appTaskAdapter can't not be null.");
|
|
throw new IllegalStateException("appTaskAdapter can't not be null.");
|
|
|
}
|
|
}
|
|
|
- View[] clickViews = appTaskAdapter.getClickViews();
|
|
|
|
|
|
|
+ View[] clickViews = appTaskAdapter.getClickViews(holder);
|
|
|
if (clickViews != null && clickViews.length > 0) {
|
|
if (clickViews != null && clickViews.length > 0) {
|
|
|
for (View clickView : clickViews) {
|
|
for (View clickView : clickViews) {
|
|
|
clickView.setTag(appTaskDownloadWrapper);
|
|
clickView.setTag(appTaskDownloadWrapper);
|
|
@@ -131,18 +137,20 @@ public class AppTaskItemAdapter extends RecyclerView.Adapter<AppTaskItemAdapter.
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
- public void onBindViewHolder(@NonNull AppTaskItemViewHolder holder, int position, @NonNull List<Object> payloads) {
|
|
|
|
|
|
|
+ public void onBindViewHolder(@NonNull T holder, int position, @NonNull List<Object> payloads) {
|
|
|
if (appTaskAdapter == null) {
|
|
if (appTaskAdapter == null) {
|
|
|
throw new IllegalStateException("appTaskAdapter can't not be null.");
|
|
throw new IllegalStateException("appTaskAdapter can't not be null.");
|
|
|
}
|
|
}
|
|
|
AppTaskDownloadWrapper appTaskDownloadWrapper = asyncListDiffer.getCurrentList().get(position);
|
|
AppTaskDownloadWrapper appTaskDownloadWrapper = asyncListDiffer.getCurrentList().get(position);
|
|
|
- setTag2ClickViews(appTaskDownloadWrapper);
|
|
|
|
|
|
|
+ setTag2ClickViews(holder, appTaskDownloadWrapper);
|
|
|
if (payloads.size() == 0) {
|
|
if (payloads.size() == 0) {
|
|
|
onBindViewHolder(holder, position);
|
|
onBindViewHolder(holder, position);
|
|
|
} else {
|
|
} else {
|
|
|
for (Object payload : payloads) {
|
|
for (Object payload : payloads) {
|
|
|
Bundle bundle = (Bundle) payload;
|
|
Bundle bundle = (Bundle) payload;
|
|
|
- for (String key : bundle.keySet()) {
|
|
|
|
|
|
|
+ Iterator<String> iterator = bundle.keySet().iterator();
|
|
|
|
|
+ while (iterator.hasNext()) {
|
|
|
|
|
+ String key = iterator.next();
|
|
|
switch (key) {
|
|
switch (key) {
|
|
|
case "payload_app_name":
|
|
case "payload_app_name":
|
|
|
appTaskAdapter.onRenderAppName(holder, appTaskDownloadWrapper, bundle.getString(key));
|
|
appTaskAdapter.onRenderAppName(holder, appTaskDownloadWrapper, bundle.getString(key));
|
|
@@ -154,11 +162,11 @@ public class AppTaskItemAdapter extends RecyclerView.Adapter<AppTaskItemAdapter.
|
|
|
appTaskAdapter.onDownloadStatusChanged(holder, bundle.getBoolean(key));
|
|
appTaskAdapter.onDownloadStatusChanged(holder, bundle.getBoolean(key));
|
|
|
break;
|
|
break;
|
|
|
case "payload_progress":
|
|
case "payload_progress":
|
|
|
- case "payload_total":
|
|
|
|
|
if (bundle.get("payload_progress") == null || bundle.get("payload_total") == null) {
|
|
if (bundle.get("payload_progress") == null || bundle.get("payload_total") == null) {
|
|
|
break;
|
|
break;
|
|
|
}
|
|
}
|
|
|
appTaskAdapter.onRenderDownloadProgress(holder, bundle.getLong("payload_total"), bundle.getLong("payload_progress"));
|
|
appTaskAdapter.onRenderDownloadProgress(holder, bundle.getLong("payload_total"), bundle.getLong("payload_progress"));
|
|
|
|
|
+ iterator.remove();
|
|
|
break;
|
|
break;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -177,18 +185,15 @@ public class AppTaskItemAdapter extends RecyclerView.Adapter<AppTaskItemAdapter.
|
|
|
}
|
|
}
|
|
|
switch (appTaskDownloadWrapper.getTaskStatus()) {
|
|
switch (appTaskDownloadWrapper.getTaskStatus()) {
|
|
|
case AppTaskBean.AppTaskStatus.Initial:
|
|
case AppTaskBean.AppTaskStatus.Initial:
|
|
|
- Log.d(TAG, "onAppTaskItemClick: toInstall.");
|
|
|
|
|
- toInstall(appTaskDownloadWrapper);
|
|
|
|
|
- break;
|
|
|
|
|
case AppTaskBean.AppTaskStatus.Installed:
|
|
case AppTaskBean.AppTaskStatus.Installed:
|
|
|
toOpen(appTaskDownloadWrapper);
|
|
toOpen(appTaskDownloadWrapper);
|
|
|
- Log.d(TAG, "onAppTaskItemClick: toOpen.");
|
|
|
|
|
|
|
+ ATLog.d(TAG, "onAppTaskItemClick: toOpen.");
|
|
|
break;
|
|
break;
|
|
|
case AppTaskBean.AppTaskStatus.Opened:
|
|
case AppTaskBean.AppTaskStatus.Opened:
|
|
|
if (onItemActionCallback != null) {
|
|
if (onItemActionCallback != null) {
|
|
|
onItemActionCallback.getReward(appTaskDownloadWrapper);
|
|
onItemActionCallback.getReward(appTaskDownloadWrapper);
|
|
|
}
|
|
}
|
|
|
- Log.d(TAG, "onAppTaskItemClick: getReward.");
|
|
|
|
|
|
|
+ ATLog.d(TAG, "onAppTaskItemClick: getReward.");
|
|
|
break;
|
|
break;
|
|
|
case AppTaskBean.AppTaskStatus.Finish:
|
|
case AppTaskBean.AppTaskStatus.Finish:
|
|
|
//ignore
|
|
//ignore
|
|
@@ -219,15 +224,13 @@ public class AppTaskItemAdapter extends RecyclerView.Adapter<AppTaskItemAdapter.
|
|
|
if (AppInfoUtils.isExistPackage(Utils.getContext(), appPkgName)) {
|
|
if (AppInfoUtils.isExistPackage(Utils.getContext(), appPkgName)) {
|
|
|
AppTaskEvent.report(AppTaskEvent.ATE_LAUNCH);
|
|
AppTaskEvent.report(AppTaskEvent.ATE_LAUNCH);
|
|
|
AppInfoUtils.launchApp(appPkgName);
|
|
AppInfoUtils.launchApp(appPkgName);
|
|
|
- if (onItemActionCallback != null) {
|
|
|
|
|
- onItemActionCallback.updateStatus(appTaskDownloadWrapper.getId(), AppTaskBean.AppTaskStatus.Opened);
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ updateStatus(appTaskDownloadWrapper.getId(), AppTaskBean.AppTaskStatus.Opened);
|
|
|
removeFromCheckList(appTaskDownloadWrapper.getId());
|
|
removeFromCheckList(appTaskDownloadWrapper.getId());
|
|
|
- Log.d(TAG, "toOpen: app exist, open it.");
|
|
|
|
|
|
|
+ ATLog.d(TAG, "toOpen: app exist, open it.");
|
|
|
} else {
|
|
} else {
|
|
|
AppTaskEvent.report(AppTaskEvent.ATE_DOWNLOAD);
|
|
AppTaskEvent.report(AppTaskEvent.ATE_DOWNLOAD);
|
|
|
toDownload(appTaskDownloadWrapper);
|
|
toDownload(appTaskDownloadWrapper);
|
|
|
- Log.d(TAG, "toOpen: app not exist, try to download.");
|
|
|
|
|
|
|
+ ATLog.d(TAG, "toOpen: app not exist, try to download.");
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -243,7 +246,7 @@ public class AppTaskItemAdapter extends RecyclerView.Adapter<AppTaskItemAdapter.
|
|
|
String apkPath = adAppInfoData.getApkPath();
|
|
String apkPath = adAppInfoData.getApkPath();
|
|
|
File file = new File(apkPath);
|
|
File file = new File(apkPath);
|
|
|
file = file.exists() && file.isFile() ? file : new File("");
|
|
file = file.exists() && file.isFile() ? file : new File("");
|
|
|
- Log.d(TAG, "toInstall: sdk apk path ==> " + apkPath + ", file available ==> " + (!"".equals(file.getPath())));
|
|
|
|
|
|
|
+ ATLog.d(TAG, "toInstall: sdk apk path ==> " + apkPath + ", file available ==> " + (!"".equals(file.getPath())));
|
|
|
return file;
|
|
return file;
|
|
|
})
|
|
})
|
|
|
.map(apkFile -> {
|
|
.map(apkFile -> {
|
|
@@ -254,7 +257,7 @@ public class AppTaskItemAdapter extends RecyclerView.Adapter<AppTaskItemAdapter.
|
|
|
if (downloadFile.exists() && downloadFile.isFile() && !checkFileOccupy(downloadFile)) {
|
|
if (downloadFile.exists() && downloadFile.isFile() && !checkFileOccupy(downloadFile)) {
|
|
|
apkFile = downloadFile;
|
|
apkFile = downloadFile;
|
|
|
}
|
|
}
|
|
|
- Log.d(TAG, "toInstall: download apk path ==> " + downloadFile.getPath() + ", file available ==> " + (!"".equals(apkFile.getPath())));
|
|
|
|
|
|
|
+ ATLog.d(TAG, "toInstall: download apk path ==> " + downloadFile.getPath() + ", file available ==> " + (!"".equals(apkFile.getPath())));
|
|
|
}
|
|
}
|
|
|
if ("".equals(apkFile.getPath())) {
|
|
if ("".equals(apkFile.getPath())) {
|
|
|
throw new Exception("none available apk file");
|
|
throw new Exception("none available apk file");
|
|
@@ -275,7 +278,7 @@ public class AppTaskItemAdapter extends RecyclerView.Adapter<AppTaskItemAdapter.
|
|
|
InstallFaultToleranceUtils.installApk(Utils.getContext(), file, () -> {
|
|
InstallFaultToleranceUtils.installApk(Utils.getContext(), file, () -> {
|
|
|
AppTaskEvent.report(AppTaskEvent.ATE_DOWNLOAD);
|
|
AppTaskEvent.report(AppTaskEvent.ATE_DOWNLOAD);
|
|
|
toDownload(appTaskDownloadWrapper);
|
|
toDownload(appTaskDownloadWrapper);
|
|
|
- Log.d(TAG, "toInstall: apk install failed, try to download");
|
|
|
|
|
|
|
+ ATLog.d(TAG, "toInstall: apk install failed, try to download");
|
|
|
});
|
|
});
|
|
|
addToCheckList(appTaskDownloadWrapper);
|
|
addToCheckList(appTaskDownloadWrapper);
|
|
|
}
|
|
}
|
|
@@ -285,7 +288,7 @@ public class AppTaskItemAdapter extends RecyclerView.Adapter<AppTaskItemAdapter.
|
|
|
// local file not exist, try to download
|
|
// local file not exist, try to download
|
|
|
AppTaskEvent.report(AppTaskEvent.ATE_DOWNLOAD);
|
|
AppTaskEvent.report(AppTaskEvent.ATE_DOWNLOAD);
|
|
|
toDownload(appTaskDownloadWrapper);
|
|
toDownload(appTaskDownloadWrapper);
|
|
|
- Log.d(TAG, "toInstall: None available apk file, try to download, msg ==> " + e.getMessage());
|
|
|
|
|
|
|
+ ATLog.d(TAG, "toInstall: None available apk file, try to download, msg ==> " + e.getMessage());
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
@@ -303,8 +306,8 @@ public class AppTaskItemAdapter extends RecyclerView.Adapter<AppTaskItemAdapter.
|
|
|
appTaskDownloadWrapper.setDownloading(true);
|
|
appTaskDownloadWrapper.setDownloading(true);
|
|
|
Bundle bundle = new Bundle();
|
|
Bundle bundle = new Bundle();
|
|
|
bundle.putBoolean("payload_downloading", true);
|
|
bundle.putBoolean("payload_downloading", true);
|
|
|
- notifyItemChanged(asyncListDiffer.getCurrentList().indexOf(appTaskDownloadWrapper), bundle);
|
|
|
|
|
- Log.d(TAG, "toDownload onStart: download start, task ==> " + appTaskDownloadWrapper);
|
|
|
|
|
|
|
+ notifyItem(appTaskDownloadWrapper, bundle);
|
|
|
|
|
+ ATLog.d(TAG, "toDownload onStart: download start, task ==> " + appTaskDownloadWrapper);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
@@ -316,7 +319,7 @@ public class AppTaskItemAdapter extends RecyclerView.Adapter<AppTaskItemAdapter.
|
|
|
bundle.putBoolean("payload_downloading", true);
|
|
bundle.putBoolean("payload_downloading", true);
|
|
|
bundle.putLong("payload_progress", progress);
|
|
bundle.putLong("payload_progress", progress);
|
|
|
bundle.putLong("payload_total", total);
|
|
bundle.putLong("payload_total", total);
|
|
|
- notifyItemChanged(asyncListDiffer.getCurrentList().indexOf(appTaskDownloadWrapper), bundle);
|
|
|
|
|
|
|
+ notifyItem(appTaskDownloadWrapper, bundle);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
@@ -326,8 +329,8 @@ public class AppTaskItemAdapter extends RecyclerView.Adapter<AppTaskItemAdapter.
|
|
|
addToCheckList(appTaskDownloadWrapper);
|
|
addToCheckList(appTaskDownloadWrapper);
|
|
|
Bundle bundle = new Bundle();
|
|
Bundle bundle = new Bundle();
|
|
|
bundle.putBoolean("payload_downloading", false);
|
|
bundle.putBoolean("payload_downloading", false);
|
|
|
- notifyItemChanged(asyncListDiffer.getCurrentList().indexOf(appTaskDownloadWrapper), bundle);
|
|
|
|
|
- Log.d(TAG, "toDownload onComplete: download complete, task ==> " + appTaskDownloadWrapper);
|
|
|
|
|
|
|
+ notifyItem(appTaskDownloadWrapper, bundle);
|
|
|
|
|
+ ATLog.d(TAG, "toDownload onComplete: download complete, task ==> " + appTaskDownloadWrapper);
|
|
|
AppTaskEvent.report(AppTaskEvent.ATE_DOWNLOAD_SUCCESS);
|
|
AppTaskEvent.report(AppTaskEvent.ATE_DOWNLOAD_SUCCESS);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -337,17 +340,24 @@ public class AppTaskItemAdapter extends RecyclerView.Adapter<AppTaskItemAdapter.
|
|
|
Toast.makeText(Utils.getContext(), "下载失败,请重试", Toast.LENGTH_SHORT).show();
|
|
Toast.makeText(Utils.getContext(), "下载失败,请重试", Toast.LENGTH_SHORT).show();
|
|
|
Bundle bundle = new Bundle();
|
|
Bundle bundle = new Bundle();
|
|
|
bundle.putBoolean("payload_downloading", false);
|
|
bundle.putBoolean("payload_downloading", false);
|
|
|
- notifyItemChanged(asyncListDiffer.getCurrentList().indexOf(appTaskDownloadWrapper), bundle);
|
|
|
|
|
- Log.d(TAG, "toDownload onError: download error, msg ==> " + message + ", task ==> " + appTaskDownloadWrapper);
|
|
|
|
|
|
|
+ notifyItem(appTaskDownloadWrapper, bundle);
|
|
|
|
|
+ ATLog.d(TAG, "toDownload onError: download error, msg ==> " + message + ", task ==> " + appTaskDownloadWrapper);
|
|
|
}
|
|
}
|
|
|
});
|
|
});
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ private void notifyItem(AppTaskDownloadWrapper item, Bundle payload) {
|
|
|
|
|
+ recyclerView.setHasFixedSize(true);
|
|
|
|
|
+ int position = asyncListDiffer.getCurrentList().indexOf(item);
|
|
|
|
|
+ notifyItemChanged(position, payload);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
private boolean checkFileOccupy(File downloadFile) {
|
|
private boolean checkFileOccupy(File downloadFile) {
|
|
|
return !downloadFile.renameTo(downloadFile);
|
|
return !downloadFile.renameTo(downloadFile);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
public void update(ArrayList<AppTaskBean> appTaskBeans) {
|
|
public void update(ArrayList<AppTaskBean> appTaskBeans) {
|
|
|
|
|
+ ATLog.d(TAG, "update() called with: appTaskBeans = [" + appTaskBeans + "]");
|
|
|
ArrayList<AppTaskDownloadWrapper> appTaskDownloadWrappers = new ArrayList<>();
|
|
ArrayList<AppTaskDownloadWrapper> appTaskDownloadWrappers = new ArrayList<>();
|
|
|
Observable.fromIterable(appTaskBeans)
|
|
Observable.fromIterable(appTaskBeans)
|
|
|
.filter(appTaskBean -> appTaskBean.getTaskStatus() != AppTaskBean.AppTaskStatus.Finish)
|
|
.filter(appTaskBean -> appTaskBean.getTaskStatus() != AppTaskBean.AppTaskStatus.Finish)
|
|
@@ -357,10 +367,12 @@ public class AppTaskItemAdapter extends RecyclerView.Adapter<AppTaskItemAdapter.
|
|
|
@Override
|
|
@Override
|
|
|
public void onSubscribe(@atmob.io.reactivex.rxjava3.annotations.NonNull Disposable d) {
|
|
public void onSubscribe(@atmob.io.reactivex.rxjava3.annotations.NonNull Disposable d) {
|
|
|
compositeDisposable.add(d);
|
|
compositeDisposable.add(d);
|
|
|
|
|
+ ATLog.d(TAG, "onSubscribe() called with: d = [" + d + "]");
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
public void onNext(@atmob.io.reactivex.rxjava3.annotations.NonNull AppTaskDownloadWrapper appTaskDownloadWrapper) {
|
|
public void onNext(@atmob.io.reactivex.rxjava3.annotations.NonNull AppTaskDownloadWrapper appTaskDownloadWrapper) {
|
|
|
|
|
+ ATLog.d(TAG, "onNext() called with: appTaskDownloadWrapper = [" + appTaskDownloadWrapper + "]");
|
|
|
if (RetrofitDownloader.isActiveTaskExist(appTaskDownloadWrapper.getAppLink())) {
|
|
if (RetrofitDownloader.isActiveTaskExist(appTaskDownloadWrapper.getAppLink())) {
|
|
|
toDownload(appTaskDownloadWrapper);
|
|
toDownload(appTaskDownloadWrapper);
|
|
|
}
|
|
}
|
|
@@ -369,20 +381,23 @@ public class AppTaskItemAdapter extends RecyclerView.Adapter<AppTaskItemAdapter.
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
public void onError(@atmob.io.reactivex.rxjava3.annotations.NonNull Throwable e) {
|
|
public void onError(@atmob.io.reactivex.rxjava3.annotations.NonNull Throwable e) {
|
|
|
- Log.e(TAG, "onError: AppTaskBean transform to AppTaskDownloadWrapper error", e);
|
|
|
|
|
|
|
+ ATLog.e(TAG, "onError: AppTaskBean transform to AppTaskDownloadWrapper error", e);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
public void onComplete() {
|
|
public void onComplete() {
|
|
|
- Log.d(TAG, "onComplete: app task list update success, total length ==> " + appTaskDownloadWrappers.size());
|
|
|
|
|
|
|
+ ATLog.d(TAG, "onComplete: app task list update success, total length ==> " + appTaskDownloadWrappers.size());
|
|
|
Collections.reverse(appTaskDownloadWrappers);
|
|
Collections.reverse(appTaskDownloadWrappers);
|
|
|
|
|
+ if (appTaskDownloadWrappers.size() != asyncListDiffer.getCurrentList().size()) {
|
|
|
|
|
+ recyclerView.setHasFixedSize(false);
|
|
|
|
|
+ }
|
|
|
asyncListDiffer.submitList(appTaskDownloadWrappers);
|
|
asyncListDiffer.submitList(appTaskDownloadWrappers);
|
|
|
}
|
|
}
|
|
|
});
|
|
});
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
public void checkAppExist() {
|
|
public void checkAppExist() {
|
|
|
- Log.d(TAG, "app resume, start checkAppExist()");
|
|
|
|
|
|
|
+ ATLog.d(TAG, "app resume, start checkAppExist()");
|
|
|
Completable.fromAction(() -> {
|
|
Completable.fromAction(() -> {
|
|
|
Iterator<Map.Entry<Long, String>> iterator = potentialInstalledList.entrySet().iterator();
|
|
Iterator<Map.Entry<Long, String>> iterator = potentialInstalledList.entrySet().iterator();
|
|
|
while (iterator.hasNext()) {
|
|
while (iterator.hasNext()) {
|
|
@@ -396,21 +411,17 @@ public class AppTaskItemAdapter extends RecyclerView.Adapter<AppTaskItemAdapter.
|
|
|
boolean existPackage = AppInfoUtils.isExistPackage(Utils.getContext(), appTaskPackageName);
|
|
boolean existPackage = AppInfoUtils.isExistPackage(Utils.getContext(), appTaskPackageName);
|
|
|
if (existPackage) {
|
|
if (existPackage) {
|
|
|
if (FORCE_OPEN) {
|
|
if (FORCE_OPEN) {
|
|
|
- Log.d(TAG, "checkAppExist: app exist, open it. (id ==> " + appTaskId + ", packageName ==> " + appTaskPackageName + ")");
|
|
|
|
|
|
|
+ ATLog.d(TAG, "checkAppExist: app exist, open it. (id ==> " + appTaskId + ", packageName ==> " + appTaskPackageName + ")");
|
|
|
AppTaskEvent.report(AppTaskEvent.ATE_CONFIRM_INSTALLED_LAUNCH);
|
|
AppTaskEvent.report(AppTaskEvent.ATE_CONFIRM_INSTALLED_LAUNCH);
|
|
|
AppInfoUtils.launchApp(appTaskPackageName);
|
|
AppInfoUtils.launchApp(appTaskPackageName);
|
|
|
- if (onItemActionCallback != null) {
|
|
|
|
|
- onItemActionCallback.updateStatus(appTaskId, AppTaskBean.AppTaskStatus.Opened);
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ updateStatus(appTaskId, AppTaskBean.AppTaskStatus.Opened);
|
|
|
} else {
|
|
} else {
|
|
|
- Log.d(TAG, "checkAppExist: app exist, just report. (id ==> " + appTaskId + ", packageName ==> " + appTaskPackageName + ")");
|
|
|
|
|
- if (onItemActionCallback != null) {
|
|
|
|
|
- onItemActionCallback.updateStatus(appTaskId, AppTaskBean.AppTaskStatus.Installed);
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ ATLog.d(TAG, "checkAppExist: app exist, just report. (id ==> " + appTaskId + ", packageName ==> " + appTaskPackageName + ")");
|
|
|
|
|
+ updateStatus(appTaskId, AppTaskBean.AppTaskStatus.Installed);
|
|
|
}
|
|
}
|
|
|
iterator.remove();
|
|
iterator.remove();
|
|
|
} else {
|
|
} else {
|
|
|
- Log.d(TAG, "checkAppExist: app not exist. (id ==> " + appTaskId + ", packageName ==> " + appTaskPackageName + ")");
|
|
|
|
|
|
|
+ ATLog.d(TAG, "checkAppExist: app not exist. (id ==> " + appTaskId + ", packageName ==> " + appTaskPackageName + ")");
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
})
|
|
})
|
|
@@ -439,12 +450,12 @@ public class AppTaskItemAdapter extends RecyclerView.Adapter<AppTaskItemAdapter.
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
potentialInstalledList.put(appTaskBeanGet.getId(), appTaskBeanGet.getAppPkgName());
|
|
potentialInstalledList.put(appTaskBeanGet.getId(), appTaskBeanGet.getAppPkgName());
|
|
|
- Log.d(TAG, "addToCheckList() called with: appTaskBeanGet = [" + appTaskBeanGet + "]");
|
|
|
|
|
|
|
+ ATLog.d(TAG, "addToCheckList() called with: appTaskBeanGet = [" + appTaskBeanGet + "]");
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
private void removeFromCheckList(long id) {
|
|
private void removeFromCheckList(long id) {
|
|
|
potentialInstalledList.remove(id);
|
|
potentialInstalledList.remove(id);
|
|
|
- Log.d(TAG, "removeFromCheckList() called with: id = [" + id + "]");
|
|
|
|
|
|
|
+ ATLog.d(TAG, "removeFromCheckList() called with: id = [" + id + "]");
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
public void setOnItemActionCallback(OnItemActionCallback onItemActionCallback) {
|
|
public void setOnItemActionCallback(OnItemActionCallback onItemActionCallback) {
|
|
@@ -453,8 +464,9 @@ public class AppTaskItemAdapter extends RecyclerView.Adapter<AppTaskItemAdapter.
|
|
|
|
|
|
|
|
public void release() {
|
|
public void release() {
|
|
|
RetrofitDownloader.clearAllObserver();
|
|
RetrofitDownloader.clearAllObserver();
|
|
|
|
|
+ recyclerView = null;
|
|
|
appTaskAdapter = null;
|
|
appTaskAdapter = null;
|
|
|
- Log.d(TAG, "release: clear all observer.");
|
|
|
|
|
|
|
+ ATLog.d(TAG, "release: clear all observer.");
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
public void triggerFirstTask() {
|
|
public void triggerFirstTask() {
|
|
@@ -465,27 +477,48 @@ public class AppTaskItemAdapter extends RecyclerView.Adapter<AppTaskItemAdapter.
|
|
|
}
|
|
}
|
|
|
if (appTaskDownloadWrapper.getTaskStatus() != AppTaskBean.AppTaskStatus.Opened && !appTaskDownloadWrapper.isDownloading()) {
|
|
if (appTaskDownloadWrapper.getTaskStatus() != AppTaskBean.AppTaskStatus.Opened && !appTaskDownloadWrapper.isDownloading()) {
|
|
|
onAppTaskItemClick(appTaskDownloadWrapper);
|
|
onAppTaskItemClick(appTaskDownloadWrapper);
|
|
|
- Log.d(TAG, "triggerFirstTask: task ==> " + appTaskDownloadWrapper);
|
|
|
|
|
|
|
+ ATLog.d(TAG, "triggerFirstTask: task ==> " + appTaskDownloadWrapper);
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- Log.d(TAG, "triggerFirstTask: not has available task.");
|
|
|
|
|
|
|
+ ATLog.d(TAG, "triggerFirstTask: not has available task.");
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- public static class AppTaskItemViewHolder extends RecyclerView.ViewHolder {
|
|
|
|
|
|
|
+ private void updateStatus(long id, int targetStatus) {
|
|
|
|
|
+ NetworkClient.api().updateAppTaskStatus(new AppTaskUpdateRequest(id, targetStatus))
|
|
|
|
|
+ .compose(RxSchedulersUtils.observableIO2Main())
|
|
|
|
|
+ .subscribe(new BaseHttpObserver<AppTaskUpdateResponse>() {
|
|
|
|
|
|
|
|
- public AppTaskItemViewHolder(@NonNull View itemView) {
|
|
|
|
|
- super(itemView);
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public void onGotDisposable(Disposable disposable) {
|
|
|
|
|
+ compositeDisposable.add(disposable);
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- public void setText(@IdRes int id, CharSequence text) {
|
|
|
|
|
- TextView textView = itemView.findViewById(id);
|
|
|
|
|
- textView.setText(text);
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public void onSuccess(AppTaskUpdateResponse data) {
|
|
|
|
|
+ List<AppTaskDownloadWrapper> currentList = asyncListDiffer.getCurrentList();
|
|
|
|
|
+ Iterator<AppTaskDownloadWrapper> iterator = currentList.iterator();
|
|
|
|
|
+ while (iterator.hasNext()) {
|
|
|
|
|
+ AppTaskDownloadWrapper next = iterator.next();
|
|
|
|
|
+ if (next == null) {
|
|
|
|
|
+ continue;
|
|
|
|
|
+ }
|
|
|
|
|
+ if (next.getId() == id) {
|
|
|
|
|
+ int i = currentList.indexOf(next);
|
|
|
|
|
+ iterator.remove();
|
|
|
|
|
+ notifyItemRemoved(i);
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ ATLog.d(TAG, "app task status update success, id ==> " + id + ", target status ==> " + targetStatus);
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- public void setVisible(@IdRes int id, boolean visible) {
|
|
|
|
|
- itemView.findViewById(id).setVisibility(visible ? View.VISIBLE : View.GONE);
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public void onFailed(int code, String msg) {
|
|
|
|
|
+ HttpFailManager.handleHttpFail(code, msg);
|
|
|
|
|
+ ATLog.e(TAG, "app task status update failed, code ==> " + code + ", msg ==> " + msg);
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
private static class DiffCallback extends DiffUtil.ItemCallback<AppTaskDownloadWrapper> {
|
|
private static class DiffCallback extends DiffUtil.ItemCallback<AppTaskDownloadWrapper> {
|
|
@@ -540,8 +573,6 @@ public class AppTaskItemAdapter extends RecyclerView.Adapter<AppTaskItemAdapter.
|
|
|
public interface OnItemActionCallback {
|
|
public interface OnItemActionCallback {
|
|
|
void onClick(AppTaskBean appTaskBean);
|
|
void onClick(AppTaskBean appTaskBean);
|
|
|
|
|
|
|
|
- void updateStatus(long id, int targetStatus);
|
|
|
|
|
-
|
|
|
|
|
void getReward(AppTaskBean appTaskBean);
|
|
void getReward(AppTaskBean appTaskBean);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|