From d7cefa7d6bebdfd47d03b3b12f49594690ed9eb3 Mon Sep 17 00:00:00 2001 From: wushaocheng <15876365887@163.com> Date: Mon, 20 Feb 2023 15:35:15 +0800 Subject: [PATCH] =?UTF-8?q?[Modify]=E6=88=91=E7=9A=84=E5=9C=B0=E5=8C=BA?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 3 + .../user/activity/UserInfoModifyActivity.kt | 28 ++++++++- .../ui/user/adapter/ArrayWheelAdapter.java | 44 +++++++++++++ .../erban/ui/user/dialog/UserAreaDialog.kt | 62 ++++++++++++------- .../main/res/drawable/bg_ffffff_top_18.xml | 13 ++++ .../res/layout/dialog_user_area_picker.xml | 58 +++++++++++++++++ .../xchat_android_core/user/IUserModel.java | 5 ++ .../xchat_android_core/user/UserModel.java | 13 ++++ 8 files changed, 204 insertions(+), 22 deletions(-) create mode 100644 app/src/main/java/com/yizhuan/erban/ui/user/adapter/ArrayWheelAdapter.java create mode 100644 app/src/main/res/drawable/bg_ffffff_top_18.xml create mode 100644 app/src/main/res/layout/dialog_user_area_picker.xml diff --git a/app/build.gradle b/app/build.gradle index c20230feb..b2c15ab5d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -287,6 +287,9 @@ dependencies { implementation 'com.github.lihangleo2:ShadowLayout:3.3.2' + //wheelView + implementation 'com.contrarywind:wheelview:4.1.0' + } channel { diff --git a/app/src/main/java/com/yizhuan/erban/ui/user/activity/UserInfoModifyActivity.kt b/app/src/main/java/com/yizhuan/erban/ui/user/activity/UserInfoModifyActivity.kt index bbed8b1d1..fadca276d 100644 --- a/app/src/main/java/com/yizhuan/erban/ui/user/activity/UserInfoModifyActivity.kt +++ b/app/src/main/java/com/yizhuan/erban/ui/user/activity/UserInfoModifyActivity.kt @@ -283,7 +283,10 @@ class UserInfoModifyActivity : BaseViewBindingActivity) { dialogManager.dismissDialog() - UserAreaDialog.newInstance(areaList).show(this@UserInfoModifyActivity) + UserAreaDialog.newInstance(areaList) + .apply { setAction { + reportArea(it) + } }.show(this@UserInfoModifyActivity) } override fun onError(e: Throwable) { @@ -300,6 +303,29 @@ class UserInfoModifyActivity : BaseViewBindingActivity { + override fun onSubscribe(d: Disposable) { + mCompositeDisposable.add(d) + } + + override fun onSuccess(areaList: String) { + dialogManager.dismissDialog() + } + + override fun onError(e: Throwable) { + dialogManager.dismissDialog() + toast(e.message) + } + + }) + } + override fun onRequestPermissionsResult( requestCode: Int, permissions: Array, grantResults: IntArray ) { diff --git a/app/src/main/java/com/yizhuan/erban/ui/user/adapter/ArrayWheelAdapter.java b/app/src/main/java/com/yizhuan/erban/ui/user/adapter/ArrayWheelAdapter.java new file mode 100644 index 000000000..8c53b6c13 --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/ui/user/adapter/ArrayWheelAdapter.java @@ -0,0 +1,44 @@ +package com.yizhuan.erban.ui.user.adapter; + +import com.contrarywind.adapter.WheelAdapter; + +import java.util.List; + +/** + * The simple Array wheel adapter + * @param the element type + */ +public class ArrayWheelAdapter implements WheelAdapter { + + + // items + private List items; + + /** + * Constructor + * @param items the items + */ + public ArrayWheelAdapter(List items) { + this.items = items; + + } + + @Override + public Object getItem(int index) { + if (index >= 0 && index < items.size()) { + return items.get(index); + } + return ""; + } + + @Override + public int getItemsCount() { + return items.size(); + } + + @Override + public int indexOf(Object o){ + return items.indexOf(o); + } + +} diff --git a/app/src/main/java/com/yizhuan/erban/ui/user/dialog/UserAreaDialog.kt b/app/src/main/java/com/yizhuan/erban/ui/user/dialog/UserAreaDialog.kt index 7be35562e..ca49e1334 100644 --- a/app/src/main/java/com/yizhuan/erban/ui/user/dialog/UserAreaDialog.kt +++ b/app/src/main/java/com/yizhuan/erban/ui/user/dialog/UserAreaDialog.kt @@ -1,26 +1,27 @@ package com.yizhuan.erban.ui.user.dialog import android.os.Bundle -import android.view.View -import com.google.android.flexbox.FlexDirection -import com.google.android.flexbox.FlexWrap -import com.google.android.flexbox.FlexboxLayoutManager -import com.google.android.flexbox.JustifyContent -import com.yizhuan.erban.R +import android.view.Gravity +import android.view.WindowManager import com.yizhuan.erban.base.BaseDialog -import com.yizhuan.erban.databinding.DialogUserTagBinding -import com.yizhuan.erban.ui.user.activity.EditUserTagActivity -import com.yizhuan.erban.ui.user.adapter.UserLabelDialogAdapter -import com.yizhuan.xchat_android_core.auth.AuthModel -import com.yizhuan.xchat_android_core.user.UserModel +import com.yizhuan.erban.databinding.DialogUserAreaPickerBinding +import com.yizhuan.erban.ui.user.adapter.ArrayWheelAdapter import java.io.Serializable + /** - * 用户地区 - * Created by wushaocheng on 2023/2/17. + * author: wushaocheng + * time: 2022/2/17 + * desc: 用户地区 */ class UserAreaDialog : - BaseDialog() { + BaseDialog() { + + private var mOptionsItems: List? = null + + private var mArea: String? = null + + private var mAction: ((String) -> Unit)? = null companion object { const val KEY_AREA = "key_area" @@ -35,20 +36,39 @@ class UserAreaDialog : } } - private val mTagAdapter by lazy { UserLabelDialogAdapter() } + override fun onStart() { + gravity = Gravity.BOTTOM + width = WindowManager.LayoutParams.MATCH_PARENT + super.onStart() + } override fun init() { - val areaList = arguments?.getSerializable(KEY_AREA) as List? - + mOptionsItems = arguments?.getSerializable(KEY_AREA) as List? initListener() + setWheelView() } private fun initListener() { - binding.ivClose.setOnClickListener { dismissAllowingStateLoss() } - - binding.tvEdit.setOnClickListener { + binding.tvCancel.setOnClickListener { dismissAllowingStateLoss() - context?.let { it1 -> EditUserTagActivity.start(it1) } + } + binding.tvSure.setOnClickListener { + mArea?.let { area -> + dismissAllowingStateLoss() + mAction?.invoke(area) + } + } + } + + fun setAction(action: (String) -> Unit) { + mAction = action + } + + private fun setWheelView() { + mOptionsItems?.let { + binding.wheelView.setCyclic(false) + binding.wheelView.adapter = ArrayWheelAdapter(it) + binding.wheelView.setOnItemSelectedListener { index -> mArea = it[index] } } } diff --git a/app/src/main/res/drawable/bg_ffffff_top_18.xml b/app/src/main/res/drawable/bg_ffffff_top_18.xml new file mode 100644 index 000000000..33547abb5 --- /dev/null +++ b/app/src/main/res/drawable/bg_ffffff_top_18.xml @@ -0,0 +1,13 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_user_area_picker.xml b/app/src/main/res/layout/dialog_user_area_picker.xml new file mode 100644 index 000000000..4fc7de2a1 --- /dev/null +++ b/app/src/main/res/layout/dialog_user_area_picker.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/user/IUserModel.java b/core/src/main/java/com/yizhuan/xchat_android_core/user/IUserModel.java index 8fd292935..ed197dc93 100644 --- a/core/src/main/java/com/yizhuan/xchat_android_core/user/IUserModel.java +++ b/core/src/main/java/com/yizhuan/xchat_android_core/user/IUserModel.java @@ -247,4 +247,9 @@ public interface IUserModel extends IModel { */ Single> getAreaInfo(); + /** + * 保存地区 + */ + Single saveArea(String area); + } diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/user/UserModel.java b/core/src/main/java/com/yizhuan/xchat_android_core/user/UserModel.java index 6a76efb50..bf40147e7 100644 --- a/core/src/main/java/com/yizhuan/xchat_android_core/user/UserModel.java +++ b/core/src/main/java/com/yizhuan/xchat_android_core/user/UserModel.java @@ -841,6 +841,13 @@ public final class UserModel extends BaseModel implements IUserModel { .compose(RxHelper.handleSchedulers()); } + @Override + public Single saveArea(String area) { + return api.saveArea(area) + .compose(RxHelper.handleStringData()) + .compose(RxHelper.handleSchedulers()); + } + private interface Api { /** * 获取某个用户的用户信息 @@ -1109,5 +1116,11 @@ public final class UserModel extends BaseModel implements IUserModel { @GET("/region/config") Single>> getAreaInfo(); + /** + * 保存地区 + */ + @POST("/region/save") + Single> saveArea(@Query("region") String region); + } }