package com.example.qianfangdemo.activity;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.android.volley.AuthFailureError;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.example.qianfangdemo.Utils.T;
import com.example.qianfangdemo.base.App;
import com.example.qianfangdemo.base.ConstValue;
import com.example.qianfangdemo.entity.BankInfo;
import com.example.qianfangdemo.entity.SubBank;
import com.gc.materialdesign.views.ProgressBarIndeterminate;
import com.gc.materialdesign.widgets.Dialog;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import qfpay.wxshop.R;
public class CardDetailActivity extends AppCompatActivity implements View.OnClickListener{
private BankInfo cardInfo;
private EditText mUserNameView;
private EditText mCardNumView;
private TextView mBankNameView , mAreaView , mSubNameView;
private String bank_code;
private String bank_name;
private String city_code;
private String city_name;
private String prov_code;
private String prov_name;
private String subBankName;
private String userName;
private String cardNum;
ProgressBarIndeterminate progressBar;
Handler handler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_card_detail);
if(getSupportActionBar()!=null) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
handler = new Handler(Looper.getMainLooper());
mUserNameView = (EditText) findViewById(R.id.et_username);
mCardNumView = (EditText) findViewById(R.id.et_cardnum);
mBankNameView = (TextView) findViewById(R.id.bankname);
mAreaView = (TextView) findViewById(R.id.area);
mSubNameView = (TextView) findViewById(R.id.subbank_name);
progressBar= (ProgressBarIndeterminate) findViewById(R.id.progressBarIndeterminate);
progressBar.setMax(50);
progressBar.setMin(25);
mSubNameView.setSelected(true);
fillData();
}
private void fillData(){
cardInfo = (BankInfo) getIntent().getSerializableExtra("CARDINFO");
userName = getIntent().getStringExtra("USERNAME");
cardNum = getIntent().getStringExtra("CARDNUM");
mUserNameView.setText(userName);
mCardNumView.setText(getFormatCardNum(cardNum));
if(cardInfo!=null && !TextUtils.isEmpty(cardInfo.getHeadbankname())){
T.d(cardInfo.toString());
mBankNameView.setText(cardInfo.getHeadbankname());
}
findViewById(R.id.ll_bankname).setOnClickListener(this);
findViewById(R.id.ll_city).setOnClickListener(this);
findViewById(R.id.ll_subbank).setOnClickListener(this);
}
public static String getFormatCardNum(String src){
StringBuilder sb1 = new StringBuilder(src);
int j = 1;
for (int i = 1 ; i< sb1.length() ; i++){
if(i%4 == 0){
if(j*4 + j -1 <= sb1.length()) {
sb1.insert(j * 4 + (j - 1), " ");
j++;
}
}
}
return sb1.toString();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_card_detail, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
bindCard();
return true;
}
if(id == android.R.id.home){
this.finish();
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onClick(View v) {
if(progressBar.getVisibility()== View.VISIBLE){
return;
}
switch (v.getId()){
case R.id.ll_bankname:
getBankName();
break;
case R.id.ll_city:
Intent city = new Intent(CardDetailActivity.this, ProvinceListAct.class);
startActivityForResult(city, 0x01);
break;
case R.id.ll_subbank:
getSubBankInfo();
break;
}
}
private void getBankName() {
if(App.bankInfos!=null){
startActivityForResult(new Intent(this , BankListAct.class) , 0x00);
}else {
RequestQueue mQueue = Volley.newRequestQueue(getApplicationContext());
String url = App.getUtilsDomain() + ConstValue.BANK_LIST + "?token=" + ConstValue.userToken + "&caller=server";
T.i("post url: " + url);
StringRequest stringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
T.i("Cardinfo: " + response);
showProgress(false);
try {
JSONObject json = new JSONObject(response);
if (json.getString("respcd").equals("0000")) {
JSONArray banks = json.getJSONObject("data").getJSONArray("records");
App.bankInfos = new Gson().fromJson(banks.toString(), new TypeToken<List<BankInfo>>() {
}.getType());
startActivityForResult(new Intent(CardDetailActivity.this, BankListAct.class), 0x00);
} else {
Toast.makeText(CardDetailActivity.this, json.getString("resperr"), Toast.LENGTH_SHORT).show();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
showProgress(false);
Toast.makeText(CardDetailActivity.this, error.toString(), Toast.LENGTH_SHORT).show();
}
});
showProgress(true);
mQueue.add(stringRequest);
}
}
private void getSubBankInfo(){
if(cardInfo==null){
Toast.makeText(this , "请先选择开户行" , Toast.LENGTH_SHORT).show();
return;
}
if(TextUtils.isEmpty(prov_code) || TextUtils.isEmpty(city_code)){
Toast.makeText(this , "请先选择开户行地区" , Toast.LENGTH_SHORT).show();
return;
}
RequestQueue mQueue = Volley.newRequestQueue(getApplicationContext());
String url = App.getUtilsDomain() + ConstValue.SUB_BANK_LIST + "?token=" + ConstValue.userToken + "&caller=server&cityid=" + city_code + "&headbankid=" + cardInfo.getHeadbankid();
T.i("post url: " + url);
StringRequest stringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
T.i("Cardinfo: " + response);
showProgress(false);
try {
JSONObject json = new JSONObject(response);
if (json.getString("respcd").equals("0000")) {
JSONArray banks = json.getJSONObject("data").getJSONArray("records");
App.subBanks= new Gson().fromJson(banks.toString(), new TypeToken<List<SubBank>>() {
}.getType());
startActivityForResult(new Intent(CardDetailActivity.this, SubBankListAct.class), 0x02);
} else {
Toast.makeText(CardDetailActivity.this, json.getString("resperr"), Toast.LENGTH_SHORT).show();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
showProgress(false);
Toast.makeText(CardDetailActivity.this, error.toString(), Toast.LENGTH_SHORT).show();
}
});
showProgress(true);
mQueue.add(stringRequest);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
switch (requestCode) {
case 0x00:
T.w("onActivityResult");
cardInfo = (BankInfo) data.getSerializableExtra("BANKINFO");
bank_name = cardInfo.getHeadbankname();
bank_code = cardInfo.getHeadbankid();
mBankNameView.setText(bank_name);
break;
case 0x01:
prov_code = data.getStringExtra("PROV_CODE").substring(0,2);
prov_name = data.getStringExtra("PROV_NAME");
city_code = data.getStringExtra("CITY_CODE").substring(0,4);
city_name = data.getStringExtra("CITY_NAME");
mAreaView.setText(prov_name + "-" + city_name);
break;
case 0x02:
subBankName = data.getStringExtra("SUBBANKINFO");
mSubNameView.setText(subBankName);
break;
}
}
}
private void showProgress(boolean show){
progressBar.setVisibility(show ? View.VISIBLE : View.GONE);
}
private void bindCard(){
if(cardInfo==null){
Toast.makeText(this , "请先选择开户行" , Toast.LENGTH_SHORT).show();
return;
}
if(TextUtils.isEmpty(prov_code) || TextUtils.isEmpty(city_code)){
Toast.makeText(this , "请先选择开户行地区" , Toast.LENGTH_SHORT).show();
return;
}
if(TextUtils.isEmpty(subBankName)){
Toast.makeText(this , "请完善银行卡信息后再提交" , Toast.LENGTH_SHORT).show();
return;
}
AlertDialog.Builder builder = new AlertDialog.Builder(CardDetailActivity.this);
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
handler.post(new Runnable() {
@Override
public void run() {
setResult(RESULT_OK);
finish();
}
});
}
});
AlertDialog dialog = builder.create();
dialog.setMessage("绑定成功");
dialog.show();
String url = "" ;
StringRequest request = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
showProgress(false);
T.d("返回:" + response);
JSONObject object;
try {
object = new JSONObject(response);
if(object.getString("respcd").equals("0000")){
JSONObject data = (JSONObject) object.get("data");
//绑定成功
final Dialog dialog = new Dialog(CardDetailActivity.this,"提示", "银行卡绑定成功!");
dialog.setOnAcceptButtonClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
dialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialog) {
setResult(RESULT_OK);
finish();
}
});
showProgress(false);
dialog.show();
}else{
Toast.makeText(CardDetailActivity.this , object.has("respcd")?
object.getString("resperr"):
"",
Toast.LENGTH_SHORT ).show();
}
} catch (JSONException e) {
e.printStackTrace();
Toast.makeText(CardDetailActivity.this ,
"登录失败",
Toast.LENGTH_SHORT ).show();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
showProgress(false);
Toast.makeText(CardDetailActivity.this ,
"登录失败",
Toast.LENGTH_SHORT ).show();
}
}){
@Override
protected Map<String, String> getParams() throws AuthFailureError {
HashMap<String, String> params = new HashMap<String, String>();
// params.put("userid", BaseApplication.userInfo.getUser_id());
// params.put("app_id", BaseApplication.userInfo.getAppid());
// params.put("mchnt_id",BaseApplication.userInfo.getMchnt_id());
// params.put("head_bank_name", cardInfo.getHeadbankname());
// params.put("bank_user",userName );
// params.put("bank_account",cardNum);
// params.put("branch_bank_name" , subBankName);
return params;
}
};
// BaseApplication.queue.add(request);
}
}