package com.aptoide.amethyst.webservices; import android.content.Context; import android.telephony.TelephonyManager; import com.aptoide.amethyst.preferences.SecurePreferences; import com.aptoide.amethyst.utils.AptoideUtils; import com.aptoide.amethyst.webservices.json.GetApkInfoJson; import com.aptoide.dataprovider.webservices.models.WebserviceOptions; import com.octo.android.robospice.request.retrofit.RetrofitSpiceRequest; import java.util.ArrayList; import java.util.HashMap; import retrofit.RetrofitError; import retrofit.http.FieldMap; import retrofit.http.FormUrlEncoded; import retrofit.http.POST; /** * Created by asantos on 07-08-2014. */ public abstract class GetApkInfoRequest extends RetrofitSpiceRequest<GetApkInfoJson, GetApkInfoRequest.Webservice> { protected String repoName; protected String packageName; protected String versionName; protected String token; protected Context context; private boolean fromSponsored; public GetApkInfoRequest(Context context) { super(GetApkInfoJson.class, GetApkInfoRequest.Webservice.class); this.context = context; } public boolean isFromSponsored() { return fromSponsored; } public void setFromSponsored(boolean fromSponsored) { this.fromSponsored = fromSponsored; } protected abstract ArrayList<WebserviceOptions> fillWithExtraOptions(ArrayList<WebserviceOptions> options); protected abstract HashMap<String, String> getParameters(); @Override public GetApkInfoJson loadDataFromNetwork() throws Exception { ArrayList<WebserviceOptions> options = getoptions(); token = SecurePreferences.getInstance().getString("access_token", null); fillWithExtraOptions(options); HashMap<String, String> parameters = getParameters(); parameters.put("options", buildOptions(options)); parameters.put("mode", "json"); parameters.put("access_token", token); if (fromSponsored) { parameters.put("adview", "1"); } try { return getService().getApkInfo(parameters); } catch (RetrofitError e) { OauthErrorHandler.handle(e); throw e; } } public String getRepoName() { return repoName; } public void setRepoName(String repoName) { this.repoName = repoName; } public String getPackageName() { return packageName; } public void setPackageName(String packageName) { this.packageName = packageName; } public String getVersionName() { return versionName; } public void setVersionName(String versionName) { this.versionName = versionName; } public String getToken() { return token; } public void setToken(String token) { this.token = token; } protected ArrayList<WebserviceOptions> getoptions() { ArrayList<WebserviceOptions> options = new ArrayList<WebserviceOptions>(); options.add(new WebserviceOptions("cmtlimit", "5")); options.add(new WebserviceOptions("payinfo", "true")); final TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); if (telephonyManager != null && telephonyManager.getSimState() == TelephonyManager.SIM_STATE_READY) { options.add(new WebserviceOptions("mnc", getMncCode(telephonyManager.getNetworkOperator()))); options.add(new WebserviceOptions("mcc", getMccCode(telephonyManager.getNetworkOperator()))); } options.add(new WebserviceOptions("q", AptoideUtils.HWSpecifications.filters(context))); options.add(new WebserviceOptions("lang", AptoideUtils.StringUtils.getMyCountryCode(context))); return options; } private String getMccCode(String networkOperator) { return networkOperator == null ? "" : networkOperator.substring(0, mncPortionLength(networkOperator)); } private int mncPortionLength(String networkOperator) { return Math.min(3, networkOperator.length()); } private String getMncCode(String networkOperator) { return networkOperator == null ? "" : networkOperator.substring(mncPortionLength(networkOperator)); } protected String buildOptions(ArrayList<WebserviceOptions> options) { StringBuilder sb = new StringBuilder(); sb.append("("); for (WebserviceOptions option : options) { sb.append(option); sb.append(";"); } sb.append(")"); return sb.toString(); } public interface Webservice { @POST("/webservices.aptoide.com/webservices/3/getApkInfo") @FormUrlEncoded GetApkInfoJson getApkInfo(@FieldMap HashMap<String, String> args); } }