package com.xiaomi.xms.sales.loader; import android.content.Context; import android.os.AsyncTask; import android.text.TextUtils; import com.xiaomi.xms.sales.ShopApp; import com.xiaomi.xms.sales.loader.BaseResult.ResultStatus; import com.xiaomi.xms.sales.model.PhoneModelInfo; import com.xiaomi.xms.sales.model.ProductInfo; import com.xiaomi.xms.sales.model.Tags; import com.xiaomi.xms.sales.request.HostManager; import com.xiaomi.xms.sales.request.HostManager.Parameters; import com.xiaomi.xms.sales.request.Request; import com.xiaomi.xms.sales.util.Constants; import com.xiaomi.xms.sales.util.JsonUtil; import com.xiaomi.xms.sales.util.Utils; import com.xiaomi.xms.sales.xmsf.account.LoginManager; import org.json.JSONException; import org.json.JSONObject; import java.util.ArrayList; import java.util.List; public class ProductLoader extends BasePageLoader<ProductLoader.Result> { private static final String TAG = "ProductLoader"; private final String CACHE_KEY = "product"; private String mCategoryId; private String mPhoneModel = ""; private boolean mNeedPhoneModel; private int mPageSIze; public static final String SORT_DEFAULT = ""; public static final String SORT_TIME = "1"; public static final String SORT_PRICE_DESC = "10"; public static final String SORT_PRICE_ASC = "8"; public static final String SORT_COMMENT = "3"; private String mSortType = SORT_DEFAULT; public ProductLoader(Context context, String categoryId) { super(context); mCategoryId = categoryId; mNeedPhoneModel = true; } public static final class Result extends BaseResult { public ArrayList<ProductInfo> mProductInfos; public ArrayList<PhoneModelInfo> mPhoneModelInfos; public String mCateName; public Result() { mProductInfos = new ArrayList<ProductInfo>(); mPhoneModelInfos = new ArrayList<PhoneModelInfo>(); } @Override public int getCount() { return mProductInfos == null ? 0 : mProductInfos.size(); } private void addList(ArrayList<ProductInfo> alist) { if (alist != null) { mProductInfos.addAll(alist); } } @Override public BaseResult shallowClone() { Result newResult = new Result(); newResult.mProductInfos = mProductInfos; newResult.mPhoneModelInfos = mPhoneModelInfos; newResult.mCateName = mCateName; return newResult; } } public void setNeedPhoneModelTask(boolean need) { mNeedPhoneModel = need; } @Override protected String getCacheKey() { return CACHE_KEY + mCategoryId + "," + mPhoneModel + "," + mSortType; } @Override protected void initTaskList(List<AsyncTask<Void, Void, Result>> tasks) { if (mNeedDatabase) { DatabaseTask task = getDatabaseTask(); if (task != null) { tasks.add(task); } } if (mNeedPhoneModel) { tasks.add(new PhoneModelUpdateTask()); } tasks.add(new ProductUpdateTask()); } private class ProductUpdateTask extends PageUpdateLTask { @Override protected Request getRequest(int page) { Request request = new Request(HostManager.URL_XMS_SALE_API); JSONObject jsonObject = new JSONObject(); try { jsonObject.put(Tags.XMSAPI.USERID, LoginManager.getInstance().getUserId()); jsonObject.put("cateId", mCategoryId); jsonObject.put(Parameters.Keys.PAGE_INDEX, String.valueOf(page)); jsonObject.put(Parameters.Keys.PAGE_SIZE, String.valueOf(Parameters.Values.PAGESIZE_VALUE)); jsonObject.put(Parameters.Keys.ADAPT_PHONE, mPhoneModel); jsonObject.put("sort_type", mSortType); jsonObject.put("type", ""); jsonObject.put("on_sale", ""); jsonObject.put("price_from", ""); jsonObject.put("price_to", ""); jsonObject.put("orgId", Utils.Preference.getStringPref(ShopApp.getContext(), Constants.Account.PREF_USER_ORGID, "")); String data = JsonUtil.creatRequestJson(HostManager.Method.METHOD_GOODSLISTBYCATEID, jsonObject); if (!TextUtils.isEmpty(data)) { request.addParam(Tags.RequestKey.DATA, data); } } catch (JSONException e) { e.printStackTrace(); } return request; } @Override protected Result merge(Result oldResult, Result newResult) { Result result = new Result(); if (oldResult.mProductInfos != null) { result.addList(oldResult.mProductInfos); } if (newResult.mProductInfos != null) { result.addList(newResult.mProductInfos); } return result; } @Override protected int getPageSizeValue() { return mPageSIze == 0 ? HostManager.Parameters.Values.PAGESIZE_VALUE : mPageSIze + 1; } } private class PhoneModelUpdateTask extends BaseLoader<Result>.UpdateTask { @Override protected Request getRequest() { Request request = new Request(HostManager.getAdaptPhoneInfo()); request.addParam(Parameters.Keys.CATEGORY_ID, mCategoryId); request.addParam(Parameters.Keys.ADAPT_SIMPLE, Parameters.Values.ADAPT_SIMPLE_VALUE); return request; } @Override protected Result parseTaskResult(JSONObject json) { Result result = getResultInstance(); try { result.mPhoneModelInfos = PhoneModelInfo.valueOf(json); } catch (JSONException e) { result.setResultStatus(ResultStatus.DATA_ERROR); e.printStackTrace(); } return result; } @Override protected Result onDataLoaded(Result oldResult, Result newResult) { newResult.mProductInfos = oldResult.mProductInfos; return newResult; } } @Override protected Result getResultInstance() { return new Result(); } public void setPhoneModel(String phoneModel) { mPhoneModel = phoneModel; } public void setSortType(String sortType) { mSortType = sortType; } @Override protected Result parseResult(JSONObject json, Result result) throws Exception { result.mProductInfos = ProductInfo.valueOf(json); result.mCateName = ProductInfo.getCateName(json); mPageSIze = ProductInfo.getPageSize(json); return result; } }