diff --git a/.gradle/8.13/executionHistory/executionHistory.bin b/.gradle/8.13/executionHistory/executionHistory.bin index 8742ce6..59f9a82 100644 Binary files a/.gradle/8.13/executionHistory/executionHistory.bin and b/.gradle/8.13/executionHistory/executionHistory.bin differ diff --git a/.gradle/8.13/executionHistory/executionHistory.lock b/.gradle/8.13/executionHistory/executionHistory.lock index 154437a..0c981d4 100644 Binary files a/.gradle/8.13/executionHistory/executionHistory.lock and b/.gradle/8.13/executionHistory/executionHistory.lock differ diff --git a/.gradle/8.13/fileHashes/fileHashes.bin b/.gradle/8.13/fileHashes/fileHashes.bin index 92bff57..9f694b2 100644 Binary files a/.gradle/8.13/fileHashes/fileHashes.bin and b/.gradle/8.13/fileHashes/fileHashes.bin differ diff --git a/.gradle/8.13/fileHashes/fileHashes.lock b/.gradle/8.13/fileHashes/fileHashes.lock index 0e8b3a8..ebe8a1c 100644 Binary files a/.gradle/8.13/fileHashes/fileHashes.lock and b/.gradle/8.13/fileHashes/fileHashes.lock differ diff --git a/.gradle/8.13/fileHashes/resourceHashesCache.bin b/.gradle/8.13/fileHashes/resourceHashesCache.bin index 3dab58e..b2bc407 100644 Binary files a/.gradle/8.13/fileHashes/resourceHashesCache.bin and b/.gradle/8.13/fileHashes/resourceHashesCache.bin differ diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock index c92bfd0..52b54a7 100644 Binary files a/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ diff --git a/.gradle/file-system.probe b/.gradle/file-system.probe index 32de4c7..3d894c0 100644 Binary files a/.gradle/file-system.probe and b/.gradle/file-system.probe differ diff --git a/app/src/main/java/com/ck/ckcollar/app/action/ActionCode.kt b/app/src/main/java/com/ck/ckcollar/app/action/ActionCode.kt index 3d8ea99..83e0bc2 100644 --- a/app/src/main/java/com/ck/ckcollar/app/action/ActionCode.kt +++ b/app/src/main/java/com/ck/ckcollar/app/action/ActionCode.kt @@ -7,7 +7,10 @@ object ActionCode { //const val BASE_URL = "https://ragged-parting-unrushed.ngrok-free.dev"; //const val BASE_URL = "https://ragged-parting-unrushed.ngrok-free.dev"; // const val BASE_URL = "https://ragged-parting-unrushed.ngrok-free.dev"; + + const val BASE_URL = "https://d.chongdunpet.com" +// const val BASE_URL = "http://192.168.1.187:8080" const val CUSTOMER_URL = "wss://d.chongdunpet.com/ws/chat?role=customer&token="; diff --git a/app/src/main/java/com/ck/ckcollar/app/model/BannarModel.kt b/app/src/main/java/com/ck/ckcollar/app/model/BannarModel.kt index 3d14e1f..eb85366 100644 --- a/app/src/main/java/com/ck/ckcollar/app/model/BannarModel.kt +++ b/app/src/main/java/com/ck/ckcollar/app/model/BannarModel.kt @@ -1,6 +1,7 @@ package com.ck.ckcollar.app.model class BannarModel : CkBaseModel(){ + var localImageRes: Int = 0 var bannerStatus: String? = "" var bannerUrl: String? = "" var createBy: String? = "" @@ -11,4 +12,4 @@ class BannarModel : CkBaseModel(){ var sortOrder: Int = 0 var updateBy: String? = "" var updateTime: String? = "" -} \ No newline at end of file +} diff --git a/app/src/main/java/com/ck/ckcollar/app/ui/act/customer/CustomerActivity.kt b/app/src/main/java/com/ck/ckcollar/app/ui/act/customer/CustomerActivity.kt index b0b7d3a..b8f8a58 100644 --- a/app/src/main/java/com/ck/ckcollar/app/ui/act/customer/CustomerActivity.kt +++ b/app/src/main/java/com/ck/ckcollar/app/ui/act/customer/CustomerActivity.kt @@ -19,6 +19,7 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.view.inputmethod.EditorInfo +import android.view.inputmethod.InputMethodManager import android.widget.TextView import androidx.core.content.FileProvider import androidx.recyclerview.widget.LinearLayoutManager @@ -68,6 +69,8 @@ class CustomerActivity : CKBaseActivity() { var data = mutableListOf() var path = "" + private var isSending = false + private var isAiResponding = false var url = "" var lock = true @@ -97,6 +100,24 @@ class CustomerActivity : CKBaseActivity() { binding.recyclerView.adapter = customerMessageAdapter binding.editMessage.setHorizontallyScrolling(false); + binding.btnSend.setOnClickListener { + if (isAiResponding) { + toast("请等待当前问题回答结束") + return@setOnClickListener + } + isSending = true + // Reset the action controls immediately. The send flow captures the + // submitted text and image path before clearing the visible draft. + binding.btnSend.visibility = View.GONE + binding.btnMore.visibility = View.VISIBLE + binding.editMessage.onEditorAction(EditorInfo.IME_ACTION_SEND) + } + updateSendControls() + // Use the traditional multiline keyboard action; sending is handled by the + // activity's own message flow rather than the IME action button. + binding.editMessage.setSingleLine(false) + binding.editMessage.imeOptions = EditorInfo.IME_ACTION_NONE + binding.editMessage.setRawInputType(android.text.InputType.TYPE_CLASS_TEXT or android.text.InputType.TYPE_TEXT_FLAG_MULTI_LINE) binding.editMessage.setOnEditorActionListener(object : TextView.OnEditorActionListener { override fun onEditorAction( @@ -104,21 +125,21 @@ class CustomerActivity : CKBaseActivity() { actionId: Int, ketEvent: KeyEvent? ): Boolean { - if (actionId == EditorInfo.IME_ACTION_UNSPECIFIED || - actionId == EditorInfo.IME_ACTION_SEND || - (ketEvent != null && ketEvent.keyCode == KeyEvent.KEYCODE_ENTER) - ) { + if (actionId == EditorInfo.IME_ACTION_SEND) { if (lock) { - var text = binding.editMessage.text.toString() - var index = text.indexOf("$$$$$") >= 0 - if (!index) { - path = "" - } - text = text.replace("$$$$$", "") - if (!TextUtils.isEmpty(text) || !TextUtils.isEmpty(path)) { + // Whitespace-only input is not a message. A selected image may still be sent alone. + val text = binding.editMessage.text.toString().trim() + if (text.isNotEmpty() || path.isNotEmpty()) { lock = false + KeyboardUtils.hideKeyboard(this@CustomerActivity) + binding.editMessage.clearFocus() handler.post { - sendMessage(UUID.randomUUID().toString(),text,false) + if (!TextUtils.isEmpty(path)) { + uploadImage(text, path) + } else { + sendMessage(UUID.randomUUID().toString(), text, false, "") + } + clearInputViews() } } } @@ -156,14 +177,9 @@ class CustomerActivity : CKBaseActivity() { p2: Int, p3: Int ) { + if (p0?.toString()?.trim()?.isNotEmpty() == true) isSending = false + updateSendControls() try { - var text = binding.editMessage.text.toString() - var index = text.indexOf("$$$$$") >= 0 -// if (!index) { -// path = "" -// } - - val lineCount: Int? = binding.editMessage.getLineCount() val lineHeight: Int = binding.editMessage.getLineHeight() val maxHeight: Int = lineCount!! * lineHeight @@ -175,12 +191,13 @@ class CustomerActivity : CKBaseActivity() { }) binding.btnMore.setOnClickListener { if (binding.contentBottom.visibility == View.GONE) { - KeyboardUtils.hideKeyboard(this@CustomerActivity) + val inputMethodManager = + getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager + inputMethodManager.hideSoftInputFromWindow(binding.editMessage.windowToken, 0) + binding.editMessage.clearFocus() binding.contentBottom.visibility = View.VISIBLE } else { binding.contentBottom.visibility = View.GONE - binding.editMessage.requestFocus() - KeyboardUtils.showKeyboard(binding.editMessage) } } binding.btnSmile.setOnClickListener { @@ -188,6 +205,9 @@ class CustomerActivity : CKBaseActivity() { binding.editMessage.requestFocus() KeyboardUtils.showKeyboard(binding.editMessage) } + binding.btnDeleteImage.setOnClickListener { + clearSelectedImage() + } //拍照 binding.conetnt1.setOnClickListener { @@ -233,7 +253,7 @@ class CustomerActivity : CKBaseActivity() { } } handleMessage() - + binding.btnSmile.visibility = View.GONE; } override fun onPermissionsGranted(requestCode: Int, permissions: Array) { @@ -295,7 +315,7 @@ class CustomerActivity : CKBaseActivity() { if (!TextUtils.isEmpty(sendConetnt) || !TextUtils.isEmpty(url)){ handler.post { - sendMessage2(UUID.randomUUID().toString(),sendConetnt,true) + sendMessage2(UUID.randomUUID().toString(),sendConetnt,true, url) } } } @@ -322,15 +342,17 @@ class CustomerActivity : CKBaseActivity() { }).show() } - fun sendMessage(uuid :String ,content: String,isResend : Boolean) { + fun sendMessage(uuid :String ,content: String,isResend : Boolean, imageUrl: String) { - if (!TextUtils.isEmpty(url)) { + isAiResponding = true + + if (!TextUtils.isEmpty(imageUrl)) { this@CustomerActivity.data.add(CustomerMessageModel.MessageItemModel().apply { senderId = CKApp.app.userInfo?.id!! this.content = content this.senderAvatar = CKApp.app.userInfo?.avatar this.senderName = CKApp.app.userInfo?.custName ?: "我" - this.url = this@CustomerActivity.url + this.url = imageUrl }) } if (!TextUtils.isEmpty(content) && !isResend) { @@ -350,14 +372,12 @@ class CustomerActivity : CKBaseActivity() { TTHttpClient.postJsonStream3(this, "发送会话消息stream", TTRequestParam().apply { - add(TTRequestData("imageUrl", url)) + add(TTRequestData("imageUrl", imageUrl)) add(TTRequestData("question", content)) }, object : ICallback { override fun onSuccess(data: String) { - lock = true - // var model = Gson().fromJson(data, AIMessageModel::class.java) var flag = false @@ -379,9 +399,6 @@ class CustomerActivity : CKBaseActivity() { } - binding.editMessage.setText("") - path = "" - url = "" customerMessageAdapter.data = this@CustomerActivity.data customerMessageAdapter.notifyDataSetChanged() @@ -401,13 +418,17 @@ class CustomerActivity : CKBaseActivity() { } override fun onFailed(code: String, msg: String) { + isAiResponding = false lock = true // toast(msg) //TTLog.e(msg) } - }) - binding.editMessage.setText("") + override fun onComplete() { + isAiResponding = false + lock = true + } + }) customerMessageAdapter.data = this@CustomerActivity.data customerMessageAdapter.notifyDataSetChanged() @@ -418,7 +439,8 @@ class CustomerActivity : CKBaseActivity() { - fun sendMessage2(uuid :String ,content: String,isResend : Boolean) { + fun sendMessage2(uuid :String ,content: String,isResend : Boolean, imageUrl: String) { + isAiResponding = true lock = false if (!TextUtils.isEmpty(content) && !isResend) { this@CustomerActivity.data.add(CustomerMessageModel.MessageItemModel().apply { @@ -437,14 +459,12 @@ class CustomerActivity : CKBaseActivity() { TTHttpClient.postJsonStream3(this, "发送会话消息stream", TTRequestParam().apply { - add(TTRequestData("imageUrl", url)) + add(TTRequestData("imageUrl", imageUrl)) add(TTRequestData("question", content)) }, object : ICallback { override fun onSuccess(data: String) { - lock = true - // var model = Gson().fromJson(data, AIMessageModel::class.java) var flag = false @@ -466,9 +486,6 @@ class CustomerActivity : CKBaseActivity() { } - binding.editMessage.setText("") - path = "" - url = "" customerMessageAdapter.data = this@CustomerActivity.data customerMessageAdapter.notifyDataSetChanged() @@ -488,13 +505,17 @@ class CustomerActivity : CKBaseActivity() { } override fun onFailed(code: String, msg: String) { + isAiResponding = false lock = true // toast(msg) //TTLog.e(msg) } - }) - binding.editMessage.setText("") + override fun onComplete() { + isAiResponding = false + lock = true + } + }) customerMessageAdapter.data = this@CustomerActivity.data customerMessageAdapter.notifyDataSetChanged() @@ -504,10 +525,10 @@ class CustomerActivity : CKBaseActivity() { } - fun uploadImage() { + fun uploadImage(content: String, imagePath: String) { var param = TTRequestParam() - param.files.add(File(path)) + param.files.add(File(imagePath)) showProgeassDialog() TTHttpClient.postFile(this, "上传照片s", param, object : ICallback { @@ -515,9 +536,8 @@ class CustomerActivity : CKBaseActivity() { hiddenProgeassDialog() var model = Gson().fromJson(data, UploadModel::class.java) - url = model.urls handler.post { - sendMessage(UUID.randomUUID().toString(), "", false) + sendMessage(UUID.randomUUID().toString(), content, false, model.urls) } } @@ -525,8 +545,11 @@ class CustomerActivity : CKBaseActivity() { override fun onFailed(code: String, msg: String) { hiddenProgeassDialog() lock = true - path = "" - url = "" + if (path.isEmpty() && binding.editMessage.text.toString().isEmpty()) { + path = imagePath + showImagePreview(imagePath) + binding.editMessage.setText(content) + } toast(msg) } }) @@ -561,15 +584,15 @@ class CustomerActivity : CKBaseActivity() { if (requestCode == 55 && resultCode == RESULT_OK) { path = PreferencesUtils.getString(this@CustomerActivity, Const.IMAGE_PATH, "")!! - sendSelectedImage() + prepareSelectedImage() } else if (requestCode == 56 && resultCode == RESULT_OK) { path = TTUtils.getImageUrl(this, data!!.getData()); - sendSelectedImage() + prepareSelectedImage() } } - private fun sendSelectedImage() { + private fun prepareSelectedImage() { if (TextUtils.isEmpty(path)) return LubanCompressUtil.getCompressFile( @@ -579,10 +602,17 @@ class CustomerActivity : CKBaseActivity() { override fun success(file: File) { if (isFinishing || isDestroyed) return path = file.absolutePath - lock = false + lock = true binding.contentBottom.visibility = View.GONE - binding.editMessage.setText("") - uploadImage() + showImagePreview(path) + binding.editMessage.requestFocus() + KeyboardUtils.showKeyboard(binding.editMessage) + // Rebind the IME after selecting an image so its action button is + // available even though the text field itself is empty. + binding.editMessage.postDelayed({ + val imm = getSystemService(INPUT_METHOD_SERVICE) as? android.view.inputmethod.InputMethodManager + imm?.restartInput(binding.editMessage) + }, 150L) } override fun fail(failMsg: String) { @@ -595,6 +625,48 @@ class CustomerActivity : CKBaseActivity() { ) } + private fun showImagePreview(imagePath: String) { + isSending = false + binding.contentImagePreview.visibility = View.VISIBLE + updateSendControls() + binding.imagePreview.scaleType = android.widget.ImageView.ScaleType.CENTER_CROP + Glide.with(this) + .load(imagePath) + .into(binding.imagePreview) + } + + private fun clearSelectedImage() { + path = "" + url = "" + binding.imagePreview.setImageDrawable(null) + binding.contentImagePreview.visibility = View.GONE + updateSendControls() + } + + private fun clearInputViews() { + binding.editMessage.setText("") + path = "" + url = "" + binding.imagePreview.setImageDrawable(null) + binding.contentImagePreview.visibility = View.GONE + // Sending has already been initiated; keep the controls in their idle state + // until the user starts composing the next draft. + binding.btnSend.visibility = View.GONE + binding.btnMore.visibility = View.VISIBLE + } + + private fun updateSendControls() { + val hasImage = path.isNotEmpty() + val hasText = binding.editMessage.text.toString().trim().isNotEmpty() + if (isSending) { + binding.btnSend.visibility = View.GONE + binding.btnMore.visibility = View.VISIBLE + return + } + binding.btnSend.visibility = if (hasImage || hasText) View.VISIBLE else View.GONE + binding.btnMore.visibility = if (hasImage) View.GONE else View.VISIBLE + } + override fun onDestroy() { super.onDestroy() diff --git a/app/src/main/java/com/ck/ckcollar/app/ui/act/customer/MineCustomerActivity.kt b/app/src/main/java/com/ck/ckcollar/app/ui/act/customer/MineCustomerActivity.kt index b480cb6..a66fa8a 100644 --- a/app/src/main/java/com/ck/ckcollar/app/ui/act/customer/MineCustomerActivity.kt +++ b/app/src/main/java/com/ck/ckcollar/app/ui/act/customer/MineCustomerActivity.kt @@ -286,7 +286,7 @@ class MineCustomerActivity : CKBaseActivity() { override fun onOpen(webSocket: WebSocket, response: Response) { TTLog.e("onOpen") runOnUiThread { - toast(getString(R.string.connect_customer_success)) +// toast(getString(R.string.connect_customer_success)) } } }) diff --git a/app/src/main/java/com/ck/ckcollar/app/ui/act/customer/PeopleCustomerActivity.kt b/app/src/main/java/com/ck/ckcollar/app/ui/act/customer/PeopleCustomerActivity.kt index 36d68a6..49a3914 100644 --- a/app/src/main/java/com/ck/ckcollar/app/ui/act/customer/PeopleCustomerActivity.kt +++ b/app/src/main/java/com/ck/ckcollar/app/ui/act/customer/PeopleCustomerActivity.kt @@ -368,7 +368,7 @@ class PeopleCustomerActivity : CKBaseActivity() { override fun onOpen(webSocket: WebSocket, response: Response) { TTLog.e("onOpen") runOnUiThread { - toast(getString(R.string.connect_customer_success)) +// toast(getString(R.string.connect_customer_success)) } } }) diff --git a/app/src/main/java/com/ck/ckcollar/app/ui/act/customer/ShopCustomerActivity.kt b/app/src/main/java/com/ck/ckcollar/app/ui/act/customer/ShopCustomerActivity.kt index d75021a..79d48d1 100644 --- a/app/src/main/java/com/ck/ckcollar/app/ui/act/customer/ShopCustomerActivity.kt +++ b/app/src/main/java/com/ck/ckcollar/app/ui/act/customer/ShopCustomerActivity.kt @@ -261,7 +261,7 @@ class ShopCustomerActivity : CKBaseActivity() { override fun onOpen(webSocket: WebSocket, response: Response) { TTLog.e("onOpen") runOnUiThread { - toast(getString(R.string.connect_customer_success)) +// toast(getString(R.string.connect_customer_success)) } } }) diff --git a/app/src/main/java/com/ck/ckcollar/app/ui/act/home/fragment/HealthFragment.kt b/app/src/main/java/com/ck/ckcollar/app/ui/act/home/fragment/HealthFragment.kt index bf40281..2f58978 100644 --- a/app/src/main/java/com/ck/ckcollar/app/ui/act/home/fragment/HealthFragment.kt +++ b/app/src/main/java/com/ck/ckcollar/app/ui/act/home/fragment/HealthFragment.kt @@ -8,6 +8,7 @@ import android.view.ViewGroup import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.bumptech.glide.Glide +import com.ck.ckcollar.app.CKApp import com.ck.ckcollar.app.R import com.ck.ckcollar.app.databinding.FragmentHealthBinding import com.ck.ckcollar.app.databinding.LayoutItemNoteBinding @@ -16,6 +17,7 @@ import com.ck.ckcollar.app.model.CustomerStatusModel import com.ck.ckcollar.app.model.HealthNoteModel import com.ck.ckcollar.app.ui.act.customer.CustomerActivity import com.ck.ckcollar.app.ui.act.customer.PeopleCustomerActivity +import com.ck.ckcollar.app.ui.act.login.LoginActivity import com.ck.ckcollar.app.ui.act.note.NoteDetailsActivity import com.ck.ckcollar.app.ui.base.CKBaseFragment import com.ck.ckcollar.app.ui.dialog.CKAlertDialog @@ -64,10 +66,12 @@ class HealthFragment: CKBaseFragment() { binding.recyclerView.adapter = noteAdapter binding.btnAIText.setOnClickListener { + if (!requireLogin()) return@setOnClickListener toActivity(CustomerActivity::class.java, DataCollection()) } binding.btnAIPhoto.setOnClickListener { + if (!requireLogin()) return@setOnClickListener toActivity(CustomerActivity::class.java, DataCollection()) } binding.contentCustomer.setOnClickListener { @@ -75,6 +79,10 @@ class HealthFragment: CKBaseFragment() { } binding.refreshLayout.setEnableLoadMore(false) binding.refreshLayout.setOnRefreshListener { + if (!CKApp.app.isUserLoggedIn) { + binding.refreshLayout.finishRefresh() + return@setOnRefreshListener + } page = 1 getData() getCustomerTime() @@ -84,6 +92,12 @@ class HealthFragment: CKBaseFragment() { } + private fun requireLogin(): Boolean { + if (CKApp.app.isUserLoggedIn) return true + toActivity(LoginActivity::class.java, DataCollection()) + return false + } + override fun initData() { @@ -93,6 +107,7 @@ class HealthFragment: CKBaseFragment() { fun getCustomerTime(){ + if (!CKApp.app.isUserLoggedIn) return TTHttpClient.get(activity as TTBaseActivity,"客服在线状态", TTRequestParam(),object : ICallback{ override fun onSuccess(data: String) { @@ -128,6 +143,8 @@ class HealthFragment: CKBaseFragment() { } fun getData(){ +// if (!CKApp.app.isUserLoggedIn) return + TTHttpClient.get(activity as TTBaseActivity,"宠物知识列表", TTRequestParam().apply { add( TTRequestData("pageNum", page) diff --git a/app/src/main/java/com/ck/ckcollar/app/ui/act/home/fragment/HomeFragment.kt b/app/src/main/java/com/ck/ckcollar/app/ui/act/home/fragment/HomeFragment.kt index f8a6c92..8ed1b72 100644 --- a/app/src/main/java/com/ck/ckcollar/app/ui/act/home/fragment/HomeFragment.kt +++ b/app/src/main/java/com/ck/ckcollar/app/ui/act/home/fragment/HomeFragment.kt @@ -28,6 +28,7 @@ import androidx.recyclerview.widget.RecyclerView import com.bumptech.glide.Glide import com.bumptech.glide.load.resource.bitmap.RoundedCorners import com.bumptech.glide.request.RequestOptions +import com.ck.ckcollar.app.CKApp import com.ck.ckcollar.app.R import com.ck.ckcollar.app.databinding.FragmentHomeBinding import com.ck.ckcollar.app.listenner.OnItemClickListenner @@ -42,6 +43,7 @@ import com.ck.ckcollar.app.ui.act.petmanager.InputInviteCodeActivity import com.ck.ckcollar.app.ui.act.petmanager.MapLocationActivity import com.ck.ckcollar.app.ui.act.petmanager.PetManagerActivity import com.ck.ckcollar.app.ui.act.petmanager.ViewPetFileActivity +import com.ck.ckcollar.app.ui.act.login.LoginActivity import com.ck.ckcollar.app.ui.base.CKBaseFragment import com.ck.ckcollar.app.ui.dialog.CKAlertDialog import com.ck.ckcollar.app.ui.popview.CKCollarTypePopView @@ -125,10 +127,12 @@ class HomeFragment : CKBaseFragment() { homeBinding.textName?.setOnClickListener { + if (!requireLogin()) return@setOnClickListener getPetList() } //扫一扫 homeBinding.btnScan?.setOnClickListener { + if (!requireLogin()) return@setOnClickListener if (dataModel == null) { toast(getString(R.string.choose_pet_alert)) return@setOnClickListener @@ -151,6 +155,7 @@ class HomeFragment : CKBaseFragment() { startScan() } homeBinding.btnCamera?.setOnClickListener { + if (!requireLogin()) return@setOnClickListener try { if (!checkCameraPermissions()){ @@ -170,9 +175,11 @@ class HomeFragment : CKBaseFragment() { } } homeBinding.btnManager?.setOnClickListener { + if (!requireLogin()) return@setOnClickListener toActivity(PetManagerActivity::class.java, DataCollection()) } homeBinding.btnAddPet?.setOnClickListener { + if (!requireLogin()) return@setOnClickListener toActivity(AddPetActivity::class.java, DataCollection()) } @@ -198,6 +205,7 @@ class HomeFragment : CKBaseFragment() { } homeBinding.btnViewPostion?.setOnClickListener { + if (!requireLogin()) return@setOnClickListener getData(dataModel?.id.toString()) // toActivity(MapLocationActivity::class.java, DataCollection().apply { @@ -216,6 +224,10 @@ class HomeFragment : CKBaseFragment() { }) } homeBinding.refreshLayout?.setOnRefreshListener { + if (!CKApp.app.isUserLoggedIn) { + homeBinding.refreshLayout?.finishRefresh() + return@setOnRefreshListener + } if (dataModel == null) { getData("") @@ -232,6 +244,12 @@ class HomeFragment : CKBaseFragment() { } } + private fun requireLogin(): Boolean { + if (CKApp.app.isUserLoggedIn) return true + toActivity(LoginActivity::class.java, DataCollection()) + return false + } + private fun requestCameraPermission(action: CameraAction) { pendingCameraAction = action showCameraPermissionTopDialog() @@ -278,6 +296,13 @@ class HomeFragment : CKBaseFragment() { override fun initData() { + if (!CKApp.app.isUserLoggedIn) { + setBannerData(listOf(BannarModel().apply { + localImageRes = R.mipmap.index_banner1 + })) + return + } + var data = PreferencesUtils.getString(activity!!, Const.PET_DATA, "") if (!TextUtils.isEmpty(data)) { @@ -305,7 +330,7 @@ class HomeFragment : CKBaseFragment() { LiveDataBus.get().with("FIRST", Int::class.java) .observe(viewLifecycleOwner, object : Observer { override fun onChanged(result: Int?) { - getPetList2() + if (CKApp.app.isUserLoggedIn) getPetList2() } }) @@ -350,22 +375,14 @@ class HomeFragment : CKBaseFragment() { } fun getData(id: String) { + if (!CKApp.app.isUserLoggedIn) return TTHttpClient.get(activity as TTBaseActivity, "首页", TTRequestParam().apply { add(TTRequestData("patId", id)) }, object : ICallback { override fun onSuccess(data: String) { homeModel = Gson().fromJson(data, HomeModel::class.java) - bannarData = homeModel?.banners!! - - imageAdapter = ImageAdapter(activity!!, bannarData, object : OnItemClickListenner { - override fun onClick(pos: Int, model: Any) { - - } - }) - homeBinding.banner.addBannerLifecycleObserver(this@HomeFragment)//添加生命周期观察者 - .setAdapter(imageAdapter) - .setIndicator(CircleIndicator(activity)); + setBannerData(homeModel?.banners.orEmpty()) } @@ -470,7 +487,18 @@ class HomeFragment : CKBaseFragment() { }) } + private fun setBannerData(data: List) { + bannarData = data + imageAdapter = ImageAdapter(activity!!, bannarData, object : OnItemClickListenner { + override fun onClick(pos: Int, model: Any) = Unit + }) + homeBinding.banner.addBannerLifecycleObserver(this@HomeFragment) + .setAdapter(imageAdapter) + .setIndicator(CircleIndicator(activity)) + } + fun switchPet() { + if (!CKApp.app.isUserLoggedIn) return LiveDataBus.get().with("BOUND" + dataModel!!.id, Int::class.java) @@ -506,6 +534,7 @@ class HomeFragment : CKBaseFragment() { } fun getPetInfo(id: String) { + if (!CKApp.app.isUserLoggedIn) return TTHttpClient.get(activity as TTBaseActivity, "宠物档案", id, object : ICallback { override fun onSuccess(data: String) { var model = Gson().fromJson( @@ -592,6 +621,7 @@ class HomeFragment : CKBaseFragment() { fun getPetList() { + if (!CKApp.app.isUserLoggedIn) return showProgeassDialog(getString(R.string.search)) TTHttpClient.get(activity as TTBaseActivity, "宠物列表", TTRequestParam().apply { add( @@ -656,6 +686,7 @@ class HomeFragment : CKBaseFragment() { fun getPetList2() { + if (!CKApp.app.isUserLoggedIn) return showProgeassDialog(getString(R.string.search)) TTHttpClient.get(activity as TTBaseActivity, "宠物列表", TTRequestParam().apply { add( @@ -696,6 +727,7 @@ class HomeFragment : CKBaseFragment() { } fun uploadImage(path: String) { + if (!CKApp.app.isUserLoggedIn) return var param = TTRequestParam() param.files.add(File(path)) @@ -717,6 +749,7 @@ class HomeFragment : CKBaseFragment() { } fun aiPhoto(imageUrl: String) { + if (!CKApp.app.isUserLoggedIn) return TTHttpClient.postJson(activity as TTBaseActivity, "AI拍照识别", TTRequestParam().apply { add(TTRequestData("imageUrl", imageUrl)) @@ -824,8 +857,11 @@ class HomeFragment : CKBaseFragment() { position: Int, size: Int ) { + val imageSource: Any? = data?.localImageRes + ?.takeIf { it != 0 } + ?: data?.bannerUrl Glide.with(context) - .load(data?.bannerUrl) + .load(imageSource) .apply(RequestOptions.bitmapTransform(RoundedCorners(12))) .placeholder(R.mipmap.image_bannar_item) .into(holder!!.imageView) diff --git a/app/src/main/java/com/ck/ckcollar/app/ui/act/home/fragment/MineFragment.kt b/app/src/main/java/com/ck/ckcollar/app/ui/act/home/fragment/MineFragment.kt index fdb89a2..1247e2e 100644 --- a/app/src/main/java/com/ck/ckcollar/app/ui/act/home/fragment/MineFragment.kt +++ b/app/src/main/java/com/ck/ckcollar/app/ui/act/home/fragment/MineFragment.kt @@ -17,6 +17,7 @@ import com.ck.ckcollar.app.ui.act.deposit.DepositActivity import com.ck.ckcollar.app.ui.act.deposit.StartDepositActivity import com.ck.ckcollar.app.ui.act.member.MemberActivity import com.ck.ckcollar.app.ui.act.message.MessageCenterActivity +import com.ck.ckcollar.app.ui.act.login.LoginActivity import com.ck.ckcollar.app.ui.act.mine.FeedBackActivity import com.ck.ckcollar.app.ui.act.mine.ReturnDeviceActivity import com.ck.ckcollar.app.ui.act.points.PointsActivity @@ -51,15 +52,19 @@ class MineFragment : CKBaseFragment() { override fun initView() { binding.contentBalance.setOnClickListener { + if (!requireLogin()) return@setOnClickListener toActivity(BalanceActivity::class.java, DataCollection()) } binding.conetntPoints.setOnClickListener { + if (!requireLogin()) return@setOnClickListener toActivity(PointsActivity::class.java, DataCollection()) } binding.imageUser.setOnClickListener { + if (!requireLogin()) return@setOnClickListener toActivity(UserInfoActivity::class.java, DataCollection()) } binding.btnUserInfo.setOnClickListener { + if (!requireLogin()) return@setOnClickListener toActivity(UserInfoActivity::class.java, DataCollection()) } @@ -71,19 +76,24 @@ class MineFragment : CKBaseFragment() { toActivity(SettingActivity::class.java, DataCollection()) } binding.btnOpen.setOnClickListener { + if (!requireLogin()) return@setOnClickListener toActivity(MemberActivity::class.java, DataCollection()) } binding.btnReturnDevice.setOnClickListener { + if (!requireLogin()) return@setOnClickListener toActivity(ReturnDeviceActivity::class.java, DataCollection()) } binding.btnFeedback.setOnClickListener { + if (!requireLogin()) return@setOnClickListener toActivity(FeedBackActivity::class.java, DataCollection()) } binding.btnCustomerService.setOnClickListener { + if (!requireLogin()) return@setOnClickListener toActivity(PeopleCustomerActivity::class.java, DataCollection().apply { add(Data("chatType","2")) }) } binding.textDeposit.setOnClickListener { + if (!requireLogin()) return@setOnClickListener if ("0".equals(CKApp.app.userInfo!!.depositStatus)){ toActivity(DepositActivity::class.java, DataCollection()) }else{ @@ -92,18 +102,23 @@ class MineFragment : CKBaseFragment() { } binding.btnAllOrder.setOnClickListener { + if (!requireLogin()) return@setOnClickListener toActivity(MyOrderActivity::class.java, DataCollection().apply { add(Data("pos","0")) }) } binding.btnOrderPayment.setOnClickListener { + if (!requireLogin()) return@setOnClickListener toActivity(MyOrderActivity::class.java, DataCollection().apply { add(Data("pos","1")) }) } binding.btnOrderDelivery.setOnClickListener { + if (!requireLogin()) return@setOnClickListener toActivity(MyOrderActivity::class.java, DataCollection().apply { add(Data("pos","2")) }) } binding.btnOrderReceipt.setOnClickListener { + if (!requireLogin()) return@setOnClickListener toActivity(MyOrderActivity::class.java, DataCollection().apply { add(Data("pos","3")) }) } binding.btnOrderAfterSales.setOnClickListener { + if (!requireLogin()) return@setOnClickListener toActivity(MyOrderActivity::class.java, DataCollection().apply { add(Data("pos","4")) }) } @@ -111,10 +126,28 @@ class MineFragment : CKBaseFragment() { } + private fun requireLogin(): Boolean { + if (CKApp.app.isUserLoggedIn) return true + toActivity(LoginActivity::class.java, DataCollection()) + return false + } + override fun initData() { + if (!CKApp.app.isUserLoggedIn) { + binding.textNick.text = getString(R.string.guest) + binding.textPhone.text = "" + binding.textPhone.visibility = View.GONE + binding.textBalance.text = "0" + binding.textPoints.text = "0" + binding.textCount.visibility = View.INVISIBLE + binding.imageUser.setImageResource(R.mipmap.image_user_default) + return + } + binding.textNick.text = CKApp.app.userInfo?.custName binding.textPhone.text = CKApp.app.userInfo?.phonenumber + binding.textPhone.visibility = View.VISIBLE if (!TextUtils.isEmpty(CKApp.app.userInfo?.avatar)){ Glide.with(this@MineFragment) @@ -123,8 +156,8 @@ class MineFragment : CKBaseFragment() { .into(binding.imageUser) } - binding.textBalance.text = CKApp.app.userInfo?.balance.toString() - binding.textPoints.text = CKApp.app.userInfo?.points.toString() + binding.textBalance.text = CKApp.app.userInfo?.balance?.toString() ?: "0" + binding.textPoints.text = CKApp.app.userInfo?.points?.toString() ?: "0" if (CKApp.app.userInfo?.isMember == true){ binding.btnOpen.setText(getString(R.string.auto_renewal2)) @@ -150,6 +183,11 @@ class MineFragment : CKBaseFragment() { getUserInfo() } fun getUserInfo(){ + if (!CKApp.app.isUserLoggedIn) { + binding.textCount.visibility = View.INVISIBLE + return + } + TTHttpClient.get(activity as TTBaseActivity,"个人资料", TTRequestParam(),object : ICallback{ override fun onSuccess(data: String) { CKApp.app.userInfo = Gson().fromJson(data, UserInfoModel::class.java) @@ -187,4 +225,4 @@ class MineFragment : CKBaseFragment() { -} \ No newline at end of file +} diff --git a/app/src/main/java/com/ck/ckcollar/app/ui/act/home/fragment/ShopFragment.kt b/app/src/main/java/com/ck/ckcollar/app/ui/act/home/fragment/ShopFragment.kt index 26f618c..3e1ace7 100644 --- a/app/src/main/java/com/ck/ckcollar/app/ui/act/home/fragment/ShopFragment.kt +++ b/app/src/main/java/com/ck/ckcollar/app/ui/act/home/fragment/ShopFragment.kt @@ -15,6 +15,7 @@ import androidx.recyclerview.widget.RecyclerView import com.bumptech.glide.Glide import com.bumptech.glide.load.resource.bitmap.RoundedCorners import com.bumptech.glide.request.RequestOptions +import com.ck.ckcollar.app.CKApp import com.ck.ckcollar.app.R import com.ck.ckcollar.app.action.ActionCode import com.ck.ckcollar.app.databinding.FragmentShopBinding @@ -299,6 +300,11 @@ class ShopFragment : CKBaseFragment() { } fun getCarCount() { + if (!CKApp.app.isUserLoggedIn) { + binding.textCount.visibility = View.GONE + return + } + TTHttpClient.get( activity as TTBaseActivity, "购物车数量和合计", @@ -546,4 +552,4 @@ class ShopFragment : CKBaseFragment() { } } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/ck/ckcollar/app/ui/act/petmanager/AddPetActivity.kt b/app/src/main/java/com/ck/ckcollar/app/ui/act/petmanager/AddPetActivity.kt index cfd0878..85e6bb7 100644 --- a/app/src/main/java/com/ck/ckcollar/app/ui/act/petmanager/AddPetActivity.kt +++ b/app/src/main/java/com/ck/ckcollar/app/ui/act/petmanager/AddPetActivity.kt @@ -1,5 +1,6 @@ package com.ck.ckcollar.app.ui.act.petmanager +import android.Manifest import android.content.Intent import android.graphics.Bitmap import android.net.Uri @@ -97,12 +98,10 @@ class AddPetActivity : CKBaseActivity() { try { if (mark == 0){ if (!checkCameraPermissions()){ - CKAlertDialog(this@AddPetActivity,getString(R.string.alert),getString(R.string.camera_alert),object : CKAlertDialog.AlertClickListener{ - override fun onBack(isConfirm: Boolean) { - TODO("Not yet implemented") - } - - }).show() + getPermissionRequst( + Manifest.permission.CAMERA, + REQUEST_CAMERA_PERMISSION + ) return } takePhoto() @@ -194,6 +193,12 @@ class AddPetActivity : CKBaseActivity() { } + override fun onPermissionsGranted(requestCode: Int, permissions: Array) { + if (requestCode == REQUEST_CAMERA_PERMISSION) { + takePhoto() + } + } + override fun initData() { var data = getReceiveParam().get("data") data?.let { @@ -408,6 +413,10 @@ class AddPetActivity : CKBaseActivity() { }).show() } + companion object { + private const val REQUEST_CAMERA_PERMISSION = 1201 + } + fun uploadImage(path: String) { diff --git a/app/src/main/java/com/ck/ckcollar/app/ui/act/setting/SettingActivity.kt b/app/src/main/java/com/ck/ckcollar/app/ui/act/setting/SettingActivity.kt index 44eec92..54fb685 100644 --- a/app/src/main/java/com/ck/ckcollar/app/ui/act/setting/SettingActivity.kt +++ b/app/src/main/java/com/ck/ckcollar/app/ui/act/setting/SettingActivity.kt @@ -27,6 +27,8 @@ class SettingActivity : CKBaseActivity(), View.OnClickListener { } override fun initView() { + binding.btnLogout.visibility = if (CKApp.app.isUserLoggedIn) View.VISIBLE else View.GONE + binding.contentLoginPassword.setOnClickListener(this) binding.contentPaymentPassword.setOnClickListener(this) binding.contentAboutUs.setOnClickListener(this) @@ -44,9 +46,11 @@ class SettingActivity : CKBaseActivity(), View.OnClickListener { when (v?.id){ R.id.contentLoginPassword->{ + if (!requireLogin()) return toActivity(PasswordManagerActivity::class.java, DataCollection()) } R.id.contentPaymentPassword->{ + if (!requireLogin()) return toActivity(PayPasswordManagerActivity::class.java, DataCollection()) } @@ -60,10 +64,12 @@ class SettingActivity : CKBaseActivity(), View.OnClickListener { toActivity(AgreementActivity::class.java, DataCollection().apply { add(Data("title","隐私协议")) }) } R.id.contentShippingAddress->{ + if (!requireLogin()) return toActivity(AddressActivity::class.java, DataCollection().apply { add(Data("flag","1")) }) } R.id.contentCancellation->{ + if (!requireLogin()) return toActivity(AccountCancellationActivity::class.java, DataCollection()) } R.id.btnLogout->{ @@ -80,4 +86,10 @@ class SettingActivity : CKBaseActivity(), View.OnClickListener { } } } + + private fun requireLogin(): Boolean { + if (CKApp.app.isUserLoggedIn) return true + toActivity(LoginActivity::class.java, DataCollection()) + return false + } } diff --git a/app/src/main/java/com/ck/ckcollar/app/ui/act/shop/ProductDetailsActivity.kt b/app/src/main/java/com/ck/ckcollar/app/ui/act/shop/ProductDetailsActivity.kt index bddb080..c3b8d14 100644 --- a/app/src/main/java/com/ck/ckcollar/app/ui/act/shop/ProductDetailsActivity.kt +++ b/app/src/main/java/com/ck/ckcollar/app/ui/act/shop/ProductDetailsActivity.kt @@ -13,6 +13,7 @@ import androidx.recyclerview.widget.RecyclerView import com.bumptech.glide.Glide import com.bumptech.glide.load.resource.bitmap.RoundedCorners import com.bumptech.glide.request.RequestOptions +import com.ck.ckcollar.app.CKApp import com.ck.ckcollar.app.R import com.ck.ckcollar.app.action.ActionCode import com.ck.ckcollar.app.databinding.ActivityProductDetailsBinding @@ -23,6 +24,7 @@ import com.ck.ckcollar.app.ui.act.customer.PeopleCustomerActivity import com.ck.ckcollar.app.ui.act.customer.ShopCustomerActivity import com.ck.ckcollar.app.ui.act.home.fragment.HomeFragment import com.ck.ckcollar.app.ui.act.home.fragment.HomeFragment.ImageAdapter +import com.ck.ckcollar.app.ui.act.login.LoginActivity import com.ck.ckcollar.app.ui.act.petmanager.ImageViewActivity import com.ck.ckcollar.app.ui.base.CKBaseActivity import com.ck.ckcollar.app.ui.base.CKLHBaseActionBarActivity @@ -63,20 +65,30 @@ class ProductDetailsActivity : CKBaseActivity() { setupWebView(binding.textContent) binding.btnAddCar.setOnClickListener { + if (!requireLogin()) return@setOnClickListener showProductTypeFragment() } binding.btnBuyNow.setOnClickListener { + if (!requireLogin()) return@setOnClickListener showProductTypeFragment() } binding.contentShopCar.setOnClickListener { + if (!requireLogin()) return@setOnClickListener toActivity(ShopCarActivity::class.java, DataCollection()) } binding.contentCustomer.setOnClickListener { + if (!requireLogin()) return@setOnClickListener toActivity(PeopleCustomerActivity::class.java, DataCollection().apply { add(Data("chatType","1")) }) } } + private fun requireLogin(): Boolean { + if (CKApp.app.isUserLoggedIn) return true + toActivity(LoginActivity::class.java, DataCollection()) + return false + } + override fun initData() { model = Gson().fromJson(getReceiveParam().get("data")!!.stringValue, ShopProductModel.ProductModel::class.java) @@ -313,4 +325,4 @@ class ProductDetailsActivity : CKBaseActivity() { // 使用 loadDataWithBaseURL 加载 webView.loadDataWithBaseURL(null, styledHtml, "text/html", "UTF-8", null) } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/ck/ckcollar/app/ui/act/shop/TypeActivity.kt b/app/src/main/java/com/ck/ckcollar/app/ui/act/shop/TypeActivity.kt index d5893ab..4c93b4f 100644 --- a/app/src/main/java/com/ck/ckcollar/app/ui/act/shop/TypeActivity.kt +++ b/app/src/main/java/com/ck/ckcollar/app/ui/act/shop/TypeActivity.kt @@ -33,6 +33,8 @@ import com.tt.kit.model.DataCollection import com.tt.kit.utils.KeyboardUtils class TypeActivity : CKLHBaseActionBarActivity() { + override val shouldRequestPermissionsOnCreate: Boolean = false + lateinit var binding: ActivityShopTypeBinding lateinit var productAdapter: ProductAdapter @@ -172,4 +174,4 @@ class TypeActivity : CKLHBaseActionBarActivity() { } } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/ck/ckcollar/app/ui/act/welcome/IndexActivity.kt b/app/src/main/java/com/ck/ckcollar/app/ui/act/welcome/IndexActivity.kt index 910c57d..0a2d08a 100644 --- a/app/src/main/java/com/ck/ckcollar/app/ui/act/welcome/IndexActivity.kt +++ b/app/src/main/java/com/ck/ckcollar/app/ui/act/welcome/IndexActivity.kt @@ -7,7 +7,6 @@ import android.os.Message import com.ck.ckcollar.app.CKApp import com.ck.ckcollar.app.databinding.ActivityIndexBinding import com.ck.ckcollar.app.ui.act.home.MainActivity -import com.ck.ckcollar.app.ui.act.login.LoginActivity import com.ck.ckcollar.app.ui.base.CKBaseActivity import com.ck.ckcollar.app.utils.Const import com.cyclone.shadowsocks.utils.PreferencesUtils @@ -29,7 +28,7 @@ class IndexActivity : CKBaseActivity() { if (isFirst){ toActivity(WelcomeActivity::class.java, DataCollection()) }else{ - toActivity(LoginActivity::class.java, DataCollection()) + toActivity(MainActivity::class.java, DataCollection()) } }else{ toActivity(MainActivity::class.java, DataCollection()) diff --git a/app/src/main/java/com/ck/ckcollar/app/ui/act/welcome/WelcomeActivity.kt b/app/src/main/java/com/ck/ckcollar/app/ui/act/welcome/WelcomeActivity.kt index c45fe6d..f1749c2 100644 --- a/app/src/main/java/com/ck/ckcollar/app/ui/act/welcome/WelcomeActivity.kt +++ b/app/src/main/java/com/ck/ckcollar/app/ui/act/welcome/WelcomeActivity.kt @@ -9,7 +9,7 @@ import androidx.viewpager.widget.PagerAdapter import com.ck.ckcollar.app.R import com.ck.ckcollar.app.databinding.ActivityWelcomeBinding import com.ck.ckcollar.app.databinding.LayoutItemWelcomeBinding -import com.ck.ckcollar.app.ui.act.login.LoginActivity +import com.ck.ckcollar.app.ui.act.home.MainActivity import com.ck.ckcollar.app.ui.base.CKBaseActivity import com.ck.ckcollar.app.utils.Const import com.cyclone.shadowsocks.utils.PreferencesUtils @@ -64,7 +64,7 @@ class WelcomeActivity : CKBaseActivity() { // }else{ // toActivity(LoginActivity::class.java, DataCollection()) // } - toActivity(LoginActivity::class.java, DataCollection()) + toActivity(MainActivity::class.java, DataCollection()) finish() } @@ -98,4 +98,4 @@ class WelcomeActivity : CKBaseActivity() { PreferencesUtils.putBoolean(this, Const.FIRST, false) } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/ck/ckcollar/app/ui/base/CKLHBaseActionBarActivity.kt b/app/src/main/java/com/ck/ckcollar/app/ui/base/CKLHBaseActionBarActivity.kt index 70556ef..b654e18 100644 --- a/app/src/main/java/com/ck/ckcollar/app/ui/base/CKLHBaseActionBarActivity.kt +++ b/app/src/main/java/com/ck/ckcollar/app/ui/base/CKLHBaseActionBarActivity.kt @@ -28,6 +28,8 @@ import pub.devrel.easypermissions.EasyPermissions open class CKLHBaseActionBarActivity : TTBaseActivity(){ + protected open val shouldRequestPermissionsOnCreate: Boolean = true + var perms_= listOf(Manifest.permission.CAMERA, Manifest.permission.READ_MEDIA_IMAGES,Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE) var perms_tiramisu = listOf(Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE) @@ -83,7 +85,7 @@ open class CKLHBaseActionBarActivity : TTBaseActivity(){ // insets // } - if (!checkPermissions()){ + if (shouldRequestPermissionsOnCreate && !checkPermissions()){ requstPermissions() } @@ -202,4 +204,4 @@ open class CKLHBaseActionBarActivity : TTBaseActivity(){ // insets // } } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/ck/ckcollar/app/utils/networkone/ICallback.kt b/app/src/main/java/com/ck/ckcollar/app/utils/networkone/ICallback.kt index 112c402..a72df8a 100644 --- a/app/src/main/java/com/ck/ckcollar/app/utils/networkone/ICallback.kt +++ b/app/src/main/java/com/ck/ckcollar/app/utils/networkone/ICallback.kt @@ -2,4 +2,5 @@ package com.ck.ckcollar.app.utils.networkone interface ICallback { fun onSuccess(data: String) fun onFailed(code: String, msg: String) + fun onComplete() {} } diff --git a/app/src/main/java/com/ck/ckcollar/app/utils/networkone/TTHttpClient.kt b/app/src/main/java/com/ck/ckcollar/app/utils/networkone/TTHttpClient.kt index d3d5ce5..19928fd 100644 --- a/app/src/main/java/com/ck/ckcollar/app/utils/networkone/TTHttpClient.kt +++ b/app/src/main/java/com/ck/ckcollar/app/utils/networkone/TTHttpClient.kt @@ -429,10 +429,12 @@ object TTHttpClient { } withContext(Dispatchers.Main) { - iCallback.onFailed("500", "网络连接失败,请检查网络") + iCallback.onComplete() } }catch (e: Exception){ - + withContext(Dispatchers.Main) { + iCallback.onFailed("500", e.message.orEmpty()) + } } } @@ -988,4 +990,4 @@ private fun getMessage(data: JSONObject): String { return "" } } -} \ No newline at end of file +} diff --git a/app/src/main/res/layout/activity_customer.xml b/app/src/main/res/layout/activity_customer.xml index acd16ca..0b2e8e3 100644 --- a/app/src/main/res/layout/activity_customer.xml +++ b/app/src/main/res/layout/activity_customer.xml @@ -1,5 +1,6 @@ - + - - + android:orientation="vertical"> - + + + + + + + + + + + + + + + + + - \ No newline at end of file + diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index b808e5b..5ff10ae 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -7,638 +7,6 @@ android:fitsSystemWindows="false" android:gravity="center_horizontal" android:orientation="vertical"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-xxhdpi/icon_img_del_red.png b/app/src/main/res/mipmap-xxhdpi/icon_img_del_red.png new file mode 100644 index 0000000..215c0f5 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/icon_img_del_red.png differ diff --git a/app/src/main/res/mipmap-xxhdpi/icon_send_gray.png b/app/src/main/res/mipmap-xxhdpi/icon_send_gray.png new file mode 100644 index 0000000..4ea6ae5 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/icon_send_gray.png differ diff --git a/app/src/main/res/mipmap-xxhdpi/icon_send_yellow.png b/app/src/main/res/mipmap-xxhdpi/icon_send_yellow.png new file mode 100644 index 0000000..0508108 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/icon_send_yellow.png differ diff --git a/app/src/main/res/mipmap-xxhdpi/index_banner1.png b/app/src/main/res/mipmap-xxhdpi/index_banner1.png new file mode 100644 index 0000000..0d6d6ee Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/index_banner1.png differ diff --git a/app/src/main/res/mipmap-xxhdpi/index_banner2.png b/app/src/main/res/mipmap-xxhdpi/index_banner2.png new file mode 100644 index 0000000..ad16bff Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/index_banner2.png differ diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b7db38d..111f416 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,4 +1,5 @@ + 游客 宠盾