Commit a2715edb by Wyh

1、彈窗關閉優化 2、預約單無法自動接單問題 3、供應鏈刪除單位、加運費、焦點遺失問題

parent 94e2feb7
......@@ -496,7 +496,6 @@ public class ColdChainMainActivity extends BaseFragmentActivity<ColdChainMainPre
//提示補單
new AppDialog().showWaringDialog(this, "是否暫停接單?", (view, dialog) -> {
mPresenter.updateRestOpenStatus(state, restaurantId);
dialog.dismiss();
});
}
restaurantPopup.dismiss();
......@@ -508,7 +507,6 @@ public class ColdChainMainActivity extends BaseFragmentActivity<ColdChainMainPre
} else {
//提示補單
new AppDialog().showWaringDialog(this, "不滿足送貨條件,是否需要補單?", (view, dialog) -> {
dialog.dismiss();
jumpSupplementOrder(bean);
});
}
......
......@@ -321,7 +321,6 @@ public class OrderDetailsActivity extends BaseActivity<OrderDetailsPresenter> im
} else if (btnBeans.get(position).getType() == BtnBuilder.CancelBtn) {
//取消訂單
new AppDialog().showWaringDialog(this, "確認取消訂單?", (v, dialog) -> {
dialog.dismiss();
if (bean.isDelete() == 0) {
mPresenter.cancelOrderAndLogistics(orderId);
} else {
......@@ -331,7 +330,6 @@ public class OrderDetailsActivity extends BaseActivity<OrderDetailsPresenter> im
} else if (btnBeans.get(position).getType() == BtnBuilder.LogisticsBtn) {
//取消物流
new AppDialog().showWaringDialog(this, "確認取消物流?", (v, dialog) -> {
dialog.dismiss();
mPresenter.cancelLogistics(bean.getID(), false);
});
} else if (btnBeans.get(position).getType() == BtnBuilder.PrintBtn) {
......
......@@ -225,29 +225,6 @@ class PageViewModel(private val repository: WeatherRepository) : ViewModel() {
confirmOrder(orderDetail, 2, trafficType, restaurantId, isPrintPrj = true, isPrintBill = true) {
//確認之後,刷新列表
refreshState.postValue(0)
launch({
//獲取預約單
repository.requestOrderList(restaurantId.toString(), fragmentStatus[1], fragmentType[0], "1", orderNo, phone, 1).apply {
if (isSuccess()) {
val data = getData()
if (data != null) {
val dataList = data.data
//這裡判斷數量大於1,默認有一條配置數據,忽略掉
if (dataList != null && dataList.size > 1) {
//確認訂單之前得先獲取訂單詳情
val orderInfo = repository.getOrderInfo(dataList[0].Id.toString())
if (orderInfo.data != null && orderInfo.data!!.isNotEmpty()) {
val orderDetail = orderInfo.data!![0]
if (verificationAmount(orderDetail)) return@launch
updateOrderAndPrint(restaurantId, orderDetail, 8, false) {
refreshState.postValue(0)
}
}
}
}
}
}
}, {})
}
}
}
......@@ -261,6 +238,27 @@ class PageViewModel(private val repository: WeatherRepository) : ViewModel() {
}
}
//獲取預約單
repository.requestOrderList(restaurantId.toString(), fragmentStatus[1], fragmentType[0], "1", orderNo, phone, 1).apply {
if (isSuccess()) {
val data = getData()
if (data != null) {
val dataList = data.data
//這裡判斷數量大於1,默認有一條配置數據,忽略掉
if (dataList != null && dataList.size > 1) {
//確認訂單之前得先獲取訂單詳情
val orderInfo = repository.getOrderInfo(dataList[0].Id.toString())
if (orderInfo.data != null && orderInfo.data!!.isNotEmpty()) {
val orderDetail = orderInfo.data!![0]
if (verificationAmount(orderDetail)) return@launch
updateOrderAndPrint(restaurantId, orderDetail, 8, false) {
refreshState.postValue(0)
}
}
}
}
}
}
}, {
//報錯處理
})
......
......@@ -195,7 +195,6 @@ public class PrjQueryActivity extends BaseActivity<PrjQueryPresenter> implements
if (prjData.get(position).getPrinterType() == 3) {
//已打印的,提示是否重新打印
new AppDialog().showWaringDialog(mContext, "食品已打印,確認重印?", (view1, dialog) -> {
dialog.dismiss();
organizeData(position, prjData);
});
} else {
......
......@@ -708,17 +708,11 @@ class OrderDetailsActivity : BaseActivity<IPresenter>() {
*/
private fun PageViewModel.confirmCancelLogistics(orderId: String, reasonId: String, reasonDesc: String) {
AppDialog().showWaringDialog(this@OrderDetailsActivity, "是否確認取消第三方派送?") { v, dialog ->
when (v.id) {
R.id.tv_dialog_confirm -> {
dialog.dismiss()
showLoading()
cancelLogistics(restaurantId, orderId, reasonId, reasonDesc) {
cancelDialogForLoading()
ToastUtils.show(this@OrderDetailsActivity, it)
finish()
}
}
R.id.tv_dialog_cancel -> dialog.dismiss()
showLoading()
cancelLogistics(restaurantId, orderId, reasonId, reasonDesc) {
cancelDialogForLoading()
ToastUtils.show(this@OrderDetailsActivity, it)
finish()
}
}
}
......
......@@ -265,7 +265,6 @@ public class IpPrintListActivityFragment extends BaseFragment<IpPrintListActivit
mPresenter.deletePrinter(devicess.get(position).getId() + "");
devicess.remove(position);
printListAdapter.notifyItemRemoved(position);
dialog.dismiss();
if (devicess == null || devicess.size() == 0) {
mTvAddPrint.setVisibility(View.VISIBLE);
} else {
......
......@@ -187,7 +187,6 @@ public class LocalPrintFragment extends BaseFragment<LocalPrintPresenter> implem
printCurrencyBeans.remove(finalI1);
loadView(printCurrencyBeans);
}
dialog.dismiss();
});
});
......
......@@ -56,6 +56,7 @@ public class ConfirmOrderBean {
purchaseOrder.setRestaurantId(RestaurantInfoManager.newInstance().getRestaurantId());
purchaseOrder.setRemarks(shoppingCartBean.getRemarks());
purchaseOrder.setInitialShippingTime(shoppingCartBean.getInitialShippingTime());
purchaseOrder.setShipping(shoppingCartBean.getShipping());
purchaseOrder.setTotalAmount(totalAmount);
purchaseOrder.setActualPayment(MoneyUtil.sum(totalAmount, shoppingCartBean.getShipping()));
return purchaseOrder;
......
......@@ -31,6 +31,8 @@ public interface OrderDetailsContract {
void loadOrderDetails(PurchaseOrderDetailsBean orderDetailsBean);
void uploadPicSuccess(String imgUrl);
void buyAgain();
}
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
......@@ -46,5 +48,11 @@ public interface OrderDetailsContract {
Observable<BaseResult> deleteOrder(int orderId);
/**
* 再來一單
* @param map
* @return
*/
Observable<BaseResult> buyAgainByFoodIds(Map<String, Object> map);
}
}
......@@ -72,4 +72,9 @@ public class OrderDetailsModel extends BaseModel implements OrderDetailsContract
public Observable<BaseResult> deleteOrder(int orderId) {
return mRepositoryManager.obtainRetrofitService(SupplierServer.class).deleteOrder(orderId);
}
@Override
public Observable<BaseResult> buyAgainByFoodIds(Map<String, Object> map) {
return mRepositoryManager.obtainRetrofitService(SupplierServer.class).buyAgainByFoodIds(map);
}
}
\ No newline at end of file
......@@ -19,6 +19,7 @@ import com.gingersoft.gsa.cloud.ui.adapter.bean.InfoMultiBean;
import com.gingersoft.gsa.cloud.ui.adapter.bean.MultiInputBean;
import com.gingersoft.gsa.cloud.ui.adapter.bean.MultiSelectBean;
import com.gingersoft.gsa.cloud.ui.adapter.bean.UploadPicMultiBean;
import com.gingersoft.gsa.cloud.ui.adapter.multi.RemarkProvider;
import com.gingersoft.gsa.cloud.ui.bean.SectionCheckItem;
import com.gingersoft.supply_chain.R;
import com.gingersoft.supply_chain.mvp.bean.DeputyUnitBean;
......@@ -201,21 +202,21 @@ public class NewFoodIngredientsPresenter extends BasePresenter<NewFoodIngredient
infoMultiBeans.add(new InfoMultiBean(InfoMultiBean.ITEM_TYPE_LINE));
infoMultiBeans.add(new InfoMultiBean(InfoMultiBean.ITEM_TYPE_TITLE, "基本信息"));
infoMultiBeans.add(new MultiSelectBean(InfoMultiBean.EDIT_FOOD_ITEM_SELECT, "所屬供應商", true, "請輸入/選擇供應商", SELECT_SUPPLIER_RESULTCODE, true, new InputFilter[]{InputFilterUtils.getLengthFilter(context, 16), InputFilterUtils.getChAndEnAndNumInputFilter(context)}, SupplierListFragment.class));
infoMultiBeans.add(new MultiInputBean(InfoMultiBean.ITEM_TYPE_INPUT, "食材名稱", true, "請輸入名稱"));
infoMultiBeans.add(new MultiInputBean(InfoMultiBean.ITEM_TYPE_INPUT, "食材名稱", true, "請輸入名稱", new InputFilter[]{InputFilterUtils.getLengthFilter(context, 16), InputFilterUtils.getChAndEnAndNumInputFilter(context)}));
infoMultiBeans.add(new MultiSelectBean(InfoMultiBean.EDIT_FOOD_ITEM_SELECT, "食材類別", true, "請選擇食材類別", SELECT_FOOD_CATEGORY_REQUEST_CODE, CategorySelectFragment.class));
infoMultiBeans.add(new MultiSelectBean(InfoMultiBean.EDIT_FOOD_ITEM_SELECT, "基本單位", true, "請選擇食材單位", SELECT_PACKAGE_SPECIFICATION_REQUEST_CODE, FoodUnitPageFragment.class));
infoMultiBeans.add(new MultiInputBean(InfoMultiBean.ITEM_TYPE_INPUT, "包裝說明", false, "請輸入包裝說明", new InputFilter[]{new InputFilter.LengthFilter(10)}));
infoMultiBeans.add(new MultiInputBean(InfoMultiBean.ITEM_TYPE_INPUT, "食材編號", false, "請輸入食材編號"));
infoMultiBeans.add(new MultiInputBean(InfoMultiBean.ITEM_TYPE_INPUT, "包裝說明", false, "請輸入包裝說明", new InputFilter[]{InputFilterUtils.getLengthFilter(context, 10), InputFilterUtils.getTypeFilter(context, InputFilterUtils.chAndEnAndNumAndSlash)}));
infoMultiBeans.add(new MultiInputBean(InfoMultiBean.ITEM_TYPE_INPUT, "食材編號", false, "請輸入食材編號", new InputFilter[]{InputFilterUtils.getLengthFilter(context, 11), InputFilterUtils.getEnAndNumInputFilter(context)}));
infoMultiBeans.add(new MultiInputBean(InfoMultiBean.ITEM_TYPE_INPUT, "單價($)", false, "請輸入單價,保留2位小數", new InputFilter[]{InputFilterUtils.getLengthFilter(context, 9), new DecimalDigitsInputFilter(context, 2)}, InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL));
infoMultiBeans.add(new InfoMultiBean(InfoMultiBean.ITEM_TYPE_LINE));
infoMultiBeans.add(new InfoMultiBean(InfoMultiBean.ITEM_TYPE_TITLE, "庫存預警"));
infoMultiBeans.add(new InfoMultiBean(InfoMultiBean.ITEM_MULTIPLE_BOOLEAN, "是否審核", false, "請輸入單位"));
infoMultiBeans.add(new MultiInputBean(InfoMultiBean.ITEM_TYPE_INPUT, "最低庫存", false, "請輸入最低庫存", new InputFilter[]{new InputFilter.LengthFilter(5)}, EditorInfo.TYPE_CLASS_NUMBER));
infoMultiBeans.add(new MultiInputBean(InfoMultiBean.ITEM_TYPE_INPUT, "保質期(天)", false, "請輸入保質期", new InputFilter[]{new InputFilter.LengthFilter(5)}, EditorInfo.TYPE_CLASS_NUMBER));
infoMultiBeans.add(new MultiInputBean(InfoMultiBean.ITEM_TYPE_INPUT, "保質期預警(天)", false, "請輸入預警天數", new InputFilter[]{new InputFilter.LengthFilter(5)}, EditorInfo.TYPE_CLASS_NUMBER));
infoMultiBeans.add(new MultiInputBean(InfoMultiBean.ITEM_TYPE_INPUT, "最低庫存", false, "請輸入最低庫存", new InputFilter[]{InputFilterUtils.getLengthFilter(context, 5)}, EditorInfo.TYPE_CLASS_NUMBER));
infoMultiBeans.add(new MultiInputBean(InfoMultiBean.ITEM_TYPE_INPUT, "保質期(天)", false, "請輸入保質期", new InputFilter[]{InputFilterUtils.getLengthFilter(context, 5)}, EditorInfo.TYPE_CLASS_NUMBER));
infoMultiBeans.add(new MultiInputBean(InfoMultiBean.ITEM_TYPE_INPUT, "保質期預警(天)", false, "請輸入預警天數", new InputFilter[]{InputFilterUtils.getLengthFilter(context, 5)}, EditorInfo.TYPE_CLASS_NUMBER));
infoMultiBeans.add(new InfoMultiBean(InfoMultiBean.ITEM_TYPE_LINE));
infoMultiBeans.add(new InfoMultiBean(InfoMultiBean.ITEM_TYPE_TITLE, "備註"));
infoMultiBeans.add(new MultiInputBean(InfoMultiBean.ITEM_MULTIPLE_INPUT_REMARK, "", false, "請輸入備註"));
infoMultiBeans.add(new MultiInputBean(InfoMultiBean.ITEM_MULTIPLE_INPUT_REMARK, "", false, "請輸入備註", new InputFilter[]{InputFilterUtils.getLengthFilter(context, RemarkProvider.REMARK_TEXT_LENGTH), InputFilterUtils.getChAndEnAndNumAndPtInputFilter(context)}));
if (purchaseFoodBean != null) {
//供應商名稱
infoMultiBeans.get(supplierIndex).setShowValue(purchaseFoodBean.getSupplierName());
......@@ -318,6 +319,11 @@ public class NewFoodIngredientsPresenter extends BasePresenter<NewFoodIngredient
categoryName.append(categoryTrees.getName())
.append(PurchaseFoodBean.CATEGORY_DIVIDER);
}
if (purchaseFoodBean != null) {
//食材信息不為空,設置分類id為最後一個分類的id
//例如:選擇了一個三級分類,下標0為父類,1為子類,2位當前分類
purchaseFoodBean.setFoodCategoryId(foodCategoryTrees.get(foodCategoryTrees.size() - 1).getId());
}
categoryName.deleteCharAt(categoryName.lastIndexOf(PurchaseFoodBean.CATEGORY_DIVIDER));
infoMultiBeans.get(foodIngredientCategoryIndex).setShowValue(categoryName.toString());
mRootView.refreshAdapterByPosition(foodIngredientCategoryIndex);
......
......@@ -164,7 +164,7 @@ public class NewSupplierPresenter extends BasePresenter<NewSupplierContract.Mode
infoMultiBeans.add(new InfoMultiBean(InfoMultiBean.ITEM_TYPE_LINE));
infoMultiBeans.add(new InfoMultiBean(InfoMultiBean.ITEM_TYPE_TITLE, "備註"));
MultiInputBean remarkInputBean = new MultiInputBean(InfoMultiBean.ITEM_MULTIPLE_INPUT_REMARK, null, false, "請輸入備註", new InputFilter[]{InputFilterUtils.getMaxLengthFilterDisChAndEn(RemarkProvider.REMARK_TEXT_LENGTH), InputFilterUtils.getChAndEnAndNumInputFilter(mContext)});
MultiInputBean remarkInputBean = new MultiInputBean(InfoMultiBean.ITEM_MULTIPLE_INPUT_REMARK, null, false, "請輸入備註", new InputFilter[]{InputFilterUtils.getLengthFilter(mContext, RemarkProvider.REMARK_TEXT_LENGTH), InputFilterUtils.getChAndEnAndNumAndPtInputFilter(mContext)});
remarkInputBean.setMaxLength(RemarkProvider.REMARK_TEXT_LENGTH);
infoMultiBeans.add(remarkInputBean);
......
......@@ -10,10 +10,12 @@ import com.gingersoft.gsa.cloud.common.utils.gson.GsonUtils;
import com.gingersoft.gsa.cloud.common.utils.other.TextUtil;
import com.gingersoft.gsa.cloud.common.utils.view.BitmapUtil;
import com.gingersoft.supply_chain.mvp.bean.DeputyUnitBean;
import com.gingersoft.supply_chain.mvp.bean.PurchaseFoodBean;
import com.gingersoft.supply_chain.mvp.bean.PurchaseOrderDetailsBean;
import com.gingersoft.supply_chain.mvp.bean.OrderWareHouseBean;
import com.gingersoft.supply_chain.mvp.bean.WareHousingUnitBean;
import com.gingersoft.supply_chain.mvp.content.Constant;
import com.gingersoft.supply_chain.mvp.content.SupplyShoppingCart;
import com.jess.arms.integration.AppManager;
import com.jess.arms.di.scope.FragmentScope;
import com.jess.arms.mvp.BasePresenter;
......@@ -273,6 +275,52 @@ public class OrderDetailsPresenter extends BasePresenter<OrderDetailsContract.Mo
}
/**
* 再來一單
*/
public void buyAgainByFoodIds(List<PurchaseOrderDetailsBean.PurchaseOrderDetailsInfoVosBean> data) {
if (data == null || data.size() <= 0) {
return;
}
Map<String, Object> map = new HashMap<>(3);
Constant.addRestaurantId(map);
Constant.addBrandId(map);
StringBuilder stringBuilder = new StringBuilder();
for (PurchaseOrderDetailsBean.PurchaseOrderDetailsInfoVosBean item : data) {
stringBuilder.append(item.getPurchaseFoodId()).append(",");
}
map.put("ids", stringBuilder.substring(0, stringBuilder.length() - 1));
mModel.buyAgainByFoodIds(map)
.subscribeOn(Schedulers.io())
.doOnSubscribe(disposable -> mRootView.showLoading(GET_INFO_LOADING))
.subscribeOn(AndroidSchedulers.mainThread())
.doAfterNext(disposable -> mRootView.hideLoading())
.observeOn(AndroidSchedulers.mainThread())
.compose(RxLifecycleUtils.bindToLifecycle(mRootView))
.subscribe(new ErrorHandleSubscriber<BaseResult>(mErrorHandler) {
@Override
public void onNext(BaseResult baseResult) {
if (baseResult.isSuccess()) {
List<PurchaseFoodBean> purchaseFoodBeans = GsonUtils.GsonToList(baseResult.getData(), PurchaseFoodBean.class);
for (PurchaseFoodBean purchaseFoodBean : purchaseFoodBeans) {
for (PurchaseOrderDetailsBean.PurchaseOrderDetailsInfoVosBean item : data) {
if (purchaseFoodBean.getId() == item.getPurchaseFoodId()) {
purchaseFoodBean.setFoodQuantity(item.getFoodQuantity());
break;
}
}
}
SupplyShoppingCart.getInstance().clear();
SupplyShoppingCart.getInstance().getCartFoods().addAll(purchaseFoodBeans);
mRootView.buyAgain();
} else {
mRootView.showMessage(GET_INFO_ERROR);
}
}
});
}
/**
* 生成入庫對象
*/
private OrderWareHouseBean getWareHouseBean(int state, String remark, double totalAmount, List<OrderWareHouseBean.PurchaseWarehousingOrderDetail> purchaseWarehousingOrderDetails) {
......
......@@ -101,7 +101,9 @@ public class ShoppingCatPresenter extends BasePresenter<ShoppingCatContract.Mode
PurchaseFoodBean food = foods.get(0);
shoppingCartBean.setAddress(food.getAddress());
shoppingCartBean.setMinimumAmount(food.getMinimumAmount());
shoppingCartBean.setSupplierId(entry.getKey());
if (entry.getKey() != null) {
shoppingCartBean.setSupplierId(entry.getKey());
}
shoppingCartBean.setSupplierName(food.getSupplierName());
//統計當前供應商所選中食品的總金額
double supplierTotalAmount = 0;
......
......@@ -283,6 +283,16 @@ public interface SupplierServer {
Observable<BaseResult> deleteOrder(@Field("id") int orderId);
/**
* 再來一單,通過食材ids獲取詳細信息
*
* @param map
* @return
*/
@Headers({"Domain-Name: ricepon-purchase"})
@GET("purchaseFood/batch/list" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<BaseResult> buyAgainByFoodIds(@QueryMap Map<String, Object> map);
/**
* 獲取下單頁面的分類結構
*
* @param map
......
......@@ -2,7 +2,6 @@ package com.gingersoft.supply_chain.mvp.ui.activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.EditText;
......@@ -10,7 +9,6 @@ import android.widget.EditText;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.gingersoft.gsa.cloud.ui.adapter.multi.InfoMultiAdapter;
import com.gingersoft.gsa.cloud.ui.widget.dialog.LoadingDialog;
import com.gingersoft.supply_chain.R;
import com.gingersoft.supply_chain.di.component.DaggerSupplyChainMainComponent;
......@@ -18,14 +16,10 @@ import com.gingersoft.supply_chain.mvp.content.SupplyShoppingCart;
import com.gingersoft.supply_chain.mvp.contract.SupplyChainMainContract;
import com.gingersoft.supply_chain.mvp.presenter.SupplyChainMainPresenter;
import com.gingersoft.supply_chain.mvp.ui.fragment.FunctionListFragment;
import com.gingersoft.supply_chain.mvp.ui.fragment.food.FoodUnitPageFragment;
import com.gingersoft.supply_chain.mvp.utils.NotDispatchListener;
import com.gingersoft.supply_chain.mvp.utils.HideUtil;
import com.jess.arms.base.BaseFragmentActivity;
import com.jess.arms.di.component.AppComponent;
import com.jess.arms.utils.ArmsUtils;
import com.jess.arms.utils.DeviceUtils;
import com.xuexiang.rxutil2.rxjava.RxJavaUtils;
import static com.jess.arms.utils.Preconditions.checkNotNull;
......@@ -51,30 +45,27 @@ public class SupplyChainMainActivity extends BaseFragmentActivity<SupplyChainMai
@Override
public void initData(@Nullable Bundle savedInstanceState) {
// HideUtil.init(this);
loadRootFragment(R.id.layout_supply_chain_content, FunctionListFragment.newInstance());
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
if (getTopFragment() instanceof NotDispatchListener) {
return super.dispatchTouchEvent(ev);
}
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
// 获得当前得到焦点的View,一般情况下就是EditText(特殊情况就是轨迹求或者实体案件会移动焦点)
View v = getCurrentFocus();
if(v != null && v.getTag() != null && v.getTag() == InfoMultiAdapter.NOT_HIDE_KEYBOARD){
return super.dispatchTouchEvent(ev);
}
if (isShouldHideInput(v, ev)) {
if (v instanceof EditText) {
//不然不會觸發焦點監聽事件
v.clearFocus();
}
DeviceUtils.hideSoftKeyboard(mContext, getWindow().getDecorView());
}
}
return super.dispatchTouchEvent(ev);
}
// @Override
// public boolean dispatchTouchEvent(MotionEvent ev) {
// if (getTopFragment() instanceof NotDispatchListener) {
// return super.dispatchTouchEvent(ev);
// }
// if (ev.getAction() == MotionEvent.ACTION_DOWN) {
// // 获得当前得到焦点的View,一般情况下就是EditText(特殊情况就是轨迹求或者实体案件会移动焦点)
// View v = getCurrentFocus();
// if (v != null && v.getTag() != null && v.getTag() == InfoMultiAdapter.NOT_HIDE_KEYBOARD) {
// return super.dispatchTouchEvent(ev);
// }
// if (isShouldHideInput(v, ev)) {
// DeviceUtils.hideSoftKeyboard(mContext, v);
// }
// }
// return super.dispatchTouchEvent(ev);
// }
/**
* 根据EditText所在坐标和用户点击的坐标相对比,来判断是否隐藏键盘,因为当用户点击EditText时没必要隐藏
......@@ -90,8 +81,13 @@ public class SupplyChainMainActivity extends BaseFragmentActivity<SupplyChainMai
int left = l[0], top = l[1], bottom = top + v.getHeight(), right = left
+ v.getWidth();
// 点击EditText的事件,忽略它。
return event.getX() <= left || event.getX() >= right
|| event.getY() <= top || event.getY() >= bottom;
if (event.getX() > left && event.getX() < right
&& event.getY() > top && event.getY() < bottom) {
// 点击的是输入框区域,保留点击EditText的事件
return false;
} else {
return true;
}
}
// 如果焦点不是EditText则忽略,这个发生在视图刚绘制完,第一个焦点不在EditView上,和用户用轨迹球选择其他的焦点
return false;
......
package com.gingersoft.supply_chain.mvp.ui.adapter;
import android.text.Editable;
import android.text.InputFilter;
import android.text.TextWatcher;
import android.view.View;
import android.widget.EditText;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.viewholder.BaseViewHolder;
import com.gingersoft.gsa.cloud.common.utils.inputFilter.InputFilterUtils;
import com.gingersoft.gsa.cloud.common.utils.other.TextUtil;
import com.gingersoft.supply_chain.R;
import com.gingersoft.supply_chain.mvp.bean.BasicUnitBean;
......@@ -38,6 +40,7 @@ public class DeputyUnitAdapter extends BaseQuickAdapter<DeputyUnitBean, BaseView
viewHolder.setText(R.id.tv_deputy_unit_title, "副單位" + (viewHolder.getAdapterPosition() + 1));
viewHolder.setText(R.id.ed_deputy_unit_name, item.getDeputyUnit());
viewHolder.setText(R.id.ed_deputy_unit_conversion_multiple, item.getConversionMultiple() + "");
//副單位換算倍數
TextWatcher deputyUnitNameWatcher = new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
......@@ -55,6 +58,8 @@ public class DeputyUnitAdapter extends BaseQuickAdapter<DeputyUnitBean, BaseView
deputyUnitBean.setDeputyUnit(s + "");
}
};
//副單位名稱輸入框
edDeputyUnitName.setFilters(new InputFilter[]{InputFilterUtils.getLengthFilter(getContext(), 5), InputFilterUtils.getChAndEnAndNumInputFilter(getContext())});
setFocusChangeListener(edDeputyUnitName, deputyUnitNameWatcher);
TextWatcher conversionMultipleWatcher = new TextWatcher() {
@Override
......@@ -75,6 +80,7 @@ public class DeputyUnitAdapter extends BaseQuickAdapter<DeputyUnitBean, BaseView
}
}
};
setFocusChangeListener(edConversionMultiple, conversionMultipleWatcher);
if (TextUtil.isEmptyOrNullOrUndefined(item.getDeputyUnit())) {
edDeputyUnitName.requestFocus();
......
......@@ -154,7 +154,6 @@ public class CategoryFragment extends BaseSupplyChainFragment<CategoryPresenter>
//刪除分類
AppDialog.getInstance().showWaringDialog(mContext, String.format(getString(R.string.str_delete_category_tip), foodCategoryTrees.getName()), (view, dialog) -> {
categoryPopup.dismiss();
dialog.dismiss();
mPresenter.deleteFoodCategory(foodCategoryTrees, currentLevel, position);
});
});
......
......@@ -401,7 +401,6 @@ public class FoodIngredientsFragment extends BaseSupplyChainFragment<FoodIngredi
purchaseFoodBean.setFoodCategoryName(getCurrentCategory());
}
mPresenter.deleteFood(purchaseFoodBean.getId(), purchaseFoodBean.getSupplierId(), purchaseFoodBean.getFoodCategoryId(), position);
dialog.dismiss();
});
}
});
......
package com.gingersoft.supply_chain.mvp.ui.fragment.food;
import android.os.Bundle;
import android.text.InputFilter;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
......@@ -16,6 +17,7 @@ import androidx.recyclerview.widget.RecyclerView;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.listener.OnItemChildClickListener;
import com.gingersoft.gsa.cloud.common.utils.inputFilter.InputFilterUtils;
import com.gingersoft.gsa.cloud.common.utils.other.TextUtil;
import com.gingersoft.gsa.cloud.ui.utils.AppDialog;
import com.gingersoft.supply_chain.R;
......@@ -28,8 +30,14 @@ import com.gingersoft.supply_chain.mvp.presenter.FoodUnitPagePresenter;
import com.gingersoft.supply_chain.mvp.ui.adapter.BasicUnitAdapter;
import com.gingersoft.supply_chain.mvp.ui.adapter.DeputyUnitAdapter;
import com.gingersoft.supply_chain.mvp.ui.fragment.BaseSupplyChainFragment;
import com.gingersoft.supply_chain.mvp.ui.widget.EditTextPopup;
import com.gingersoft.supply_chain.mvp.utils.NotDispatchListener;
import com.jess.arms.di.component.AppComponent;
import com.lxj.xpopup.XPopup;
import com.lxj.xpopup.impl.ConfirmPopupView;
import com.lxj.xpopup.interfaces.OnCancelListener;
import com.lxj.xpopup.interfaces.OnConfirmListener;
import com.lxj.xpopup.interfaces.OnInputConfirmListener;
import com.qmuiteam.qmui.alpha.QMUIAlphaTextView;
import com.qmuiteam.qmui.widget.QMUITopBar;
import com.qmuiteam.qmui.widget.dialog.QMUIDialog;
......@@ -46,7 +54,7 @@ import butterknife.OnClick;
/**
* ================================================
* Description: 最新版食品單位填寫頁面
* Description: 食品單位填寫頁面
*/
public class FoodUnitPageFragment extends BaseSupplyChainFragment<FoodUnitPagePresenter> implements FoodUnitPageContract.View, NotDispatchListener {
......@@ -117,6 +125,7 @@ public class FoodUnitPageFragment extends BaseSupplyChainFragment<FoodUnitPagePr
@Override
public void initData(@Nullable Bundle savedInstanceState) {
mPresenter.initData(getArguments());
edBasicUnit.setFilters(new InputFilter[]{InputFilterUtils.getLengthFilter(requireContext(), 5), InputFilterUtils.getChAndEnAndNumInputFilter(requireContext())});
edBasicUnit.requestFocus();
}
......@@ -156,14 +165,12 @@ public class FoodUnitPageFragment extends BaseSupplyChainFragment<FoodUnitPagePr
basicUnitAdapter.setOnItemClickListener((adapter, view, position) -> {
if (position == basicUnitAdapter.getItemCount() - 1) {
//新增
AppDialog.getInstance().showEditDialog(mContext, "新增單位", "單位名稱:", "", "", new AppDialog.OnInputConfirmListener() {
@Override
public void onConfirm(String text) {
if (TextUtil.isNotEmptyOrNullOrUndefined(text)) {
mPresenter.addBasicUnit(text, basicUnitAdapter.getData());
}
EditTextPopup popup = new EditTextPopup(requireContext(), new InputFilter[]{InputFilterUtils.getLengthFilter(mContext, 4), InputFilterUtils.getChAndEnAndNumInputFilter(mContext)});
popup.setListener(text -> {
if (TextUtil.isNotEmptyOrNullOrUndefined(text)) {
mPresenter.addBasicUnit(text, basicUnitAdapter.getData());
}
});
}, null);
} else {
//先獲取當前焦點在哪個輸入框上,然後再填充內容
FragmentActivity activity = getActivity();
......
......@@ -177,7 +177,6 @@ public class MeasurementUnitFragment extends BaseSupplyChainFragment<Measurement
List<MeasurementUnitBean.DataBean.Unit> data = measurementUnitAdapter.getData();
MeasurementUnitBean.DataBean.Unit unit = data.get(position);
new AppDialog().showWaringDialog(mContext, "是否確認刪除?", (view1, dialog) -> {
dialog.dismiss();
mPresenter.deleteMeasurementUnit(unit, position);
});
});
......
......@@ -98,7 +98,7 @@ public class NewFoodUnitFragment extends BaseSupplyChainFragment<NewFoodUnitPres
infoMultiBeans.add(unitType);
infoMultiBeans.add(new MultiInputBean(InfoMultiBean.ITEM_TYPE_INPUT, "計量單位", false, "請輸入計量單位", new InputFilter[]{InputFilterUtils.getLengthFilter(mContext, 4), InputFilterUtils.getChAndEnAndNumInputFilter(mContext)}));
infoMultiBeans.add(new MultiInputBean(InfoMultiBean.ITEM_MULTIPLE_INPUT_REMARK, "備註", false, "請輸入備註", new InputFilter[]{InputFilterUtils.getChAndEnAndNumInputFilter(mContext)}));
infoMultiBeans.add(new MultiInputBean(InfoMultiBean.ITEM_MULTIPLE_INPUT_REMARK, "備註", false, "請輸入備註", new InputFilter[]{InputFilterUtils.getChAndEnAndNumAndPtInputFilter(mContext)}));
if(foodUnit != null){
units.get(foodUnit.getType()).setChecked(true);
infoMultiBeans.get(1).setShowValue(foodUnit.getUnitContent());
......
package com.gingersoft.supply_chain.mvp.ui.fragment.order;
import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
......@@ -32,6 +33,7 @@ import com.gingersoft.gsa.cloud.common.utils.inputFilter.InputFilterUtils;
import com.gingersoft.gsa.cloud.common.utils.other.TextUtil;
import com.gingersoft.gsa.cloud.common.utils.time.TimeUtils;
import com.gingersoft.gsa.cloud.common.utils.toast.ToastUtils;
import com.gingersoft.gsa.cloud.ui.adapter.multi.RemarkProvider;
import com.gingersoft.gsa.cloud.ui.utils.AppDialog;
import com.gingersoft.supply_chain.R;
import com.gingersoft.supply_chain.R2;
......@@ -151,7 +153,7 @@ public class OrderDetailsFragment extends BaseSupplyChainFragment<OrderDetailsPr
initTopBar(supplyTopBar, "入庫單");
supplyTopBar.addRightImageButton(R.drawable.ic_white_more, R.id.id_more).setOnClickListener(this);
supplyTopBar.addRightImageButton(R.drawable.ic_take_pictures, R.id.id_take_pictures).setOnClickListener(this);
edRemark.setFilters(new InputFilter[]{InputFilterUtils.getLengthFilter(requireContext(), 50)});
edRemark.setFilters(new InputFilter[]{InputFilterUtils.getLengthFilter(mContext, RemarkProvider.REMARK_TEXT_LENGTH), InputFilterUtils.getChAndEnAndNumAndPtInputFilter(mContext)});
Bundle arguments = getArguments();
if (arguments != null) {
int orderId = arguments.getInt(ORDER_DETAILS_ORDER_ID, 0);
......@@ -182,50 +184,50 @@ public class OrderDetailsFragment extends BaseSupplyChainFragment<OrderDetailsPr
//更多:刪除。發送。再次購買
String[] functions;
if (orderState == PurchaseOrderDetailsBean.COMPLETE_RECEIVED) {
functions = new String[]{"删除"};
functions = new String[]{"再來一單", "删除"};
} else {
functions = new String[]{"删除", "部分收貨", "收貨"};
functions = new String[]{"再來一單", "删除", "部分收貨", "收貨"};
}
new XPopup.Builder(mContext)
.atView(v)
.hasShadowBg(false)
.popupPosition(PopupPosition.Left)
.asCustom(new PurchaseListMorePopup(mContext)
.setStringData(functions, new int[]{R.drawable.ic_purchase_delete, R.drawable.ic_small_partial_receipt, R.drawable.ic_receipt})
.setStringData(functions, new int[]{R.drawable.ic_purchase_buy_again, R.drawable.ic_purchase_delete, R.drawable.ic_small_partial_receipt, R.drawable.ic_receipt})
.setOnSelectListener(mOnSelectListener))
.show();
} else if (viewId == R.id.tv_order_details_partial_receipt) {
//部分收貨
mPresenter.addWarehouse(PurchaseOrderDetailsBean.PART_RECEIVED, edRemark.getText() + "", totalAmount, orderDetailsFoodAdapter.getData());
// setFragmentResult(RESULT_OK, null);
addWarehouse(PurchaseOrderDetailsBean.PART_RECEIVED);
} else if (viewId == R.id.tv_order_details_receipt) {
//收貨
mPresenter.addWarehouse(PurchaseOrderDetailsBean.COMPLETE_RECEIVED, edRemark.getText() + "", totalAmount, orderDetailsFoodAdapter.getData());
// setFragmentResult(RESULT_OK, null);
addWarehouse(PurchaseOrderDetailsBean.COMPLETE_RECEIVED);
} else if (viewId == R.id.layout_remarks) {
//備註,顯示備註輸入框
layoutEdRemark.setVisibility(layoutEdRemark.getVisibility() == View.VISIBLE ? View.GONE : View.VISIBLE);
}
}
private OnSelectListener mOnSelectListener = new OnSelectListener() {
@Override
public void onSelect(int position, String text) {
if (position == 0) {
//刪除
AppDialog.getInstance().showWaringDialog(mContext, "是否刪除訂單", (view1, dialog) -> {
dialog.dismiss();
mPresenter.deleteOrder();
});
} else if (position == 1) {
//部分收貨
mPresenter.addWarehouse(PurchaseOrderDetailsBean.PART_RECEIVED, edRemark.getText() + "", totalAmount, orderDetailsFoodAdapter.getData());
setFragmentResult(RESULT_OK, null);
} else if (position == 2) {
//收貨
mPresenter.addWarehouse(PurchaseOrderDetailsBean.COMPLETE_RECEIVED, edRemark.getText() + "", totalAmount, orderDetailsFoodAdapter.getData());
setFragmentResult(RESULT_OK, null);
}
private void addWarehouse(int state) {
AppDialog.getInstance().showWaringDialog(requireContext(), "是否確認收貨?", (view, dialog) -> {
mPresenter.addWarehouse(state, edRemark.getText() + "", totalAmount, orderDetailsFoodAdapter.getData());
setFragmentResult(RESULT_OK, null);
});
}
private OnSelectListener mOnSelectListener = (position, text) -> {
if (position == 0) {
//再來一單
mPresenter.buyAgainByFoodIds(orderDetailsFoodAdapter.getData());
} else if (position == 1) {
//刪除訂單
AppDialog.getInstance().showWaringDialog(mContext, "是否刪除訂單", (view1, dialog) -> mPresenter.deleteOrder());
} else if (position == 2) {
//部分收貨
addWarehouse(PurchaseOrderDetailsBean.PART_RECEIVED);
} else if (position == 3) {
//收貨
addWarehouse(PurchaseOrderDetailsBean.COMPLETE_RECEIVED);
}
};
......@@ -313,6 +315,11 @@ public class OrderDetailsFragment extends BaseSupplyChainFragment<OrderDetailsPr
imageAdapter.addData(imgUrl);
}
@Override
public void buyAgain() {
startWithPop(ShoppingCatFragment.newInstance());
}
public static class ImageLoader implements XPopupImageLoader {
@Override
public void loadImage(int position, @NonNull Object url, @NonNull ImageView imageView) {
......
......@@ -194,7 +194,6 @@ public class PurchaseListFragment extends BaseSupplyChainFragment<PurchaseListPr
if (popupPosition == 0) {
//刪除
AppDialog.getInstance().showWaringDialog(mContext, "是否刪除訂單", (view1, dialog) -> {
dialog.dismiss();
mPresenter.deleteOrder(position, purchaseOrderAdapter.getData().get(position).getId());
});
} else if (popupPosition == 1) {
......
......@@ -121,7 +121,6 @@ public class ShoppingCatFragment extends BaseSupplyChainFragment<ShoppingCatPres
//完成,篩選出選擇的食品
if (mPresenter.filterData(shoppingCartAdapter.getData())) {
AppDialog.getInstance().showWaringDialog(requireContext(), "確認創建訂單?", (view, dialog) -> {
dialog.dismiss();
mPresenter.createOrder(shoppingCartAdapter.getData());
});
}
......
......@@ -2,8 +2,10 @@ package com.gingersoft.supply_chain.mvp.ui.fragment.supplier;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
......@@ -20,6 +22,7 @@ import com.gingersoft.supply_chain.mvp.contract.NewSupplierContract;
import com.gingersoft.supply_chain.mvp.presenter.NewSupplierPresenter;
import com.gingersoft.supply_chain.mvp.ui.fragment.BaseSupplyChainFragment;
import com.jess.arms.di.component.AppComponent;
import com.jess.arms.utils.DeviceUtils;
import com.qmuiteam.qmui.alpha.QMUIAlphaButton;
import com.qmuiteam.qmui.widget.QMUITopBar;
......@@ -31,6 +34,7 @@ import static com.gingersoft.gsa.cloud.ui.recylcler.decorator.DividerItemDecorat
/**
* Description:新增或編輯供應商
*
* @author yuhang
*/
public class NewSupplierFragment extends BaseSupplyChainFragment<NewSupplierPresenter> implements NewSupplierContract.View, View.OnClickListener {
......@@ -104,7 +108,6 @@ public class NewSupplierFragment extends BaseSupplyChainFragment<NewSupplierPres
if (viewId == R.id.topbar_right_delete_button) {
//刪除供應商
new AppDialog().showWaringDialog(mContext, "刪除供應商", (view1, dialog) -> {
dialog.dismiss();
mPresenter.deleteSupplier(supplierBean.getId());
});
} else if (viewId == R.id.btn_save_supplier) {
......
package com.gingersoft.supply_chain.mvp.ui.fragment.supplier;
import android.os.Bundle;
import android.text.InputFilter;
import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
......@@ -16,6 +17,7 @@ import androidx.recyclerview.widget.RecyclerView;
import com.gingersoft.gsa.cloud.common.loadsir.EmptyCallback;
import com.gingersoft.gsa.cloud.common.loadsir.ErrorCallback;
import com.gingersoft.gsa.cloud.common.utils.inputFilter.InputFilterUtils;
import com.gingersoft.gsa.cloud.ui.utils.AppDialog;
import com.gingersoft.supply_chain.R;
import com.gingersoft.supply_chain.R2;
......@@ -142,6 +144,7 @@ public class SupplierListFragment extends BaseSupplyChainFragment<SupplierListPr
}
return false;
});
edSupplier.setFilters(new InputFilter[]{InputFilterUtils.getLengthFilter(mContext, 16), InputFilterUtils.getChAndEnAndNumInputFilter(mContext)});
}
private void getSupplierList() {
......@@ -226,7 +229,6 @@ public class SupplierListFragment extends BaseSupplyChainFragment<SupplierListPr
supplierAdapter.setOnItemChildClickListener((adapter, view, position) -> {
if (view.getId() == R.id.iv_supplier_delete) {
new AppDialog().showWaringDialog(mContext, "刪除供應商", (view1, dialog) -> {
dialog.dismiss();
List<SupplierInfoBean> data = supplierAdapter.getData();
mPresenter.deleteSupplier(data.get(position).getId(), position);
});
......
package com.gingersoft.supply_chain.mvp.ui.fragment.warehouse;
import android.os.Bundle;
import android.text.InputFilter;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
......@@ -19,6 +20,7 @@ import com.chad.library.adapter.base.listener.OnItemChildClickListener;
import com.chad.library.adapter.base.listener.OnItemClickListener;
import com.gingersoft.gsa.cloud.common.loadsir.EmptyCallback;
import com.gingersoft.gsa.cloud.common.loadsir.ErrorCallback;
import com.gingersoft.gsa.cloud.common.utils.inputFilter.InputFilterUtils;
import com.gingersoft.supply_chain.R;
import com.gingersoft.supply_chain.R2;
import com.gingersoft.supply_chain.di.component.DaggerWareHouseListComponent;
......@@ -120,6 +122,7 @@ public class WareHouseListFragment extends BaseSupplyChainFragment<WareHouseList
getWarehousing();
});
getWarehousing();
edWarehouseListSearch.setFilters(new InputFilter[]{InputFilterUtils.getLengthFilter(mContext, 16), InputFilterUtils.getChAndEnAndNumAndPtInputFilter(mContext)});
}
private void getWarehousing() {
......@@ -190,7 +193,7 @@ public class WareHouseListFragment extends BaseSupplyChainFragment<WareHouseList
rvWarehouseList.setAdapter(warehousingQueryAdapter);
warehousingQueryAdapter.setOnItemChildClickListener((adapter, view, position) -> {
if(view.getId() == R.id.tv_warehouse_item_inventory_quantity){
if (view.getId() == R.id.tv_warehouse_item_inventory_quantity) {
//點擊庫存數量,進入庫存盤點
startForResult(WarehousingInventoryFragment.newInstance(warehousingQueryAdapter.getItem(position)), UPDATE_KEY);
}
......@@ -207,7 +210,7 @@ public class WareHouseListFragment extends BaseSupplyChainFragment<WareHouseList
@Override
public void onFragmentResult(int requestCode, int resultCode, Bundle data) {
super.onFragmentResult(requestCode, resultCode, data);
if(requestCode == UPDATE_KEY && resultCode == RESULT_OK){
if (requestCode == UPDATE_KEY && resultCode == RESULT_OK) {
getWarehousing();
}
}
......
package com.gingersoft.supply_chain.mvp.ui.widget;
import android.content.Context;
import android.text.InputFilter;
import androidx.annotation.NonNull;
import com.gingersoft.supply_chain.R;
import com.lxj.xpopup.impl.InputConfirmPopupView;
/**
* @author 宇航.
* User: admin
* Date: 2021/2/4
* Time: 10:20
* Use:
*/
public class EditTextPopup extends InputConfirmPopupView {
private InputFilter[] inputFilters;
/**
* @param context
*/
public EditTextPopup(@NonNull Context context) {
super(context, R.layout.dialog_edit);
}
/**
* @param context
*/
public EditTextPopup(@NonNull Context context, InputFilter[] inputFilters) {
super(context, R.layout.dialog_edit);
this.inputFilters = inputFilters;
}
@Override
protected void onCreate() {
super.onCreate();
getEditText().setFilters(inputFilters);
}
}
......@@ -2,6 +2,7 @@ package com.gingersoft.supply_chain.mvp.ui.widget;
import android.content.Context;
import android.text.Editable;
import android.text.InputFilter;
import android.text.TextWatcher;
import android.view.View;
import android.widget.EditText;
......@@ -14,7 +15,9 @@ import androidx.recyclerview.widget.RecyclerView;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.listener.OnItemClickListener;
import com.chad.library.adapter.base.viewholder.BaseViewHolder;
import com.gingersoft.gsa.cloud.common.utils.inputFilter.InputFilterUtils;
import com.gingersoft.gsa.cloud.common.utils.toast.ToastUtils;
import com.gingersoft.gsa.cloud.ui.adapter.multi.RemarkProvider;
import com.gingersoft.supply_chain.R;
import com.gingersoft.supply_chain.mvp.bean.ConsumeReasonBean;
import com.lxj.xpopup.impl.ConfirmPopupView;
......@@ -61,6 +64,7 @@ public class InventoryConsumptionPopup extends ConfirmPopupView {
protected void onCreate() {
super.onCreate();
edRemarks = findViewById(R.id.ed_inventory_consumption_remark);
edRemarks.setFilters(new InputFilter[]{InputFilterUtils.getLengthFilter(getContext(), RemarkProvider.REMARK_TEXT_LENGTH), InputFilterUtils.getChAndEnAndNumAndPtInputFilter(getContext())});
edInput = findViewById(R.id.et_input);
rvConsumptionReason = findViewById(R.id.rv_inventory_consumption_reason);
ConsumptionReasonAdapter consumptionReasonAdapter = new ConsumptionReasonAdapter();
......
......@@ -21,11 +21,21 @@ public class InputFilterUtils {
/**
* 只能輸入中英文和數字
*/
public static final Pattern ChAndEnAndNum = Pattern.compile("[-a-zA-Z0-9\u4E00-\u9FA5]+");
public static final Pattern chAndEnAndNum = Pattern.compile("[a-zA-Z0-9\u4E00-\u9FA5]+");
/**
* 只能輸入英文和數字
*/
public static final Pattern EnAndNum = Pattern.compile("[-a-zA-Z0-9]+");
public static final Pattern enAndNum = Pattern.compile("[a-zA-Z0-9]+");
/**
* 只能輸入中英文和數字還有一些標點符號
* Punctuation
*/
public static final Pattern chAndEnAndNumAndPt = Pattern.compile("[-a-zA-Z0-9\u4E00-\u9FA5/,.;,。;!!??]+");
/**
* 只能輸入中英文和數字還有/
* Punctuation
*/
public static final Pattern chAndEnAndNumAndSlash = Pattern.compile("[-a-zA-Z0-9\u4E00-\u9FA5/]+");
/**
* emoji过滤器
......@@ -34,8 +44,20 @@ public class InputFilterUtils {
"[\ud83c\udc00-\ud83c\udfff]|[\ud83d\udc00-\ud83d\udfff]|[\u2600-\u27ff]",
Pattern.UNICODE_CASE | Pattern.CASE_INSENSITIVE);
public static InputFilter getChAndEnAndNumAndPtInputFilter(Context mContext) {
return InputFilterUtils.getTypeFilter(mContext, "請輸入中英文和數字", chAndEnAndNumAndPt);
}
public static InputFilter getTypeFilter(Context mContext, Pattern p) {
return InputFilterUtils.getTypeFilter(mContext, "不支持輸入此內容", p);
}
public static InputFilter getChAndEnAndNumInputFilter(Context mContext) {
return InputFilterUtils.getTypeFilter(mContext, "請輸入中英文和數字", InputFilterUtils.ChAndEnAndNum);
return InputFilterUtils.getTypeFilter(mContext, "請輸入中英文和數字", chAndEnAndNum);
}
public static InputFilter getEnAndNumInputFilter(Context mContext) {
return InputFilterUtils.getTypeFilter(mContext, "請輸入英文和數字", enAndNum);
}
public static InputFilter getLengthFilter(Context mContext, int maxLength) {
......@@ -53,7 +75,7 @@ public class InputFilterUtils {
* @param p
* @return
*/
public static InputFilter getTypeFilter(Context context, String tipString, Pattern p) {
private static InputFilter getTypeFilter(Context context, String tipString, Pattern p) {
return (source, start, end, dest, dstart, dend) -> {
Matcher m = p.matcher(source.toString());
if (!m.matches()) {
......@@ -67,7 +89,36 @@ public class InputFilterUtils {
};
}
public static InputFilter getMaxLengthFilter(Context context, String tipString, int maxLength) {
/**
* source 新输入的字符串
* start 新输入的字符串起始下标,一般为0
* end 新输入的字符串终点下标,一般为source长度-1
* dest 输入之前文本框内容
* dstart 原内容起始坐标,一般为0
* dend 原内容终点坐标,一般为dest长度-1
*
* @param p
* @return
*/
public static InputFilter getTypeFilter(Pattern p) {
return (source, start, end, dest, dstart, dend) -> {
Matcher m = p.matcher(source.toString());
if (!m.matches()) {
return "";
}
return null;
};
}
/**
* 輸入最大長度限制
*
* @param context
* @param tipString 超過最大長度限制的提示
* @param maxLength 最大長度
* @return
*/
private static InputFilter getMaxLengthFilter(Context context, String tipString, int maxLength) {
return (source, start, end, dest, dstart, dend) -> {
int keep = maxLength - (dest.length() - (dend - dstart));
if (keep <= 0) {
......@@ -93,28 +144,29 @@ public class InputFilterUtils {
};
}
public static InputFilter getMaxLengthFilterDisChAndEn(int maxLength) {
/**
* 輸入最大長度限制
*
* @param maxLength 最大長度
* @return
*/
private static InputFilter getMaxLengthFilter(int maxLength) {
return (source, start, end, dest, dstart, dend) -> {
if (dest != null) {
int beforeLength = dest.length();
int sourceLength = source.length();
int keep = maxLength - beforeLength;
if (keep <= 0) {
return "";
} else if (keep >= sourceLength) {
return null; // keep original
} else {
keep += start;
if (Character.isHighSurrogate(source.charAt(keep - 1))) {
--keep;
if (keep == sourceLength) {
return "";
}
int keep = maxLength - (dest.length() - (dend - dstart));
if (keep <= 0) {
return "";
} else if (keep >= end - start) {
return null; // keep original
} else {
keep += start;
if (Character.isHighSurrogate(source.charAt(keep - 1))) {
--keep;
if (keep == start) {
return "";
}
return source.subSequence(start, keep);
}
return source.subSequence(start, keep);
}
return null;
};
}
}
......
......@@ -56,7 +56,7 @@ public class InputProvider<T extends InfoMultiBean> extends MyBaseItemProvider<T
MultiInputBean infoMultiBean = (MultiInputBean) t;
viewHolder.removeTextWatcher();
TextInputEditText editText = baseViewHolder.getView(R.id.ed_multi_value);
EditText editText = baseViewHolder.getView(R.id.ed_multi_value);
editText.setError(null);
initEditFocusable(infoMultiBean, editText);
//設置輸入限制
......@@ -77,10 +77,9 @@ public class InputProvider<T extends InfoMultiBean> extends MyBaseItemProvider<T
}
}
});
}
private void initEditFocusable(MultiInputBean infoMultiBean, TextInputEditText editText) {
private void initEditFocusable(MultiInputBean infoMultiBean, EditText editText) {
//是否可編輯
editText.setFocusable(infoMultiBean.isEdit());
if (infoMultiBean.isEdit()) {
......@@ -96,7 +95,7 @@ public class InputProvider<T extends InfoMultiBean> extends MyBaseItemProvider<T
}
private void setFilters(EditText editText, MultiInputBean multiSelectBean) {
//先清空值,再
//先清空值.清空值之前需要去掉輸入監聽
editText.setText("");
//輸入攔截器
editText.setFilters(multiSelectBean.getInputFilters());
......@@ -107,7 +106,7 @@ public class InputProvider<T extends InfoMultiBean> extends MyBaseItemProvider<T
public class InputViewHolder extends BaseViewHolder {
public InputTextWatcher inputTextWatcher = new InputTextWatcher();
private TextInputEditText editText;
private EditText editText;
public InputViewHolder(@NotNull View view) {
super(view);
......
......@@ -32,15 +32,19 @@ public class AppDialog {
}
public void showWaringDialog(Context context, String title, DialogOnClickListenter sureOnclickListenter) {
showWaringDialog(context, title, null, null, sureOnclickListenter, null);
public void showWaringDialog(Context context, String title, DialogOnClickListenter sureOnclickListener) {
showWaringDialog(context, title, null, null, sureOnclickListener, null, true);
}
public void showWaringDialog(Context context, String title, DialogOnClickListenter sureOnclickListenter, DialogOnClickListenter cancelOnclickListenter) {
showWaringDialog(context, title, null, null, sureOnclickListenter, cancelOnclickListenter);
public void showWaringDialog(Context context, String title, boolean isDismiss, DialogOnClickListenter sureOnclickListener) {
showWaringDialog(context, title, null, null, sureOnclickListener, null, isDismiss);
}
private void showWaringDialog(Context context, String title, String confimText, String cancelText, DialogOnClickListenter sureOnclickListenter, DialogOnClickListenter cancelOnclickListenter) {
public void showWaringDialog(Context context, String title, boolean isDismiss, DialogOnClickListenter sureOnclickListener, DialogOnClickListenter cancelOnclickListener) {
showWaringDialog(context, title, null, null, sureOnclickListener, cancelOnclickListener, isDismiss);
}
private void showWaringDialog(Context context, String title, String confimText, String cancelText, DialogOnClickListenter sureOnclickListener, DialogOnClickListenter cancelOnclickListener, boolean isDismiss) {
new DialogUtils(context, R.layout.other_order_pause_orders) {
@Override
public void initLayout(ViewHepler hepler, Dialog dialog) {
......@@ -50,14 +54,19 @@ public class AppDialog {
if (confimText != null) {
hepler.setText(R.id.tv_dialog_confirm, confimText);
}
if (sureOnclickListenter != null) {
hepler.getView(R.id.tv_dialog_confirm).setOnClickListener(v -> sureOnclickListenter.onclick(v, dialog));
if (sureOnclickListener != null) {
hepler.getView(R.id.tv_dialog_confirm).setOnClickListener(v -> {
sureOnclickListener.onclick(v, dialog);
if (isDismiss) {
dialog.dismiss();
}
});
}
if (cancelText != null) {
hepler.setText(R.id.tv_dialog_cancel, cancelText);
}
if (cancelOnclickListenter != null) {
hepler.getView(R.id.tv_dialog_cancel).setOnClickListener(v -> cancelOnclickListenter.onclick(v, dialog));
if (cancelOnclickListener != null) {
hepler.getView(R.id.tv_dialog_cancel).setOnClickListener(v -> cancelOnclickListener.onclick(v, dialog));
} else {
hepler.getView(R.id.tv_dialog_cancel).setOnClickListener(v -> dialog.dismiss());
}
......
package com.gingersoft.gsa.cloud.ui.view;
package com.gingersoft.gsa.cloud.ui.view.edittext;
import android.content.Context;
import android.util.AttributeSet;
import android.widget.EditText;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
......
package com.gingersoft.gsa.cloud.ui.view.edittext;
import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.google.android.material.textfield.TextInputEditText;
/**
* @author 宇航.
* User: admin
* Date: 2021/2/4
* Time: 15:04
* Use: 獲取焦點時,內容為0,自動清除,
* 失去焦點時,沒有內容,內容默認為0
*/
public class ClearZeroEditText extends TextInputEditText {
private OnFocusChangeListener l;
public ClearZeroEditText(@NonNull Context context) {
super(context);
}
public ClearZeroEditText(@NonNull Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public ClearZeroEditText(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
private void init() {
setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (l != null) {
l.onFocusChange(v, hasFocus);
}
}
});
}
@Override
public void setOnFocusChangeListener(OnFocusChangeListener l) {
this.l = l;
}
}
package com.gingersoft.gsa.cloud.ui.view;
package com.gingersoft.gsa.cloud.ui.view.edittext;
import android.content.Context;
import android.text.Editable;
......
......@@ -2,8 +2,8 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:gravity="center_vertical"
android:layout_height="match_parent">
android:layout_height="match_parent"
android:gravity="center_vertical">
<TextView
android:id="@+id/multi_required"
......
......@@ -8,17 +8,14 @@
<include layout="@layout/item_multi_title_layout" />
<com.google.android.material.textfield.TextInputEditText
<EditText
android:id="@+id/ed_multi_value"
style="@style/Multi_Input_editStyle"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginLeft="@dimen/dp_5"
android:layout_weight="1"
android:focusableInTouchMode="true"
android:focusable="true"
android:background="@null"
android:inputType="none"
android:drawablePadding="@dimen/dp_5"
tools:hint="請輸入食品組名稱" />
<ImageView
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment