package com.xiaomi.xms.sales;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.text.TextUtils;
import com.xiaomi.xms.sales.activity.AddressActivity;
import com.xiaomi.xms.sales.activity.BaseActivity;
import com.xiaomi.xms.sales.activity.MainActivity;
import com.xiaomi.xms.sales.activity.OrderListActivity;
import com.xiaomi.xms.sales.activity.ProductActivity;
import com.xiaomi.xms.sales.activity.ProductDetailsActivity;
import com.xiaomi.xms.sales.activity.ShoppingActivity;
import com.xiaomi.xms.sales.util.Constants;
import com.xiaomi.xms.sales.util.Utils;
import org.apache.http.NameValuePair;
import org.apache.http.client.utils.URLEncodedUtils;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.List;
public class ShopUrlResolver {
public static final String MOBILE_SHOP_HOST = "m.xiaomi.com";
private static Context mContext;
public static ShopUrl parse(Context context, String url) {
mContext = context;
ShopUrl urlObj;
try {
urlObj = new ShopUrl(url);
} catch (Exception e) {
return null;
}
if (TextUtils.equals(MOBILE_SHOP_HOST, urlObj.getHost())) {
return urlObj;
}
return null;
}
public static class ShopUrl {
private static final int URL_TYPE_OLD = 1;
private static final int URL_TYPE_NEW = 2;
private static final String DEFAULT_PARAM = "default_param";
private String mProtocol;
private String mHost;
private int mPort;
private String mPath;
private String mQuery;
private String mRef;
private String mModel;
private String mAction;
private ContentValues mParams;
private int mUrlType = 1;
public ShopUrl(String url) throws Exception {
URL urlObj = new URL(url);
mProtocol = urlObj.getProtocol();
mHost = urlObj.getHost();
mPort = urlObj.getPort();
mPath = urlObj.getPath();
mQuery = urlObj.getQuery();
mRef = urlObj.getRef();
mParams = new ContentValues();
parseModAct();
run();
}
private void run() {
if ("home".equalsIgnoreCase(getModel())) {
if ("yuyue".equalsIgnoreCase(getAction())) {
Utils.Preference.removePref(mContext, Constants.Prefence.PREF_ACTIVITY_VERSION);
((BaseActivity) mContext).checkActivity();
}
} else if ("product".equalsIgnoreCase(getModel())) {
if ("category".equalsIgnoreCase(getAction())) {
MainActivity.launchMain(mContext, MainActivity.FRAGMENT_TAG_CATEGORY);
} else if ("list".equalsIgnoreCase(getAction())) {
Intent intent = new Intent(mContext, ProductActivity.class);
intent.putExtra(Constants.Intent.EXTRA_CATEGORY_ID, getParamByKey("cate_id"));
mContext.startActivity(intent);
} else if ("view".equalsIgnoreCase(getAction())) {
Intent intent = new Intent(mContext, ProductDetailsActivity.class);
intent.putExtra(Constants.Intent.EXTRA_PRODUCT_ID, getParamByKey("product_id"));
mContext.startActivity(intent);
}
} else if ("xiaomi".equalsIgnoreCase(getModel())) {
if ("mi2s".equalsIgnoreCase(getAction())) {
Intent intent = new Intent(mContext, ProductDetailsActivity.class);
intent.putExtra(Constants.Intent.EXTRA_IS_MIPHONE, true);
intent.putExtra(Constants.Intent.EXTRA_PRODUCT_ID, "1538");
mContext.startActivity(intent);
} else if ("mi2a".equalsIgnoreCase(getAction())) {
Intent intent = new Intent(mContext, ProductDetailsActivity.class);
intent.putExtra(Constants.Intent.EXTRA_IS_MIPHONE, true);
intent.putExtra(Constants.Intent.EXTRA_PRODUCT_ID, "1708");
mContext.startActivity(intent);
} else if ("mi2".equalsIgnoreCase(getAction())) {
Intent intent = new Intent(mContext, ProductDetailsActivity.class);
intent.putExtra(Constants.Intent.EXTRA_IS_MIPHONE, true);
intent.putExtra(Constants.Intent.EXTRA_PRODUCT_ID, "1468");
mContext.startActivity(intent);
} else if ("m1sy".equalsIgnoreCase(getAction())) {
Intent intent = new Intent(mContext, ProductDetailsActivity.class);
intent.putExtra(Constants.Intent.EXTRA_IS_MIPHONE, true);
intent.putExtra(Constants.Intent.EXTRA_PRODUCT_ID, "1336");
mContext.startActivity(intent);
} else if ("m1s".equalsIgnoreCase(getAction())) {
Intent intent = new Intent(mContext, ProductDetailsActivity.class);
intent.putExtra(Constants.Intent.EXTRA_IS_MIPHONE, true);
intent.putExtra(Constants.Intent.EXTRA_PRODUCT_ID, "1338");
mContext.startActivity(intent);
} else if ("box".equalsIgnoreCase(getAction())) {
Intent intent = new Intent(mContext, ProductDetailsActivity.class);
intent.putExtra(Constants.Intent.EXTRA_IS_MIPHONE, true);
intent.putExtra(Constants.Intent.EXTRA_PRODUCT_ID, "1731");
mContext.startActivity(intent);
}
} else if ("account".equalsIgnoreCase(getModel())) {
if ("index".equalsIgnoreCase(getAction())) {
// MainActivity.launchMain(mContext, MainActivity.FRAGMENT_TAG_ACCOUNT);
}
} else if ("shopping".equalsIgnoreCase(getModel())) {
Intent intent = new Intent(mContext, ShoppingActivity.class);
mContext.startActivity(intent);
} else if ("order".equalsIgnoreCase(getModel())) {
if ("list".equalsIgnoreCase(getAction())) {
Intent intent = new Intent(mContext, OrderListActivity.class);
intent.setAction(Constants.Intent.ACTION_ORDER_LIST);
intent.putExtra(Constants.Intent.EXTRA_ORDER_LIST_TYPE, getParamByKey("type"));
mContext.startActivity(intent);
} else if ("view".equalsIgnoreCase(getAction())) {
Intent intent = new Intent(mContext, OrderListActivity.class);
intent.setAction(Constants.Intent.ACTION_VIEW_ORDER);
intent.putExtra(Constants.Intent.EXTRA_PAYMENT_ORDER_ID,
getParamByKey("order_id"));
mContext.startActivity(intent);
}
} else if ("address".equalsIgnoreCase(getModel())) {
if ("list".equalsIgnoreCase(getAction())) {
Intent intent = new Intent(mContext, AddressActivity.class);
intent.setAction(Constants.Intent.ACTION_EDIT_ADDRESS);
mContext.startActivity(intent);
}
}
}
private void parseOldM() {
List<NameValuePair> list;
try {
list = URLEncodedUtils.parse(new URI("http://xiaomi.com/?" + mRef), "utf-8");
} catch (URISyntaxException e) {
return;
}
for (NameValuePair pair : list) {
mParams.put(pair.getName(), pair.getValue());
}
mModel = mParams.getAsString("ac");
mAction = mParams.getAsString("op");
}
private void parseNewM() {
String[] params = mRef.split("/");
mModel = params[0];
mAction = params[1];
if (params.length > 2) {
mParams.put(DEFAULT_PARAM, params[2]);
}
}
private void parseModAct() {
if (mRef.contains("ac=") && mRef.contains("op=")) {
parseOldM();
} else {
parseNewM();
mUrlType = URL_TYPE_NEW;
}
}
public String getProtocol() {
return mProtocol;
}
public String getHost() {
return mHost;
}
public int getPort() {
return mPort;
}
public String getPath() {
return mPath;
}
public String getQuery() {
return mQuery;
}
public String getRef() {
return mRef;
}
public String getModel() {
return mModel;
}
public String getAction() {
return mAction;
}
public String getParamByKey(String key) {
if (mParams.containsKey(key)) {
return mParams.getAsString(key);
}
if (mUrlType == URL_TYPE_NEW) {
return mParams.getAsString(DEFAULT_PARAM);
}
return null;
}
}
}