From 040f1aba13b179ff318366680a6346af7fd97795 Mon Sep 17 00:00:00 2001 From: zuoxiao <470321431@qq.com> Date: 星期五, 11 四月 2025 16:11:23 +0800 Subject: [PATCH] feat(generallibrary): 新增补卡功能并优化底部导航栏 --- baselibrary/src/main/res/drawable/bukou.xml | 9 generallibrary/src/main/java/com/dayu/general/activity/MainActivity.kt | 21 generallibrary/src/main/res/drawable/bottom_tab_selector.xml | 13 generallibrary/src/main/java/com/dayu/general/activity/RechargeFragment.kt | 126 +++++ generallibrary/src/main/java/com/dayu/general/activity/MyFragment.kt | 5 generallibrary/src/main/res/layout/fragment_card.xml | 6 generallibrary/src/main/res/drawable/recharge_button_ripple.xml | 11 generallibrary/src/main/res/drawable/text_color_selector.xml | 5 generallibrary/src/main/res/layout/fragment_my.xml | 43 - generallibrary/src/main/java/com/dayu/general/adapter/CardReplaceAdapter.kt | 110 ++++ generallibrary/src/main/res/layout/activity_main.xml | 111 ++-- generallibrary/build.gradle | 16 generallibrary/src/main/AndroidManifest.xml | 23 generallibrary/src/main/res/layout/activity_card_replace.xml | 49 ++ generallibrary/src/main/res/drawable/tab_indicator.xml | 2 generallibrary/src/main/res/drawable/tab_selector_background.xml | 5 generallibrary/src/main/res/drawable/bottom_tab_bg.xml | 7 generallibrary/src/main/java/com/dayu/general/bean/db/CardRegistrationBean.kt | 1 generallibrary/src/main/java/com/dayu/general/bean/net/CardInfoResult.kt | 16 generallibrary/src/main/java/com/dayu/general/bean/net/CardReplaceInfo.kt | 28 + baselibrary/src/main/res/drawable/fanxie.xml | 9 generallibrary/src/main/java/com/dayu/general/dao/AppDataBase.kt | 4 generallibrary/src/main/java/com/dayu/general/bean/db/RechargeRecordBean.kt | 21 generallibrary/src/main/java/com/dayu/general/activity/CardReplaceActivity.kt | 173 +++++++ generallibrary/src/main/java/com/dayu/general/dao/RechargeRecordDao.kt | 35 + generallibrary/src/main/res/drawable/bottom_tab_selected.xml | 14 generallibrary/src/main/res/layout/fragment_recharge.xml | 428 +++++++++--------- generallibrary/src/main/java/com/dayu/general/dao/BaseDaoSingleton.kt | 37 + baselibrary/src/main/res/drawable/chongzheng.xml | 9 generallibrary/src/main/java/com/dayu/general/net/ApiManager.kt | 7 30 files changed, 995 insertions(+), 349 deletions(-) diff --git a/baselibrary/src/main/res/drawable/bukou.xml b/baselibrary/src/main/res/drawable/bukou.xml new file mode 100644 index 0000000..a98e64b --- /dev/null +++ b/baselibrary/src/main/res/drawable/bukou.xml @@ -0,0 +1,9 @@ +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:viewportWidth="24" + android:viewportHeight="24"> + <path + android:pathData="M18,9l-1.41,-1.42L10,14.17l-2.59,-2.58L6,13l4,4zM19,3h-4.18C14.4,1.84 13.3,1 12,1c-1.3,0 -2.4,0.84 -2.82,2L5,3c-0.14,0 -0.27,0.01 -0.4,0.04 -0.39,0.08 -0.74,0.28 -1.01,0.55 -0.18,0.18 -0.33,0.4 -0.43,0.64 -0.1,0.23 -0.16,0.49 -0.16,0.77v14c0,0.27 0.06,0.54 0.16,0.78s0.25,0.45 0.43,0.64c0.27,0.27 0.62,0.47 1.01,0.55 0.13,0.02 0.26,0.03 0.4,0.03h14c1.1,0 2,-0.9 2,-2L21,5c0,-1.1 -0.9,-2 -2,-2zM12,2.75c0.41,0 0.75,0.34 0.75,0.75s-0.34,0.75 -0.75,0.75 -0.75,-0.34 -0.75,-0.75 0.34,-0.75 0.75,-0.75zM19,19L5,19L5,5h14v14z" + android:fillColor="#009ad6"/> +</vector> diff --git a/baselibrary/src/main/res/drawable/chongzheng.xml b/baselibrary/src/main/res/drawable/chongzheng.xml new file mode 100644 index 0000000..66a2070 --- /dev/null +++ b/baselibrary/src/main/res/drawable/chongzheng.xml @@ -0,0 +1,9 @@ +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:viewportWidth="24" + android:viewportHeight="24"> + <path + android:pathData="M11,15h2v2h-2zM11,7h2v6h-2zM19,3h-4.18C14.4,1.84 13.3,1 12,1c-1.3,0 -2.4,0.84 -2.82,2L5,3c-0.14,0 -0.27,0.01 -0.4,0.04 -0.39,0.08 -0.74,0.28 -1.01,0.55 -0.18,0.18 -0.33,0.4 -0.43,0.64 -0.1,0.23 -0.16,0.49 -0.16,0.77v14c0,0.27 0.06,0.54 0.16,0.78s0.25,0.45 0.43,0.64c0.27,0.27 0.62,0.47 1.01,0.55 0.13,0.02 0.26,0.03 0.4,0.03h14c1.1,0 2,-0.9 2,-2L21,5c0,-1.1 -0.9,-2 -2,-2zM12,2.75c0.41,0 0.75,0.34 0.75,0.75s-0.34,0.75 -0.75,0.75 -0.75,-0.34 -0.75,-0.75 0.34,-0.75 0.75,-0.75zM19,19L5,19L5,5h14v14z" + android:fillColor="#009ad6"/> +</vector> diff --git a/baselibrary/src/main/res/drawable/fanxie.xml b/baselibrary/src/main/res/drawable/fanxie.xml new file mode 100644 index 0000000..12c9b85 --- /dev/null +++ b/baselibrary/src/main/res/drawable/fanxie.xml @@ -0,0 +1,9 @@ +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:viewportWidth="24" + android:viewportHeight="24"> + <path + android:pathData="M12,2C6.5,2 2,6.5 2,12s4.5,10 10,10 10,-4.5 10,-10S17.5,2 12,2zM12,20c-4.41,0 -8,-3.59 -8,-8s3.59,-8 8,-8 8,3.59 8,8 -3.59,8 -8,8zM7,15h10v2L7,17zM10.3,11.2L8.4,9.3 7,10.7l3.3,3.3L17,7.3l-1.4,-1.4z" + android:fillColor="#009ad6"/> +</vector> diff --git a/generallibrary/build.gradle b/generallibrary/build.gradle index a598a66..23302f1 100644 --- a/generallibrary/build.gradle +++ b/generallibrary/build.gradle @@ -13,6 +13,13 @@ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" consumerProguardFiles "consumer-rules.pro" + + // 娣诲姞Room鏁版嵁搴撶殑瀵煎嚭schema閫夐」 + javaCompileOptions { + annotationProcessorOptions { + arguments += ["room.schemaLocation": "$projectDir/schemas".toString()] + } + } } buildTypes { @@ -56,11 +63,10 @@ compileOnly project(':pickerviewlibrary') - //鏁版嵁搴� - implementation "androidx.room:room-runtime:2.3.0" - implementation "androidx.room:room-ktx:2.3.0" - runtimeOnly("androidx.room:room-common:2.3.0") - kapt "androidx.room:room-compiler:2.3.0" + //鏁版嵁搴� - 鏇存柊鐗堟湰浠ユ洿濂芥敮鎸佸崗绋� + implementation "androidx.room:room-runtime:2.6.1" + implementation "androidx.room:room-ktx:2.6.1" + kapt "androidx.room:room-compiler:2.6.1" //鏉冮檺鐢宠 compileOnly 'com.github.getActivity:XXPermissions:18.5' diff --git a/generallibrary/src/main/AndroidManifest.xml b/generallibrary/src/main/AndroidManifest.xml index f167a9f..e1429f1 100644 --- a/generallibrary/src/main/AndroidManifest.xml +++ b/generallibrary/src/main/AndroidManifest.xml @@ -39,14 +39,6 @@ android:supportsRtl="true" android:theme="@style/AppTheme"> - <!-- <activity--> - <!-- android:name="com.dayu.recharge.activity.LoginActivity"--> - <!-- android:exported="true">--> - <!-- <intent-filter>--> - <!-- <action android:name="android.intent.action.MAIN" />--> - <!-- <category android:name="android.intent.category.LAUNCHER" />--> - <!-- </intent-filter>--> - <!-- </activity>--> <activity android:name="com.dayu.general.activity.NewCardActivity" /> <activity android:name="com.dayu.general.activity.ManageListActivity" /> <activity android:name="com.dayu.general.activity.SearchUserListActivity" /> @@ -60,7 +52,17 @@ <data android:mimeType="text/plain" /> </intent-filter> </activity> - <activity android:name=".activity.MainActivity" /> + <activity + android:name=".activity.MainActivity" + android:launchMode="singleTop" + android:windowSoftInputMode="adjustPan"> + <intent-filter> + <action android:name="android.nfc.action.ACTION_NDEF_DISCOVERED" /> + <category android:name="android.intent.category.DEFAULT" /> + <data android:mimeType="text/plain" /> + </intent-filter> + </activity> + <activity android:name=".activity.ManagerReadActivity" android:exported="false" @@ -83,6 +85,9 @@ </intent-filter> </activity> + <!-- 鏂板琛ュ崱Activity --> + <activity android:name=".activity.CardReplaceActivity" /> + <meta-data android:name="BUGLY_APP_VERSION" diff --git a/generallibrary/src/main/java/com/dayu/general/activity/CardReplaceActivity.kt b/generallibrary/src/main/java/com/dayu/general/activity/CardReplaceActivity.kt new file mode 100644 index 0000000..fae0023 --- /dev/null +++ b/generallibrary/src/main/java/com/dayu/general/activity/CardReplaceActivity.kt @@ -0,0 +1,173 @@ +package com.dayu.general.activity + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.inputmethod.EditorInfo +import androidx.recyclerview.widget.LinearLayoutManager +import com.dayu.baselibrary.net.subscribers.SubscriberListener +import com.dayu.baselibrary.utils.ToastUtil +import com.dayu.general.adapter.CardReplaceAdapter +import com.dayu.general.bean.net.CardReplaceInfo +import com.dayu.general.bean.net.CardReplaceResponse +import com.dayu.general.databinding.ActivityCardReplaceBinding +import com.dayu.general.net.ApiManager +import com.dayu.general.net.BaseResponse +import com.scwang.smart.refresh.layout.api.RefreshLayout +import com.scwang.smart.refresh.layout.listener.OnRefreshLoadMoreListener + +/** + * 鍗$墖琛ュ姙Activity + */ +class CardReplaceActivity : BaseActivity() { + + private lateinit var binding: ActivityCardReplaceBinding + private var currentCardInfo: CardReplaceInfo? = null + private lateinit var adapter: CardReplaceAdapter + + // 鍒嗛〉鍙傛暟 + private var pageCurr: Int = 1 + private val pageSize: Int = 20 + private var hasMoreData: Boolean = true + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + binding = ActivityCardReplaceBinding.inflate(LayoutInflater.from(this)) + setContentView(binding.root) + + initView() + initRecyclerView() + setupRefreshLayout() + loadCardReplaceList(true) + } + + /** + * 鍒濆鍖栬鍥� + */ + private fun initView() { + // 鍒濆鍖栨爣棰樻爮 + binding.titleBar.setOnItemclickListner(com.dayu.baselibrary.view.TitleBar.ClickType_LEFT_IMAGE) { + finish() + } + } + + /** + * 鍒濆鍖朢ecyclerView + */ + private fun initRecyclerView() { + // 鍒涘缓閫傞厤鍣� + adapter = CardReplaceAdapter(this) + + // 璁剧疆甯冨眬绠$悊鍣ㄥ拰閫傞厤鍣� + binding.recyclerView.apply { + layoutManager = LinearLayoutManager(this@CardReplaceActivity) + adapter = this@CardReplaceActivity.adapter + } + + // 璁剧疆鍗$墖鐐瑰嚮鐩戝惉鍣� - 鐐瑰嚮鍒楄〃椤规椂鎵ц琛ュ姙鎿嶄綔 + adapter.setOnItemClickListener { cardInfo -> + currentCardInfo = cardInfo + // 鐩存帴鎵ц琛ュ姙鎿嶄綔 + performCardReplace(cardInfo) + } + } + + /** + * 璁剧疆鍒锋柊甯冨眬 + */ + private fun setupRefreshLayout() { + binding.refreshLayout.setOnRefreshLoadMoreListener(object : OnRefreshLoadMoreListener { + override fun onRefresh(refreshLayout: RefreshLayout) { + // 涓嬫媺鍒锋柊锛岄噸缃〉鐮佸苟閲嶆柊鍔犺浇鏁版嵁 + pageCurr = 1 + hasMoreData = true + loadCardReplaceList(true) + } + + override fun onLoadMore(refreshLayout: RefreshLayout) { + // 涓婃媺鍔犺浇鏇村 + if (hasMoreData) { + pageCurr++ + loadCardReplaceList(false) + } else { + // 娌℃湁鏇村鏁版嵁鏃讹紝缁撴潫鍔犺浇鏇村 + refreshLayout.finishLoadMoreWithNoMoreData() + } + } + }) + } + + /** + * 鍔犺浇鍙ˉ鍔炲崱鐗囧垪琛� + * + * @param isRefresh 鏄惁涓哄埛鏂版搷浣滐紙true: 鍒锋柊锛宖alse: 鍔犺浇鏇村锛� + */ + private fun loadCardReplaceList(isRefresh: Boolean = true) { + // 鏋勫缓鏌ヨ鍙傛暟 + val params = HashMap<String, Any>().apply { + put("pageCurr", pageCurr) + put("pageSize", pageSize) + } + + // 璋冪敤API鏌ヨ鎸傚け鍗$墖淇℃伅 + ApiManager.getInstance().requestGetLoading( + this, + "sell/clientcard/getUnreplaced", + CardReplaceResponse::class.java, + params, + object : SubscriberListener<BaseResponse<CardReplaceResponse>>() { + override fun onNext(response: BaseResponse<CardReplaceResponse>) { + // 缁撴潫鍒锋柊鎴栧姞杞芥洿澶氱姸鎬� + finishRefreshOrLoadMore(isRefresh) + + if (response.success) { + val cardResponse = response.content + val cardList = cardResponse?.obj ?: emptyList() + + // 鏇存柊鏁版嵁鍒楄〃 + if (isRefresh) { + adapter.setData(cardList) + } else { + adapter.addData(cardList) + } + + // 鍒ゆ柇鏄惁杩樻湁鏇村鏁版嵁 + hasMoreData = cardList.size >= pageSize + if (!hasMoreData && !isRefresh) { + binding.refreshLayout.finishLoadMoreWithNoMoreData() + } + } else { + ToastUtil.show(response.msg) + } + } + + override fun onError(e: Throwable?) { + // 缁撴潫鍒锋柊鎴栧姞杞芥洿澶氱姸鎬� + finishRefreshOrLoadMore(isRefresh) + ToastUtil.show("鏌ヨ澶辫触: ${e?.message ?: "鏈煡閿欒"}") + } + } + ) + } + + /** + * 缁撴潫鍒锋柊鎴栧姞杞芥洿澶氱姸鎬� + */ + private fun finishRefreshOrLoadMore(isRefresh: Boolean) { + if (isRefresh) { + binding.refreshLayout.finishRefresh() + } else { + binding.refreshLayout.finishLoadMore() + } + } + + /** + * 鎵ц鍗$墖琛ュ姙鎿嶄綔 + */ + private fun performCardReplace(cardInfo: CardReplaceInfo) { + // 杩欓噷瀹炵幇鍗$墖琛ュ姙鐨勪笟鍔¢�昏緫 + ToastUtil.show("閫夋嫨浜嗗崱鐗囪繘琛岃ˉ鍔烇細${cardInfo.cardNum}") + + // TODO: 璋冪敤琛ュ姙鍗$墖API + } +} \ No newline at end of file diff --git a/generallibrary/src/main/java/com/dayu/general/activity/MainActivity.kt b/generallibrary/src/main/java/com/dayu/general/activity/MainActivity.kt index 4e425e0..a57c9ef 100644 --- a/generallibrary/src/main/java/com/dayu/general/activity/MainActivity.kt +++ b/generallibrary/src/main/java/com/dayu/general/activity/MainActivity.kt @@ -1,5 +1,6 @@ package com.dayu.general.activity +import android.content.Intent import android.os.Bundle import android.view.KeyEvent import android.view.LayoutInflater @@ -16,7 +17,7 @@ import com.dayu.general.net.ApiManager import com.dayu.general.net.BaseResponse -class MainActivity : BaseActivity() { +class MainActivity : BaseNfcActivity() { var binding: ActivityMainBinding? = null private val fragments: ArrayList<Fragment> = ArrayList() @@ -30,6 +31,18 @@ initView() initTab() getUserInfo() + } + + override fun onNfcBack(intent: Intent?) { + intent?.let { nfcIntent -> + // 鑾峰彇褰撳墠鏄剧ず鐨凢ragment + val currentFragment = fragments[binding?.viewPager?.currentItem ?: 0] + + // 濡傛灉褰撳墠鏄剧ず鐨勬槸鍏呭�糉ragment锛屽垯灏哊FC淇℃伅浼犻�掔粰瀹冨鐞� + if (currentFragment is RechargeFragment) { + currentFragment.handleNfcIntent(nfcIntent) + } + } } @@ -63,8 +76,8 @@ private fun initView() { binding!!.BSCardLL.setOnClickListener { changeBottomState(Tab.BSC) } - binding!!.rechargeLL.setOnClickListener { changeBottomState(Tab.RECHARGE) } binding!!.myLL.setOnClickListener { changeBottomState(Tab.MY) } + binding!!.rechargeLL.setOnClickListener { changeBottomState(Tab.RECHARGE) } } @@ -153,8 +166,6 @@ } } - - //鐐瑰嚮涓ゆ閫�鍑虹▼搴� 鏈夋椂闂撮棿闅� 闂撮殧鍐呯偣鍑诲垯閫�鍑虹▼搴� 鍚﹀垯 鍒欐彁绀� override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { if (keyCode == KeyEvent.KEYCODE_BACK) { @@ -169,6 +180,4 @@ } return super.onKeyDown(keyCode, event) } - - } \ No newline at end of file diff --git a/generallibrary/src/main/java/com/dayu/general/activity/MyFragment.kt b/generallibrary/src/main/java/com/dayu/general/activity/MyFragment.kt index 0276426..7095fad 100644 --- a/generallibrary/src/main/java/com/dayu/general/activity/MyFragment.kt +++ b/generallibrary/src/main/java/com/dayu/general/activity/MyFragment.kt @@ -1,5 +1,6 @@ package com.dayu.general.activity +import android.content.Intent import android.os.Bundle import android.view.LayoutInflater import android.view.View @@ -22,8 +23,10 @@ ConfirmDialog(requireContext(), "鎻愮ず", "纭畾瑕侀��鍑虹櫥褰曞悧锛�") { logout() }.show() - } + + + return binding?.root } diff --git a/generallibrary/src/main/java/com/dayu/general/activity/RechargeFragment.kt b/generallibrary/src/main/java/com/dayu/general/activity/RechargeFragment.kt index d1c6a49..703ab3f 100644 --- a/generallibrary/src/main/java/com/dayu/general/activity/RechargeFragment.kt +++ b/generallibrary/src/main/java/com/dayu/general/activity/RechargeFragment.kt @@ -1,14 +1,23 @@ package com.dayu.general.activity +import android.content.Intent import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.fragment.app.Fragment +import com.dayu.baselibrary.net.subscribers.SubscriberListener +import com.dayu.baselibrary.tools.nfc.NfcReadAdapter +import com.dayu.baselibrary.utils.ToastUtil +import com.dayu.general.bean.net.CardInfoResult import com.dayu.general.databinding.FragmentRechargeBinding +import com.dayu.general.net.ApiManager +import com.dayu.general.net.BaseResponse class RechargeFragment : Fragment() { var binding: FragmentRechargeBinding? = null + private var cardNumber: String? = null + private var cardInfo: CardInfoResult? = null override fun onCreateView( inflater: LayoutInflater, @@ -16,6 +25,121 @@ savedInstanceState: Bundle? ): View? { binding = FragmentRechargeBinding.inflate(inflater, container, false) - return binding?.root; + return binding?.root } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + initView() + + } + + private fun initView() { + // 鍒濆鍖栫晫闈㈡樉绀鸿鍗$姸鎬� + binding?.rechargeReadLL?.visibility = View.VISIBLE + binding?.rechargeTextLL?.visibility = View.GONE + } + + + + private fun resetView() { + // 閲嶇疆鐣岄潰鏄剧ず璇诲崱鐘舵�� + binding?.rechargeReadLL?.visibility = View.VISIBLE + binding?.rechargeTextLL?.visibility = View.GONE + cardInfo = null + } + + /** + * 澶勭悊NFC鍒峰崱淇℃伅 + * 璇ユ柟娉曠敱MainActivity璋冪敤 + */ + fun handleNfcIntent(intent: Intent) { + activity?.let { activity -> + try { + // 浣跨敤NfcReadAdapter璇诲彇鍗″彿 + val nfcAdapter = NfcReadAdapter(intent, activity) + cardNumber = nfcAdapter.cardNumber + + if (cardNumber.isNullOrEmpty()) { + ToastUtil.show("璇诲崱澶辫触锛岃閲嶆柊鍒峰崱") + return + } + + // 鏄剧ず璇诲埌鐨勫崱鍙� + binding?.redInitCode?.text = cardNumber + + // 鏍规嵁鍗″彿鑾峰彇鍗$墖璇︾粏淇℃伅 + getCardInfo(cardNumber!!) + } catch (e: Exception) { + ToastUtil.show("璇诲崱寮傚父锛�${e.message}") + e.printStackTrace() + } + } + } + + /** + * 鑾峰彇鍗$墖璇︾粏淇℃伅 + */ + private fun getCardInfo(cardNumber: String) { + activity?.let { activity -> + ApiManager.getInstance().requestGetLoading( + activity, + "card/getCardInfo/$cardNumber", // 鍋囪API璺緞 + CardInfoResult::class.java, + null, + object : SubscriberListener<BaseResponse<CardInfoResult>>() { + override fun onNext(t: BaseResponse<CardInfoResult>) { + if (t.success) { + // 淇濆瓨鍗$墖淇℃伅 + cardInfo = t.content + // 鏄剧ず鍗$墖淇℃伅 + displayCardInfo(t.content) + } else { + // 澶勭悊鑾峰彇澶辫触鐨勬儏鍐� + ToastUtil.show(t.msg) + binding?.redStatu?.text = "鍗$姸鎬佸紓甯�" + } + } + + override fun onError(e: Throwable?) { + super.onError(e) + ToastUtil.show("鑾峰彇鍗′俊鎭け璐�: ${e?.message ?: "鏈煡閿欒"}") + } + } + ) + } + } + + /** + * 鏄剧ず鍗$墖淇℃伅 + */ + private fun displayCardInfo(cardInfo: CardInfoResult?) { + if (cardInfo == null) { + ToastUtil.show("鍗′俊鎭负绌�") + return + } + + // 鍒囨崲鍒版樉绀轰俊鎭晫闈� + binding?.rechargeReadLL?.visibility = View.GONE + binding?.rechargeTextLL?.visibility = View.VISIBLE + + // 璁剧疆鍗$墖淇℃伅 + binding?.userName?.text = cardInfo.userName ?: "" + binding?.redUserCode?.text = cardInfo.userCode ?: "" + binding?.redRemainderBlance?.text = "${cardInfo.balance ?: 0} 鍏�" + + // 璁剧疆鍗$姸鎬� + val cardStatus = when(cardInfo.status) { + 1 -> "姝e父" + 2 -> "鎸傚け" + 3 -> "閿佸畾" + else -> "鏈煡" + } + binding?.redStatu?.text = cardStatus + + + } + + + } \ No newline at end of file diff --git a/generallibrary/src/main/java/com/dayu/general/adapter/CardReplaceAdapter.kt b/generallibrary/src/main/java/com/dayu/general/adapter/CardReplaceAdapter.kt new file mode 100644 index 0000000..b46a848 --- /dev/null +++ b/generallibrary/src/main/java/com/dayu/general/adapter/CardReplaceAdapter.kt @@ -0,0 +1,110 @@ +package com.dayu.general.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.ViewGroup +import androidx.databinding.DataBindingUtil +import androidx.recyclerview.widget.RecyclerView +import com.dayu.baselibrary.databinding.ItemNoMoreBinding +import com.dayu.general.bean.net.CardReplaceInfo +import com.dayu.general.databinding.ItemCardReplaceBinding + +/** + * 鍗$墖琛ュ姙閫傞厤鍣� + */ +class CardReplaceAdapter(private val context: Context) : BaseRecycleAdapter<RecyclerView.ViewHolder>() { + + // 鍗$墖琛ュ姙鍒楄〃鏁版嵁 + private var cardList: List<CardReplaceInfo> = emptyList() + + // 鐐瑰嚮鐩戝惉鍣� - 鐢ㄤ簬閫夋嫨瑕佽ˉ鍔炵殑鍗$墖 + private var onItemClickListener: ((CardReplaceInfo) -> Unit)? = null + + /** + * 璁剧疆鏂版暟鎹紙閲嶇疆锛� + */ + fun setData(data: List<CardReplaceInfo>) { + cardList = data + notifyDataSetChanged() + } + + /** + * 娣诲姞鏇村鏁版嵁锛堝垎椤靛姞杞斤級 + */ + fun addData(data: List<CardReplaceInfo>) { + val oldSize = cardList.size + cardList = cardList + data + notifyItemRangeInserted(oldSize, data.size) + } + + /** + * 璁剧疆椤圭偣鍑荤洃鍚櫒 - 鐢ㄤ簬閫夋嫨鍗$墖杩涜琛ュ姙 + */ + fun setOnItemClickListener(listener: (CardReplaceInfo) -> Unit) { + onItemClickListener = listener + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { + return if (viewType == VIEW_TYPE_EMPTY) { + // 绌鸿鍥� + val emptyView: ItemNoMoreBinding = DataBindingUtil.inflate( + (context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater), + com.dayu.baselibrary.R.layout.item_no_more, + parent, + false + ) + ViewHolderEmpty(emptyView) + } else { + // 鍗$墖椤硅鍥� + val binding = ItemCardReplaceBinding.inflate( + context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater, + parent, + false + ) + CardViewHolder(binding) + } + } + + override fun getItemViewType(position: Int): Int { + return if (cardList.isEmpty()) { + VIEW_TYPE_EMPTY + } else { + VIEW_TYPE_ITEM + } + } + + override fun getItemCount(): Int { + return if (cardList.isEmpty()) { + 1 // 鏄剧ず绌鸿鍥� + } else { + cardList.size + } + } + + override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { + if (holder is ViewHolderEmpty) { + // 绌鸿鍥炬棤闇�缁戝畾鏁版嵁 + return + } + + if (holder is CardViewHolder) { + val card = cardList[position] + holder.bind(card) + + // 璁剧疆鏁翠釜椤圭殑鐐瑰嚮浜嬩欢锛岀敤浜庨�夋嫨瑕佽ˉ鍔炵殑鍗$墖 + holder.itemView.setOnClickListener { + onItemClickListener?.invoke(card) + } + } + } + + /** + * 鍗$墖瑙嗗浘鎸佹湁鑰� + */ + inner class CardViewHolder(val binding: ItemCardReplaceBinding) : RecyclerView.ViewHolder(binding.root) { + fun bind(card: CardReplaceInfo) { + binding.cardInfo = card + binding.executePendingBindings() + } + } +} \ No newline at end of file diff --git a/generallibrary/src/main/java/com/dayu/general/bean/db/CardRegistrationBean.kt b/generallibrary/src/main/java/com/dayu/general/bean/db/CardRegistrationBean.kt index e758469..7e2f26f 100644 --- a/generallibrary/src/main/java/com/dayu/general/bean/db/CardRegistrationBean.kt +++ b/generallibrary/src/main/java/com/dayu/general/bean/db/CardRegistrationBean.kt @@ -17,5 +17,6 @@ val orderId: String? = null, // 璁㈠崟id锛屽垵濮嬩负null锛屽悗缁洿鏂� val isReported: Boolean = false, // 鏄惁涓婃姤鎴愬姛 val isCardWritten: Boolean = false, // 鏄惁鍐欏崱鎴愬姛 + val operatorId: String = "", // 鎿嶄綔浜篿d val createTime: Long = System.currentTimeMillis() // 鍒涘缓鏃堕棿 ) \ No newline at end of file diff --git a/generallibrary/src/main/java/com/dayu/general/bean/db/RechargeRecordBean.kt b/generallibrary/src/main/java/com/dayu/general/bean/db/RechargeRecordBean.kt new file mode 100644 index 0000000..584e130 --- /dev/null +++ b/generallibrary/src/main/java/com/dayu/general/bean/db/RechargeRecordBean.kt @@ -0,0 +1,21 @@ +package com.dayu.general.bean.db + +import androidx.room.Entity +import androidx.room.PrimaryKey + +@Entity(tableName = "recharge_record") +data class RechargeRecordBean( + @PrimaryKey(autoGenerate = true) + val id: Long = 0, + val cardNumber: String, // 姘村崱缂栧彿 + val balance: Double, // 浣欓 + val rechargeAmount: Double, // 鍏呭�奸噾棰� + val bonusAmount: Double, // 璧犻�侀噾棰� + val paymentMethod: Int, // 鏀粯鏂瑰紡 + val waterPrice: Double, // 姘翠环 + val remark: String, // 澶囨敞 + val operatorId: String, // 鎿嶄綔浜篿d + val orderId: String? = null, // 璁㈠崟id锛屽垵濮嬩负null锛屽悗缁洿鏂� + val isReported: Boolean = false, // 鏄惁涓婃姤鎴愬姛 + val createTime: Long = System.currentTimeMillis() // 鍒涘缓鏃堕棿 +) \ No newline at end of file diff --git a/generallibrary/src/main/java/com/dayu/general/bean/net/CardInfoResult.kt b/generallibrary/src/main/java/com/dayu/general/bean/net/CardInfoResult.kt new file mode 100644 index 0000000..cb1e39b --- /dev/null +++ b/generallibrary/src/main/java/com/dayu/general/bean/net/CardInfoResult.kt @@ -0,0 +1,16 @@ +package com.dayu.general.bean.net + +/** + * 鍗$墖淇℃伅缁撴灉瀹炰綋绫� + */ +data class CardInfoResult( + val cardId: String? = null, // 鍗″彿 + val userName: String? = null, // 鐢ㄦ埛濮撳悕 + val userCode: String? = null, // 鐢ㄦ埛缂栧彿 + val phone: String? = null, // 鎵嬫満鍙� + val address: String? = null, // 鍦板潃 + val balance: Double? = 0.0, // 浣欓 + val status: Int? = 0, // 鍗$姸鎬�: 1-姝e父, 2-鎸傚け, 3-閿佸畾 + val createTime: String? = null, // 鍒涘缓鏃堕棿 + val updateTime: String? = null // 鏇存柊鏃堕棿 +) \ No newline at end of file diff --git a/generallibrary/src/main/java/com/dayu/general/bean/net/CardReplaceInfo.kt b/generallibrary/src/main/java/com/dayu/general/bean/net/CardReplaceInfo.kt new file mode 100644 index 0000000..c5f3e14 --- /dev/null +++ b/generallibrary/src/main/java/com/dayu/general/bean/net/CardReplaceInfo.kt @@ -0,0 +1,28 @@ +package com.dayu.general.bean.net + +/** + * 鍗$墖琛ュ姙淇℃伅瀹炰綋绫� + * 瀵瑰簲鎺ュ彛杩斿洖鐨勫崱鐗囪ˉ鍔炰俊鎭暟鎹� + */ +data class CardReplaceResponse( + val itemTotal: Int = 0, + val obj: List<CardReplaceInfo> = emptyList(), + val pageCurr: Int = 0, + val pageSize: Int = 0, + val pageTotal: Int = 0 +) + +/** + * 鍗$墖琛ュ姙淇℃伅 + */ +data class CardReplaceInfo( + val cardNum: String = "", // 鍗″彿 + val cardState: Int = 0, // 鍗$墖鐘舵�佺爜 + val cardType: String = "", // 鍗$墖绫诲瀷 + val clientName: String = "", // 瀹㈡埛濮撳悕 + val clientNum: String = "", // 瀹㈡埛缂栧彿 + val idCard: String = "", // 韬唤璇佸彿 + val money: String = "", // 鍗″唴浣欓 + val phone: String = "", // 鎵嬫満鍙风爜 + val stateName: String = "" // 鍗$墖鐘舵�佸悕绉� +) \ No newline at end of file diff --git a/generallibrary/src/main/java/com/dayu/general/dao/AppDataBase.kt b/generallibrary/src/main/java/com/dayu/general/dao/AppDataBase.kt index a8de4ec..f8cfcb7 100644 --- a/generallibrary/src/main/java/com/dayu/general/dao/AppDataBase.kt +++ b/generallibrary/src/main/java/com/dayu/general/dao/AppDataBase.kt @@ -6,10 +6,12 @@ import com.dayu.general.bean.db.CardRegistrationBean import com.dayu.general.bean.db.PassWordCardBean import com.dayu.general.bean.db.ProjectDataBean +import com.dayu.general.bean.db.RechargeRecordBean -@Database(entities = [PassWordCardBean::class, CardData::class, ProjectDataBean::class, CardRegistrationBean::class], version = 2, exportSchema = false) +@Database(entities = [PassWordCardBean::class, CardData::class, ProjectDataBean::class, CardRegistrationBean::class, RechargeRecordBean::class], version = 4, exportSchema = false) abstract class AppDataBase : RoomDatabase() { abstract fun cardDataDao(): CardDataDao abstract fun projectDataDao(): ProjectDataDao abstract fun cardRegistrationDao(): CardRegistrationDao + abstract fun rechargeRecordDao(): RechargeRecordDao } \ No newline at end of file diff --git a/generallibrary/src/main/java/com/dayu/general/dao/BaseDaoSingleton.kt b/generallibrary/src/main/java/com/dayu/general/dao/BaseDaoSingleton.kt index 9ed72b7..a58d63f 100644 --- a/generallibrary/src/main/java/com/dayu/general/dao/BaseDaoSingleton.kt +++ b/generallibrary/src/main/java/com/dayu/general/dao/BaseDaoSingleton.kt @@ -3,7 +3,8 @@ import android.content.Context import android.os.Environment import androidx.room.Room -import com.dayu.general.activity.BaseActivity +import androidx.room.migration.Migration +import androidx.sqlite.db.SupportSQLiteDatabase import java.io.File class BaseDaoSingleton { @@ -14,6 +15,15 @@ @JvmField val SqlitePath: String = Environment.getExternalStorageDirectory().absolutePath + File.separator + ".dayu" + File.separator + "data" + File.separator + + // 鏁版嵁搴撹縼绉荤瓥鐣ワ細浠庣増鏈�3杩佺Щ鍒扮増鏈�4 + private val MIGRATION_3_4 = object : Migration(3, 4) { + override fun migrate(database: SupportSQLiteDatabase) { + // 杩欓噷涓嶉渶瑕佸疄闄呯殑鏁版嵁搴撶粨鏋勪慨鏀癸紝鍥犱负鎴戜滑鍙槸鏇存柊浜哛oom鐗堟湰 + // 濡傛灉闇�瑕佷慨鏀规暟鎹簱缁撴瀯锛屽彲浠ュ湪杩欓噷娣诲姞 ALTER TABLE 璇彞 + } + } + fun getInstance(context: Context): AppDataBase { if (baseDao == null) { baseDao = Room.databaseBuilder<AppDataBase>( @@ -24,15 +34,26 @@ } return baseDao as AppDataBase } - fun getAsynchInstance(context: Context?): AppDataBase? { + fun getAsynchInstance(context: Context): AppDataBase { if (AsynchBaseDao == null) { - AsynchBaseDao = Room.databaseBuilder<AppDataBase>( - context!!, - AppDataBase::class.java, - SqlitePath + "ConfigurationData_generalV1" - ).build() + synchronized(this) { + if (AsynchBaseDao == null) { + AsynchBaseDao = Room.databaseBuilder( + context.applicationContext, + AppDataBase::class.java, + "GeneralLibrary.db" + ) + .addMigrations(MIGRATION_3_4) // 娣诲姞杩佺Щ绛栫暐 + .build() + } + } } - return AsynchBaseDao + return AsynchBaseDao as AppDataBase + } + + // 閿�姣佹暟鎹簱瀹炰緥 + fun destroyInstance() { + AsynchBaseDao = null } } diff --git a/generallibrary/src/main/java/com/dayu/general/dao/RechargeRecordDao.kt b/generallibrary/src/main/java/com/dayu/general/dao/RechargeRecordDao.kt new file mode 100644 index 0000000..892faad --- /dev/null +++ b/generallibrary/src/main/java/com/dayu/general/dao/RechargeRecordDao.kt @@ -0,0 +1,35 @@ +package com.dayu.general.dao + +import androidx.room.Dao +import androidx.room.Insert +import androidx.room.OnConflictStrategy +import androidx.room.Query +import androidx.room.Update +import com.dayu.general.bean.db.RechargeRecordBean + +@Dao +interface RechargeRecordDao { + @Insert(onConflict = OnConflictStrategy.REPLACE) + fun insert(rechargeRecord: RechargeRecordBean) + + @Insert(onConflict = OnConflictStrategy.REPLACE) + fun insertAll(rechargeRecords: List<RechargeRecordBean>) + + @Update + fun update(rechargeRecord: RechargeRecordBean) + + @Query("SELECT * FROM recharge_record WHERE id = :id") + fun findById(id: Long): RechargeRecordBean? + + @Query("SELECT * FROM recharge_record WHERE cardNumber = :cardNumber ORDER BY createTime DESC") + fun findByCardNumber(cardNumber: String): List<RechargeRecordBean> + + @Query("SELECT * FROM recharge_record WHERE isReported = 0") + fun findUnreportedRecords(): List<RechargeRecordBean> + + @Query("UPDATE recharge_record SET isReported = 1 WHERE id = :id") + fun markAsReported(id: Long) + + @Query("SELECT * FROM recharge_record ORDER BY createTime DESC") + fun getAllRecords(): List<RechargeRecordBean> +} \ No newline at end of file diff --git a/generallibrary/src/main/java/com/dayu/general/net/ApiManager.kt b/generallibrary/src/main/java/com/dayu/general/net/ApiManager.kt index ded47e8..79e1dae 100644 --- a/generallibrary/src/main/java/com/dayu/general/net/ApiManager.kt +++ b/generallibrary/src/main/java/com/dayu/general/net/ApiManager.kt @@ -2,6 +2,7 @@ import android.content.Context import android.util.Log +import com.dayu.baselibrary.business.BusinessProvider import com.dayu.baselibrary.net.subscribers.ProgressSubscriber import com.dayu.baselibrary.net.subscribers.SubscriberListener import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers @@ -120,13 +121,13 @@ observable .subscribeOn(Schedulers.io()) - .map(mapResponse(tClass)) + .map(mapResponse(context, tClass)) .unsubscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(mySubscriber) } - private fun <T> mapResponse(tClass: Class<T>): Function<Any, BaseResponse<T>> { + private fun <T> mapResponse(context: Context, tClass: Class<T>): Function<Any, BaseResponse<T>> { return Function { rawResponse -> when (rawResponse) { is BaseResponse<*> -> { @@ -142,7 +143,7 @@ // 澶勭悊token澶辨晥鐨勬儏鍐� if (temp.code == NetConstans.TOKEN_INVALID) { // 鍙互鍦ㄨ繖閲屾坊鍔犻噸瀹氬悜鍒扮櫥褰曢〉闈㈢殑閫昏緫 - // redirectToLogin() + BusinessProvider.getBusinessProvider().startLoginNavigotor.navigateToLogin(context) return@Function response } diff --git a/generallibrary/src/main/res/drawable/bottom_tab_bg.xml b/generallibrary/src/main/res/drawable/bottom_tab_bg.xml new file mode 100644 index 0000000..3359b1e --- /dev/null +++ b/generallibrary/src/main/res/drawable/bottom_tab_bg.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8"?> +<shape xmlns:android="http://schemas.android.com/apk/res/android" + android:shape="rectangle"> + <solid android:color="@color/bottom_color" /> + <corners android:radius="0dp" /> + <stroke android:width="0.5dp" android:color="#10000000" /> +</shape> \ No newline at end of file diff --git a/generallibrary/src/main/res/drawable/bottom_tab_selected.xml b/generallibrary/src/main/res/drawable/bottom_tab_selected.xml new file mode 100644 index 0000000..ebf62bd --- /dev/null +++ b/generallibrary/src/main/res/drawable/bottom_tab_selected.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="utf-8"?> +<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> + <item> + <shape android:shape="rectangle"> + <solid android:color="@color/bottom_color" /> + </shape> + </item> + <item android:gravity="bottom" android:left="15dp" android:right="15dp"> + <shape android:shape="rectangle"> + <solid android:color="#4285F4" /> + <size android:height="2dp" /> + </shape> + </item> +</layer-list> \ No newline at end of file diff --git a/generallibrary/src/main/res/drawable/bottom_tab_selector.xml b/generallibrary/src/main/res/drawable/bottom_tab_selector.xml new file mode 100644 index 0000000..2e94f9a --- /dev/null +++ b/generallibrary/src/main/res/drawable/bottom_tab_selector.xml @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="utf-8"?> +<selector xmlns:android="http://schemas.android.com/apk/res/android"> + <item android:state_pressed="true"> + <shape android:shape="rectangle"> + <solid android:color="#20000000" /> + </shape> + </item> + <item android:state_focused="true"> + <shape android:shape="rectangle"> + <solid android:color="#10000000" /> + </shape> + </item> +</selector> \ No newline at end of file diff --git a/generallibrary/src/main/res/drawable/recharge_button_ripple.xml b/generallibrary/src/main/res/drawable/recharge_button_ripple.xml new file mode 100644 index 0000000..782e8f2 --- /dev/null +++ b/generallibrary/src/main/res/drawable/recharge_button_ripple.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="utf-8"?> +<ripple xmlns:android="http://schemas.android.com/apk/res/android" + android:color="#40FFFFFF"> + <item android:id="@android:id/mask"> + <shape android:shape="rectangle"> + <solid android:color="#FFFFFF" /> + <corners android:radius="8dp" /> + </shape> + </item> + <item android:drawable="@drawable/rounded_button_bg" /> +</ripple> \ No newline at end of file diff --git a/generallibrary/src/main/res/drawable/tab_indicator.xml b/generallibrary/src/main/res/drawable/tab_indicator.xml index ebc4a03..1a396ab 100644 --- a/generallibrary/src/main/res/drawable/tab_indicator.xml +++ b/generallibrary/src/main/res/drawable/tab_indicator.xml @@ -3,5 +3,5 @@ android:shape="rectangle"> <solid android:color="#4285F4" /> <corners android:radius="2dp" /> - <size android:height="3dp" android:width="20dp" /> + <size android:height="3dp" /> </shape> \ No newline at end of file diff --git a/generallibrary/src/main/res/drawable/tab_selector_background.xml b/generallibrary/src/main/res/drawable/tab_selector_background.xml new file mode 100644 index 0000000..ffe9536 --- /dev/null +++ b/generallibrary/src/main/res/drawable/tab_selector_background.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8"?> +<selector xmlns:android="http://schemas.android.com/apk/res/android"> + <item android:drawable="@drawable/bottom_tab_selected" android:state_selected="true" /> + <item android:drawable="@drawable/bottom_tab_bg" /> +</selector> \ No newline at end of file diff --git a/generallibrary/src/main/res/drawable/text_color_selector.xml b/generallibrary/src/main/res/drawable/text_color_selector.xml new file mode 100644 index 0000000..00179aa --- /dev/null +++ b/generallibrary/src/main/res/drawable/text_color_selector.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8"?> +<selector xmlns:android="http://schemas.android.com/apk/res/android"> + <item android:color="#4285F4" android:state_selected="true" /> + <item android:color="#333333" /> +</selector> \ No newline at end of file diff --git a/generallibrary/src/main/res/layout/activity_card_replace.xml b/generallibrary/src/main/res/layout/activity_card_replace.xml new file mode 100644 index 0000000..9d31abe --- /dev/null +++ b/generallibrary/src/main/res/layout/activity_card_replace.xml @@ -0,0 +1,49 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + + android:layout_width="match_parent" + android:layout_height="match_parent" + android:background="@color/white" + android:orientation="vertical"> + + <com.dayu.baselibrary.view.TitleBar + android:id="@+id/titleBar" + android:layout_width="match_parent" + android:layout_height="@dimen/dimen_title_height" + app:centerText="琛ュ崱" /> + + + + <FrameLayout + android:layout_width="match_parent" + android:layout_height="0dp" + android:layout_weight="1"> + + <com.scwang.smart.refresh.layout.SmartRefreshLayout + android:id="@+id/refreshLayout" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout_below="@+id/titleBar"> + + <com.scwang.smart.refresh.header.ClassicsHeader + android:layout_width="match_parent" + android:layout_height="wrap_content" /> + + <androidx.recyclerview.widget.RecyclerView + android:id="@+id/recyclerView" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:background="@color/base_list_bg" + android:overScrollMode="never" + android:padding="10dp" /> + + <com.scwang.smart.refresh.footer.ClassicsFooter + android:layout_width="match_parent" + android:layout_height="wrap_content" /> + </com.scwang.smart.refresh.layout.SmartRefreshLayout> + + + </FrameLayout> + +</LinearLayout> \ No newline at end of file diff --git a/generallibrary/src/main/res/layout/activity_main.xml b/generallibrary/src/main/res/layout/activity_main.xml index e655d2c..cd5ed8a 100644 --- a/generallibrary/src/main/res/layout/activity_main.xml +++ b/generallibrary/src/main/res/layout/activity_main.xml @@ -1,6 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" + xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#ffffff"> @@ -12,115 +13,117 @@ android:layout_height="match_parent" android:layout_above="@id/bottom_navigation" /> + <!-- 搴曢儴瀵艰埅闃村奖 --> + <View + android:layout_width="match_parent" + android:layout_height="3dp" + android:layout_above="@id/bottom_navigation" + android:background="@drawable/shadow_gradient" /> <LinearLayout android:id="@+id/bottom_navigation" android:layout_width="match_parent" - android:layout_height="70dp" + android:layout_height="55dp" android:layout_alignParentBottom="true" - android:layout_marginTop="-20dp" - android:background="#00ffffff" + android:background="#FFFFFF" + android:elevation="8dp" android:gravity="bottom" android:orientation="horizontal"> <LinearLayout android:id="@+id/BSCardLL" android:layout_width="0dp" - android:layout_height="50dp" + android:layout_height="match_parent" android:layout_weight="1" - android:background="@color/bottom_color" + android:background="@drawable/tab_selector_background" + android:clickable="true" + android:focusable="true" + android:foreground="@drawable/bottom_tab_selector" android:gravity="center" android:orientation="vertical"> - <RelativeLayout - android:layout_width="25dp" - android:layout_height="33dp"> - <ImageView - android:id="@+id/BSCardImg" - android:layout_width="wrap_content" - android:layout_height="25dp" - android:layout_marginTop="8dp" - android:src="@drawable/bottom_card_black" /> + <ImageView + android:id="@+id/BSCardImg" + android:layout_width="24dp" + android:layout_height="24dp" + android:layout_marginTop="6dp" + android:src="@drawable/bottom_card_black" /> - - </RelativeLayout> <TextView android:id="@+id/BSCardText" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:layout_marginTop="2dp" android:layout_marginBottom="3dp" android:text="鍒跺崱" - + android:textColor="@drawable/text_color_selector" android:textSize="12sp" /> </LinearLayout> - <FrameLayout + + <LinearLayout android:id="@+id/rechargeLL" android:layout_width="0dp" android:layout_height="match_parent" + android:layout_gravity="center" android:layout_weight="1" - android:gravity="bottom" + android:background="@drawable/tab_selector_background" + android:clickable="true" + android:focusable="true" + android:foreground="@drawable/bottom_tab_selector" + android:gravity="center" android:orientation="vertical"> - <View - android:layout_width="match_parent" - android:layout_height="50dp" - android:layout_gravity="bottom" - android:background="@color/bottom_color" - android:orientation="vertical" /> + <ImageView + android:id="@+id/rechargeImg" + android:layout_width="24dp" + android:layout_height="24dp" + android:layout_marginTop="6dp" + android:src="@drawable/bottom_recharge_white" /> - <LinearLayout - android:layout_width="80dp" - android:layout_height="70dp" - android:layout_gravity="center" - android:background="@drawable/bottom_circle_bg" - android:gravity="center" - android:orientation="vertical"> + <TextView + android:id="@+id/rechargeText" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="2dp" + android:layout_marginBottom="3dp" + android:text="鍏呭��" + android:textColor="@color/white" + android:textSize="12sp" /> - <ImageView - android:id="@+id/rechargeImg" - android:layout_width="40dp" - android:layout_height="40dp" - android:layout_marginTop="8dp" - android:src="@drawable/bottom_recharge_white" /> + </LinearLayout> - <TextView - android:id="@+id/rechargeText" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:text="鍏呭��" - android:textColor="@color/white" - android:textSize="15sp" /> - - </LinearLayout> - - </FrameLayout> <LinearLayout android:id="@+id/myLL" android:layout_width="0dp" - android:layout_height="50dp" + android:layout_height="match_parent" android:layout_weight="1" - android:background="@color/bottom_color" + android:background="@drawable/tab_selector_background" + android:clickable="true" + android:focusable="true" + android:foreground="@drawable/bottom_tab_selector" android:gravity="center" android:orientation="vertical"> <ImageView android:id="@+id/myImg" - android:layout_width="wrap_content" - android:layout_height="25dp" - android:layout_marginTop="8dp" + android:layout_width="24dp" + android:layout_height="24dp" + android:layout_marginTop="6dp" android:src="@drawable/bottom_my_black" /> <TextView android:id="@+id/myText" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:layout_marginTop="2dp" android:layout_marginBottom="3dp" android:text="鎴戠殑" + android:textColor="@drawable/text_color_selector" android:textSize="12sp" /> </LinearLayout> diff --git a/generallibrary/src/main/res/layout/fragment_card.xml b/generallibrary/src/main/res/layout/fragment_card.xml index fbc41d1..b0cff9a 100644 --- a/generallibrary/src/main/res/layout/fragment_card.xml +++ b/generallibrary/src/main/res/layout/fragment_card.xml @@ -263,7 +263,7 @@ <ImageView android:layout_width="55dp" android:layout_height="55dp" - android:src="@drawable/home_system" /> + android:src="@drawable/chongzheng" /> <TextView android:layout_width="wrap_content" @@ -302,7 +302,7 @@ <ImageView android:layout_width="55dp" android:layout_height="55dp" - android:src="@drawable/home_system" /> + android:src="@drawable/bukou" /> <TextView android:layout_width="wrap_content" @@ -341,7 +341,7 @@ <ImageView android:layout_width="55dp" android:layout_height="55dp" - android:src="@drawable/home_system" /> + android:src="@drawable/fanxie" /> <TextView android:layout_width="wrap_content" diff --git a/generallibrary/src/main/res/layout/fragment_my.xml b/generallibrary/src/main/res/layout/fragment_my.xml index 87243eb..5140657 100644 --- a/generallibrary/src/main/res/layout/fragment_my.xml +++ b/generallibrary/src/main/res/layout/fragment_my.xml @@ -331,35 +331,6 @@ android:src="@drawable/ic_arrow_right"/> </RelativeLayout> - <TextView - android:id="@+id/sys_ip" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_marginBottom="12dp" - android:background="#F9F9F9" - android:drawableStart="@android:drawable/ic_menu_manage" - android:drawablePadding="8dp" - android:drawableTint="#666666" - android:padding="12dp" - android:text="IP璁剧疆" - android:textColor="#333333" - android:textSize="@dimen/text_size" - android:visibility="gone" /> - - <TextView - android:id="@+id/card_replacement" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_marginBottom="12dp" - android:background="#F9F9F9" - android:drawableStart="@android:drawable/ic_menu_edit" - android:drawablePadding="8dp" - android:drawableTint="#666666" - android:padding="12dp" - android:text="鐢ㄦ埛琛ュ崱" - android:textColor="#333333" - android:textSize="@dimen/text_size" - android:visibility="gone" /> <TextView android:id="@+id/my_psw" @@ -376,19 +347,7 @@ android:textSize="@dimen/text_size" android:visibility="gone" /> - <TextView - android:id="@+id/my_testConnect" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:background="#F9F9F9" - android:drawableStart="@android:drawable/ic_menu_compass" - android:drawablePadding="8dp" - android:drawableTint="#666666" - android:padding="12dp" - android:text="鏈繛鎺ユ暟鎹腑蹇�" - android:textColor="#333333" - android:textSize="@dimen/text_size" - android:visibility="gone" /> + </LinearLayout> </androidx.cardview.widget.CardView> </LinearLayout> diff --git a/generallibrary/src/main/res/layout/fragment_recharge.xml b/generallibrary/src/main/res/layout/fragment_recharge.xml index e9971e8..0c190b0 100644 --- a/generallibrary/src/main/res/layout/fragment_recharge.xml +++ b/generallibrary/src/main/res/layout/fragment_recharge.xml @@ -3,54 +3,73 @@ xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" - android:background="#F5F5F5"> + android:background="@color/base_green_bg"> - <com.dayu.baselibrary.view.TitleBar - android:id="@+id/titleBar" - android:layout_width="match_parent" - android:layout_height="@dimen/dimen_title_height" - android:background="@color/title_bar_bg" - android:elevation="4dp" - app:centerText="鎴戠殑" /> <LinearLayout android:id="@+id/recharge_read_LL" android:layout_width="match_parent" android:layout_height="match_parent" - android:layout_below="@+id/titleBar" + android:gravity="center" android:orientation="vertical" android:visibility="visible"> <androidx.cardview.widget.CardView android:layout_width="match_parent" - android:layout_height="wrap_content" + android:layout_height="match_parent" android:layout_margin="16dp" app:cardCornerRadius="8dp" + app:cardElevation="2dp"> - <LinearLayout + <RelativeLayout android:layout_width="match_parent" - android:layout_height="wrap_content" - android:orientation="vertical" + android:layout_height="match_parent" android:padding="16dp"> <TextView + android:id="@+id/text1" android:layout_width="match_parent" android:layout_height="wrap_content" + android:layout_alignParentTop="true" + android:layout_marginTop="10dp" android:layout_marginBottom="16dp" android:gravity="center" - android:text="璇峰皢鍗¤创鍦ㄨ澶囦笂杩涜璇诲崱" - android:textColor="#333333" - android:textSize="@dimen/text_size" + android:text="鍏呭�艰鍗�" + android:textColor="@color/base_blue_bg" + android:textSize="@dimen/big_text_size" android:textStyle="bold" /> - <ImageView - android:layout_width="200dp" - android:layout_height="200dp" - android:layout_gravity="center" - android:scaleType="fitCenter" - android:src="@mipmap/nfc_write" /> - </LinearLayout> + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_centerVertical="true" + android:orientation="vertical"> + + <TextView + android:id="@+id/textView2" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_centerVertical="true" + android:layout_marginBottom="40dp" + android:gravity="center" + + android:text="璇峰皢鍗¤创鍦ㄨ澶囦笂杩涜璇诲崱" + android:textColor="#333333" + android:textSize="@dimen/text_size" + android:textStyle="bold" /> + + <ImageView + android:layout_width="200dp" + android:layout_height="200dp" + android:layout_below="@+id/textView2" + android:layout_centerHorizontal="true" + android:layout_gravity="center" + android:scaleType="fitCenter" + android:src="@mipmap/nfc_write" /> + </LinearLayout> + + </RelativeLayout> </androidx.cardview.widget.CardView> </LinearLayout> @@ -58,8 +77,8 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:layout_above="@+id/recharge_registBtn" - android:layout_below="@+id/header_layout" - android:fillViewport="true"> + android:fillViewport="true" + android:visibility="gone"> <LinearLayout android:layout_width="match_parent" @@ -72,68 +91,13 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" - android:visibility="gone"> + android:visibility="visible"> + <androidx.cardview.widget.CardView android:layout_width="match_parent" android:layout_height="wrap_content" - - app:cardCornerRadius="8dp" - app:cardElevation="2dp"> - - <LinearLayout - android:id="@+id/recharge_LL" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:orientation="vertical" - android:padding="16dp"> - - - <TextView - android:id="@+id/red_recharge_water" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_marginBottom="8dp" - android:text="鍏呭�兼按閲忥細" - android:textColor="#333333" - android:textSize="@dimen/text_size" - android:visibility="gone" /> - - <LinearLayout - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:background="#F9F9F9" - android:orientation="vertical" - android:padding="12dp"> - - <TextView - android:id="@+id/recharge_tx" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_marginBottom="8dp" - android:text="鍏呭�奸噾棰濓紙鍏冿級锛�" - android:textColor="@color/red" - android:textSize="@dimen/new_card_size" - android:textStyle="bold" /> - - <EditText - android:id="@+id/recharge_water" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:background="@android:color/white" - android:hint="璇疯緭鍏ュ厖鍊肩殑閲戦" - android:inputType="numberDecimal" - android:padding="12dp" - android:textSize="@dimen/new_card_size" /> - </LinearLayout> - </LinearLayout> - </androidx.cardview.widget.CardView> - - <androidx.cardview.widget.CardView - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_marginTop="15dp" - android:layout_marginBottom="16dp" + android:layout_marginBottom="10dp" app:cardCornerRadius="8dp" app:cardElevation="2dp"> @@ -141,7 +105,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" - android:padding="16dp"> + android:padding="12dp"> <TextView android:layout_width="match_parent" @@ -155,49 +119,7 @@ <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginBottom="8dp" - android:orientation="horizontal"> - - <TextView - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:text="鍗$姸鎬侊細" - android:textColor="#666666" - android:textSize="@dimen/text_size" /> - - <TextView - android:id="@+id/red_statu" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:textColor="@color/red" - android:textSize="@dimen/new_card_size" /> - </LinearLayout> - - <LinearLayout - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_marginBottom="8dp" - android:orientation="horizontal"> - - <TextView - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:text="濮撳悕锛�" - android:textColor="#666666" - android:textSize="@dimen/new_card_size" /> - - <TextView - android:id="@+id/userName" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:textColor="#333333" - android:textSize="@dimen/new_card_size" /> - </LinearLayout> - - <LinearLayout - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_marginBottom="8dp" + android:layout_marginBottom="5dp" android:orientation="horizontal"> <TextView @@ -219,7 +141,50 @@ <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginBottom="8dp" + android:layout_marginBottom="5dp" + android:orientation="horizontal"> + + <TextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="鍗$姸鎬侊細" + android:textColor="#666666" + android:textSize="@dimen/text_size" /> + + <TextView + android:id="@+id/red_statu" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:textColor="@color/red" + android:textSize="@dimen/new_card_size" /> + </LinearLayout> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginBottom="5dp" + android:orientation="horizontal"> + + <TextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="濮撳悕锛�" + android:textColor="#666666" + android:textSize="@dimen/new_card_size" /> + + <TextView + android:id="@+id/userName" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:textColor="#333333" + android:textSize="@dimen/new_card_size" /> + </LinearLayout> + + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginBottom="5dp" android:orientation="horizontal"> <TextView @@ -241,14 +206,14 @@ <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginBottom="8dp" + android:layout_marginBottom="5dp" android:orientation="horizontal" android:visibility="visible"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" - android:text="鍏呭�煎悗鍓╀綑閲戦锛�" + android:text="褰撳墠浣欓锛�" android:textColor="#666666" android:textSize="@dimen/text_size" /> @@ -265,7 +230,73 @@ <androidx.cardview.widget.CardView android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginBottom="16dp" + + app:cardCornerRadius="8dp" + app:cardElevation="2dp"> + + <LinearLayout + android:id="@+id/recharge_LL" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="vertical" + android:padding="12dp"> + + + <TextView + android:id="@+id/red_recharge_water" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginBottom="8dp" + android:text="鍏呭�兼按閲忥細" + android:textColor="#333333" + android:textSize="@dimen/text_size" + android:visibility="gone" /> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:background="@color/base_green_bg" + android:orientation="vertical" + android:padding="12dp"> + + <TextView + android:id="@+id/recharge_tx" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginBottom="8dp" + android:text="鍏呭�奸噾棰濓紙鍏冿級锛�" + android:textColor="@color/red" + android:textSize="@dimen/new_card_size" + android:textStyle="bold" /> + + <EditText + android:id="@+id/recharge_morny" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:background="@android:color/white" + android:hint="璇疯緭鍏ュ厖鍊肩殑閲戦" + android:inputType="numberDecimal" + android:padding="5dp" + android:textSize="@dimen/new_card_size" /> + + <EditText + android:id="@+id/recharge_water" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="5dp" + android:background="@android:color/white" + android:hint="璇疯緭鍏ヨ禒閫佺殑閲戦(閫夊~)" + android:inputType="numberDecimal" + android:padding="5dp" + android:textSize="@dimen/new_card_size" /> + </LinearLayout> + </LinearLayout> + </androidx.cardview.widget.CardView> + + <androidx.cardview.widget.CardView + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="10dp" app:cardCornerRadius="8dp" app:cardElevation="2dp"> @@ -273,103 +304,67 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" - android:padding="16dp"> + android:padding="12dp"> <TextView - android:layout_width="match_parent" + android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginBottom="12dp" - android:text="鐢甸噺淇℃伅" + android:layout_marginBottom="10dp" + android:text="鏀粯鏂瑰紡" android:textColor="#333333" - android:textSize="16sp" + android:textSize="18sp" android:textStyle="bold" /> - <TextView - android:id="@+id/red_balance_electric" + <RadioGroup + android:id="@+id/newCard_paymentMethod" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginBottom="8dp" - android:background="#F9F9F9" - android:padding="12dp" - android:text="鍓╀綑鐢甸噺锛�" - android:textColor="#333333" - android:textSize="@dimen/text_size" - android:visibility="visible" /> + android:orientation="horizontal"> - <TextView - android:id="@+id/red_rechargeDate" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_marginBottom="8dp" - android:background="#F9F9F9" - android:padding="12dp" - android:text="鏈�鍚庤喘姘存棩鏈燂細" - android:textColor="#333333" - android:textSize="@dimen/text_size" - android:visibility="visible" /> + <RadioButton + android:id="@+id/newCard_cashPayment" + android:layout_width="0dp" + android:layout_height="40dp" + android:layout_marginRight="15dp" + android:layout_weight="1" + android:background="@drawable/radio_selector" + android:button="@null" + android:checked="true" + android:gravity="center" - <TextView - android:id="@+id/red_rechargeElectric" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_marginBottom="8dp" - android:background="#F9F9F9" - android:padding="12dp" - android:text="鐢甸噺鍗曚环锛�" - android:textColor="#333333" - android:textSize="@dimen/text_size" - android:visibility="visible" /> + android:text="鐜伴噾" + android:textColor="@color/radio_button_text_color" + android:textSize="@dimen/new_card_size" /> - <TextView - android:id="@+id/red_rechargeNumber" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_marginBottom="8dp" - android:background="#F9F9F9" - android:padding="12dp" - android:text="鍏呭�兼鏁帮細" - android:textColor="#333333" - android:textSize="@dimen/text_size" - android:visibility="gone" /> + <RadioButton + android:id="@+id/newCard_posPayment" + android:layout_width="0dp" + android:layout_height="40dp" + android:layout_marginRight="15dp" + android:layout_weight="1" + android:background="@drawable/radio_selector" + android:button="@null" + android:gravity="center" - <TextView - android:id="@+id/red_total_water" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_marginBottom="8dp" - android:background="#F9F9F9" - android:padding="12dp" - android:text="鎬荤敤姘撮噺锛�" - android:textColor="#333333" - android:textSize="@dimen/text_size" - android:visibility="gone" /> + android:text="POS鏈�" + android:textColor="@color/radio_button_text_color" + android:textSize="@dimen/new_card_size" /> - <TextView - android:id="@+id/red_total_power" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_marginBottom="8dp" - android:background="#F9F9F9" - android:padding="12dp" - android:text="鎬荤敤鐢甸噺锛�" - android:textColor="#333333" - android:textSize="@dimen/text_size" - android:visibility="gone" /> + <RadioButton + android:id="@+id/newCard_bankTransfer" + android:layout_width="0dp" + android:layout_height="40dp" + android:layout_weight="1" + android:background="@drawable/radio_selector" + android:button="@null" + android:gravity="center" - <TextView - android:id="@+id/red_waterPrice" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:background="#F9F9F9" - android:padding="12dp" - android:text="姣忕珛鏂圭背姘翠环鏍硷細" - android:textColor="#333333" - android:textSize="@dimen/text_size" - android:visibility="gone" /> + android:text="閾惰杞处" + android:textColor="@color/radio_button_text_color" + android:textSize="@dimen/new_card_size" /> + </RadioGroup> </LinearLayout> </androidx.cardview.widget.CardView> - - </LinearLayout> </LinearLayout> </ScrollView> @@ -379,11 +374,14 @@ android:layout_width="match_parent" android:layout_height="50dp" android:layout_alignParentBottom="true" - android:layout_margin="16dp" - android:background="@drawable/rounded_button_bg" + android:layout_marginLeft="16dp" + android:layout_marginTop="10dp" + android:layout_marginRight="16dp" + android:layout_marginBottom="10dp" + android:background="@drawable/recharge_button_ripple" android:elevation="2dp" android:gravity="center" - android:text="鍏呭��" + android:text="涓嬩竴姝ワ紙鍐欏崱锛�" android:textColor="@color/white" android:textSize="@dimen/new_card_size" android:textStyle="bold" -- Gitblit v1.8.0