sdf
This commit is contained in:
545
app/src/main/java/my_view/ConfirmCarmoneyDialog.java
Normal file
545
app/src/main/java/my_view/ConfirmCarmoneyDialog.java
Normal file
@@ -0,0 +1,545 @@
|
||||
package my_view;
|
||||
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.Dialog;
|
||||
import android.app.ProgressDialog;
|
||||
import android.app.TimePickerDialog;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.inputmethodservice.KeyboardView;
|
||||
import android.os.Bundle;
|
||||
import android.text.InputType;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.view.Gravity;
|
||||
import android.view.KeyEvent;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.Window;
|
||||
import android.view.WindowManager;
|
||||
import android.view.inputmethod.InputMethodManager;
|
||||
import android.widget.EditText;
|
||||
import android.widget.TextView;
|
||||
import android.widget.TimePicker;
|
||||
|
||||
import com.cutil.StringUtils;
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.internal.LinkedTreeMap;
|
||||
import com.selectpicker.OptionsPopupWindow;
|
||||
import com.sl.house_property.R;
|
||||
import com.sl.house_property.f1.CarragelistActivity;
|
||||
import com.sl.house_property.f2.PropertyFeeActivity;
|
||||
import com.sl.house_property.user.MyPayActivity;
|
||||
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import entity.RegisterUser;
|
||||
import http.ApiConfig;
|
||||
import my_loader.Loader;
|
||||
import my_loader.Resultcode;
|
||||
import rx.Subscription;
|
||||
import rx.functions.Action1;
|
||||
import tools.Config;
|
||||
import tools.DateTimeUtils;
|
||||
import utils.Constants;
|
||||
import utils.KeyboardUtil;
|
||||
import utils.Md5;
|
||||
|
||||
|
||||
public class ConfirmCarmoneyDialog extends Dialog {
|
||||
|
||||
private CarragelistActivity context;
|
||||
private String title1;
|
||||
private String title2;
|
||||
private String title3;
|
||||
private String title4;
|
||||
private String confirmButtonText;
|
||||
private String cacelButtonText;
|
||||
private ClickListenerInterface clickListenerInterface;
|
||||
|
||||
private KeyboardUtil keyboardUtil;
|
||||
private EditText carNoEditText;
|
||||
|
||||
private EditText starttimeText, endtimeText;
|
||||
|
||||
private View rootView;
|
||||
|
||||
private OptionsPopupWindow alarmOptionPop;
|
||||
|
||||
private ProgressDialog progressDialog;
|
||||
private Loader mGankLoader;
|
||||
|
||||
private String rentId;
|
||||
private String defaultStartTime;
|
||||
private String defaultEndTime;
|
||||
private double price;
|
||||
|
||||
public interface ClickListenerInterface {
|
||||
|
||||
public void doConfirm();
|
||||
|
||||
public void doCancel();
|
||||
}
|
||||
|
||||
public ConfirmCarmoneyDialog(CarragelistActivity context, String title1, String rent_id, String startTime, String endTime, double price) {
|
||||
super(context, R.style.MyDialog);
|
||||
progressDialog = new ProgressDialog(context);
|
||||
this.context = context;
|
||||
this.title1 = title1;
|
||||
this.rentId = rent_id;
|
||||
this.defaultStartTime = startTime;
|
||||
this.defaultEndTime = endTime;
|
||||
this.price = price;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
// TODO Auto-generated method stub
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
init();
|
||||
|
||||
carNoEditText = (EditText) findViewById(R.id.car_no_input);
|
||||
carNoEditText.setOnFocusChangeListener(new android.view.View.OnFocusChangeListener() {
|
||||
@Override
|
||||
public void onFocusChange(View v, boolean hasFocus) {
|
||||
if (hasFocus) {
|
||||
hideKeyboard(v);
|
||||
showCarNoInput();
|
||||
} else {
|
||||
keyboardUtil.hideKeyboard();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
carNoEditText.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (keyboardUtil != null && !keyboardUtil.isShow()) {
|
||||
showCarNoInput();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
starttimeText = (EditText) findViewById(R.id.starttime);
|
||||
starttimeText.setInputType(InputType.TYPE_NULL);
|
||||
starttimeText.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
showStartTimeDialog();
|
||||
}
|
||||
});
|
||||
starttimeText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
|
||||
@Override
|
||||
public void onFocusChange(View v, boolean hasFocus) {
|
||||
if (hasFocus) {
|
||||
showStartTimeDialog();
|
||||
}
|
||||
}
|
||||
});
|
||||
endtimeText = (EditText) findViewById(R.id.endtime);
|
||||
endtimeText.setInputType(InputType.TYPE_NULL);
|
||||
endtimeText.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
showEndTimeDialog();
|
||||
}
|
||||
});
|
||||
endtimeText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
|
||||
@Override
|
||||
public void onFocusChange(View v, boolean hasFocus) {
|
||||
if (hasFocus) {
|
||||
showEndTimeDialog();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
findViewById(R.id.confirmBtn).setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
submitData();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private boolean checkTimeRange(String startTime, String endTime, String selectTime) {
|
||||
String[] startTimeArray = startTime.split(":");
|
||||
String[] endTimeArray = endTime.split(":");
|
||||
String[] selectTimeArray = selectTime.split(":");
|
||||
// 统一转化为分钟进行对比
|
||||
Long startTimeM = Long.parseLong(startTimeArray[0]) * 60 + Long.parseLong(startTimeArray[1]);
|
||||
Long endTimeM = Long.parseLong(endTimeArray[0]) * 60 + Long.parseLong(endTimeArray[1]);
|
||||
Long selectTimeM = Long.parseLong(selectTimeArray[0]) * 60 + Long.parseLong(selectTimeArray[1]);
|
||||
if (selectTimeM < startTimeM || selectTimeM > endTimeM) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private void showEndTimeDialog() {
|
||||
CharSequence timeObj = endtimeText.getText();
|
||||
String timeStr = timeObj.toString().trim();
|
||||
String[] timeArr = timeStr.split(":");
|
||||
final DateTimeUtils dateTimeUtils = new DateTimeUtils(context);
|
||||
if (timeObj != null && !"".equals(timeObj.toString().trim())) {
|
||||
dateTimeUtils.showTimePickerDialog(new TimePickerDialog.OnTimeSetListener() {
|
||||
@Override
|
||||
public void onTimeSet(TimePicker timePicker, int i, int i1) {
|
||||
endTimeSelected(i, i1);
|
||||
}
|
||||
}, Integer.parseInt(timeArr[0]), Integer.parseInt(timeArr[1]));
|
||||
} else {
|
||||
dateTimeUtils.showTimePickerDialog(new TimePickerDialog.OnTimeSetListener() {
|
||||
@Override
|
||||
public void onTimeSet(TimePicker timePicker, int i, int i1) {
|
||||
endTimeSelected(i, i1);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 结束时间选中业务处理
|
||||
* @param i
|
||||
* @param i1
|
||||
*/
|
||||
private void endTimeSelected(int i, int i1) {
|
||||
String min = "0";
|
||||
if (i1 < 10) {
|
||||
min += i1;
|
||||
} else {
|
||||
min = i1 + "";
|
||||
}
|
||||
String selectTime = i + ":" + min;
|
||||
if (!checkTimeRange(defaultStartTime, defaultEndTime, selectTime)) {
|
||||
context.setToast("请选择规定范围内的时间!");
|
||||
return;
|
||||
}
|
||||
if (!checkHalfHour(starttimeText.getText().toString(),selectTime)){
|
||||
context.setToast("停车时间不能小于30分钟!");
|
||||
return;
|
||||
}
|
||||
endtimeText.setText(selectTime);
|
||||
updateAmount();
|
||||
}
|
||||
|
||||
private void showStartTimeDialog() {
|
||||
CharSequence timeObj = starttimeText.getText();
|
||||
final DateTimeUtils dateTimeUtils = new DateTimeUtils(context);
|
||||
if (timeObj != null && !"".equals(timeObj.toString().trim())) {
|
||||
String timeStr = timeObj.toString().trim();
|
||||
String[] timeArr = timeStr.split(":");
|
||||
dateTimeUtils.showTimePickerDialog(new TimePickerDialog.OnTimeSetListener() {
|
||||
@Override
|
||||
public void onTimeSet(TimePicker timePicker, int i, int i1) {
|
||||
startTimeSelected(i, i1);
|
||||
}
|
||||
}, Integer.parseInt(timeArr[0]), Integer.parseInt(timeArr[1]));
|
||||
} else {
|
||||
dateTimeUtils.showTimePickerDialog(new TimePickerDialog.OnTimeSetListener() {
|
||||
@Override
|
||||
public void onTimeSet(TimePicker timePicker, int i, int i1) {
|
||||
startTimeSelected(i, i1);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 开始时间选择业务处理
|
||||
* @param i
|
||||
* @param i1
|
||||
*/
|
||||
private void startTimeSelected(int i, int i1) {
|
||||
String min = "0";
|
||||
if (i1 < 10) {
|
||||
min += i1;
|
||||
} else {
|
||||
min = i1 + "";
|
||||
}
|
||||
String selectTime = i + ":" + min;
|
||||
if (!checkTimeRange(defaultStartTime, defaultEndTime, selectTime)) {
|
||||
context.setToast("请选择规定范围内的时间!");
|
||||
return;
|
||||
}
|
||||
if (!checkHalfHour(selectTime,endtimeText.getText().toString())){
|
||||
context.setToast("停车时间不能小于30分钟!");
|
||||
return;
|
||||
}
|
||||
starttimeText.setText(selectTime);
|
||||
updateAmount();
|
||||
}
|
||||
|
||||
|
||||
private void showTimeAlert() {
|
||||
final ArrayList<String> stringList = new ArrayList();
|
||||
for (int i = 1; i <= 12; i++) {
|
||||
stringList.add(i + "小时");
|
||||
}
|
||||
alarmOptionPop = new OptionsPopupWindow(context);
|
||||
alarmOptionPop.setPicker(stringList);
|
||||
|
||||
alarmOptionPop.setOnoptionsSelectListener(new OptionsPopupWindow.OnOptionsSelectListener() {
|
||||
@Override
|
||||
public void onOptionsSelect(int position, int option2, int options3) {
|
||||
// ((EditText) findViewById(R.id.hour_stop)).setText(stringList.get(position));
|
||||
}
|
||||
});
|
||||
int height = alarmOptionPop.getContentView().getMeasuredHeight();
|
||||
|
||||
alarmOptionPop.getContentView().measure(0, 0);
|
||||
alarmOptionPop.showAtLocation(carNoEditText, Gravity.BOTTOM, 0, -height);
|
||||
}
|
||||
|
||||
private void showCarNoInput() {
|
||||
keyboardUtil = new KeyboardUtil((Activity) context, (KeyboardView) rootView.findViewById(R.id.keyboard_view), carNoEditText);
|
||||
keyboardUtil.hideSoftInputMethod();
|
||||
keyboardUtil.showKeyboard();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onKeyDown(int keyCode, KeyEvent event) {
|
||||
if (keyCode == KeyEvent.KEYCODE_BACK) {
|
||||
if (keyboardUtil != null && keyboardUtil.isShow()) {
|
||||
keyboardUtil.hideKeyboard();
|
||||
} else {
|
||||
cancel();
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static void hideKeyboard(View view) {
|
||||
InputMethodManager imm = (InputMethodManager) view.getContext()
|
||||
.getSystemService(Context.INPUT_METHOD_SERVICE);
|
||||
if (imm != null) {
|
||||
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
|
||||
}
|
||||
}
|
||||
|
||||
public void init() {
|
||||
LayoutInflater inflater = LayoutInflater.from(context);
|
||||
rootView = inflater.inflate(R.layout.confirmcarmoney, null);
|
||||
setContentView(rootView);
|
||||
|
||||
Window dialogWindow = getWindow();
|
||||
WindowManager.LayoutParams lp = dialogWindow.getAttributes();
|
||||
DisplayMetrics d = context.getResources().getDisplayMetrics(); // 获取屏幕宽、高用
|
||||
lp.width = (int) (d.widthPixels); // 高度设置为屏幕的0.6
|
||||
dialogWindow.setAttributes(lp);
|
||||
}
|
||||
|
||||
public void setClicklistener(ClickListenerInterface clickListenerInterface) {
|
||||
this.clickListenerInterface = clickListenerInterface;
|
||||
}
|
||||
|
||||
private class ClickListener implements View.OnClickListener {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
// TODO Auto-generated method stub
|
||||
int id = v.getId();
|
||||
switch (id) {
|
||||
case R.id.title1:
|
||||
clickListenerInterface.doConfirm();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void updateAmount() {
|
||||
String startTime = starttimeText.getText().toString();
|
||||
String endTime = endtimeText.getText().toString();
|
||||
if (!com.cutil.StringUtils.isTrimEmpty(startTime) && !com.cutil.StringUtils.isTrimEmpty(endTime)) {
|
||||
StopResultInfo stopResultInfo = culAmount();
|
||||
if (stopResultInfo != null && stopResultInfo.getStopAmount() != null) {
|
||||
((TextView) findViewById(R.id.amountText)).setText("¥" + stopResultInfo.getStopAmount() + "");
|
||||
}
|
||||
} else {
|
||||
((TextView) findViewById(R.id.amountText)).setText("¥0");
|
||||
}
|
||||
}
|
||||
|
||||
private boolean checkHalfHour(String startTimeStr,String endTimeStr) {
|
||||
StopResultInfo stopResultInfo = null;
|
||||
if (!com.cutil.StringUtils.isTrimEmpty(startTimeStr) && !com.cutil.StringUtils.isTrimEmpty(endTimeStr)) {
|
||||
String[] startTimeArray = startTimeStr.split(":");
|
||||
String[] endTimeArray = endTimeStr.split(":");
|
||||
int startHour = Integer.parseInt(startTimeArray[0]);
|
||||
int endHour = Integer.parseInt(endTimeArray[0]);
|
||||
int startM = Integer.parseInt(startTimeArray[1]);
|
||||
int endM = Integer.parseInt(endTimeArray[1]);
|
||||
// 分钟计算
|
||||
int timeLong = (endHour - startHour) * 60 + (endM - startM);
|
||||
// 计算小时计费单位(超过30分钟算一个小时,不足30分钟不计费)
|
||||
if (timeLong < 30) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private StopResultInfo culAmount() {
|
||||
StopResultInfo stopResultInfo = null;
|
||||
String startTime = starttimeText.getText().toString();
|
||||
if (com.cutil.StringUtils.isTrimEmpty(startTime)) {
|
||||
context.setToast("请选择开始时间!");
|
||||
return stopResultInfo;
|
||||
}
|
||||
String endTime = endtimeText.getText().toString();
|
||||
if (com.cutil.StringUtils.isTrimEmpty(endTime)) {
|
||||
context.setToast("请选择结束时间!");
|
||||
return stopResultInfo;
|
||||
}
|
||||
|
||||
String[] startTimeArray = startTime.split(":");
|
||||
String[] endTimeArray = endTime.split(":");
|
||||
int startHour = Integer.parseInt(startTimeArray[0]);
|
||||
int endHour = Integer.parseInt(endTimeArray[0]);
|
||||
if (startHour > endHour) {
|
||||
context.setToast("开始时间必须小于结束时间!");
|
||||
return stopResultInfo;
|
||||
}
|
||||
int startM = Integer.parseInt(startTimeArray[1]);
|
||||
int endM = Integer.parseInt(endTimeArray[1]);
|
||||
if (startHour == endHour && startM >= endM) {
|
||||
context.setToast("开始时间必须小于结束时间!");
|
||||
return stopResultInfo;
|
||||
}
|
||||
|
||||
// 分钟计算
|
||||
int timeLong = (endHour - startHour) * 60 + (endM - startM);
|
||||
// 计算小时计费单位(超过30分钟算一个小时,不足30分钟不计费)
|
||||
if (timeLong < 30) {
|
||||
context.setToast("停车时间不能小于30分钟!");
|
||||
return stopResultInfo;
|
||||
}
|
||||
// 计费规则可以理解为没个小时的后半个小时才开始叠加计费,所以可以用如下算法来表示
|
||||
|
||||
long unitTime = ((timeLong - 30) / 60) + 1;
|
||||
double amount = unitTime * price;
|
||||
return new StopResultInfo(timeLong, amount);
|
||||
}
|
||||
|
||||
private void submitData() {
|
||||
// check data
|
||||
String carNo = carNoEditText.getText().toString();
|
||||
if (com.cutil.StringUtils.isTrimEmpty(carNo)) {
|
||||
context.setToast("请输入车牌号!");
|
||||
return;
|
||||
}
|
||||
|
||||
StopResultInfo stopResultInfo = culAmount();
|
||||
if (stopResultInfo == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
RegisterUser user =
|
||||
Config.getInstance(context).getUser();
|
||||
Map<String, String> map = new HashMap<>();
|
||||
if (user != null) {
|
||||
map.put("userid", user.getUserid());
|
||||
} else {
|
||||
map.put("userid", 0 + "");
|
||||
}
|
||||
map.put("rent_id", rentId);
|
||||
map.put("cart_number", carNo);
|
||||
map.put("stop_time", stopResultInfo.getStopLong() + "");
|
||||
map.put("stop_amount", stopResultInfo.getStopAmount() + "");
|
||||
map.put("start_stop_time", defaultStartTime);
|
||||
map.put("end_stop_time", defaultEndTime);
|
||||
map.put("app", "Garage");
|
||||
map.put("class", "Garage_an_AddGarageOrder");
|
||||
map.put("sign", Md5.md5("Garage" + "Garage_an_AddGarageOrder" + Md5.secret));
|
||||
|
||||
getGankList(ApiConfig.BASE_URL, map, "数据提交中...", carNoEditText.getId());
|
||||
}
|
||||
|
||||
private void getGankList(String myurl, Map<String, String> map, String msg, final int requstecode) {
|
||||
|
||||
progressDialog.setMessage(msg);
|
||||
progressDialog.setCancelable(false);
|
||||
progressDialog.show();
|
||||
mGankLoader = new Loader();
|
||||
Subscription subscription = mGankLoader.getMovie(myurl, map).subscribe(new Action1<Resultcode>() {
|
||||
@Override
|
||||
public void call(Resultcode resultcode) {
|
||||
progressDialog.dismiss();
|
||||
|
||||
if (!(resultcode.status == 0)) {
|
||||
context.setToast(1, resultcode.msg);
|
||||
}
|
||||
if (resultcode.status == 0) {
|
||||
// context.setToast("提交成功!");
|
||||
LinkedTreeMap data = (LinkedTreeMap) resultcode.data;
|
||||
String s = new Gson().toJson(data);
|
||||
try {
|
||||
JSONObject jsonObject = new JSONObject(s);
|
||||
String orderSn = jsonObject.getString("order_sn");
|
||||
String stopAmount = jsonObject.getString("stop_amount");
|
||||
|
||||
gotoPay(orderSn, stopAmount);
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
dismiss();
|
||||
}
|
||||
}
|
||||
}, new Action1<Throwable>() {
|
||||
@Override
|
||||
public void call(Throwable throwable) {
|
||||
progressDialog.dismiss();
|
||||
|
||||
context.setToast(2, context.getString(R.string.getdatafailure));
|
||||
throwable.printStackTrace();
|
||||
}
|
||||
});
|
||||
|
||||
context.addSubscription(subscription);
|
||||
}
|
||||
|
||||
private void gotoPay(String orderSn, String stopAmount) {
|
||||
// 跳转支付选择界面
|
||||
Intent intent = new Intent(context, MyPayActivity.class);
|
||||
if (StringUtils.isTrimEmpty(orderSn) || StringUtils.isTrimEmpty(stopAmount) || Double.parseDouble(stopAmount) <= 0) {
|
||||
context.setToast(2, "数据异常!");
|
||||
return;
|
||||
}
|
||||
intent.putExtra("payNumber", stopAmount);
|
||||
intent.putExtra("title", "停车费");
|
||||
intent.putExtra("orderSn", orderSn);
|
||||
intent.putExtra("feeCategory", Constants.FeeCategory.PARKING_FEE);
|
||||
context.startActivityForResult(intent,Constants.PAY_REQUEST_CODE);
|
||||
}
|
||||
|
||||
public class StopResultInfo {
|
||||
private Integer stopLong;
|
||||
private Double stopAmount;
|
||||
|
||||
private StopResultInfo(Integer stopLong, Double stopAmount) {
|
||||
this.stopAmount = stopAmount;
|
||||
this.stopLong = stopLong;
|
||||
}
|
||||
|
||||
public Integer getStopLong() {
|
||||
return stopLong;
|
||||
}
|
||||
|
||||
public void setStopLong(Integer stopLong) {
|
||||
this.stopLong = stopLong;
|
||||
}
|
||||
|
||||
public Double getStopAmount() {
|
||||
return stopAmount;
|
||||
}
|
||||
|
||||
public void setStopAmount(Double stopAmount) {
|
||||
this.stopAmount = stopAmount;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user