package cn.mutils.app.pay;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import com.unionpay.UPPayAssistEx;
import com.unionpay.uppay.PayActivity;
import cn.mutils.app.event.listener.OnActivityResultListener;
import cn.mutils.app.ui.core.IActivityExecutor;
import cn.mutils.core.event.IListener;
/**
* UnionPay
*/
public class UPPayTask extends AppPayTask {
/**
* UnionPay trade number
*/
protected String mTradeNo;
protected OnActivityResultListener mOnActivityResultListener;
protected boolean mDebug;
public boolean isDebug() {
return mDebug;
}
public void setDebug(boolean debug) {
if (mStarted || mStopped) {
return;
}
mDebug = debug;
}
public String getTradeNo() {
return mTradeNo;
}
public void setTradeNo(String tradeNo) {
if (mStarted || mStopped) {
return;
}
mTradeNo = tradeNo;
}
@Override
protected void onStart() {
String mode = mDebug ? "01" : "00";
UPPayAssistEx.startPayByJAR((Activity) mContext, PayActivity.class, null, null, mTradeNo, mode);
}
@Override
public void addListener(IListener listener) {
super.addListener(listener);
attachToContext();
}
@Override
public void setContext(Context context) {
super.setContext(context);
attachToContext();
}
protected void attachToContext() {
if (mContext == null) {
return;
}
if (!(mContext instanceof IActivityExecutor)) {
return;
}
if (mOnActivityResultListener == null) {
mOnActivityResultListener = new UPPayResultListener();
}
IActivityExecutor executor = (IActivityExecutor) mContext;
executor.addOnActivityResultListener(mOnActivityResultListener);
}
class UPPayResultListener implements OnActivityResultListener {
@Override
public void onActivityResult(Context context, int requestCode, int resultCode, Intent data) {
if (data == null) {
return;
}
Bundle extras = data.getExtras();
if (extras == null) {
return;
}
String payResult = extras.getString("pay_result");
if (payResult == null) {
return;
}
if (payResult.equalsIgnoreCase("success")) {
mStatus = STATUS_UP_SUCCESS;
for (AppPayListener listener : getListeners(AppPayListener.class)) {
listener.onComplete(UPPayTask.this);
}
} else {
if (payResult.equalsIgnoreCase("fail")) {
mStatus = STATUS_UP_FAIL;
} else if (payResult.equalsIgnoreCase("cancel")) {
mStatus = STATUS_UP_CANCEL;
}
for (AppPayListener listener : getListeners(AppPayListener.class)) {
listener.onError(UPPayTask.this, null);
}
}
((IActivityExecutor) context).removeOnActivityResultListener(mOnActivityResultListener);
}
}
}