diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5bc90d4..3807eb2 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -50,9 +50,12 @@ - - + android:screenOrientation="landscape" + android:windowSoftInputMode="adjustPan" /> + + diff --git a/app/src/main/java/com/sw/inbound/activity/FoodCollectionActivity.kt b/app/src/main/java/com/sw/inbound/activity/FoodCollectionActivity.kt index 14a7f73..0ab6ed6 100644 --- a/app/src/main/java/com/sw/inbound/activity/FoodCollectionActivity.kt +++ b/app/src/main/java/com/sw/inbound/activity/FoodCollectionActivity.kt @@ -17,6 +17,7 @@ import com.sw.inbound.adapter.GoodsSearchAdapter import com.sw.inbound.databinding.ActivityFoodCollectionBinding import com.sw.inbound.databinding.LayoutCameraPreviewBinding import com.sw.inbound.databinding.LayoutEmptySearchBinding +import com.sw.inbound.dialog.CollectSearchDialog import com.sw.inbound.dialog.Loading import com.sw.inbound.model.response.SearchGoodsInfo import com.sw.inbound.objbox.Food @@ -152,6 +153,9 @@ class FoodCollectionActivity : ComponentActivity() { binding.btnTakePhoto.clickWithDebounce { takePhoto() } + binding.btnCollectedGoods.setOnClickListener { + CollectSearchDialog(this@FoodCollectionActivity).show() + } // binding.btnAddDefault.clickWithDebounce { // Thread{ // FoodModule.initDefFoodData(this) { @@ -212,6 +216,8 @@ class FoodCollectionActivity : ComponentActivity() { // } // } // binding.radioGroup.check(R.id.rbCollected) + + loadEmptyView() } @SuppressLint("NotifyDataSetChanged") diff --git a/app/src/main/java/com/sw/inbound/activity/GoodsListActivity.kt b/app/src/main/java/com/sw/inbound/activity/GoodsListActivity.kt index b61b006..00da7dc 100644 --- a/app/src/main/java/com/sw/inbound/activity/GoodsListActivity.kt +++ b/app/src/main/java/com/sw/inbound/activity/GoodsListActivity.kt @@ -22,7 +22,7 @@ import com.sw.inbound.dialog.DialogManager import com.sw.inbound.dialog.DropdownPopup import com.sw.inbound.dialog.GoodsRecognizeDialog import com.sw.inbound.dialog.GoodsSearchDialog -import com.sw.inbound.dialog.NotReceiptWarnDialog +import com.sw.inbound.dialog.WarnDialog import com.sw.inbound.model.request.GoodsAddParam import com.sw.inbound.model.request.PurchaseWarehouseParam import com.sw.inbound.model.request.UploadInfo @@ -169,13 +169,14 @@ abstract class GoodsListActivity : ComponentActivity() { DialogManager.contains("GoodsRecognizeDialog") && goodsRecognizeDialog?.isShowing == true) { goodsRecognizeDialog?.dismiss() - isShowRecognizeDialog = true - goodsRecognizeDialog = null } } return } this.lastWeight = weight + if (DialogManager.hasShowDialog()) { + return + } val checkResult = isFirstRecognize.not() && System.currentTimeMillis() - startTime <= DELAY_TIME Timber.tag(TAG).d("recognizeWeight,checkResult=$checkResult") if (checkResult) { @@ -202,8 +203,13 @@ abstract class GoodsListActivity : ComponentActivity() { Timber.tag(TAG).d("recognizeFood,takePhoto") isShowRecognizeDialog = false //bindCamera() - cameraUtils.takePhoto(takePhotoSuccessCallback) - isFirstRecognize = false + try { + cameraUtils.takePhoto(takePhotoSuccessCallback) + isFirstRecognize = false + } catch (e: Exception) { + Timber.tag(TAG).d("recognizeFood,takePhoto异常:${e.message}") + e.printStackTrace() + } } private var dropdownPopup: DropdownPopup? = null @@ -265,7 +271,7 @@ abstract class GoodsListActivity : ComponentActivity() { ) { runOnUiThread { if (goodsRecognizeDialog?.isShowing == true) { - isShowRecognizeDialog = false + //isShowRecognizeDialog = false return@runOnUiThread } goodsRecognizeDialog = GoodsRecognizeDialog( @@ -276,12 +282,8 @@ abstract class GoodsListActivity : ComponentActivity() { ) { GoodsSearchDialog(this).show() }.apply { - setOnDismissListener { - goodsRecognizeDialog = null - isShowRecognizeDialog = true - } if (isFinishing.not() && isDestroyed.not()) { - isShowRecognizeDialog = false + //isShowRecognizeDialog = false show() } } @@ -415,7 +417,7 @@ abstract class GoodsListActivity : ComponentActivity() { val count = goodsList.count { it.isLocalGoods } // 处理返回事件 if (count > 0) { - NotReceiptWarnDialog(context = this@GoodsListActivity) { + WarnDialog(context = this@GoodsListActivity, content = "存在未收货的物品,请确认是否放弃收货,若放弃则数据不会保存?") { //onBackPressedDispatcher.onBackPressed() finish() }.show() diff --git a/app/src/main/java/com/sw/inbound/activity/SelfProcurementActivity.kt b/app/src/main/java/com/sw/inbound/activity/SelfProcurementActivity.kt index f9263cb..4fa2e29 100644 --- a/app/src/main/java/com/sw/inbound/activity/SelfProcurementActivity.kt +++ b/app/src/main/java/com/sw/inbound/activity/SelfProcurementActivity.kt @@ -4,6 +4,7 @@ import android.util.Log import androidx.recyclerview.widget.LinearLayoutManager import com.sw.inbound.R import com.sw.inbound.adapter.SelfProcurementAdapter +import com.sw.inbound.dialog.WarnDialog import com.sw.inbound.model.request.PurchaseWarehouseParam import com.sw.inbound.model.response.DictType import com.sw.inbound.utils.ext.toJsonString @@ -22,11 +23,18 @@ class SelfProcurementActivity : GoodsListActivity() { notifyItemChanged(position) } addOnItemChildClickListener(R.id.ivState) { adapter, view, position -> - removeAt(position) + ///删除行数据弹窗 + showWarnDialog(content = "请确认是否删除该条入库数据,删除后将无法恢复?") { + removeAt(position) + } } } } + private fun showWarnDialog(content:String, callback:()-> Unit) { + WarnDialog(context = this, content = content, confirmBlock = callback).show() + } + override fun initRecyclerView() { binding.rvGoodsList.let { it.layoutManager = LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false) diff --git a/app/src/main/java/com/sw/inbound/adapter/CollectSearchAdapter.kt b/app/src/main/java/com/sw/inbound/adapter/CollectSearchAdapter.kt index 2da7576..c3e87da 100644 --- a/app/src/main/java/com/sw/inbound/adapter/CollectSearchAdapter.kt +++ b/app/src/main/java/com/sw/inbound/adapter/CollectSearchAdapter.kt @@ -26,30 +26,30 @@ class CollectSearchAdapter(var list: MutableList) : holder.binding.let { it.tvGoodsName.run { text = item!!.goodsName -// setTextColor(if (item!!.isSelected) "#FF0032C8".toColorInt() else "#FF666666".toColorInt()) - setTextColor("#FF666666".toColorInt()) + setTextColor(if (item!!.isSelected) "#FF0032C8".toColorInt() else "#FF666666".toColorInt()) + //setTextColor("#FF666666".toColorInt()) + } + it.root.run { + if (item!!.isSelected) { + setShapeDrawable( + solidColor = "#FFEAF0FF", + strokeColor = "#FF0033CC", + strokeWidth = 2.dp, + radius = 10.dp + ) + } else { + setShapeDrawable( + solidColor = "#FFF5F5F5", + radius = 10.dp + ) + } } // it.root.run { -// if (item!!.isSelected) { -// setShapeDrawable( -// solidColor = "#FFEAF0FF", -// strokeColor = "#FF0033CC", -// strokeWidth = 2.dp, -// radius = 10.dp -// ) -// } else { -// setShapeDrawable( -// solidColor = "#FFF5F5F5", -// radius = 10.dp -// ) -// } +// setShapeDrawable( +// solidColor = "#FFF5F5F5", +// radius = 10.dp +// ) // } - it.root.run { - setShapeDrawable( - solidColor = "#FFF5F5F5", - radius = 10.dp - ) - } } } diff --git a/app/src/main/java/com/sw/inbound/dialog/BaseDialog.kt b/app/src/main/java/com/sw/inbound/dialog/BaseDialog.kt index 5f289b8..753a633 100644 --- a/app/src/main/java/com/sw/inbound/dialog/BaseDialog.kt +++ b/app/src/main/java/com/sw/inbound/dialog/BaseDialog.kt @@ -8,6 +8,7 @@ import android.os.Bundle import android.view.Gravity import android.view.View import com.sw.inbound.R +import com.sw.inbound.activity.FoodCollectionActivity import com.sw.inbound.activity.GoodsListActivity import com.sw.inbound.utils.ext.dp import com.sw.inbound.utils.ext.hideKeyboard @@ -15,7 +16,7 @@ import com.sw.inbound.utils.ext.hideKeyboard abstract class BaseDialog( context: Context, var defWidth: Int = 1500.dp, - var defHeight: Int = 900.dp + var defHeight: Int = 800.dp ) : Dialog(context, R.style.DialogTheme) { override fun onCreate(savedInstanceState: Bundle?) { @@ -48,6 +49,17 @@ abstract class BaseDialog( return null } + fun getFoodCollectionActivity(): FoodCollectionActivity? { + var ctx = context + while (ctx is ContextWrapper) { + ctx = ctx.baseContext + if (ctx is FoodCollectionActivity) { + return ctx + } + } + return null + } + override fun show() { super.show() DialogManager.addDialog(this) diff --git a/app/src/main/java/com/sw/inbound/dialog/CollectSearchDialog.kt b/app/src/main/java/com/sw/inbound/dialog/CollectSearchDialog.kt index 8970030..5c70f85 100644 --- a/app/src/main/java/com/sw/inbound/dialog/CollectSearchDialog.kt +++ b/app/src/main/java/com/sw/inbound/dialog/CollectSearchDialog.kt @@ -4,10 +4,11 @@ import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View +import androidx.core.widget.addTextChangedListener import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.LinearLayoutManager import com.sw.inbound.R -import com.sw.inbound.activity.GoodsListActivity +import com.sw.inbound.activity.FoodCollectionActivity import com.sw.inbound.adapter.CollectSearchAdapter import com.sw.inbound.databinding.DialogCollectSearchBinding import com.sw.inbound.databinding.LayoutEmptySearchBinding @@ -34,14 +35,31 @@ class CollectSearchDialog( return binding.root } - private var activity: GoodsListActivity? = null + private var activity: FoodCollectionActivity? = null override fun initView() { - activity = getReceiptActivity() + activity = getFoodCollectionActivity() binding.ivClose.setOnClickListener { dismiss() } - binding.ivGoodsSearch.setOnClickListener { searchGoods() } + binding.ivGoodsSearch.setOnClickListener { + val searchName = binding.etInputGoods.text.toString().trim() + if (searchName.isBlank()) { + activity?.toast("请输入物品名称") + return@setOnClickListener + } + getCollectGoods(searchName) + } binding.etInputGoods.let { v -> v.addOnActionSearchListener { - searchGoods() + val searchName = binding.etInputGoods.text.toString().trim() + if (searchName.isBlank()) { + activity?.toast("请输入物品名称") + return@addOnActionSearchListener + } + getCollectGoods(searchName) + } + v.addTextChangedListener { + if (it.isNullOrBlank()) { + getCollectGoods() + } } } binding.btnConfirm.setOnClickListener { @@ -56,55 +74,28 @@ class CollectSearchDialog( it.setEnableLoadMore(false) it.setOnRefreshListener { pageNo = 1 - searchGoods() - } - it.setOnLoadMoreListener { - searchGoods() + val searchName = binding.etInputGoods.text.toString().trim() + getCollectGoods(searchName) } + //it.setOnLoadMoreListener { + // searchGoods() + //} } getCollectGoods() + //binding.root.clickWithDebounce { + // Thread { + // FoodModule.initDefFoodData(activity!!) { + // activity?.runOnUiThread { + // activity?.toast("添加完成") + // getCollectGoods() + // } + // } + // }.start() + //} } private var pageNo = 1 - companion object { - private const val PAGE_SIZE = 10 - } - - @SuppressLint("NotifyDataSetChanged") - private fun searchGoods() { - val searchName = binding.etInputGoods.text.toString().trim() - if (searchName.isBlank()) { - activity?.toast("请输入物品名称") - finishRefresh() - return - } - activity?.searchGoods( - searchName = searchName, - pageNo = pageNo, - pageSize = PAGE_SIZE - ) { records -> - finishRefresh() - binding.etInputGoods.hideKeyboard() - if (pageNo == 1) { - list.clear() - } - list.addAll(records) - if (list.isEmpty()) { - loadEmptyView() - return@searchGoods - } - val enableLoadMore = records.size >= PAGE_SIZE - binding.refreshLayout.setEnableLoadMore(enableLoadMore) - if (enableLoadMore) { - pageNo++ - } - binding.rvSearch.layoutManager = - GridLayoutManager(context, 2, GridLayoutManager.VERTICAL, false) - searchAdapter.notifyDataSetChanged() - } - } - private fun loadEmptyView() { binding.rvSearch.layoutManager = LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false) @@ -140,9 +131,9 @@ class CollectSearchDialog( } } - private fun deleteGoods(position:Int) { - WarnDialog(context = context, content = "请确认是否删除该物品?", confirmBlock = { - Thread{ + private fun deleteGoods(position: Int) { + WarnDialog(context = context, content = "请确认是否删除物品:${list[position].goodsName}?", confirmBlock = { + Thread { activity?.runOnUiThread { Loading.show(context) } @@ -151,9 +142,13 @@ class CollectSearchDialog( box?.removeByIds(filterIdList) activity?.runOnUiThread { Loading.dismiss() - list.removeAt(position) - searchAdapter.notifyDataSetChanged() + //list.remove(list[position]) + //searchAdapter.notifyDataSetChanged() + searchAdapter.removeAt(position) activity?.toast("删除成功") + if (list.isEmpty()) { + loadEmptyView() + } } }.start() }).show() @@ -170,19 +165,28 @@ class CollectSearchDialog( } private var box: Box? = null + @SuppressLint("NotifyDataSetChanged") - private fun getCollectGoods() { + private fun getCollectGoods(searchName:String?=null) { if (box == null) { box = ObjectBox.boxStore.boxFor(Food::class) } - box?.all?.distinctBy { it.name }?.forEach { + list.clear() + var queryList = box?.all?.distinctBy { it.name } + if (searchName.isNullOrBlank().not()) { + queryList = queryList?.filter { it.name?.contains(searchName) == true } + } + queryList?.forEach { list.add((SearchGoodsInfo.Record(goodsName = it.name))) } - binding.rvSearch.layoutManager = GridLayoutManager(activity, 2, LinearLayoutManager.VERTICAL, false) + binding.rvSearch.layoutManager = + GridLayoutManager(activity, 2, LinearLayoutManager.VERTICAL, false) searchAdapter.notifyDataSetChanged() if (list.isEmpty()) { loadEmptyView() } + finishRefresh() + binding.root.hideKeyboard() } } \ No newline at end of file diff --git a/app/src/main/java/com/sw/inbound/dialog/DialogManager.kt b/app/src/main/java/com/sw/inbound/dialog/DialogManager.kt index f1ae3b7..567b529 100644 --- a/app/src/main/java/com/sw/inbound/dialog/DialogManager.kt +++ b/app/src/main/java/com/sw/inbound/dialog/DialogManager.kt @@ -2,7 +2,7 @@ package com.sw.inbound.dialog object DialogManager { - private var dialogList:MutableList = mutableListOf() + private var dialogList: MutableList = mutableListOf() fun addDialog(dialog: BaseDialog) { if (dialogList.contains(dialog).not()) { @@ -17,7 +17,7 @@ object DialogManager { dialogList.remove(dialog) } - fun getDialogList():MutableList { + fun getDialogList(): MutableList { return dialogList } @@ -35,9 +35,14 @@ object DialogManager { } } - fun contains(vararg className: String):Boolean { + fun contains(vararg className: String): Boolean { val item = dialogList.firstOrNull { className.contains(it.javaClass.simpleName) } return item != null } + fun hasShowDialog(): Boolean { + val item = dialogList.firstOrNull { it.isShowing } + return item != null + } + } \ No newline at end of file diff --git a/app/src/main/java/com/sw/inbound/dialog/GoodsRecognizeDialog.kt b/app/src/main/java/com/sw/inbound/dialog/GoodsRecognizeDialog.kt index 1768b18..c861e28 100644 --- a/app/src/main/java/com/sw/inbound/dialog/GoodsRecognizeDialog.kt +++ b/app/src/main/java/com/sw/inbound/dialog/GoodsRecognizeDialog.kt @@ -98,4 +98,12 @@ class GoodsRecognizeDialog( recognizeAdapter.stateView = it } } + + override fun dismiss() { + super.dismiss() + activity?.run { + isShowRecognizeDialog = true + goodsRecognizeDialog = null + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/sw/inbound/dialog/NotReceiptWarnDialog.kt b/app/src/main/java/com/sw/inbound/dialog/NotReceiptWarnDialog.kt index f72480f..1508a6c 100644 --- a/app/src/main/java/com/sw/inbound/dialog/NotReceiptWarnDialog.kt +++ b/app/src/main/java/com/sw/inbound/dialog/NotReceiptWarnDialog.kt @@ -1,34 +1,34 @@ -package com.sw.inbound.dialog - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import com.sw.inbound.databinding.DialogNotReceiptWarnBinding -import com.sw.inbound.utils.ext.dp - -class NotReceiptWarnDialog( - context: Context, - var cancelBlock: () -> Unit = {}, - var confirmBlock: () -> Unit = {}, -) : BaseDialog(context = context, defWidth = 960.dp, defHeight = 540.dp) { - - private lateinit var binding: DialogNotReceiptWarnBinding - override fun getRootView(): View { - val inflater = LayoutInflater.from(context) - binding = DialogNotReceiptWarnBinding.inflate(inflater) - return binding.root - } - - override fun initView() { - binding.btnCancel.setOnClickListener { - cancelBlock() - dismiss() - } - binding.btnConfirm.setOnClickListener { - confirmBlock() - dismiss() - } - } - - -} \ No newline at end of file +//package com.sw.inbound.dialog +// +//import android.content.Context +//import android.view.LayoutInflater +//import android.view.View +//import com.sw.inbound.databinding.DialogNotReceiptWarnBinding +//import com.sw.inbound.utils.ext.dp +// +//class NotReceiptWarnDialog( +// context: Context, +// var cancelBlock: () -> Unit = {}, +// var confirmBlock: () -> Unit = {}, +//) : BaseDialog(context = context, defWidth = 960.dp, defHeight = 540.dp) { +// +// private lateinit var binding: DialogNotReceiptWarnBinding +// override fun getRootView(): View { +// val inflater = LayoutInflater.from(context) +// binding = DialogNotReceiptWarnBinding.inflate(inflater) +// return binding.root +// } +// +// override fun initView() { +// binding.btnCancel.setOnClickListener { +// cancelBlock() +// dismiss() +// } +// binding.btnConfirm.setOnClickListener { +// confirmBlock() +// dismiss() +// } +// } +// +// +//} \ No newline at end of file diff --git a/app/src/main/java/com/sw/inbound/dialog/WarnDialog.kt b/app/src/main/java/com/sw/inbound/dialog/WarnDialog.kt index 1163fc8..b4c0dd2 100644 --- a/app/src/main/java/com/sw/inbound/dialog/WarnDialog.kt +++ b/app/src/main/java/com/sw/inbound/dialog/WarnDialog.kt @@ -12,7 +12,7 @@ class WarnDialog( var content:String, var cancelBlock: () -> Unit = {}, var confirmBlock: () -> Unit = {}, -) : BaseDialog(context = context, defWidth = 960.dp, defHeight = 540.dp) { +) : BaseDialog(context = context, defWidth = 660.dp, defHeight = 360.dp) { private lateinit var binding: DialogWarnBinding override fun getRootView(): View { diff --git a/app/src/main/java/com/sw/inbound/utils/PhotoCaptureHelper.kt b/app/src/main/java/com/sw/inbound/utils/PhotoCaptureHelper.kt index 2b0bd8b..6c2ed72 100644 --- a/app/src/main/java/com/sw/inbound/utils/PhotoCaptureHelper.kt +++ b/app/src/main/java/com/sw/inbound/utils/PhotoCaptureHelper.kt @@ -77,7 +77,7 @@ class PhotoCaptureHelper( if (errorMsg.contains("Not bound to a valid Camera")) { if (bindCamera != null) { bindCamera?.invoke() - takePhoto() + //takePhoto() } } diff --git a/app/src/main/res/layout/activity_food_collection.xml b/app/src/main/res/layout/activity_food_collection.xml index 6a6ed2f..688bc62 100644 --- a/app/src/main/res/layout/activity_food_collection.xml +++ b/app/src/main/res/layout/activity_food_collection.xml @@ -50,6 +50,16 @@ android:textSize="24sp" android:textStyle="bold" /> + + diff --git a/app/src/main/res/layout/dialog_warn.xml b/app/src/main/res/layout/dialog_warn.xml index 3fcb7da..ccbd829 100644 --- a/app/src/main/res/layout/dialog_warn.xml +++ b/app/src/main/res/layout/dialog_warn.xml @@ -1,16 +1,16 @@ @@ -18,42 +18,41 @@ android:id="@+id/tvWarnContent" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginHorizontal="80dp" + android:layout_marginHorizontal="40dp" android:layout_marginVertical="50dp" android:gravity="center" tools:text="存在未收货的物品,请确认是否放弃收货,若放弃则数据不会保存?" android:textColor="#ff141428" - android:textSize="36sp" + android:textSize="32sp" android:textStyle="bold" />