package info.papdt.express.helper.ui;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.ActivityOptionsCompat;
import android.support.v4.view.ViewCompat;
import android.text.TextUtils;
import android.view.View;
import android.widget.CheckBox;
import android.widget.ImageButton;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import com.melnykov.fab.FloatingActionButton;
import com.rengwuxian.materialedittext.MaterialEditText;
import java.util.Random;
import info.papdt.express.helper.R;
import info.papdt.express.helper.api.KuaiDi100Helper;
import info.papdt.express.helper.dao.ExpressDatabase;
import info.papdt.express.helper.support.ExpressResult;
import info.papdt.express.helper.support.HttpUtils;
import info.papdt.express.helper.support.Settings;
public class AddActivity extends AbsActivity {
private boolean isChecking = false;
private MaterialEditText mEditTextSerial, mEditTextName;
private TextView mCompanyNameText;
private ProgressBar mProgress;
private FloatingActionButton mFAB;
private CheckBox mForceAddCheckBox;
private int mNow = -1;
public static final String TAG = "AddActivity";
public static final String TRANSITION_NAME_FAB = "fab";
//918108247993
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add);
mActionBar.setDisplayHomeAsUpEnabled(true);
mActionBar.setDisplayShowTitleEnabled(false);
}
@Override
protected void setUpViews() {
mEditTextSerial = (MaterialEditText) findViewById(R.id.et_number);
mCompanyNameText = (TextView) findViewById(R.id.tv_company_name);
mEditTextName = (MaterialEditText) findViewById(R.id.et_name);
mProgress = (ProgressBar) findViewById(R.id.progressBar);
mFAB = (FloatingActionButton) findViewById(R.id.fab);
mForceAddCheckBox = (CheckBox) findViewById(R.id.cb_force_add);
mFAB.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (isChecking) return;
postData();
}
});
ViewCompat.setElevation(findViewById(R.id.headerView), getResources().getDimension(R.dimen.toolbar_elevation));
ImageButton mButtonSelect = (ImageButton) findViewById(R.id.btn_select);
mButtonSelect.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mEditTextName.clearFocus();
mEditTextSerial.clearFocus();
CompanySelectActivity.launchActivity(AddActivity.this);
}
});
if (!mSets.getBoolean(Settings.KEY_DISABLE_ANIMATION, false)) {
ViewCompat.setTransitionName(mFAB, TRANSITION_NAME_FAB);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
switch (requestCode) {
case CompanySelectActivity.REQUEST_CODE_SELECT:
if (resultCode == CompanySelectActivity.RESULT_SELECTED) {
mNow = KuaiDi100Helper.CompanyInfo.findCompanyByCode(intent.getStringExtra("company_code"));
setCompanyNameText();
}
break;
}
}
@Override
public void onBackPressed() {
setSwipeBackEnable(false);
super.onBackPressed();
}
private void setCompanyNameText() {
mCompanyNameText.setText(KuaiDi100Helper.CompanyInfo.names [mNow]);
}
private void postData() {
if (TextUtils.isEmpty(mEditTextSerial.getText())) {
Toast.makeText(
getApplicationContext(),
R.string.toast_number_empty,
Toast.LENGTH_SHORT
).show();
return;
}
if (mNow == -1) {
Toast.makeText(
getApplicationContext(),
R.string.toast_company_name_empty,
Toast.LENGTH_SHORT
).show();
return;
}
new PostApiTask().execute(
KuaiDi100Helper.CompanyInfo.info.get(mNow).code,
mEditTextSerial.getText().toString()
);
}
private void receiveData(String result, String name) {
if (!mForceAddCheckBox.isChecked()) {
ExpressResult er = ExpressResult.buildFromJSON(result);
if (er.getTrueStatus() == ExpressResult.STATUS_FAILED) {
Toast.makeText(
getApplicationContext(),
getResources().getStringArray(R.array.errCode_toast) [er.errCode],
Toast.LENGTH_SHORT
).show();
return;
}
}
Intent intent = new Intent(this, MainActivity.class);
intent.putExtra("result", result);
intent.putExtra("name", name);
setResult(MainActivity.RESULT_ADD_FINISH, intent);
finish();
}
public static void launch(AbsActivity mActivity, View fab) {
Intent intent = new Intent(mActivity, AddActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
if (!mActivity.mSets.getBoolean(Settings.KEY_DISABLE_ANIMATION, false)) {
ActivityOptionsCompat options =
ActivityOptionsCompat.makeSceneTransitionAnimation(
mActivity, fab, TRANSITION_NAME_FAB
);
ActivityCompat.startActivityForResult(
mActivity,
intent,
MainActivity.REQUEST_ADD,
options.toBundle()
);
} else {
mActivity.startActivityForResult(intent, MainActivity.REQUEST_ADD);
}
}
private class PostApiTask extends AsyncTask<String, Void, String> {
public static final String FLAG_COMPANY_NOT_EXIST = "company_null",
FLAG_NETWORK_ERROR = "network_error", FLAG_UNKNOWN_ERROR = "unknown_error",
FLAG_CLIENT_ERROR = "client_error", FLAG_HAS_BEEN_EXIST = "has_been_exist";
@Override
protected void onPreExecute() {
isChecking = true;
mProgress.setVisibility(View.VISIBLE);
}
@Override
protected String doInBackground(String... src) {
String[] result = new String[1];
String companyCode = src[0];
String mailNumber = src[1];
ExpressDatabase db = new ExpressDatabase(getApplicationContext());
db.init();
if (db.findExpress(companyCode, mailNumber) != -1) {
return FLAG_HAS_BEEN_EXIST;
}
String secret, app_id;
int choice = mSets.getInt(Settings.KEY_TOKEN_CHOOSE, 0);
if (choice == 4) {
Random r = new Random();
choice = (choice = r.nextInt(2)) == 2 ? choice : 3;
}
switch (choice) {
case 1:
secret = KuaiDi100Helper.mysecret;
app_id = KuaiDi100Helper.myid;
break;
case 2:
secret = mSets.getString(Settings.KEY_CUSTOM_SECRET, "error");
app_id = mSets.getString(Settings.KEY_CUSTOM_ID, "error");
break;
case 3:
secret = KuaiDi100Helper.smsecret;
app_id = KuaiDi100Helper.smid;
break;
case 0:
default:
secret = KuaiDi100Helper.xfsecret;
app_id = KuaiDi100Helper.xfid;
break;
}
int resultCode = HttpUtils.get(KuaiDi100Helper.getRequestUrl(app_id, secret, companyCode, mailNumber, "utf8"), result);
switch (resultCode) {
case HttpUtils.CODE_OKAY:
return result[0];
case HttpUtils.CODE_NONE_200:
case HttpUtils.CODE_NETWORK_ERROR:
return FLAG_NETWORK_ERROR;
case HttpUtils.CODE_CLIENT_ERROR:
return FLAG_CLIENT_ERROR;
default:
return FLAG_UNKNOWN_ERROR;
}
}
@Override
protected void onPostExecute(String result) {
isChecking = false;
mProgress.setVisibility(View.INVISIBLE);
if (result == null || result == FLAG_UNKNOWN_ERROR) {
Toast.makeText(
getApplicationContext(),
R.string.toast_unknown_error,
Toast.LENGTH_SHORT
).show();
return;
}
if (result == FLAG_COMPANY_NOT_EXIST) {
Toast.makeText(
getApplicationContext(),
R.string.toast_company_not_exist,
Toast.LENGTH_SHORT
).show();
return;
}
if (result == FLAG_CLIENT_ERROR) {
Toast.makeText(
getApplicationContext(),
R.string.toast_client_error,
Toast.LENGTH_SHORT
).show();
return;
}
if (result == FLAG_HAS_BEEN_EXIST) {
Toast.makeText(
getApplicationContext(),
R.string.toast_has_been_exist,
Toast.LENGTH_SHORT
).show();
return;
}
String name = mEditTextName.getText().toString();
if (name == null || TextUtils.isEmpty(name)) {
name = mEditTextSerial.getText().toString();
}
receiveData(result, name);
}
}
}