From 92070af5e802e3ba32f692dd101318d4539db121 Mon Sep 17 00:00:00 2001 From: max Date: Fri, 17 May 2024 19:56:26 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E6=81=A2=E5=A4=8D=E8=BD=AC=E8=B5=A0?= =?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/src/main/AndroidManifest.xml | 16 + .../java/com/chwl/app/home/MeViewModel.kt | 22 +- .../com/chwl/app/home/fragment/MeFragment.kt | 42 ++ .../java/com/chwl/app/pay/GiveGoldModel.kt | 68 +++ .../chwl/app/pay/activity/GiveGoldActivity.kt | 129 ++++++ .../pay/activity/GiveGoldDetailActivity.kt | 115 +++++ .../pay/activity/GiveGoldSearchActivity.kt | 84 ++++ .../pay/activity/GiveGoldToUserActivity.kt | 401 ++++++++++++++++ .../pay/adapter/GiveDiamondDetailAdapter.kt | 23 + .../chwl/app/pay/adapter/GiveGiftAdapter.java | 34 ++ .../app/pay/adapter/GiveGiftDetailAdapter.kt | 24 + .../chwl/app/pay/adapter/GiveSearchAdapter.kt | 22 + .../chwl/app/pay/adapter/LatelyGiveAdapter.kt | 22 + .../app/pay/fragment/GiveDiamondFragment.kt | 73 +++ .../chwl/app/pay/fragment/GiveGiftFragment.kt | 73 +++ .../chwl/app/pay/interfaces/PasswordView.java | 23 + .../password/GiveGoldPassWordFragment.java | 132 ++++++ .../pay/password/GiveGoldPasswordView.java | 135 ++++++ .../pay/widget/GridPasswordNoFocusView.java | 436 ++++++++++++++++++ .../com/chwl/app/ui/im/RouterHandler.java | 4 + .../app/ui/user/activity/UserGiftActivity.kt | 1 - .../ui/user/activity/UserInfoActivity.java | 2 - .../ui/user/adapter/UserInfoPagerAdapter.kt | 14 - .../user/fragment/UserInfoGiftWallFragment.kt | 2 - .../ic_give_diamond_details.png | Bin 0 -> 4171 bytes .../drawable-xxhdpi/me_ic_menu_donation.png | Bin 0 -> 1693 bytes .../main/res/layout/activity_give_gold.xml | 108 +++++ .../res/layout/activity_give_gold_detail.xml | 32 ++ .../res/layout/activity_give_gold_search.xml | 64 +++ .../res/layout/activity_give_gold_to_user.xml | 288 ++++++++++++ .../res/layout/dialog_give_gold_password.xml | 10 + .../main/res/layout/fragment_give_diamond.xml | 22 + .../main/res/layout/fragment_give_gift.xml | 22 + .../res/layout/item_give_diamond_detail.xml | 57 +++ app/src/main/res/layout/item_give_gift.xml | 55 +++ app/src/main/res/layout/item_lately_give.xml | 54 +++ .../res/layout/view_give_gold_password.xml | 113 +++++ app/src/main/res/values-ar/strings.xml | 5 +- app/src/main/res/values-zh-rTW/strings.xml | 5 +- app/src/main/res/values/strings.xml | 5 +- .../com/chwl/core/home/model/HomeModel.kt | 74 +++ .../chwl/core/im/custom/bean/RouterType.java | 4 + .../java/com/chwl/core/pay/IPayModel.java | 1 + .../main/java/com/chwl/core/pay/PayModel.java | 19 + 44 files changed, 2801 insertions(+), 34 deletions(-) create mode 100644 app/src/main/java/com/chwl/app/pay/GiveGoldModel.kt create mode 100644 app/src/main/java/com/chwl/app/pay/activity/GiveGoldActivity.kt create mode 100644 app/src/main/java/com/chwl/app/pay/activity/GiveGoldDetailActivity.kt create mode 100644 app/src/main/java/com/chwl/app/pay/activity/GiveGoldSearchActivity.kt create mode 100644 app/src/main/java/com/chwl/app/pay/activity/GiveGoldToUserActivity.kt create mode 100644 app/src/main/java/com/chwl/app/pay/adapter/GiveDiamondDetailAdapter.kt create mode 100644 app/src/main/java/com/chwl/app/pay/adapter/GiveGiftAdapter.java create mode 100644 app/src/main/java/com/chwl/app/pay/adapter/GiveGiftDetailAdapter.kt create mode 100644 app/src/main/java/com/chwl/app/pay/adapter/GiveSearchAdapter.kt create mode 100644 app/src/main/java/com/chwl/app/pay/adapter/LatelyGiveAdapter.kt create mode 100644 app/src/main/java/com/chwl/app/pay/fragment/GiveDiamondFragment.kt create mode 100644 app/src/main/java/com/chwl/app/pay/fragment/GiveGiftFragment.kt create mode 100644 app/src/main/java/com/chwl/app/pay/interfaces/PasswordView.java create mode 100644 app/src/main/java/com/chwl/app/pay/password/GiveGoldPassWordFragment.java create mode 100644 app/src/main/java/com/chwl/app/pay/password/GiveGoldPasswordView.java create mode 100644 app/src/main/java/com/chwl/app/pay/widget/GridPasswordNoFocusView.java delete mode 100644 app/src/main/java/com/chwl/app/ui/user/adapter/UserInfoPagerAdapter.kt create mode 100644 app/src/main/res/drawable-xhdpi/ic_give_diamond_details.png create mode 100644 app/src/main/res/drawable-xxhdpi/me_ic_menu_donation.png create mode 100644 app/src/main/res/layout/activity_give_gold.xml create mode 100644 app/src/main/res/layout/activity_give_gold_detail.xml create mode 100644 app/src/main/res/layout/activity_give_gold_search.xml create mode 100644 app/src/main/res/layout/activity_give_gold_to_user.xml create mode 100644 app/src/main/res/layout/dialog_give_gold_password.xml create mode 100644 app/src/main/res/layout/fragment_give_diamond.xml create mode 100644 app/src/main/res/layout/fragment_give_gift.xml create mode 100644 app/src/main/res/layout/item_give_diamond_detail.xml create mode 100644 app/src/main/res/layout/item_give_gift.xml create mode 100644 app/src/main/res/layout/item_lately_give.xml create mode 100644 app/src/main/res/layout/view_give_gold_password.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 1539fc4db..e487b259a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -903,6 +903,22 @@ android:name=".decoration.view.DecorationStoreActivity" android:screenOrientation="portrait" android:windowSoftInputMode="stateHidden|adjustResize" /> + + + + \ No newline at end of file diff --git a/app/src/main/java/com/chwl/app/home/MeViewModel.kt b/app/src/main/java/com/chwl/app/home/MeViewModel.kt index b821d9b8a..6efa6377d 100644 --- a/app/src/main/java/com/chwl/app/home/MeViewModel.kt +++ b/app/src/main/java/com/chwl/app/home/MeViewModel.kt @@ -4,17 +4,24 @@ import androidx.lifecycle.MutableLiveData import com.chwl.app.R import com.chwl.app.base.BaseViewModel import com.chwl.core.UriProvider -import com.chwl.core.home.bean.BannerInfo -import com.chwl.core.home.model.HomeModel import com.chwl.core.im.custom.bean.RouterType import com.chwl.core.room.bean.MeCenterInfo -import com.chwl.core.user.bean.DiamondGiveHistoryInfo import com.chwl.library.utils.ResUtil class MeViewModel : BaseViewModel() { - private val _meCenterInfoLiveData = MutableLiveData?>() - val meCenterInfoLiveData: MutableLiveData?> = _meCenterInfoLiveData + private val _meCenterInfoLiveData = MutableLiveData?>() + val meCenterInfoLiveData: MutableLiveData?> = _meCenterInfoLiveData + + var donationMenuVisible = false + + val donationMenu: MeCenterInfo by lazy(LazyThreadSafetyMode.NONE) { + MeCenterInfo( + icon = R.drawable.me_ic_menu_donation, + centerName = ResUtil.getString(R.string.me_donation), + skipType = RouterType.USER_DONATION + ) + } // private val _bannerLiveData = MutableLiveData?>() // val bannerLiveData: MutableLiveData?> = _bannerLiveData @@ -50,7 +57,7 @@ class MeViewModel : BaseViewModel() { ) } - private fun requestCenterList(): List? { + private fun requestCenterList(): MutableList? { return ArrayList().apply { add( MeCenterInfo( @@ -81,6 +88,9 @@ class MeViewModel : BaseViewModel() { skipType = RouterType.MY_REVENUE ) ) + if (donationMenuVisible) { + add(donationMenu) + } add( MeCenterInfo( icon = R.drawable.me_ic_menu_collect, diff --git a/app/src/main/java/com/chwl/app/home/fragment/MeFragment.kt b/app/src/main/java/com/chwl/app/home/fragment/MeFragment.kt index 514be8bda..b24e970d8 100644 --- a/app/src/main/java/com/chwl/app/home/fragment/MeFragment.kt +++ b/app/src/main/java/com/chwl/app/home/fragment/MeFragment.kt @@ -35,6 +35,8 @@ import com.chwl.app.view.GenderAgeTextView import com.chwl.app.vip.VipMainActivity import com.chwl.app.vip.VipViewModel import com.chwl.core.auth.AuthModel +import com.chwl.core.im.custom.bean.RouterType +import com.chwl.core.initial.InitialModel import com.chwl.core.level.UserLevelVo import com.chwl.core.manager.IMNetEaseManager import com.chwl.core.manager.RelationShipEvent @@ -176,6 +178,46 @@ class MeFragment : BaseFragment(), View.OnClickListener { } setUserLevel(it.userLevelVo) setWalletInfo() + setDonation(it) + } + } + + private fun setDonation(userInfo: UserInfo) { + val initInfo = InitialModel.get().cacheInitInfo + val diamondList = initInfo?.giveDiamondErbanNoList + val giftList = initInfo?.giveGiftErbanNoList + val levelSep = userInfo.userLevelVo.experLevelSeq + if (diamondList?.contains(userInfo.erbanNo) == true || giftList?.contains(userInfo.erbanNo) == true + || levelSep >= (initInfo?.giveDiamondExperLevel + ?: 0) || levelSep >= (initInfo?.giveGiftExperLevel ?: 0) + ) { + reloadMenuForDonation(true) + } else { + reloadMenuForDonation(false) + } + } + + private fun reloadMenuForDonation(isVisible: Boolean) { + meViewModel.donationMenuVisible = isVisible + val list = mCenterAdapter.data + val itemIndex = list.indexOfFirst { + it.skipType == RouterType.USER_DONATION + } + if (isVisible) { + if (itemIndex == -1) { + val index = list.indexOfFirst { + it.skipType == RouterType.MY_REVENUE + } + if (index == -1) { + mCenterAdapter.addData(meViewModel.donationMenu) + } else { + mCenterAdapter.addData(index, meViewModel.donationMenu) + } + } + } else { + if (itemIndex != -1) { + mCenterAdapter.remove(itemIndex) + } } } diff --git a/app/src/main/java/com/chwl/app/pay/GiveGoldModel.kt b/app/src/main/java/com/chwl/app/pay/GiveGoldModel.kt new file mode 100644 index 000000000..4e135c846 --- /dev/null +++ b/app/src/main/java/com/chwl/app/pay/GiveGoldModel.kt @@ -0,0 +1,68 @@ +package com.chwl.app.pay + +import androidx.lifecycle.MutableLiveData +import com.chwl.app.base.BaseViewModel +import com.chwl.core.bean.response.ListResult +import com.chwl.core.home.model.HomeModel +import com.chwl.core.user.bean.DiamondGiveHistoryInfo +import com.chwl.core.user.bean.SearchUserInfo + +class GiveGoldModel : BaseViewModel() { + + private val _diamondGiveHistoryLiveData = MutableLiveData?>() + val diamondGiveHistoryLiveData: MutableLiveData?> = + _diamondGiveHistoryLiveData + + private val _searchUserLiveData = MutableLiveData() + val searchUserLiveData: MutableLiveData = _searchUserLiveData + + private val _giveGiftLiveData = MutableLiveData() + val giveGiftLiveData: MutableLiveData = _giveGiftLiveData + + private val _giveDetailLiveData = MutableLiveData?>() + val giveDetailLiveData: MutableLiveData?> = + _giveDetailLiveData + + fun getDiamondListInfo(pageNum: Int, pageSize: Int) { + safeLaunch( + onError = { + _diamondGiveHistoryLiveData.value = ListResult.failed(pageNum) + }, + block = { + val result = HomeModel.getDiamondGiveHistory(pageNum, pageSize) + _diamondGiveHistoryLiveData.value = ListResult.success(result, pageNum) + } + ) + } + + fun getSearchUserInfo(erbanNo: Long) { + safeLaunch( + true, + block = { + _searchUserLiveData.value = HomeModel.getSearchUser(erbanNo) + } + ) + } + + fun giveGift(toUid: Long, giftId: Int, giftNum: Int) { + safeLaunch( + true, + block = { + _giveGiftLiveData.value = HomeModel.giveGift(toUid, giftId, giftNum) + } + ) + } + + fun giveDetailInfo(uid: Long, type: Int, pageNum: Int, pageSize: Int) { + safeLaunch( + onError = { + _giveDetailLiveData.value = ListResult.failed(pageNum) + }, + block = { + val result = HomeModel.getGiveDetail(uid, type, pageNum, pageSize) + _giveDetailLiveData.value = ListResult.success(result, pageNum) + } + ) + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/chwl/app/pay/activity/GiveGoldActivity.kt b/app/src/main/java/com/chwl/app/pay/activity/GiveGoldActivity.kt new file mode 100644 index 000000000..3057a0f2f --- /dev/null +++ b/app/src/main/java/com/chwl/app/pay/activity/GiveGoldActivity.kt @@ -0,0 +1,129 @@ +package com.chwl.app.pay.activity + +import android.annotation.SuppressLint +import android.content.Context +import android.content.Intent +import android.text.TextUtils +import android.view.KeyEvent +import android.view.inputmethod.EditorInfo +import android.widget.TextView.OnEditorActionListener +import androidx.activity.viewModels +import androidx.recyclerview.widget.LinearLayoutManager +import com.netease.nim.uikit.StatusBarUtil +import com.chwl.app.R +import com.chwl.app.base.BaseViewBindingActivity +import com.chwl.app.common.EmptyViewHelper +import com.chwl.app.databinding.ActivityGiveGoldBinding +import com.chwl.app.pay.GiveGoldModel +import com.chwl.app.pay.adapter.LatelyGiveAdapter +import com.chwl.app.ui.utils.RVDelegate +import com.chwl.core.gift.GiftModel +import com.chwl.core.user.bean.DiamondGiveHistoryInfo +import com.chwl.library.utils.ResUtil + +/** + * 轉贈鉆石頁面 + */ +class GiveGoldActivity : BaseViewBindingActivity() { + + private var pageNum: Int = 1 + private val pageSize = 20 + private lateinit var mAdapter: LatelyGiveAdapter + private lateinit var rvDelegate: RVDelegate + + private val giveGoldModel: GiveGoldModel by viewModels() + + companion object { + fun start(context: Context) { + val intent = Intent(context, GiveGoldActivity::class.java) + context.startActivity(intent) + } + } + + override fun init() { + initTitleBar(ResUtil.getString(R.string.me_donation)) + binding.etSearch.setOnEditorActionListener(OnEditorActionListener { v, actionId, event -> //以下方法防止两次发送请求 + if (actionId == EditorInfo.IME_ACTION_SEARCH && event != null || event != null && event.keyCode == KeyEvent.KEYCODE_ENTER) { + if (event.action == KeyEvent.ACTION_UP) { //发送请求 + val newStr: String = binding.etSearch.text.toString().trim { it <= ' ' } + if (!TextUtils.isEmpty(newStr)) { + giveGoldModel.getSearchUserInfo(newStr.toLong()) + }else{ + toast(getString(R.string.password_input_user_id)) + } + return@OnEditorActionListener true //自己消费 + } + return@OnEditorActionListener true + } + false + }) + binding.mTvSearch.setOnClickListener { + val newStr: String = binding.etSearch.text.toString().trim { it <= ' ' } + if (!TextUtils.isEmpty(newStr)) { + giveGoldModel.getSearchUserInfo(newStr.toLong()) + } else { + toast(getString(R.string.password_input_user_id)) + } + } + + mAdapter = LatelyGiveAdapter() + rvDelegate = RVDelegate.Builder() + .setAdapter(mAdapter) + .setLayoutManager(LinearLayoutManager(this)) + .setPageSize(20) + .setEmptyView( + EmptyViewHelper.createEmptyTextView( + this, + ResUtil.getString(R.string.me_give_gold_empty) + ) + ) + .setRefreshLayout(binding.refreshLayout) + .setRecyclerView(binding.recyclerView) + .build() + mAdapter.setOnItemClickListener { _, _, position -> + mAdapter.getItem(position)?.targetUid?.let { GiveGoldDetailActivity.start(this, it) } + } + mAdapter.setOnLoadMoreListener({ + loadData(false) + }, binding.recyclerView) + binding.refreshLayout.setOnRefreshListener { + loadData(true) + } + giveGoldModel.diamondGiveHistoryLiveData.observe(this) { + rvDelegate.loadData(it) + } + giveGoldModel.searchUserLiveData.observe(this) { + it?.let { + GiveGoldToUserActivity.start(this, it) + } + } + giveGoldModel.loadingLiveData.observe(this) { + if (it) dialogManager.showProgressDialog(this) + else dialogManager.dismissDialog() + } + } + + override fun onResume() { + super.onResume() + loadData(true) + GiftModel.get().requestKnapGiftInfos().subscribe() + } + + @SuppressLint("CheckResult") + fun loadData(isRefresh: Boolean) { + binding.refreshLayout.isRefreshing = isRefresh + pageNum = if (isRefresh) 1 else (pageNum + 1) + giveGoldModel.getDiamondListInfo(pageNum, pageSize) + } + + override fun setStatusBar() { + super.setStatusBar() + StatusBarUtil.transparencyBar(this) + StatusBarUtil.StatusBarLightMode(this) + } + + override fun needSteepStateBar(): Boolean { + return true + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/chwl/app/pay/activity/GiveGoldDetailActivity.kt b/app/src/main/java/com/chwl/app/pay/activity/GiveGoldDetailActivity.kt new file mode 100644 index 000000000..254289411 --- /dev/null +++ b/app/src/main/java/com/chwl/app/pay/activity/GiveGoldDetailActivity.kt @@ -0,0 +1,115 @@ +package com.chwl.app.pay.activity + +import android.content.Context +import android.content.Intent +import android.view.View +import android.widget.LinearLayout +import android.widget.TextView +import androidx.fragment.app.Fragment +import androidx.viewpager2.widget.ViewPager2 +import com.netease.nim.uikit.StatusBarUtil +import com.chwl.app.R +import com.chwl.app.avroom.adapter.CommonVPAdapter +import com.chwl.app.base.BaseViewBindingActivity +import com.chwl.app.databinding.ActivityGiveGoldDetailBinding +import com.chwl.app.pay.fragment.GiveDiamondFragment +import com.chwl.app.pay.fragment.GiveGiftFragment +import com.chwl.app.ui.user.adapter.CommonWrapIndicatorAdapter +import com.chwl.app.ui.widget.magicindicator.MagicIndicator +import com.chwl.app.ui.widget.magicindicator.ViewPagerHelper +import com.chwl.app.ui.widget.magicindicator.buildins.commonnavigator.CommonNavigator +import com.chwl.core.initial.InitialModel +import com.chwl.core.user.UserModel +import com.chwl.library.utils.ResUtil + +/** + * 轉贈鉆石頁面 + */ +class GiveGoldDetailActivity : BaseViewBindingActivity() { + + companion object { + fun start(context: Context, uid: Long) { + val intent = Intent(context, GiveGoldDetailActivity::class.java) + intent.putExtra("uid", uid) + context.startActivity(intent) + } + } + + override fun init() { + initTitleBar(ResUtil.getString(R.string.me_donation_detail)) + initDetail() + } + + /** + * 轉贈詳情 + */ + private fun initDetail() { + val uid = intent.extras?.getLong("uid", 0L) ?: 0L + + val initInfo = InitialModel.get().cacheInitInfo + val userInfo = UserModel.get().cacheLoginUserInfo + val diamondList = initInfo?.giveDiamondErbanNoList + val giftList = initInfo?.giveGiftErbanNoList + val levelSep = userInfo?.userLevelVo?.experLevelSeq ?: 0 + + val viewPager: ViewPager2 = binding.viewPagerDetail + val magicIndicator: MagicIndicator = binding.magicIndicator + val fragmentList: MutableList = ArrayList() + val pagerAdapter = CommonVPAdapter(supportFragmentManager, lifecycle, fragmentList) + val tagList: MutableList = ArrayList() + if (diamondList?.contains(userInfo?.erbanNo) == true || levelSep >= (initInfo?.giveDiamondExperLevel + ?: 0) + ) { + tagList.add(getString(R.string.diamond)) + fragmentList.add(GiveDiamondFragment.newInstance(uid)) + } + if (giftList?.contains(userInfo?.erbanNo) == true || levelSep >= (initInfo?.giveGiftExperLevel + ?: 0) + ) { + tagList.add(getString(R.string.gift_action)) + fragmentList.add(GiveGiftFragment.newInstance(uid)) + } + if (tagList.size == 0) { + return + }else if(tagList.size == 1){ + binding.magicIndicator.visibility = View.GONE + } + val commonNavigator = CommonNavigator(context) + commonNavigator.isAdjustMode = true//自我调节位置,实现自我平分 + val magicIndicatorAdapter = CommonWrapIndicatorAdapter(context, tagList) + magicIndicatorAdapter.setOnItemSelectListener { position: Int, view: TextView? -> + viewPager.currentItem = position + } + commonNavigator.adapter = magicIndicatorAdapter + magicIndicator.navigator = commonNavigator + commonNavigator.titleContainer.showDividers = LinearLayout.SHOW_DIVIDER_MIDDLE + viewPager.adapter = pagerAdapter + ViewPagerHelper.bind(magicIndicator, viewPager) + viewPager.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() { + override fun onPageScrolled( + position: Int, + positionOffset: Float, + positionOffsetPixels: Int + ) { + } + + override fun onPageSelected(position: Int) { + viewPager.requestLayout() + } + + override fun onPageScrollStateChanged(state: Int) {} + }) + + } + + override fun setStatusBar() { + super.setStatusBar() + StatusBarUtil.transparencyBar(this) + StatusBarUtil.StatusBarLightMode(this) + } + + override fun needSteepStateBar(): Boolean { + return true + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/chwl/app/pay/activity/GiveGoldSearchActivity.kt b/app/src/main/java/com/chwl/app/pay/activity/GiveGoldSearchActivity.kt new file mode 100644 index 000000000..e7ef48370 --- /dev/null +++ b/app/src/main/java/com/chwl/app/pay/activity/GiveGoldSearchActivity.kt @@ -0,0 +1,84 @@ +package com.chwl.app.pay.activity + + +import android.annotation.SuppressLint +import android.app.Activity +import android.content.Intent +import android.os.Bundle +import android.os.Parcelable +import android.text.Editable +import android.text.TextWatcher +import android.widget.EditText +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import com.chwl.app.R +import com.chwl.app.base.BaseActivity +import com.chwl.app.common.EmptyViewHelper +import com.chwl.app.pay.adapter.GiveSearchAdapter +import com.chwl.app.ui.utils.RVDelegate +import com.chwl.core.room.bean.SearchRoomInfo +import com.chwl.core.room.model.AvRoomModel +import com.chwl.core.utils.net.RxHelper +import com.chwl.library.utils.ResUtil + +class GiveGoldSearchActivity : BaseActivity(), TextWatcher { + + companion object { + const val REQUEST_CODE = 0xff12 + + @JvmStatic + fun start(context: Activity) { + val intent = Intent(context, GiveGoldSearchActivity::class.java) + context.startActivityForResult(intent, REQUEST_CODE) + } + } + + private lateinit var rvDelegate: RVDelegate + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_give_gold_search) + val adapter = GiveSearchAdapter() + rvDelegate = RVDelegate.Builder() + .setPageSize(Int.MAX_VALUE) + .setEmptyView(EmptyViewHelper.createEmptyTextView(this, ResUtil.getString(R.string.pay_activity_givegoldsearchactivity_01))) + .setLayoutManager(LinearLayoutManager(this)) + .setRecyclerView(findViewById(R.id.recyclerView)) + .setAdapter(adapter) + .build() + adapter.setOnItemClickListener { _, _, position -> + setResult(Activity.RESULT_OK, Intent().apply { + adapter.getItem(position)?.let { + putExtra("searchRoomInfo", it as Parcelable) + } + }) + finish() + } + findViewById(R.id.editSearch).addTextChangedListener(this) + findViewById(R.id.tvCancel).setOnClickListener { finish() } + } + + override fun afterTextChanged(s: Editable?) { + + } + + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { + } + + @SuppressLint("CheckResult") + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + if (s.isNullOrEmpty()) { + rvDelegate.setNewData(null) + } else { + AvRoomModel.get() + .roomSearch(s.toString()) + .compose(RxHelper.handleBeanData()) + .doOnError { rvDelegate.loadErr(true) } + .compose(bindToLifecycle()) + .subscribe { rooms -> + rvDelegate.setNewData(rooms) + } + } + + } +} diff --git a/app/src/main/java/com/chwl/app/pay/activity/GiveGoldToUserActivity.kt b/app/src/main/java/com/chwl/app/pay/activity/GiveGoldToUserActivity.kt new file mode 100644 index 000000000..bc2757843 --- /dev/null +++ b/app/src/main/java/com/chwl/app/pay/activity/GiveGoldToUserActivity.kt @@ -0,0 +1,401 @@ +package com.chwl.app.pay.activity + +import android.annotation.SuppressLint +import android.content.Context +import android.content.Intent +import android.text.Editable +import android.text.InputFilter +import android.text.InputFilter.LengthFilter +import android.text.TextWatcher +import android.util.SparseArray +import android.view.View +import android.view.ViewGroup +import android.widget.EditText +import androidx.activity.viewModels +import androidx.recyclerview.widget.GridLayoutManager +import androidx.recyclerview.widget.RecyclerView +import androidx.viewpager.widget.PagerAdapter +import com.chad.library.adapter.base.BaseQuickAdapter +import com.netease.nim.uikit.StatusBarUtil +import com.chwl.app.R +import com.chwl.app.base.BaseViewBindingActivity +import com.chwl.app.databinding.ActivityGiveGoldToUserBinding +import com.chwl.app.pay.GiveGoldModel +import com.chwl.app.pay.adapter.GiveGiftAdapter +import com.chwl.app.pay.password.GiveGoldPassWordFragment +import com.chwl.app.pay.widget.GridPasswordNoFocusView +import com.chwl.app.ui.setting.ModifyPwdActivity +import com.chwl.app.ui.utils.ImageLoadUtils +import com.chwl.app.ui.widget.OnPageSelectedListener +import com.chwl.app.ui.widget.dialog.CommonTipDialog +import com.chwl.app.ui.widget.dialog.GiveDiamondTipDialog +import com.chwl.app.ui.widget.magicindicator.buildins.UIUtil +import com.chwl.app.ui.widget.recyclerview.decoration.GridSpacingItemNewDecoration +import com.chwl.app.utils.DoubleClickCheckListener +import com.chwl.core.DemoCache +import com.chwl.core.gift.GiftModel +import com.chwl.core.gift.bean.GiftInfo +import com.chwl.core.initial.InitialModel +import com.chwl.core.pay.PayModel +import com.chwl.core.user.UserModel +import com.chwl.core.user.bean.SearchUserInfo +import com.chwl.library.utils.ResUtil + +class GiveGoldToUserActivity : BaseViewBindingActivity(), + GridPasswordNoFocusView.OnPasswordChangedListener, + TextWatcher { + + private val giveGoldModel: GiveGoldModel by viewModels() + + companion object { + @JvmStatic + fun start(context: Context, searchUser: SearchUserInfo) { + val intent = Intent(context, GiveGoldToUserActivity::class.java) + intent.putExtra("searchUser", searchUser) + context.startActivity(intent) + } + } + + private var searchUserInfo: SearchUserInfo? = null + private var passWordFragment: GiveGoldPassWordFragment? = null + private var selectGiftPos = -1 + private var giftAllCount = -1 + private var giftId = -1 + + private var centerIndex = 0 + + override fun setStatusBar() { + super.setStatusBar() + StatusBarUtil.transparencyBar(this) + StatusBarUtil.StatusBarLightMode(this) + } + + override fun needSteepStateBar(): Boolean { + return true + } + + override fun init() { + initTitleBar(ResUtil.getString(R.string.donation_to)) + searchUserInfo = intent.getSerializableExtra("searchUser") as SearchUserInfo? + searchUserInfo?.apply { + binding.tvId.text = "ID:${erbanNo}" + binding.tvNickname.text = nick + ImageLoadUtils.loadAvatar(context, avatar, binding.ivAvatar) + } + val initInfo = InitialModel.get().cacheInitInfo + val userInfo = UserModel.get().cacheLoginUserInfo + val diamondList = initInfo?.giveDiamondErbanNoList + val giftList = initInfo?.giveGiftErbanNoList + val levelSep = userInfo?.userLevelVo?.experLevelSeq ?: 0 + if (diamondList?.contains(userInfo?.erbanNo) == true || levelSep >= (initInfo?.giveDiamondExperLevel + ?: 0) + ) { + binding.tvDiamondTab.visibility = View.VISIBLE + binding.groupDiamond.visibility = View.VISIBLE + } else { + binding.tvDiamondTab.visibility = View.GONE + binding.groupDiamond.visibility = View.GONE + } + if (giftList?.contains(userInfo?.erbanNo) == true || levelSep >= (initInfo?.giveGiftExperLevel + ?: 0) + ) { + binding.tvGiftTab.visibility = View.VISIBLE + binding.groupGift.visibility = View.VISIBLE + } else { + binding.tvGiftTab.visibility = View.GONE + binding.groupGift.visibility = View.GONE + } + binding.viewPagerEntrance.addOnPageChangeListener(object : OnPageSelectedListener() { + override fun onPageSelected(position: Int) { + centerIndex = position + binding.magicIndicatorEntrance.setSelectedPage(position) + } + }) + initDiamond() + initGift() + initListener() + giveGoldModel.loadingLiveData.observe(this) { + if (it) dialogManager.showProgressDialog(this) + else dialogManager.dismissDialog() + } + giveGoldModel.giveGiftLiveData.observe(this) { + toast(getString(R.string.gift_give_success)) + finish() + } + } + + private fun initListener() { + binding.tvSure.setOnClickListener { + val initInfo = DemoCache.readInitInfo() + if (binding.groupDiamond.visibility == View.VISIBLE) { + searchUserInfo?.apply { + val gold = binding.mEditGold.text.toString().toInt() + if (gold <= 0) { + toast(ResUtil.getString(R.string.pay_activity_givegoldtouseractivity_06)) + return@setOnClickListener + } + UserModel.get().cacheLoginUserInfo?.let { + if (!it.isBindPaymentPwd) { + val tipDialog = CommonTipDialog(this@GiveGoldToUserActivity) + tipDialog.setTipMsg(ResUtil.getString(R.string.setting_pay_pwd_first)) + tipDialog.setOkText(getString(R.string.to_setting)) + tipDialog.setOnActionListener( + object : CommonTipDialog.OnActionListener { + override fun onOk() { + ModifyPwdActivity.start( + this@GiveGoldToUserActivity, + ModifyPwdActivity.PAY_PWD + ) + } + } + ) + tipDialog.show() + } else { + val rateGold = initInfo.giveDiamondRate * 100 + val tipDialog = GiveDiamondTipDialog(this@GiveGoldToUserActivity) + tipDialog.setTvDiamond(gold.toString()) + tipDialog.setTipMsg(getString(R.string.give_gold_to_user, nick)) + if (rateGold == 0.0) { + tipDialog.setTipMessageGone(true) + } else { + tipDialog.setTvSeCharge("${rateGold.toInt()}%") + val goldNew = gold + (gold * initInfo.giveDiamondRate) + tipDialog.setTvConsumeDiamond( + getString( + R.string.invite_gift_price_text, + goldNew.toString() + ) + ) + } + tipDialog.setOnActionListener( + object : GiveDiamondTipDialog.OnActionListener { + override fun onOk() { + GiveGoldPassWordFragment.newInstance( + supportFragmentManager, + gold.toString(), + nick, + "" + ) + .apply { + passWordFragment = this + setListener(this@GiveGoldToUserActivity) + } + } + } + ) + tipDialog.show() + } + } ?: run { + toast(ResUtil.getString(R.string.ui_setting_settingactivity_06)) + return@setOnClickListener + } + } + } else {//赠送礼物 + searchUserInfo?.apply { + val giftNum = binding.editGift.text.toString().toInt() + if (selectGiftPos < 0) { + toast(ResUtil.getString(R.string.please_select_gift)) + return@setOnClickListener + } else if (giftNum == 0) { + toast(ResUtil.getString(R.string.please_enter_gift_num)) + return@setOnClickListener + } else if (giftNum > giftAllCount) { + toast(ResUtil.getString(R.string.gift_num_fail)) + return@setOnClickListener + } + giveGoldModel.giveGift(uid, giftId, giftNum) + } + } + } + } + + private fun initDiamond() { + if (binding.tvDiamondTab.visibility == View.GONE) { + return + } else if (binding.tvGiftTab.visibility == View.VISIBLE) { + binding.tvGiftTab.isSelected = false + binding.groupGift.visibility = View.GONE + } + val initInfo = DemoCache.readInitInfo() + val length = initInfo?.giveDiamondOnceLimitNum?.toInt()?.toString()?.length ?: 0 + binding.mEditGold.text.filters = arrayOf(LengthFilter(length)) + binding.mTvDiamond.text = getString( + R.string.my_diamond, + PayModel.get().currentWalletInfo?.diamondNum?.toString() ?: "0" + ) + binding.mEditGold.addTextChangedListener(this) + binding.tvDiamondTab.isSelected = true + binding.tvDiamondTab.setOnClickListener { + if (binding.tvGiftTab.visibility == View.VISIBLE) { + binding.tvGiftTab.isSelected = false + binding.groupGift.visibility = View.GONE + binding.tvDiamondTab.isSelected = true + binding.groupDiamond.visibility = View.VISIBLE + } + } + } + + @SuppressLint("CheckResult") + private fun initGift() { + if (binding.tvGiftTab.visibility == View.GONE) { + return + } + val giftList = GiftModel.get().knapList + if (binding.tvDiamondTab.visibility == View.GONE) { + binding.tvGiftTab.isSelected = true + binding.tvSure.isEnabled = true + } + binding.tvGiftTab.setOnClickListener { + if (binding.tvDiamondTab.visibility == View.VISIBLE) { + binding.tvDiamondTab.isSelected = false + binding.groupDiamond.visibility = View.GONE + binding.tvGiftTab.isSelected = true + binding.groupGift.visibility = View.VISIBLE + binding.tvSure.isEnabled = true + } + } + if (giftList.size == 0) { + binding.tvEmptyTip.visibility = View.VISIBLE + return + } else { + binding.tvEmptyTip.visibility = View.GONE + } + val list = transformList(giftList, 8) + binding.magicIndicatorEntrance.initIndicator(list.size) + binding.magicIndicatorEntrance.setSelectedPage(centerIndex) + binding.magicIndicatorEntrance.visibility = + if (list.size > 1) View.VISIBLE else View.INVISIBLE + binding.viewPagerEntrance.adapter = object : PagerAdapter() { + var cacheItemView = SparseArray() + override fun getCount(): Int { + return list.size + } + + override fun isViewFromObject(view: View, `object`: Any): Boolean { + return view == `object` + } + + override fun instantiateItem(container: ViewGroup, position: Int): Any { + val recyclerView: RecyclerView + val giveGiftAdapter: GiveGiftAdapter + if (cacheItemView[position] == null) { + recyclerView = RecyclerView(context) + var lp = recyclerView.layoutParams + if (lp == null) { + lp = ViewGroup.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT + ) + } + recyclerView.layoutParams = lp + recyclerView.layoutManager = GridLayoutManager(context, 4) + recyclerView.addItemDecoration( + GridSpacingItemNewDecoration( + UIUtil.dip2px( + context, + 18.0 + ), UIUtil.dip2px(context, 10.0), true + ) + ) + giveGiftAdapter = GiveGiftAdapter() + giveGiftAdapter.onItemClickListener = object : DoubleClickCheckListener() { + override fun onItemClickSingle( + adapter: BaseQuickAdapter<*, *>?, + view: View, + position: Int + ) { + val oldBean = giveGiftAdapter.getItem(selectGiftPos) + oldBean?.isSelected = false + giveGiftAdapter.notifyItemChanged(selectGiftPos) + val bean = giveGiftAdapter.getItem(position) + bean?.isSelected = true + giveGiftAdapter.notifyItemChanged(position) + selectGiftPos = position + giftAllCount = giveGiftAdapter.getItem(position)?.count ?: -1 + giftId = giveGiftAdapter.getItem(position)?.giftId ?: -1 + } + } + recyclerView.adapter = giveGiftAdapter + } else { + recyclerView = cacheItemView[position] + giveGiftAdapter = recyclerView.adapter as GiveGiftAdapter + } + giveGiftAdapter.setNewData(list[position]) + container.addView(recyclerView) + return recyclerView + } + + override fun destroyItem(container: ViewGroup, position: Int, `object`: Any) { + val recyclerView = cacheItemView[position] + container.removeView(recyclerView) + } + } + binding.viewPagerEntrance.setCurrentItem(centerIndex, false) + binding.editGift.addTextChangedListener(this) + binding.tvAll.setOnClickListener { + if (giftAllCount != -1) + binding.editGift.setText(giftAllCount.toString()) + } + } + + private fun transformList( + data: List, + pageSize: Int + ): List> { + val result: MutableList> = ArrayList() + if (data.isEmpty()) { + return result + } + for (i in data.toTypedArray().indices) { + var page: MutableList? = null + if (i % pageSize == 0) { + page = ArrayList() + result.add(page) + } else { + if (result.size > 0) { + page = result[result.size - 1] + } + } + page?.add(data[i]) + } + return result + } + + @SuppressLint("CheckResult") + override fun onInputFinish(psw: String) { + } + + @SuppressLint("CheckResult") + override fun onTextChanged(psw: String) { + val password = passWordFragment?.password?.password ?: "" + if (password.length == 6) { + searchUserInfo?.apply { + dialogManager.showProgressDialog(context) + PayModel.get().giveGold(uid, findViewById(R.id.mEditGold).text.toString(), DESAndBase64(password)) + .compose(bindToLifecycle()) + .doOnError { + toast(it.message) + passWordFragment?.password?.clearPassword() + dialogManager.dismissDialog() + } + .subscribe { _ -> + passWordFragment?.dismissAllowingStateLoss() + dialogManager.dismissDialog() + toast(getString(R.string.layout_activity_give_gold_success_01)) + finish() + } + } + } + } + + override fun afterTextChanged(s: Editable?) { + } + + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { + } + + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + binding.tvSure.isEnabled = !s.isNullOrBlank() + } + +} diff --git a/app/src/main/java/com/chwl/app/pay/adapter/GiveDiamondDetailAdapter.kt b/app/src/main/java/com/chwl/app/pay/adapter/GiveDiamondDetailAdapter.kt new file mode 100644 index 000000000..fc6c45733 --- /dev/null +++ b/app/src/main/java/com/chwl/app/pay/adapter/GiveDiamondDetailAdapter.kt @@ -0,0 +1,23 @@ +package com.chwl.app.pay.adapter + +import android.annotation.SuppressLint +import android.widget.TextView +import com.chad.library.adapter.base.BaseQuickAdapter +import com.chad.library.adapter.base.BaseViewHolder +import com.chwl.app.R +import com.chwl.core.user.bean.DiamondGiveHistoryInfo +import com.chwl.library.utils.TimeUtils + + +class GiveDiamondDetailAdapter : + BaseQuickAdapter(R.layout.item_give_diamond_detail) { + + @SuppressLint("SetTextI18n") + override fun convert(helper: BaseViewHolder, item: DiamondGiveHistoryInfo) { + helper.getView(R.id.tv_number).text = item.diamondNum.toString() + helper.getView(R.id.tv_pay_diamond).text = + mContext.getString(R.string.all_pay_diamond, item.realDiamondNum.toString()) + helper.setText(R.id.tv_date, TimeUtils.getDateTimeString(item.createTime,"yyyy-MM-dd HH:mm:ss")) + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/chwl/app/pay/adapter/GiveGiftAdapter.java b/app/src/main/java/com/chwl/app/pay/adapter/GiveGiftAdapter.java new file mode 100644 index 000000000..4fb065d60 --- /dev/null +++ b/app/src/main/java/com/chwl/app/pay/adapter/GiveGiftAdapter.java @@ -0,0 +1,34 @@ +package com.chwl.app.pay.adapter; + + +import android.widget.ImageView; + +import com.chad.library.adapter.base.BaseQuickAdapter; +import com.chad.library.adapter.base.BaseViewHolder; +import com.chwl.app.R; +import com.chwl.app.ui.utils.ImageLoadUtils; +import com.chwl.core.gift.bean.GiftInfo; + +/** + * 赠送礼物 + */ +public class GiveGiftAdapter extends BaseQuickAdapter { + + + public GiveGiftAdapter() { + super(R.layout.item_give_gift); + } + + @Override + protected void convert(BaseViewHolder helper, GiftInfo item) { + if (item == null) { + return; + } + helper.setText(R.id.tvName, item.getGiftName()) + .setText(R.id.tvNum, "x" + item.getCount()); + ImageView giftPic = helper.itemView.findViewById(R.id.ivGift); + ImageLoadUtils.loadImage(mContext, item.getGiftUrl(), giftPic); + helper.getView(R.id.viewBg).setSelected(item.isSelected); + } + +} diff --git a/app/src/main/java/com/chwl/app/pay/adapter/GiveGiftDetailAdapter.kt b/app/src/main/java/com/chwl/app/pay/adapter/GiveGiftDetailAdapter.kt new file mode 100644 index 000000000..64fd0011f --- /dev/null +++ b/app/src/main/java/com/chwl/app/pay/adapter/GiveGiftDetailAdapter.kt @@ -0,0 +1,24 @@ +package com.chwl.app.pay.adapter + +import android.annotation.SuppressLint +import android.widget.TextView +import com.chad.library.adapter.base.BaseQuickAdapter +import com.chad.library.adapter.base.BaseViewHolder +import com.chwl.app.R +import com.chwl.app.ui.utils.ImageLoadUtils +import com.chwl.app.utils.TimeUiUtils +import com.chwl.core.user.bean.DiamondGiveHistoryInfo +import com.chwl.library.utils.TimeUtils + + +class GiveGiftDetailAdapter : + BaseQuickAdapter(R.layout.item_give_gift_detail) { + + @SuppressLint("SetTextI18n") + override fun convert(helper: BaseViewHolder, item: DiamondGiveHistoryInfo) { + helper.getView(R.id.tv_gift_name).text = "${item.giftName}x${item.giftNum}" + ImageLoadUtils.loadAvatar(mContext, item.giftUrl, helper.getView(R.id.iv_avatar)) + helper.setText(R.id.tv_date, TimeUtils.getDateTimeString(item.createTime,"yyyy-MM-dd HH:mm:ss")) + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/chwl/app/pay/adapter/GiveSearchAdapter.kt b/app/src/main/java/com/chwl/app/pay/adapter/GiveSearchAdapter.kt new file mode 100644 index 000000000..f203ed529 --- /dev/null +++ b/app/src/main/java/com/chwl/app/pay/adapter/GiveSearchAdapter.kt @@ -0,0 +1,22 @@ +package com.chwl.app.pay.adapter + +import android.annotation.SuppressLint +import android.widget.TextView +import com.chad.library.adapter.base.BaseQuickAdapter +import com.chad.library.adapter.base.BaseViewHolder +import com.chwl.app.R +import com.chwl.app.ui.utils.ImageLoadUtils +import com.chwl.core.room.bean.SearchRoomInfo + + +class GiveSearchAdapter : + BaseQuickAdapter(R.layout.item_lately_give) { + + @SuppressLint("SetTextI18n") + override fun convert(helper: BaseViewHolder, item: SearchRoomInfo) { + helper.getView(R.id.tv_id).text = "ID:${item.erbanNo}" + helper.getView(R.id.tv_nickname).text = item.nick + ImageLoadUtils.loadAvatar(mContext, item.avatar, helper.getView(R.id.iv_avatar)) + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/chwl/app/pay/adapter/LatelyGiveAdapter.kt b/app/src/main/java/com/chwl/app/pay/adapter/LatelyGiveAdapter.kt new file mode 100644 index 000000000..50c8fcf9f --- /dev/null +++ b/app/src/main/java/com/chwl/app/pay/adapter/LatelyGiveAdapter.kt @@ -0,0 +1,22 @@ +package com.chwl.app.pay.adapter + +import android.annotation.SuppressLint +import android.widget.TextView +import com.chad.library.adapter.base.BaseQuickAdapter +import com.chad.library.adapter.base.BaseViewHolder +import com.chwl.app.R +import com.chwl.app.ui.utils.ImageLoadUtils +import com.chwl.core.user.bean.DiamondGiveHistoryInfo + + +class LatelyGiveAdapter : + BaseQuickAdapter(R.layout.item_lately_give) { + + @SuppressLint("SetTextI18n") + override fun convert(helper: BaseViewHolder, item: DiamondGiveHistoryInfo) { + helper.getView(R.id.tv_id).text = "ID:${item.targetErbanNo}" + helper.getView(R.id.tv_nickname).text = item.targetNick + ImageLoadUtils.loadAvatar(mContext, item.targetAvatar, helper.getView(R.id.iv_avatar)) + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/chwl/app/pay/fragment/GiveDiamondFragment.kt b/app/src/main/java/com/chwl/app/pay/fragment/GiveDiamondFragment.kt new file mode 100644 index 000000000..e00a39a78 --- /dev/null +++ b/app/src/main/java/com/chwl/app/pay/fragment/GiveDiamondFragment.kt @@ -0,0 +1,73 @@ +package com.chwl.app.pay.fragment + +import android.annotation.SuppressLint +import android.os.Bundle +import androidx.fragment.app.viewModels +import androidx.recyclerview.widget.LinearLayoutManager +import com.chwl.app.R +import com.chwl.app.base.BaseViewBindingFragment +import com.chwl.app.common.EmptyViewHelper +import com.chwl.app.databinding.FragmentGiveDiamondBinding +import com.chwl.app.pay.GiveGoldModel +import com.chwl.app.pay.adapter.GiveDiamondDetailAdapter +import com.chwl.app.ui.utils.RVDelegate +import com.chwl.core.user.bean.DiamondGiveHistoryInfo +import com.chwl.library.utils.ResUtil + +class GiveDiamondFragment : BaseViewBindingFragment() { + + private var pageNum: Int = 1 + private val pageSize = 20 + private lateinit var mAdapter: GiveDiamondDetailAdapter + private lateinit var rvDelegate: RVDelegate + + private val giveGoldModel: GiveGoldModel by viewModels() + + private var uid: Long = 0L + + companion object { + fun newInstance(uid: Long): GiveDiamondFragment { + val args = Bundle() + args.putLong("uid", uid) + val fragment = GiveDiamondFragment() + fragment.arguments = args + return fragment + } + } + + override fun init() { + uid = arguments?.getLong("uid") ?: 0L + mAdapter = GiveDiamondDetailAdapter() + rvDelegate = RVDelegate.Builder() + .setAdapter(mAdapter) + .setLayoutManager(LinearLayoutManager(context)) + .setPageSize(20) + .setEmptyView( + EmptyViewHelper.createEmptyTextView( + context, + ResUtil.getString(R.string.me_give_gold_empty) + ) + ) + .setRefreshLayout(binding.refreshLayout) + .setRecyclerView(binding.recyclerView) + .build() + mAdapter.setOnLoadMoreListener({ + loadData(false) + }, binding.recyclerView) + binding.refreshLayout.setOnRefreshListener { + loadData(true) + } + giveGoldModel.giveDetailLiveData.observe(this) { + rvDelegate.loadData(it) + } + loadData(true) + } + + @SuppressLint("CheckResult") + fun loadData(isRefresh: Boolean) { + binding.refreshLayout.isRefreshing = isRefresh + pageNum = if (isRefresh) 1 else (pageNum + 1) + giveGoldModel.giveDetailInfo(uid, 0, pageNum, pageSize) + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/chwl/app/pay/fragment/GiveGiftFragment.kt b/app/src/main/java/com/chwl/app/pay/fragment/GiveGiftFragment.kt new file mode 100644 index 000000000..603a9a3f2 --- /dev/null +++ b/app/src/main/java/com/chwl/app/pay/fragment/GiveGiftFragment.kt @@ -0,0 +1,73 @@ +package com.chwl.app.pay.fragment + +import android.annotation.SuppressLint +import android.os.Bundle +import androidx.fragment.app.viewModels +import androidx.recyclerview.widget.LinearLayoutManager +import com.chwl.app.R +import com.chwl.app.base.BaseViewBindingFragment +import com.chwl.app.common.EmptyViewHelper +import com.chwl.app.databinding.FragmentGiveGiftBinding +import com.chwl.app.pay.GiveGoldModel +import com.chwl.app.pay.adapter.GiveGiftDetailAdapter +import com.chwl.app.ui.utils.RVDelegate +import com.chwl.core.user.bean.DiamondGiveHistoryInfo +import com.chwl.library.utils.ResUtil + +class GiveGiftFragment : BaseViewBindingFragment() { + + private var pageNum: Int = 1 + private val pageSize = 20 + private lateinit var mAdapter: GiveGiftDetailAdapter + private lateinit var rvDelegate: RVDelegate + + private val giveGoldModel: GiveGoldModel by viewModels() + + private var uid: Long = 0L + + companion object { + fun newInstance(uid: Long): GiveGiftFragment { + val args = Bundle() + args.putLong("uid", uid) + val fragment = GiveGiftFragment() + fragment.arguments = args + return fragment + } + } + + override fun init() { + uid = arguments?.getLong("uid") ?: 0L + mAdapter = GiveGiftDetailAdapter() + rvDelegate = RVDelegate.Builder() + .setAdapter(mAdapter) + .setLayoutManager(LinearLayoutManager(context)) + .setPageSize(20) + .setEmptyView( + EmptyViewHelper.createEmptyTextView( + context, + ResUtil.getString(R.string.me_give_gold_empty) + ) + ) + .setRefreshLayout(binding.refreshLayout) + .setRecyclerView(binding.recyclerView) + .build() + mAdapter.setOnLoadMoreListener({ + loadData(false) + }, binding.recyclerView) + binding.refreshLayout.setOnRefreshListener { + loadData(true) + } + giveGoldModel.giveDetailLiveData.observe(this) { + rvDelegate.loadData(it) + } + loadData(true) + } + + @SuppressLint("CheckResult") + fun loadData(isRefresh: Boolean) { + binding.refreshLayout.isRefreshing = isRefresh + pageNum = if (isRefresh) 1 else (pageNum + 1) + giveGoldModel.giveDetailInfo(uid, 1, pageNum, pageSize) + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/chwl/app/pay/interfaces/PasswordView.java b/app/src/main/java/com/chwl/app/pay/interfaces/PasswordView.java new file mode 100644 index 000000000..3643c5300 --- /dev/null +++ b/app/src/main/java/com/chwl/app/pay/interfaces/PasswordView.java @@ -0,0 +1,23 @@ +package com.chwl.app.pay.interfaces; + +import com.jungly.gridpasswordview.PasswordType; +import com.chwl.app.pay.widget.GridPasswordNoFocusView; + +public interface PasswordView { + + //void setError(String error); + + String getPassWord(); + + void clearPassword(); + + void setPassword(String password); + + void setPasswordVisibility(boolean visible); + + void togglePasswordVisibility(); + + void setOnPasswordChangedListener(GridPasswordNoFocusView.OnPasswordChangedListener listener); + + void setPasswordType(PasswordType passwordType); +} diff --git a/app/src/main/java/com/chwl/app/pay/password/GiveGoldPassWordFragment.java b/app/src/main/java/com/chwl/app/pay/password/GiveGoldPassWordFragment.java new file mode 100644 index 000000000..56d9d1d68 --- /dev/null +++ b/app/src/main/java/com/chwl/app/pay/password/GiveGoldPassWordFragment.java @@ -0,0 +1,132 @@ +package com.chwl.app.pay.password; + +import android.graphics.drawable.ColorDrawable; +import android.os.Bundle; +import android.text.TextUtils; +import android.util.DisplayMetrics; +import android.view.Display; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.Window; +import android.view.WindowManager; + +import androidx.annotation.Nullable; +import androidx.fragment.app.DialogFragment; +import androidx.fragment.app.FragmentManager; + +import com.chwl.app.R; +import com.chwl.app.pay.widget.GridPasswordNoFocusView; +import com.chwl.app.ui.setting.ModifyPwdActivity; +import com.chwl.library.utils.ResUtil; + + +//也可继承design中的BottomSheetDialogFragment +public class GiveGoldPassWordFragment extends DialogFragment { + + private GiveGoldPasswordView mPassword; + + private GridPasswordNoFocusView.OnPasswordChangedListener listener; + + private static GiveGoldPassWordFragment passWordFragment; + + private static final String EXTRA_GOLD = "gold"; + private static final String EXTRA_NICKNAME = "nickname"; + private static final String EXTRA_GOLD_RATE = "rate"; + + public static GiveGoldPassWordFragment newInstance(FragmentManager fragmentManager, String gold) { + if (passWordFragment == null) { + passWordFragment = new GiveGoldPassWordFragment(); + Bundle bundle = new Bundle(); + bundle.putString(EXTRA_GOLD, gold); + passWordFragment.setArguments(bundle); + passWordFragment.show(fragmentManager, "GiveGoldPassWordFragment"); + } + return passWordFragment; + } + + /** + * @param gold 金额 + * @param nickname 转账对象昵称 + * @param rate 手续费 + * @return + */ + public static GiveGoldPassWordFragment newInstance(FragmentManager fragmentManager, String gold, String nickname, String rate) { + if (passWordFragment == null) { + passWordFragment = new GiveGoldPassWordFragment(); + Bundle bundle = new Bundle(); + bundle.putString(EXTRA_GOLD, gold); + bundle.putString(EXTRA_NICKNAME, nickname); + bundle.putString(EXTRA_GOLD_RATE, rate); + passWordFragment.setArguments(bundle); + passWordFragment.show(fragmentManager, "GiveGoldPassWordFragment"); + } + return passWordFragment; + } + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + } + + //继承BottomSheetDialogFragment时onStart()可注释掉 + @Override + public void onStart() { + super.onStart(); + Window window = getDialog().getWindow(); + if (window != null) { + window.setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.transparent))); + WindowManager.LayoutParams layoutParams = window.getAttributes(); + DisplayMetrics dm = new DisplayMetrics(); + Display d = window.getWindowManager().getDefaultDisplay(); + d.getRealMetrics(dm); + window.getWindowManager().getDefaultDisplay().getMetrics(dm); + layoutParams.width = dm.widthPixels; + layoutParams.height = WindowManager.LayoutParams.MATCH_PARENT; + window.setAttributes(layoutParams); + } + + } + + @Nullable + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.dialog_give_gold_password, container); + init(view); + return view; + } + + private void init(View view) { + mPassword = view.findViewById(R.id.give_gold_password_view); + mPassword.getCloseImageView().setOnClickListener(view12 -> dismiss()); + mPassword.getForgetTextView().setOnClickListener(view1 -> ModifyPwdActivity.start(getContext(), ModifyPwdActivity.PAY_PWD)); + mPassword.getPswView().setOnPasswordChangedListener(listener); + if (getArguments() != null) { + if (!TextUtils.isEmpty(getArguments().getString(EXTRA_NICKNAME))) { + mPassword.getTvNickname().setText(ResUtil.getString(R.string.pay_password_givegoldpasswordfragment_01) + getArguments().getString(EXTRA_NICKNAME)); + } else { + mPassword.getTvNickname().setVisibility(View.GONE); + } + if (!TextUtils.isEmpty(getArguments().getString(EXTRA_GOLD_RATE))) { + mPassword.getTvRate().setText(getArguments().getString(EXTRA_GOLD_RATE)); + } else { + mPassword.getTvRate().setVisibility(View.GONE); + } + mPassword.getTvGold().setText(getArguments().getString(EXTRA_GOLD)); + } + } + + public void setListener(GridPasswordNoFocusView.OnPasswordChangedListener listener) { + this.listener = listener; + } + + public GiveGoldPasswordView getPassword() { + return mPassword; + } + + @Override + public void onDestroy() { + super.onDestroy(); + passWordFragment = null; + } +} diff --git a/app/src/main/java/com/chwl/app/pay/password/GiveGoldPasswordView.java b/app/src/main/java/com/chwl/app/pay/password/GiveGoldPasswordView.java new file mode 100644 index 000000000..02219d16d --- /dev/null +++ b/app/src/main/java/com/chwl/app/pay/password/GiveGoldPasswordView.java @@ -0,0 +1,135 @@ +package com.chwl.app.pay.password; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.View; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.chwl.app.R; +import com.chwl.app.pay.widget.GridPasswordNoFocusView; +import com.chwl.app.ui.widget.password.PasswordKeyboardView; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by lcw on 2016/11/28. + */ + +public class GiveGoldPasswordView extends RelativeLayout { + + private ImageView mClose; + private TextView mTitle; + private TextView mForgetPwd; + private GridPasswordNoFocusView mPassword; + private TextView tvNickname; + private TextView tvRate; + private TextView tvGold; + private PasswordKeyboardView mKeyboard; + private List passwordList;//记录键盘输入的值 + private StringBuilder mValue;//最后保存的密码 + + public GiveGoldPasswordView(Context context) { + this(context, null); + } + + public GiveGoldPasswordView(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public GiveGoldPasswordView(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + View.inflate(context, R.layout.view_give_gold_password, this); + initView(); + initEvent(); + } + + private void initView() { + mPassword = findViewById(R.id.view_password); + mClose = findViewById(R.id.img_close); + mTitle = findViewById(R.id.tv_title); + mForgetPwd = findViewById(R.id.tv_forgetPwd); + mKeyboard = findViewById(R.id.view_keyboard); + tvGold = findViewById(R.id.tv_gold); + tvNickname = findViewById(R.id.tv_nickname); + tvRate = findViewById(R.id.tv_rate); + //打乱数字的位置 + //mKeyboard.shuffleKeyboard(); + } + + private void initEvent() { + mValue = new StringBuilder(); + passwordList = new ArrayList<>(); + mKeyboard.setIOnKeyboardListener(new PasswordKeyboardView.IOnKeyboardListener() { + + @Override + public void onInsertKeyEvent(String text) { + mValue.setLength(0); + passwordList.add(text); + for (int i = 0; i < passwordList.size(); i++) { + mValue.append(passwordList.get(i)); + } + mPassword.setPassword(mValue.toString()); + } + + @Override + public void onDeleteKeyEvent() { + mValue.setLength(0); + if (passwordList.size() != 0) { + passwordList.remove(passwordList.size() - 1); + for (int i = 0; i < passwordList.size(); i++) { + mValue.append(passwordList.get(i)); + } + mPassword.setPassword(mValue.toString()); + } + } + }); + } + + //获取输入的密码 + public String getPassword() { + return mValue.toString(); + } + + //取消 + public ImageView getCloseImageView() { + return mClose; + } + + //标题 + public TextView getTitleTextView() { + return mTitle; + } + + //忘记密码 + public TextView getForgetTextView() { + return mForgetPwd; + } + + + public TextView getTvNickname() { + return tvNickname; + } + + public TextView getTvRate() { + return tvRate; + } + + public TextView getTvGold() { + return tvGold; + } + + //输入密码控件 + public GridPasswordNoFocusView getPswView() { + return mPassword; + } + + public void clearPassword(){ + mValue.setLength(0); + mPassword.clearPassword(); + passwordList.clear(); + } + +} diff --git a/app/src/main/java/com/chwl/app/pay/widget/GridPasswordNoFocusView.java b/app/src/main/java/com/chwl/app/pay/widget/GridPasswordNoFocusView.java new file mode 100644 index 000000000..96cb42671 --- /dev/null +++ b/app/src/main/java/com/chwl/app/pay/widget/GridPasswordNoFocusView.java @@ -0,0 +1,436 @@ +package com.chwl.app.pay.widget; + +import android.content.Context; +import android.content.res.ColorStateList; +import android.content.res.TypedArray; +import android.graphics.drawable.ColorDrawable; +import android.graphics.drawable.Drawable; +import android.graphics.drawable.GradientDrawable; +import android.os.Bundle; +import android.os.Parcelable; +import android.text.Editable; +import android.text.InputType; +import android.text.TextUtils; +import android.text.TextWatcher; +import android.text.method.PasswordTransformationMethod; +import android.util.AttributeSet; +import android.view.KeyEvent; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.EditText; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.jungly.gridpasswordview.CustomPasswordTransformationMethod; +import com.jungly.gridpasswordview.PasswordType; +import com.jungly.gridpasswordview.Util; +import com.jungly.gridpasswordview.imebugfixer.ImeDelBugFixedEditText; +import com.chwl.app.R; +import com.chwl.app.pay.interfaces.PasswordView; + +public class GridPasswordNoFocusView extends LinearLayout implements PasswordView { + private static final int DEFAULT_PASSWORDLENGTH = 6; + private static final int DEFAULT_TEXTSIZE = 16; + private static final String DEFAULT_TRANSFORMATION = "●"; + private static final int DEFAULT_LINECOLOR = 0xaa888888; + private static final int DEFAULT_GRIDCOLOR = 0xffffffff; + + private ColorStateList mTextColor; + private int mTextSize = DEFAULT_TEXTSIZE; + private int mLineWidth; + private int mLineColor; + private int mGridColor; + private Drawable mLineDrawable; + private Drawable mOuterLineDrawable; + private int mPasswordLength; + private String mPasswordTransformation; + private int mPasswordType; + + private String[] mPasswordArr; + private TextView[] mViewArr; + + private ImeDelBugFixedEditText mInputView; + private OnPasswordChangedListener mListener; + private PasswordTransformationMethod mTransformationMethod; + + public GridPasswordNoFocusView(Context context) { + super(context); + initViews(context); + init(context, null, 0); + } + + public GridPasswordNoFocusView(Context context, AttributeSet attrs) { + super(context, attrs); + init(context, attrs, 0); + } + + public GridPasswordNoFocusView(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + init(context, attrs, defStyleAttr); + } + + public GridPasswordNoFocusView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + init(context, attrs, defStyleAttr); + } + + private void init(Context context, AttributeSet attrs, int defStyleAttr) { + initAttrs(context, attrs, defStyleAttr); + initViews(context); + } + + private void initAttrs(Context context, AttributeSet attrs, int defStyleAttr) { + TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.gridPasswordView, defStyleAttr, 0); + + mTextColor = ta.getColorStateList(R.styleable.gridPasswordView_gpvTextColor); + if (mTextColor == null) + mTextColor = ColorStateList.valueOf(getResources().getColor(android.R.color.primary_text_light)); + int textSize = ta.getDimensionPixelSize(R.styleable.gridPasswordView_gpvTextSize, -1); + if (textSize != -1) { + this.mTextSize = Util.px2sp(context, textSize); + } + + mLineWidth = (int) ta.getDimension(R.styleable.gridPasswordView_gpvLineWidth, Util.dp2px(getContext(), 1)); + mLineColor = ta.getColor(R.styleable.gridPasswordView_gpvLineColor, DEFAULT_LINECOLOR); + mGridColor = ta.getColor(R.styleable.gridPasswordView_gpvGridColor, DEFAULT_GRIDCOLOR); + mLineDrawable = ta.getDrawable(R.styleable.gridPasswordView_gpvLineColor); + if (mLineDrawable == null) + mLineDrawable = new ColorDrawable(mLineColor); + mOuterLineDrawable = generateBackgroundDrawable(); + + mPasswordLength = ta.getInt(R.styleable.gridPasswordView_gpvPasswordLength, DEFAULT_PASSWORDLENGTH); + mPasswordTransformation = ta.getString(R.styleable.gridPasswordView_gpvPasswordTransformation); + if (TextUtils.isEmpty(mPasswordTransformation)) + mPasswordTransformation = DEFAULT_TRANSFORMATION; + + + mPasswordType = ta.getInt(R.styleable.gridPasswordView_gpvPasswordType, 0); + + ta.recycle(); + + mPasswordArr = new String[mPasswordLength]; + mViewArr = new TextView[mPasswordLength]; + } + + private void initViews(Context context) { + super.setBackgroundDrawable(mOuterLineDrawable); + setShowDividers(SHOW_DIVIDER_NONE); + setOrientation(HORIZONTAL); + + mTransformationMethod = new CustomPasswordTransformationMethod(mPasswordTransformation); + inflaterViews(context); + } + + private void inflaterViews(Context context) { + LayoutInflater inflater = LayoutInflater.from(context); + inflater.inflate(R.layout.grid_password_view, this); + + mInputView = (ImeDelBugFixedEditText) findViewById(R.id.inputView); + mInputView.setMaxEms(mPasswordLength); + mInputView.addTextChangedListener(textWatcher); + mInputView.setDelKeyEventListener(onDelKeyEventListener); + setCustomAttr(mInputView); + + mViewArr[0] = mInputView; + + int index = 1; + while (index < mPasswordLength) { + View dividerView = inflater.inflate(R.layout.divider, null); + LinearLayout.LayoutParams dividerParams = new LinearLayout.LayoutParams(mLineWidth, LinearLayout.LayoutParams.MATCH_PARENT); + dividerView.setBackgroundDrawable(mLineDrawable); + addView(dividerView, dividerParams); + + TextView textView = (TextView) inflater.inflate(R.layout.textview, null); + setCustomAttr(textView); + LinearLayout.LayoutParams textViewParams = new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.MATCH_PARENT, 1f); + addView(textView, textViewParams); + + mViewArr[index] = textView; + index++; + } + + } + + private void setCustomAttr(TextView view) { + if (mTextColor != null) + view.setTextColor(mTextColor); + view.setTextSize(mTextSize); + + int inputType = InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_PASSWORD; + switch (mPasswordType) { + + case 1: + inputType = InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD; + break; + + case 2: + inputType = InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD; + break; + + case 3: + inputType = InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_WEB_PASSWORD; + break; + } + view.setInputType(inputType); + view.setTransformationMethod(mTransformationMethod); + } + + private GradientDrawable generateBackgroundDrawable() { + GradientDrawable drawable = new GradientDrawable(); + drawable.setColor(mGridColor); + drawable.setStroke(mLineWidth, mLineColor); + return drawable; + } + + private ImeDelBugFixedEditText.OnDelKeyEventListener onDelKeyEventListener = new ImeDelBugFixedEditText.OnDelKeyEventListener() { + + @Override + public void onDeleteClick() { + for (int i = mPasswordArr.length - 1; i >= 0; i--) { + if (mPasswordArr[i] != null) { + mPasswordArr[i] = null; + mViewArr[i].setText(null); + notifyTextChanged(); + break; + } else { + mViewArr[i].setText(null); + } + } + } + }; + + private TextWatcher textWatcher = new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + if (s == null) { + return; + } + + String newStr = s.toString(); + if (newStr.length() == 1) { + mPasswordArr[0] = newStr; + notifyTextChanged(); + } else if (newStr.length() == 2) { + String newNum = newStr.substring(1); + for (int i = 0; i < mPasswordArr.length; i++) { + if (mPasswordArr[i] == null) { + mPasswordArr[i] = newNum; + mViewArr[i].setText(newNum); + notifyTextChanged(); + break; + } + } + mInputView.removeTextChangedListener(this); + mInputView.setText(mPasswordArr[0]); + if (mInputView.getText().length() >= 1) { + mInputView.setSelection(1); + } + mInputView.addTextChangedListener(this); + } + } + + @Override + public void afterTextChanged(Editable s) { + + } + }; + + @Deprecated + private OnKeyListener onKeyListener = new OnKeyListener() { + @Override + public boolean onKey(View v, int keyCode, KeyEvent event) { + if (event.getAction() == KeyEvent.ACTION_DOWN && event.getKeyCode() == KeyEvent.KEYCODE_DEL) { + onDelKeyEventListener.onDeleteClick(); + return true; + } + return false; + } + }; + + private void notifyTextChanged() { + if (mListener == null) + return; + + String currentPsw = getPassWord(); + mListener.onTextChanged(currentPsw); + + if (currentPsw.length() == mPasswordLength) + mListener.onInputFinish(currentPsw); + } + + @Override + protected Parcelable onSaveInstanceState() { + Bundle bundle = new Bundle(); + bundle.putParcelable("instanceState", super.onSaveInstanceState()); + bundle.putStringArray("passwordArr", mPasswordArr); + return bundle; + } + + @Override + protected void onRestoreInstanceState(Parcelable state) { + if (state instanceof Bundle) { + Bundle bundle = (Bundle) state; + mPasswordArr = bundle.getStringArray("passwordArr"); + state = bundle.getParcelable("instanceState"); + mInputView.removeTextChangedListener(textWatcher); + setPassword(getPassWord()); + mInputView.addTextChangedListener(textWatcher); + } + super.onRestoreInstanceState(state); + } + + //TODO + //@Override + private void setError(String error) { + mInputView.setError(error); + } + + /** + * Return the text the PasswordView is displaying. + */ + @Override + public String getPassWord() { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < mPasswordArr.length; i++) { + if (mPasswordArr[i] != null) + sb.append(mPasswordArr[i]); + } + return sb.toString(); + } + + /** + * Clear the passwrod the PasswordView is displaying. + */ + @Override + public void clearPassword() { + for (int i = 0; i < mPasswordArr.length; i++) { + mPasswordArr[i] = null; + mViewArr[i].setText(null); + } + } + + /** + * Sets the string value of the PasswordView. + */ + @Override + public void setPassword(String password) { + clearPassword(); + + if (TextUtils.isEmpty(password)) + return; + + char[] pswArr = password.toCharArray(); + for (int i = 0; i < pswArr.length; i++) { + if (i < mPasswordArr.length) { + mPasswordArr[i] = pswArr[i] + ""; + mViewArr[i].setText(mPasswordArr[i]); + } + } + } + + /** + * Set the enabled state of this view. + */ + @Override + public void setPasswordVisibility(boolean visible) { + for (TextView textView : mViewArr) { + textView.setTransformationMethod(visible ? null : mTransformationMethod); + if (textView instanceof EditText) { + EditText et = (EditText) textView; + et.setSelection(et.getText().length()); + } + } + } + + /** + * Toggle the enabled state of this view. + */ + @Override + public void togglePasswordVisibility() { + boolean currentVisible = getPassWordVisibility(); + setPasswordVisibility(!currentVisible); + } + + /** + * Get the visibility of this view. + */ + private boolean getPassWordVisibility() { + return mViewArr[0].getTransformationMethod() == null; + } + + /** + * Register a callback to be invoked when password changed. + */ + @Override + public void setOnPasswordChangedListener(OnPasswordChangedListener listener) { + this.mListener = listener; + } + + @Override + public void setPasswordType(PasswordType passwordType) { + boolean visible = getPassWordVisibility(); + int inputType = InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_PASSWORD; + switch (passwordType) { + + case TEXT: + inputType = InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD; + break; + + case TEXTVISIBLE: + inputType = InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD; + break; + + case TEXTWEB: + inputType = InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_WEB_PASSWORD; + break; + } + + for (TextView textView : mViewArr) + textView.setInputType(inputType); + + setPasswordVisibility(visible); + } + + @Override + public void setBackground(Drawable background) { + } + + @Override + public void setBackgroundColor(int color) { + } + + @Override + public void setBackgroundResource(int resid) { + } + + @Override + public void setBackgroundDrawable(Drawable background) { + } + + + /** + * Interface definition for a callback to be invoked when the password changed or is at the maximum length. + */ + public interface OnPasswordChangedListener { + + /** + * Invoked when the password changed. + * + * @param psw new text + */ + void onTextChanged(String psw); + + /** + * Invoked when the password is at the maximum length. + * + * @param psw complete text + */ + void onInputFinish(String psw); + + } +} diff --git a/app/src/main/java/com/chwl/app/ui/im/RouterHandler.java b/app/src/main/java/com/chwl/app/ui/im/RouterHandler.java index c3f1b1b75..d4eba66a1 100644 --- a/app/src/main/java/com/chwl/app/ui/im/RouterHandler.java +++ b/app/src/main/java/com/chwl/app/ui/im/RouterHandler.java @@ -5,6 +5,7 @@ import android.content.Context; import com.chwl.app.decoration.view.DecorationStoreActivity; import com.chwl.app.earn.activity.EarnRecordActivity; +import com.chwl.app.pay.activity.GiveGoldActivity; import com.trello.rxlifecycle3.components.support.RxAppCompatActivity; import com.chwl.app.R; import com.chwl.app.UIHelper; @@ -277,6 +278,9 @@ public class RouterHandler { case RouterType.USER_LEVEL: CommonWebViewActivity.start(context, UriProvider.getUserLevelUrl()); break; + case RouterType.USER_DONATION: + GiveGoldActivity.Companion.start(context); + break; default: SingleToastUtil.showToast(ResUtil.getString(R.string.ui_im_routerhandler_07)); return false; diff --git a/app/src/main/java/com/chwl/app/ui/user/activity/UserGiftActivity.kt b/app/src/main/java/com/chwl/app/ui/user/activity/UserGiftActivity.kt index 2ffc1ba22..0b64eb90d 100644 --- a/app/src/main/java/com/chwl/app/ui/user/activity/UserGiftActivity.kt +++ b/app/src/main/java/com/chwl/app/ui/user/activity/UserGiftActivity.kt @@ -11,7 +11,6 @@ import com.chwl.app.base.BaseViewBindingActivity import com.chwl.app.databinding.ActivityUserGiftBinding import com.chwl.app.ui.user.fragment.UserInfoGiftFragment import com.chwl.app.ui.user.adapter.CommonWrapIndicatorAdapter -import com.chwl.app.ui.user.adapter.UserInfoPagerAdapter import com.chwl.app.ui.widget.magicindicator.MagicIndicator import com.chwl.app.ui.widget.magicindicator.ViewPagerHelper import com.chwl.app.ui.widget.magicindicator.buildins.commonnavigator.CommonNavigator diff --git a/app/src/main/java/com/chwl/app/ui/user/activity/UserInfoActivity.java b/app/src/main/java/com/chwl/app/ui/user/activity/UserInfoActivity.java index ac6bcd693..420630b53 100644 --- a/app/src/main/java/com/chwl/app/ui/user/activity/UserInfoActivity.java +++ b/app/src/main/java/com/chwl/app/ui/user/activity/UserInfoActivity.java @@ -43,7 +43,6 @@ import com.chwl.app.ui.im.avtivity.NimFriendModel; import com.chwl.app.ui.im.avtivity.NimP2PMessageActivity; import com.chwl.app.ui.user.adapter.SelfPhotoAdapter; import com.chwl.app.ui.user.adapter.UserInfoIndicatorAdapter; -import com.chwl.app.ui.user.adapter.UserInfoPagerAdapter; import com.chwl.app.ui.user.adapter.UserInfoPhotoAdapter; import com.chwl.app.ui.user.adapter.UserPhotoAdapter; import com.chwl.app.ui.user.fragment.UserInfoGiftWallFragment; @@ -53,7 +52,6 @@ import com.chwl.app.ui.utils.ImageLoadUtils; import com.chwl.app.ui.utils.ImageLoadUtilsV2; import com.chwl.app.ui.widget.ButtonItem; import com.chwl.app.ui.widget.ObservableScrollView; -import com.chwl.app.ui.widget.magicindicator.ViewPagerHelper; import com.chwl.app.ui.widget.magicindicator.buildins.commonnavigator.CommonNavigator; import com.chwl.app.ui.widget.rollviewpager.adapter.StaticPagerAdapterWrapper; import com.chwl.app.utils.RegexUtil; diff --git a/app/src/main/java/com/chwl/app/ui/user/adapter/UserInfoPagerAdapter.kt b/app/src/main/java/com/chwl/app/ui/user/adapter/UserInfoPagerAdapter.kt deleted file mode 100644 index b7e53c36f..000000000 --- a/app/src/main/java/com/chwl/app/ui/user/adapter/UserInfoPagerAdapter.kt +++ /dev/null @@ -1,14 +0,0 @@ -package com.chwl.app.ui.user.adapter - -import android.annotation.SuppressLint -import androidx.fragment.app.Fragment -import androidx.fragment.app.FragmentManager -import androidx.fragment.app.FragmentPagerAdapter - -@SuppressLint("WrongConstant") -class UserInfoPagerAdapter(fm:FragmentManager, private val list:List) :FragmentPagerAdapter(fm, - BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT){ - override fun getCount()=list.size - - override fun getItem(position: Int)=list[position] -} \ No newline at end of file diff --git a/app/src/main/java/com/chwl/app/ui/user/fragment/UserInfoGiftWallFragment.kt b/app/src/main/java/com/chwl/app/ui/user/fragment/UserInfoGiftWallFragment.kt index 7a9d6626d..6fbd37879 100644 --- a/app/src/main/java/com/chwl/app/ui/user/fragment/UserInfoGiftWallFragment.kt +++ b/app/src/main/java/com/chwl/app/ui/user/fragment/UserInfoGiftWallFragment.kt @@ -4,14 +4,12 @@ import android.content.Intent import android.widget.LinearLayout import android.widget.TextView import androidx.fragment.app.Fragment -import androidx.viewpager.widget.ViewPager import com.chwl.app.R import com.chwl.app.avroom.adapter.CommonVPAdapter import com.chwl.app.base.BaseViewBindingFragment import com.chwl.app.databinding.FragmentUserinfoGiftWallBinding import com.chwl.app.ui.user.activity.UserGiftActivity import com.chwl.app.ui.user.adapter.CommonWrapIndicatorAdapter -import com.chwl.app.ui.user.adapter.UserInfoPagerAdapter import com.chwl.app.ui.widget.magicindicator.MagicIndicator import com.chwl.app.ui.widget.magicindicator.ViewPagerHelper import com.chwl.app.ui.widget.magicindicator.buildins.commonnavigator.CommonNavigator diff --git a/app/src/main/res/drawable-xhdpi/ic_give_diamond_details.png b/app/src/main/res/drawable-xhdpi/ic_give_diamond_details.png new file mode 100644 index 0000000000000000000000000000000000000000..e42865f60def15d0f881274febe2622c092faeac GIT binary patch literal 4171 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/layout/activity_give_gold.xml b/app/src/main/res/layout/activity_give_gold.xml new file mode 100644 index 000000000..bfe5a49df --- /dev/null +++ b/app/src/main/res/layout/activity_give_gold.xml @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_give_gold_detail.xml b/app/src/main/res/layout/activity_give_gold_detail.xml new file mode 100644 index 000000000..6babf8282 --- /dev/null +++ b/app/src/main/res/layout/activity_give_gold_detail.xml @@ -0,0 +1,32 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_give_gold_search.xml b/app/src/main/res/layout/activity_give_gold_search.xml new file mode 100644 index 000000000..2c065b5da --- /dev/null +++ b/app/src/main/res/layout/activity_give_gold_search.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_give_gold_to_user.xml b/app/src/main/res/layout/activity_give_gold_to_user.xml new file mode 100644 index 000000000..12b8ea652 --- /dev/null +++ b/app/src/main/res/layout/activity_give_gold_to_user.xml @@ -0,0 +1,288 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/dialog_give_gold_password.xml b/app/src/main/res/layout/dialog_give_gold_password.xml new file mode 100644 index 000000000..caa0c977a --- /dev/null +++ b/app/src/main/res/layout/dialog_give_gold_password.xml @@ -0,0 +1,10 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_give_diamond.xml b/app/src/main/res/layout/fragment_give_diamond.xml new file mode 100644 index 000000000..a3d92b162 --- /dev/null +++ b/app/src/main/res/layout/fragment_give_diamond.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + diff --git a/app/src/main/res/layout/fragment_give_gift.xml b/app/src/main/res/layout/fragment_give_gift.xml new file mode 100644 index 000000000..a3d92b162 --- /dev/null +++ b/app/src/main/res/layout/fragment_give_gift.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + diff --git a/app/src/main/res/layout/item_give_diamond_detail.xml b/app/src/main/res/layout/item_give_diamond_detail.xml new file mode 100644 index 000000000..cab5119da --- /dev/null +++ b/app/src/main/res/layout/item_give_diamond_detail.xml @@ -0,0 +1,57 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_give_gift.xml b/app/src/main/res/layout/item_give_gift.xml new file mode 100644 index 000000000..1196be618 --- /dev/null +++ b/app/src/main/res/layout/item_give_gift.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_lately_give.xml b/app/src/main/res/layout/item_lately_give.xml new file mode 100644 index 000000000..b29b9cfdf --- /dev/null +++ b/app/src/main/res/layout/item_lately_give.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/view_give_gold_password.xml b/app/src/main/res/layout/view_give_gold_password.xml new file mode 100644 index 000000000..4859fed65 --- /dev/null +++ b/app/src/main/res/layout/view_give_gold_password.xml @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 95d6ea49e..3c4c58456 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -4862,8 +4862,7 @@ يرجى تعيين كلمة مرور الدفع أولاً الانتقال إلى الإعدادات رسوم الخدمة - إجمالي استهلاك الألماس - %s ألماس + إجمالي النقود المستهلكة إعطاء لـ %s تم النسخ نسخ @@ -4874,7 +4873,7 @@ الرجاء إدخال كمية الهدية كمية الهدية غير صالحة، يرجى إعادة الإدخال تم إرسال الهدية بنجاح - إجمالي النفقات %s ألماس + إجمالي الإنفاق %s عملات ذهبية لاحقًا لا توجد هدايا في الوقت الحالي تم التقديم diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 3e8fa9fd7..5e1010617 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -4860,8 +4860,7 @@ 請先設置支付密碼 去設置 手續費 - 總消耗鉆石 - %s鉆 + 總消耗金幣 向%s轉贈 已複製 複製 @@ -4872,7 +4871,7 @@ 請輸入禮物數量 禮物數量有誤,請重新輸入 轉贈成功 - 總支出%s鉆 + 總支出%s金幣 以後再説 暫時沒有禮物 已申請 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 91468edcb..0217d7c0d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -4842,8 +4842,7 @@ Please set up payment password first Go to Setting Service Charge - Total Diamond Consumption - %s Diamonds + Total Coins Consumed Give to %s Copied Copy @@ -4854,7 +4853,7 @@ Please enter the quantity of the gift Invalid gift quantity, please re-enter Gift sent successfully - Total Expenditure %s Diamonds + Total Expenditure %s Coins Later No gifts at the moment Applied diff --git a/core/src/main/java/com/chwl/core/home/model/HomeModel.kt b/core/src/main/java/com/chwl/core/home/model/HomeModel.kt index e677d1bed..b9c7c443c 100644 --- a/core/src/main/java/com/chwl/core/home/model/HomeModel.kt +++ b/core/src/main/java/com/chwl/core/home/model/HomeModel.kt @@ -8,6 +8,8 @@ import com.chwl.core.community.CommunityConstant import com.chwl.core.community.bean.UnReadCountInfo import com.chwl.core.home.bean.* import com.chwl.core.room.bean.AnchorInfo +import com.chwl.core.user.bean.DiamondGiveHistoryInfo +import com.chwl.core.user.bean.SearchUserInfo import com.chwl.core.user.bean.UserInfo import com.chwl.core.utils.net.RxHelper import com.chwl.core.utils.net.launchRequest @@ -183,7 +185,79 @@ object HomeModel : BaseModel() { api.getResourceJumpInfo(id) } + suspend fun getDiamondGiveHistory(page: Int, pageSize: Int): List? = + launchRequest { + api.getRecord(page, pageSize) + } + + suspend fun getSearchUser(erbanNo: Long): SearchUserInfo? = + launchRequest { + api.getSearchUser(erbanNo) + } + + suspend fun giveGift(toUid: Long, giftId: Int, giftNum: Int): String? = + launchRequest { + api.giveGift(toUid, giftId, giftNum) + } + + suspend fun getGiveDetail( + uid: Long, + type: Int, + page: Int, + pageSize: Int + ): List? = + launchRequest { + api.getGiveDetail(uid, type, page, pageSize) + } + private interface Api { + + /** + * 轉贈鉆石歷史記錄 + * + * @return + */ + @GET("/user/diamond/giveRecord") + suspend fun getRecord( + @Query("pageNum") pageNum: Int?, + @Query("pageSize") pageSize: Int? + ): ServiceResult> + + /** + * 精確搜索用戶 + * + * @return + */ + @POST("/user/diamond/searchUser") + suspend fun getSearchUser( + @Query("erbanNo") erbanNo: Long? + ): ServiceResult + + /** + * 贈送禮物 + * + * @return + */ + @POST("/user/diamond/giveGift") + suspend fun giveGift( + @Query("toUid") toUid: Long?, + @Query("giftId") giftId: Int?, + @Query("giftNum") giftNum: Int? + ): ServiceResult + + /** + * 轉贈詳情 + * + * @return + */ + @GET("/user/diamond/giveRecordVoByType") + suspend fun getGiveDetail( + @Query("toUid") toUid: Long?, + @Query("type") type: Int?, + @Query("pageNum") pageNum: Int?, + @Query("pageSize") pageSize: Int? + ): ServiceResult> + /** * 提交反馈 * diff --git a/core/src/main/java/com/chwl/core/im/custom/bean/RouterType.java b/core/src/main/java/com/chwl/core/im/custom/bean/RouterType.java index 314c6c929..710363785 100644 --- a/core/src/main/java/com/chwl/core/im/custom/bean/RouterType.java +++ b/core/src/main/java/com/chwl/core/im/custom/bean/RouterType.java @@ -217,4 +217,8 @@ public class RouterType { * 用户等级(目前只是本地用到,所以用了100001) */ public static final int USER_LEVEL = 100001; + /** + * 我的转赠(目前只是本地用到,所以用了100002) + */ + public static final int USER_DONATION = 100002; } diff --git a/core/src/main/java/com/chwl/core/pay/IPayModel.java b/core/src/main/java/com/chwl/core/pay/IPayModel.java index f9115e02f..0139d89e3 100644 --- a/core/src/main/java/com/chwl/core/pay/IPayModel.java +++ b/core/src/main/java/com/chwl/core/pay/IPayModel.java @@ -86,4 +86,5 @@ public interface IPayModel extends IModel { Single getChargeContact(); + Single giveGold(long toUid, String goldNum, String password); } diff --git a/core/src/main/java/com/chwl/core/pay/PayModel.java b/core/src/main/java/com/chwl/core/pay/PayModel.java index b7d688003..a1d402095 100644 --- a/core/src/main/java/com/chwl/core/pay/PayModel.java +++ b/core/src/main/java/com/chwl/core/pay/PayModel.java @@ -325,8 +325,27 @@ public class PayModel extends BaseModel implements IPayModel { .compose(RxHelper.handleSchedulers()); } + + @Override + public Single giveGold(long toUid, String goldNum, String password) { + return api.giveGold(toUid, goldNum, password) + .compose(RxHelper.handleStringData()) + .compose(RxHelper.handleSchedulers()); + } + public interface Api { + /** + * 钻石转赠 + * + * @return + */ + @FormUrlEncoded + @POST("/user/diamond/give") + Single> giveGold(@Field("toUid") long toUid, + @Field("diamondNum") String diamondNum, + @Field("payPwd") String payPwd); + /** * 获取钱包 *