From 1330e783aa3d187360324cd7d7ed6eb48642cfff Mon Sep 17 00:00:00 2001
From: zuoxiao <470321431@qq.com>
Date: 星期二, 03 六月 2025 14:03:03 +0800
Subject: [PATCH] feat(generallibrary): 优化开卡流程和界面
---
pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallPulseSyncIndicator.java | 2
pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallClipRotateMultipleIndicator.java | 2
generallibrary/src/main/java/com/dayu/general/bean/net/SearchUserResult.kt | 5
generallibrary/src/main/java/com/dayu/general/bean/net/SearchCardResult.kt | 3
pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallZigZagDeflectIndicator.java | 3
generallibrary/src/main/java/com/dayu/general/activity/NewCard2Activity.kt | 178 +++++-
pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallScaleRippleIndicator.java | 3
generallibrary/src/main/java/com/dayu/general/activity/SearchUserListActivity.kt | 5
generallibrary/build.gradle | 1
pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallSpinFadeLoaderIndicator.java | 2
pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallGridPulseIndicator.java | 2
pickerviewlibrary/src/main/java/com/wang/avi/indicators/LineScaleIndicator.java | 2
pickerviewlibrary/src/main/java/com/wang/avi/indicators/PacmanIndicator.java | 2
generallibrary/src/main/java/com/dayu/general/tool/NfcReadHelper.kt | 221 ++++++++
pickerviewlibrary/src/main/java/com/wang/avi/indicators/LineScalePartyIndicator.java | 2
generallibrary/src/main/res/layout/activity_new_card_ge.xml | 461 +++++++++++------
generallibrary/src/main/java/com/dayu/general/tool/NfcWreatHelper.kt | 149 +++++
pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallPulseIndicator.java | 2
pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallScaleIndicator.java | 2
pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallTrianglePathIndicator.java | 2
pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallBeatIndicator.java | 2
/dev/null | 414 ---------------
pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallGridBeatIndicator.java | 2
pickerviewlibrary/src/main/java/com/wang/avi/indicators/CubeTransitionIndicator.java | 2
pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallClipRotatePulseIndicator.java | 2
pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallZigZagIndicator.java | 2
generallibrary/src/main/cpp/general-native-lib.cpp | 38
pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallScaleRippleMultipleIndicator.java | 3
pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallScaleMultipleIndicator.java | 2
pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallClipRotateIndicator.java | 2
30 files changed, 845 insertions(+), 673 deletions(-)
diff --git a/generallibrary/build.gradle b/generallibrary/build.gradle
index 23302f1..b6e1600 100644
--- a/generallibrary/build.gradle
+++ b/generallibrary/build.gradle
@@ -77,6 +77,7 @@
exclude group: 'com.google.code.gson';
}
implementation 'com.squareup.retrofit2:adapter-rxjava3:2.9.0'
+ implementation 'io.reactivex.rxjava3:rxjava:3.1.5'
implementation 'io.reactivex.rxjava3:rxandroid:3.0.0'
implementation 'com.squareup.okhttp3:logging-interceptor:4.11.0'
compileOnly 'com.google.code.gson:gson:2.10.1'
diff --git a/generallibrary/src/main/cpp/general-native-lib.cpp b/generallibrary/src/main/cpp/general-native-lib.cpp
index e961a69..b5254cc 100644
--- a/generallibrary/src/main/cpp/general-native-lib.cpp
+++ b/generallibrary/src/main/cpp/general-native-lib.cpp
@@ -96,19 +96,19 @@
return nullptr;
}
- __android_log_print(ANDROID_LOG_INFO, "GeBaseHelper", "Decrypting sector %d", sector);
- __android_log_print(ANDROID_LOG_INFO, "GeBaseHelper", "Encrypted data: %02X %02X %02X %02X %02X %02X",
- encrypted_data[0], encrypted_data[1], encrypted_data[2],
- encrypted_data[3], encrypted_data[4], encrypted_data[5]);
- __android_log_print(ANDROID_LOG_INFO, "GeBaseHelper", "Using XOR key: %02X %02X %02X %02X %02X %02X",
- XOR_KEYS[sector][0], XOR_KEYS[sector][1], XOR_KEYS[sector][2],
- XOR_KEYS[sector][3], XOR_KEYS[sector][4], XOR_KEYS[sector][5]);
+// __android_log_print(ANDROID_LOG_INFO, "GeBaseHelper", "Decrypting sector %d", sector);
+// __android_log_print(ANDROID_LOG_INFO, "GeBaseHelper", "Encrypted data: %02X %02X %02X %02X %02X %02X",
+// encrypted_data[0], encrypted_data[1], encrypted_data[2],
+// encrypted_data[3], encrypted_data[4], encrypted_data[5]);
+// __android_log_print(ANDROID_LOG_INFO, "GeBaseHelper", "Using XOR key: %02X %02X %02X %02X %02X %02X",
+// XOR_KEYS[sector][0], XOR_KEYS[sector][1], XOR_KEYS[sector][2],
+// XOR_KEYS[sector][3], XOR_KEYS[sector][4], XOR_KEYS[sector][5]);
unsigned char decrypted[6];
for (int i = 0; i < 6; i++) {
decrypted[i] = encrypted_data[i] ^ XOR_KEYS[sector][i];
- __android_log_print(ANDROID_LOG_INFO, "GeBaseHelper", "Byte %d: %02X ^ %02X = %02X",
- i, encrypted_data[i], XOR_KEYS[sector][i], decrypted[i]);
+// __android_log_print(ANDROID_LOG_INFO, "GeBaseHelper", "Byte %d: %02X ^ %02X = %02X",
+// i, encrypted_data[i], XOR_KEYS[sector][i], decrypted[i]);
}
std::string result;
@@ -119,7 +119,7 @@
result += hex;
}
- __android_log_print(ANDROID_LOG_INFO, "GeBaseHelper", "Decrypted result: %s", result.c_str());
+// __android_log_print(ANDROID_LOG_INFO, "GeBaseHelper", "Decrypted result: %s", result.c_str());
return env->NewStringUTF(result.c_str());
}
@@ -187,7 +187,7 @@
jobject packageInfoObject = env->CallObjectMethod(packageManagerObject, getPackageInfoId,
packNameString, 64);
if (!packageInfoObject) {
- __android_log_print(ANDROID_LOG_ERROR, "M1Card", "Failed to get PackageInfo");
+// __android_log_print(ANDROID_LOG_ERROR, "M1Card", "Failed to get PackageInfo");
return env->NewStringUTF("");
}
@@ -195,7 +195,7 @@
jfieldID signaturefieldID = env->GetFieldID(packageInfoClass, "signatures",
"[Landroid/content/pm/Signature;");
if (!signaturefieldID) {
- __android_log_print(ANDROID_LOG_ERROR, "M1Card", "Failed to get signature field ID");
+// __android_log_print(ANDROID_LOG_ERROR, "M1Card", "Failed to get signature field ID");
return env->NewStringUTF("");
}
@@ -203,28 +203,28 @@
jobjectArray signatureArray = (jobjectArray) env->GetObjectField(packageInfoObject,
signaturefieldID);
if (!signatureArray || env->GetArrayLength(signatureArray) == 0) {
- __android_log_print(ANDROID_LOG_ERROR, "M1Card", "No signatures found");
+// __android_log_print(ANDROID_LOG_ERROR, "M1Card", "No signatures found");
return env->NewStringUTF("");
}
// 鑾峰彇绗竴涓鍚嶅璞�
jobject signatureObject = env->GetObjectArrayElement(signatureArray, 0);
if (!signatureObject) {
- __android_log_print(ANDROID_LOG_ERROR, "M1Card", "Failed to get signature object");
+// __android_log_print(ANDROID_LOG_ERROR, "M1Card", "Failed to get signature object");
return env->NewStringUTF("");
}
// 鑾峰彇绛惧悕瀛楃涓�
jstring signatureString = (jstring) env->CallObjectMethod(signatureObject, signToStringId);
if (!signatureString) {
- __android_log_print(ANDROID_LOG_ERROR, "M1Card", "Failed to get signature string");
+// __android_log_print(ANDROID_LOG_ERROR, "M1Card", "Failed to get signature string");
return env->NewStringUTF("");
}
// 鑾峰彇绛惧悕瀛楃涓茬殑UTF-8瀛楃
const char *signStrng = env->GetStringUTFChars(signatureString, 0);
if (!signStrng) {
- __android_log_print(ANDROID_LOG_ERROR, "M1Card", "Failed to get signature UTF chars");
+// __android_log_print(ANDROID_LOG_ERROR, "M1Card", "Failed to get signature UTF chars");
return env->NewStringUTF("");
}
@@ -240,11 +240,11 @@
// 瑙e瘑骞惰浆鎹㈡瘡涓墖鍖哄瘑閽�
for (size_t i = 0; i < numKeys; i++) {
- __android_log_print(ANDROID_LOG_DEBUG, "M1Card", "澶勭悊鎵囧尯 %zu 鐨勫瘑閽�", i);
+// __android_log_print(ANDROID_LOG_DEBUG, "M1Card", "澶勭悊鎵囧尯 %zu 鐨勫瘑閽�", i);
// 纭繚涓嶄細瓒婄晫璁块棶
if (i * 12 + 6 > sizeof(ENCRYPTED_SECTOR_KEYS)) {
- __android_log_print(ANDROID_LOG_ERROR, "M1Card", "Index out of bounds");
+// __android_log_print(ANDROID_LOG_ERROR, "M1Card", "Index out of bounds");
break;
}
@@ -252,7 +252,7 @@
jstring decrypted_str = decrypt_key(env, ENCRYPTED_SECTOR_KEYS + (i * 12), 6);
if (!decrypted_str) {
- __android_log_print(ANDROID_LOG_ERROR, "M1Card", "Failed to decrypt key for sector %zu", i);
+// __android_log_print(ANDROID_LOG_ERROR, "M1Card", "Failed to decrypt key for sector %zu", i);
continue;
}
diff --git a/generallibrary/src/main/java/com/dayu/general/activity/NewCard2Activity.kt b/generallibrary/src/main/java/com/dayu/general/activity/NewCard2Activity.kt
index 2ebe743..46c5a42 100644
--- a/generallibrary/src/main/java/com/dayu/general/activity/NewCard2Activity.kt
+++ b/generallibrary/src/main/java/com/dayu/general/activity/NewCard2Activity.kt
@@ -4,25 +4,24 @@
import android.os.Bundle
import android.text.Editable
import android.text.TextWatcher
+import android.util.TypedValue
import android.view.View
import android.widget.RadioButton
import android.widget.Toast
import androidx.lifecycle.lifecycleScope
import com.dayu.baselibrary.net.subscribers.SubscriberListener
-import com.dayu.baselibrary.tools.nfc.NFCCallBack
import com.dayu.baselibrary.view.TitleBar.ClickType_LEFT_IMAGE
import com.dayu.general.BaseApplication
import com.dayu.general.R
import com.dayu.general.bean.db.CardRegistrationBean
import com.dayu.general.dao.BaseDaoSingleton
-import com.dayu.general.databinding.ActivityNewCard1GeBinding
+import com.dayu.general.databinding.ActivityNewCardGeBinding
import com.dayu.general.net.ApiManager
import com.dayu.general.net.BaseResponse
import com.dayu.general.tool.NfcReadHelper
import com.dayu.general.tool.NfcWreatHelper
import com.tencent.bugly.crashreport.CrashReport
import kotlinx.coroutines.launch
-import android.util.TypedValue
/**
* Description: 鐢ㄦ埛寮�鍗$晫闈�(鍚屾淇敼鐧藉崱瀵嗙爜)
@@ -31,7 +30,7 @@
*/
class NewCard2Activity : BaseNfcActivity() {
- private lateinit var binding: ActivityNewCard1GeBinding
+ private lateinit var binding: ActivityNewCardGeBinding
// 鏀粯鏂瑰紡
private var paymentMethod: String = "鐜伴噾"
@@ -47,6 +46,9 @@
// 鐢ㄦ埛ID
private var userId: String = ""
+
+ // 瀹㈡埛ID
+ private var clientId: String = ""
companion object {
private const val TAG = "NewCard2Activity"
@@ -68,18 +70,40 @@
val pageSize: Any?,
val pageTotal: Any?
)
+
+ // 鐢ㄦ埛淇℃伅鏁版嵁绫�
+ data class ClientInfo(
+ val clientId: String,
+ val clientNum: String,
+ val name: String,
+ val districtNum: String,
+ val phone: String,
+ val idCard: String,
+ val villageName: String,
+ val address: String,
+ val cardCount: Int,
+ val operateDt: String
+ )
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
- binding = ActivityNewCard1GeBinding.inflate(layoutInflater)
+ binding = ActivityNewCardGeBinding.inflate(layoutInflater)
setContentView(binding.root)
+ // 鑾峰彇浼犻�掔殑clientId鍙傛暟
+ clientId = intent.getStringExtra("clientId") ?: ""
+
initView()
+
+ // 濡傛灉鏈塩lientId锛岃幏鍙栧鎴蜂俊鎭�
+ if (clientId.isNotEmpty()) {
+ getClientInfo(clientId)
+ }
+
// 鑾峰彇鏀粯鏂瑰紡
getPaymentMethods()
initListener()
}
-
private fun initView() {
// 鍒濆鍖栨爣棰樻爮杩斿洖鎸夐挳
@@ -90,21 +114,66 @@
// 鍒濆鍖朜FC璇诲崱瀹瑰櫒锛屽垵濮嬮殣钘�
binding.nfcContainer.visibility = View.VISIBLE
- // 浠嶪ntent涓幏鍙栫敤鎴蜂俊鎭紙濡傛灉鏈夛級
- val userName = intent.getStringExtra("userName") ?: ""
- val rawIdCard = intent.getStringExtra("idCard")
- val idCard = if (rawIdCard.isNullOrBlank()) "鏃�" else rawIdCard
- val farmerCode = intent.getStringExtra("farmerCode") ?: ""
- userId = intent.getStringExtra("userId") ?: ""
-
- // 璁剧疆鐢ㄦ埛淇℃伅
- binding.newCardUserName.text = userName
- binding.newCardIdCard.text = idCard
- binding.newCardFarmerCode.text = farmerCode
-
// 璁剧疆閲戦杈撳叆闄愬埗涓轰袱浣嶅皬鏁�
binding.newCardRechargeAmount.addTextChangedListener(createDecimalTextWatcher())
binding.newCardCardFee.addTextChangedListener(createDecimalTextWatcher())
+ }
+
+ /**
+ * 鑾峰彇瀹㈡埛璇︾粏淇℃伅
+ */
+ private fun getClientInfo(clientId: String) {
+ ApiManager.getInstance().requestGetLoading(
+ this,
+ "terminal/client/getTermOne/$clientId",
+ ClientInfo::class.java,
+ null,
+ object : SubscriberListener<BaseResponse<ClientInfo>>() {
+ override fun onNext(response: BaseResponse<ClientInfo>) {
+ if (response.success) {
+ val clientInfo = response.content
+ if (clientInfo != null) {
+ // 鏄剧ず瀹㈡埛淇℃伅鍒扮晫闈�
+ displayClientInfo(clientInfo)
+ } else {
+ Toast.makeText(
+ this@NewCard2Activity,
+ "鑾峰彇瀹㈡埛淇℃伅澶辫触: 杩斿洖鏁版嵁涓虹┖",
+ Toast.LENGTH_SHORT
+ ).show()
+ }
+ } else {
+ Toast.makeText(
+ this@NewCard2Activity,
+ "鑾峰彇瀹㈡埛淇℃伅澶辫触: ${response.msg}",
+ Toast.LENGTH_SHORT
+ ).show()
+ }
+ }
+
+ override fun onError(e: Throwable?) {
+ super.onError(e)
+ Toast.makeText(
+ this@NewCard2Activity,
+ "鑾峰彇瀹㈡埛淇℃伅澶辫触: ${e?.message ?: "缃戠粶寮傚父"}",
+ Toast.LENGTH_SHORT
+ ).show()
+ }
+ }
+ )
+ }
+
+ /**
+ * 鏄剧ず瀹㈡埛淇℃伅鍒扮晫闈�
+ */
+ private fun displayClientInfo(clientInfo: ClientInfo) {
+ // 淇濆瓨鐢ㄦ埛ID渚涘悗缁娇鐢�
+ userId = clientInfo.clientId
+
+ // 鏄剧ず鐢ㄦ埛鍩烘湰淇℃伅
+ binding.newCardUserName.text = clientInfo.name
+ binding.newCardIdCard.text = if (clientInfo.idCard.isBlank()) "鏃�" else clientInfo.idCard
+ binding.newCardFarmerCode.text = clientInfo.clientNum
}
/**
@@ -244,6 +313,9 @@
}
}
+ /**
+ * 娉ㄥ唽鏂板崱
+ */
private fun registerNewCard() {
// 鑾峰彇鍏呭�奸噾棰�
val rechargeAmountStr = binding.newCardRechargeAmount.text.toString()
@@ -348,45 +420,61 @@
}
override fun onNfcBack(intent: Intent) {
- var cardNumber = NfcReadHelper.getInstance(intent, this).getCardNumberNoClose()
- if (!cardNumber.isEmpty()) {
+ val cardNumber = NfcReadHelper.getInstance(intent, this).getCardNumberNoClose()
+ if (cardNumber.isNotEmpty()) {
try {
// 鍒涘缓瀵嗛挜鍒楄〃鐨勫壇鏈紝閬垮厤ConcurrentModificationException
val keyList = ArrayList(NfcReadHelper.getInstance(intent, this).getKeyList())
- NfcWreatHelper.getInstance(intent, this).changePS(keyList, false, true, object :
- NFCCallBack {
-
- override fun isSusses(flag: Boolean, msg: String?) {
- if (flag) {
- // 淇濆瓨鍗$墿鐞咺D
- cardPhysicalId = cardNumber
- // 鏇存柊UI
- binding.newCardArerNumber.text = cardNumber
- // 闅愯棌NFC璇诲崱鐣岄潰
- binding.nfcContainer.visibility = View.GONE
- binding.centerScroll.visibility = View.VISIBLE
- binding.newCardRegistBtn.visibility = View.VISIBLE
- } else {
- // 瀵嗙爜淇敼澶辫触锛屽鐞嗛敊璇儏鍐�
- Toast.makeText(
- this@NewCard2Activity,
- "鍗$墖鍒濆鍖栧け璐ワ細" + msg,
- Toast.LENGTH_LONG
- )
- .show()
- }
+ // 浣跨敤缇庡寲鐨勫姞杞藉姩鐢绘潵鏄剧ずNFC鎿嶄綔鐨勫姞杞界姸鎬�
+ val nfcHelper = NfcWreatHelper.getInstance(intent, this)
+ nfcHelper.setLoadingView(binding.loadingContainer, binding.nfcProgressWheel)
+
+ // 寮傛淇敼瀵嗙爜
+ nfcHelper.changePSAsync(keyList, false, true) { success: Boolean, msg: String? ->
+ if (success) {
+ // 淇濆瓨鍗$墿鐞咺D
+ cardPhysicalId = cardNumber
+ // 鏇存柊UI
+ binding.newCardArerNumber.text = cardNumber
+ // 闅愯棌NFC璇诲崱鐣岄潰
+ binding.nfcContainer.visibility = View.GONE
+ binding.centerScroll.visibility = View.VISIBLE
+ binding.newCardRegistBtn.visibility = View.VISIBLE
+ } else {
+ // 瀵嗙爜淇敼澶辫触锛屽鐞嗛敊璇儏鍐�
+ Toast.makeText(
+ this@NewCard2Activity,
+ "鍗$墖鍒濆鍖栧け璐ワ細$msg",
+ Toast.LENGTH_LONG
+ ).show()
}
- })
-
-
+ }
} catch (e: Exception) {
// 澶勭悊寮傚父鎯呭喌
CrashReport.postCatchedException(e)
e.printStackTrace()
}
+ } else {
+ Toast.makeText(
+ this@NewCard2Activity,
+ "鑾峰彇鍗″彿澶辫触",
+ Toast.LENGTH_SHORT
+ ).show()
}
}
+ override fun onDestroy() {
+ super.onDestroy()
+ // 娓呯悊NFC宸ュ叿绫讳腑鐨凴xJava璁㈤槄锛岄槻姝㈠唴瀛樻硠婕�
+ try {
+ NfcReadHelper.getInstance(intent, this).clearDisposables()
+ NfcWreatHelper.getInstance(intent, this).clearDisposables()
+ // 纭繚鍋滄鍔ㄧ敾锛岄伩鍏嶅唴瀛樻硠婕�
+ binding.nfcProgressWheel.stopSpinning()
+ } catch (e: Exception) {
+ e.printStackTrace()
+ }
+ }
}
\ No newline at end of file
diff --git a/generallibrary/src/main/java/com/dayu/general/activity/SearchUserListActivity.kt b/generallibrary/src/main/java/com/dayu/general/activity/SearchUserListActivity.kt
index b66c4df..2b39bc4 100644
--- a/generallibrary/src/main/java/com/dayu/general/activity/SearchUserListActivity.kt
+++ b/generallibrary/src/main/java/com/dayu/general/activity/SearchUserListActivity.kt
@@ -86,10 +86,7 @@
// 澶勭悊鐢ㄦ埛鐐瑰嚮浜嬩欢
// 浼犻�掔敤鎴蜂俊鎭埌寮�鍗$晫闈�
val intent = Intent(this, NewCard2Activity::class.java)
- intent.putExtra("userName", user.name)
- intent.putExtra("idCard", user.idCard)
- intent.putExtra("farmerCode", user.clientNum)
- intent.putExtra("userId", user.id)
+ intent.putExtra("clientId", user.clientId)
startActivity(intent)
}
diff --git a/generallibrary/src/main/java/com/dayu/general/bean/net/SearchCardResult.kt b/generallibrary/src/main/java/com/dayu/general/bean/net/SearchCardResult.kt
index 8c3bdde..314b237 100644
--- a/generallibrary/src/main/java/com/dayu/general/bean/net/SearchCardResult.kt
+++ b/generallibrary/src/main/java/com/dayu/general/bean/net/SearchCardResult.kt
@@ -24,6 +24,7 @@
val idCard: String? = null, // 韬唤璇佸彿
val money: String? = null, // 鍗′綑棰�
val phone: String? = null, // 鐢佃瘽鍙风爜
- val stateName: String? = null // 鐘舵�佸悕绉�
+ val stateName: String? = null, // 鐘舵�佸悕绉�
+ val clientId: String? = null // 瀹㈡埛ID
)
}
\ No newline at end of file
diff --git a/generallibrary/src/main/java/com/dayu/general/bean/net/SearchUserResult.kt b/generallibrary/src/main/java/com/dayu/general/bean/net/SearchUserResult.kt
index a3ba94c..21f6186 100644
--- a/generallibrary/src/main/java/com/dayu/general/bean/net/SearchUserResult.kt
+++ b/generallibrary/src/main/java/com/dayu/general/bean/net/SearchUserResult.kt
@@ -17,7 +17,7 @@
/**
* 鐢ㄦ埛淇℃伅
*/
- data class UserInfo (
+ data class UserInfo(
val address: String? = null, // 鍦板潃
val cardCount: Int? = null, // 鍗℃暟閲�
val clientNum: String? = null, // 瀹㈡埛缂栧彿
@@ -25,6 +25,7 @@
val idCard: String? = null, // 韬唤璇�
val name: String? = null, // 濮撳悕
val operateDt: String? = null, // 鎿嶄綔鏃ユ湡
- val phone: String? = null // 鐢佃瘽
+ val phone: String? = null, // 鐢佃瘽
+ val clientId: String? = null // 瀹㈡埛ID
)
}
\ No newline at end of file
diff --git a/generallibrary/src/main/java/com/dayu/general/tool/NfcReadHelper.kt b/generallibrary/src/main/java/com/dayu/general/tool/NfcReadHelper.kt
index a8f81f1..84d7111 100644
--- a/generallibrary/src/main/java/com/dayu/general/tool/NfcReadHelper.kt
+++ b/generallibrary/src/main/java/com/dayu/general/tool/NfcReadHelper.kt
@@ -2,8 +2,16 @@
import android.app.Activity
import android.content.Intent
+import android.view.View
+import android.widget.RelativeLayout
import com.dayu.baselibrary.tools.nfc.BaseNfcReadHelper
import com.dayu.baselibrary.tools.nfc.NfcReadAdapter
+import com.pnikosis.materialishprogress.ProgressWheel
+import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
+import io.reactivex.rxjava3.core.Observable
+import io.reactivex.rxjava3.disposables.CompositeDisposable
+import io.reactivex.rxjava3.disposables.Disposable
+import io.reactivex.rxjava3.schedulers.Schedulers
/**
* NFC璇诲彇宸ュ叿绫荤殑Kotlin瀹炵幇
@@ -11,6 +19,9 @@
class NfcReadHelper private constructor(intent: Intent, activity: Activity) : GeBaseHelper(activity) {
private val adapter: NfcReadAdapter = NfcReadAdapter(intent, activity)
+ private val compositeDisposable = CompositeDisposable()
+ private var loadingContainer: RelativeLayout? = null
+ private var progressWheel: ProgressWheel? = null
companion object {
private var helper: NfcReadHelper? = null
@@ -27,7 +38,83 @@
}
}
+ /**
+ * 璁剧疆鍔犺浇鍔ㄧ敾瑙嗗浘
+ */
+ fun setLoadingView(loadingContainer: RelativeLayout, progressWheel: ProgressWheel) {
+ this.loadingContainer = loadingContainer
+ this.progressWheel = progressWheel
+ }
+ /**
+ * 鏄剧ず鍔犺浇鍔ㄧ敾
+ */
+ private fun showLoading() {
+ loadingContainer?.let {
+ it.visibility = View.VISIBLE
+ }
+ progressWheel?.let {
+ it.spin()
+ }
+ }
+
+ /**
+ * 闅愯棌鍔犺浇鍔ㄧ敾
+ */
+ private fun hideLoading() {
+ loadingContainer?.let {
+ it.visibility = View.GONE
+ }
+ progressWheel?.let {
+ it.stopSpinning()
+ }
+ }
+
+ /**
+ * 鑾峰彇鍗″彿(寮傛)
+ */
+ fun getCardNumberAsync(callback: (String) -> Unit): Disposable {
+ showLoading()
+ val disposable = Observable.fromCallable {
+ getCardNumber()
+ }
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe({ result ->
+ hideLoading()
+ callback(result)
+ }, { error ->
+ hideLoading()
+ error.printStackTrace()
+ callback("")
+ })
+
+ compositeDisposable.add(disposable)
+ return disposable
+ }
+
+ /**
+ * 鑾峰彇鍗″彿(涓嶅叧闂繛鎺ワ紝寮傛)
+ */
+ fun getCardNumberNoCloseAsync(callback: (String) -> Unit): Disposable {
+ showLoading()
+ val disposable = Observable.fromCallable {
+ getCardNumberNoClose()
+ }
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe({ result ->
+ hideLoading()
+ callback(result)
+ }, { error ->
+ hideLoading()
+ error.printStackTrace()
+ callback("")
+ })
+
+ compositeDisposable.add(disposable)
+ return disposable
+ }
/**
* 鑾峰彇鍗″彿
@@ -50,8 +137,28 @@
}
}
-
-
+ /**
+ * 鑾峰彇鍗$墖绫诲瀷鍜屽崱鍙�(寮傛)
+ */
+ fun getCardTypeAndCardNumberAsync(callback: (String) -> Unit): Disposable {
+ showLoading()
+ val disposable = Observable.fromCallable {
+ getCardTypeAndCardNumber()
+ }
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe({ result ->
+ hideLoading()
+ callback(result)
+ }, { error ->
+ hideLoading()
+ error.printStackTrace()
+ callback("")
+ })
+
+ compositeDisposable.add(disposable)
+ return disposable
+ }
/**
* 鑾峰彇鍗$墖绫诲瀷鍜屽崱鍙�
@@ -66,6 +173,46 @@
}
/**
+ * 璇诲彇NFC鍗$殑鍏ㄩ儴淇℃伅(寮傛)
+ */
+ fun getAllDataAsync(callback: BaseNfcReadHelper.NFCCallMapback) {
+ showLoading()
+ val disposable = Observable.fromCallable {
+ try {
+ adapter.getAllData(object : BaseNfcReadHelper.NFCCallMapback {
+ override fun callBack(data: Map<String, List<ByteArray>>) {
+ hideLoading()
+ callback.callBack(data)
+ }
+
+ override fun error(code: Int) {
+ hideLoading()
+ callback.error(code)
+ }
+ })
+ true
+ } catch (e: Exception) {
+ e.printStackTrace()
+ false
+ }
+ }
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe({ success ->
+ if (!success) {
+ hideLoading()
+ callback.error(-1)
+ }
+ }, { error ->
+ hideLoading()
+ error.printStackTrace()
+ callback.error(-1)
+ })
+
+ compositeDisposable.add(disposable)
+ }
+
+ /**
* 璇诲彇NFC鍗$殑鍏ㄩ儴淇℃伅
*/
fun getAllData(callback: BaseNfcReadHelper.NFCCallMapback) {
@@ -74,6 +221,29 @@
} catch (e: Exception) {
e.printStackTrace()
}
+ }
+
+ /**
+ * 鑾峰彇涓�涓墖鍖虹殑鏁版嵁(寮傛)
+ */
+ fun getOneSectorDataAsync(callback: (List<ByteArray>?) -> Unit): Disposable {
+ showLoading()
+ val disposable = Observable.fromCallable<Any> {
+ getOneSectorData() as Any
+ }
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe({ result ->
+ hideLoading()
+ callback(result as? List<ByteArray>)
+ }, { error ->
+ hideLoading()
+ error.printStackTrace()
+ callback(null)
+ })
+
+ compositeDisposable.add(disposable)
+ return disposable
}
/**
@@ -89,6 +259,46 @@
}
/**
+ * 璇诲彇NFC鍗$殑鐗瑰畾鎵囧尯淇℃伅(寮傛)
+ */
+ fun getDataAsync(a: Int, b: Int, callback: BaseNfcReadHelper.NFCCallByteback) {
+ showLoading()
+ val disposable = Observable.fromCallable {
+ try {
+ adapter.getData(a, b, object : BaseNfcReadHelper.NFCCallByteback {
+ override fun callBack(data: ByteArray) {
+ hideLoading()
+ callback.callBack(data)
+ }
+
+ override fun error(code: Int) {
+ hideLoading()
+ callback.error(code)
+ }
+ })
+ true
+ } catch (e: Exception) {
+ e.printStackTrace()
+ false
+ }
+ }
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe({ success ->
+ if (!success) {
+ hideLoading()
+ callback.error(-1)
+ }
+ }, { error ->
+ hideLoading()
+ error.printStackTrace()
+ callback.error(-1)
+ })
+
+ compositeDisposable.add(disposable)
+ }
+
+ /**
* 璇诲彇NFC鍗$殑鐗瑰畾鎵囧尯淇℃伅
*/
fun getData(a: Int, b: Int, callback: BaseNfcReadHelper.NFCCallByteback) {
@@ -99,5 +309,10 @@
}
}
-
+ /**
+ * 娓呴櫎鎵�鏈夎闃咃紝闃叉鍐呭瓨娉勬紡
+ */
+ fun clearDisposables() {
+ compositeDisposable.clear()
+ }
}
\ No newline at end of file
diff --git a/generallibrary/src/main/java/com/dayu/general/tool/NfcWreatHelper.kt b/generallibrary/src/main/java/com/dayu/general/tool/NfcWreatHelper.kt
index 0a6e18c..65fd920 100644
--- a/generallibrary/src/main/java/com/dayu/general/tool/NfcWreatHelper.kt
+++ b/generallibrary/src/main/java/com/dayu/general/tool/NfcWreatHelper.kt
@@ -2,14 +2,25 @@
import android.app.Activity
import android.content.Intent
+import android.view.View
+import android.widget.RelativeLayout
import com.dayu.baselibrary.tools.nfc.NFCCallBack
import com.dayu.baselibrary.tools.nfc.NfcWriteAdapter
import com.dayu.general.bean.card.UserCard
+import com.pnikosis.materialishprogress.ProgressWheel
+import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
+import io.reactivex.rxjava3.core.Observable
+import io.reactivex.rxjava3.disposables.CompositeDisposable
+import io.reactivex.rxjava3.disposables.Disposable
+import io.reactivex.rxjava3.schedulers.Schedulers
class NfcWreatHelper private constructor(intent: Intent, activity: Activity) :
GeBaseHelper(activity) {
private val adapter: NfcWriteAdapter = NfcWriteAdapter(intent, activity)
+ private val compositeDisposable = CompositeDisposable()
+ private var loadingContainer: RelativeLayout? = null
+ private var progressWheel: ProgressWheel? = null
companion object {
private var helper: NfcWreatHelper? = null
@@ -27,6 +38,69 @@
}
}
+ /**
+ * 璁剧疆鍔犺浇鍔ㄧ敾瑙嗗浘
+ */
+ fun setLoadingView(loadingContainer: RelativeLayout, progressWheel: ProgressWheel) {
+ this.loadingContainer = loadingContainer
+ this.progressWheel = progressWheel
+ }
+
+ /**
+ * 鏄剧ず鍔犺浇鍔ㄧ敾
+ */
+ private fun showLoading() {
+ loadingContainer?.let {
+ it.visibility = View.VISIBLE
+ }
+ progressWheel?.let {
+ it.spin()
+ }
+ }
+
+ /**
+ * 闅愯棌鍔犺浇鍔ㄧ敾
+ */
+ private fun hideLoading() {
+ loadingContainer?.let {
+ it.visibility = View.GONE
+ }
+ progressWheel?.let {
+ it.stopSpinning()
+ }
+ }
+
+ /**
+ * 鍐欏崱(寮傛)
+ *
+ * @param str 涔﹀啓鍐呭锛�16涓瓧鑺�
+ * @param a 涔﹀啓鐨勬墖鍖� (浠�0寮�濮嬫暟)
+ * @param b 涔﹀啓鐨勫潡(浠�0寮�濮嬫暟)
+ * @param callback 鎿嶄綔缁撴灉鍥炶皟
+ */
+ fun writeDataAsync(str: ByteArray?, a: Int, b: Int, callback: (Boolean) -> Unit): Disposable {
+ showLoading()
+ val disposable = Observable.fromCallable {
+ writeData(str, a, b, object : NFCCallBack {
+ override fun isSusses(flag: Boolean, msg: String?) {
+ // 杩欎釜鍥炶皟鍦↖O绾跨▼涓紝涓嶅鐞哢I鐩稿叧鎿嶄綔
+ }
+ })
+ }
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe({ result ->
+ hideLoading()
+ callback(result)
+ }, { error ->
+ hideLoading()
+ error.printStackTrace()
+ callback(false)
+ })
+
+ compositeDisposable.add(disposable)
+ return disposable
+ }
/**
* 鍐欏崱
@@ -46,6 +120,32 @@
}
/**
+ * 鍐欏崱(寮傛)
+ *
+ * @param userCard 鐢ㄦ埛鍗″唴瀹�
+ * @param callback 鎿嶄綔缁撴灉鍥炶皟
+ */
+ fun writeUserDataAsync(userCard: UserCard, callback: (Boolean) -> Unit): Disposable {
+ showLoading()
+ val disposable = Observable.fromCallable {
+ writeUserData(userCard)
+ }
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe({ result ->
+ hideLoading()
+ callback(result)
+ }, { error ->
+ hideLoading()
+ error.printStackTrace()
+ callback(false)
+ })
+
+ compositeDisposable.add(disposable)
+ return disposable
+ }
+
+ /**
* 鍐欏崱
*
* @param userCard 鐢ㄦ埛鍗″唴瀹�
@@ -60,14 +160,57 @@
return false
}
- fun changePS( ps: List<ByteArray>, isConnect: Boolean, isClose: Boolean,nfcCallBack: NFCCallBack): Boolean {
+ /**
+ * 淇敼瀵嗙爜(寮傛)
+ *
+ * @param ps 瀵嗙爜鍒楄〃
+ * @param isConnect 鏄惁淇濇寔杩炴帴
+ * @param isClose 鏄惁鍏抽棴
+ * @param callback 缁撴灉鍥炶皟
+ */
+ fun changePSAsync(ps: List<ByteArray>, isConnect: Boolean, isClose: Boolean, callback: (Boolean, String?) -> Unit): Disposable {
+ showLoading()
+ val disposable = Observable.fromCallable {
+ var resultSuccess = false
+ var resultMessage: String? = null
+
+ changePS(ps, isConnect, isClose, object : NFCCallBack {
+ override fun isSusses(flag: Boolean, msg: String?) {
+ resultSuccess = flag
+ resultMessage = msg
+ }
+ })
+
+ Pair(resultSuccess, resultMessage)
+ }
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe({ result ->
+ hideLoading()
+ callback(result.first, result.second)
+ }, { error ->
+ hideLoading()
+ error.printStackTrace()
+ callback(false, error.message)
+ })
+
+ compositeDisposable.add(disposable)
+ return disposable
+ }
+
+ fun changePS(ps: List<ByteArray>, isConnect: Boolean, isClose: Boolean, nfcCallBack: NFCCallBack): Boolean {
try {
- return adapter.changePasword( ps, isConnect, isClose,nfcCallBack)
+ return adapter.changePasword(ps, isConnect, isClose, nfcCallBack)
} catch (e: java.lang.Exception) {
e.printStackTrace()
}
return false
}
-
+ /**
+ * 娓呴櫎鎵�鏈夎闃咃紝闃叉鍐呭瓨娉勬紡
+ */
+ fun clearDisposables() {
+ compositeDisposable.clear()
+ }
}
\ No newline at end of file
diff --git a/generallibrary/src/main/res/layout/activity_new_card_1_ge.xml b/generallibrary/src/main/res/layout/activity_new_card_1_ge.xml
deleted file mode 100644
index 4567eec..0000000
--- a/generallibrary/src/main/res/layout/activity_new_card_1_ge.xml
+++ /dev/null
@@ -1,414 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:background="@color/base_list_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="鐢ㄦ埛寮�鍗�"
- app:leftImage="@mipmap/icon_back"
- tools:ignore="MissingConstraints" />
-
- <androidx.cardview.widget.CardView
- android:id="@+id/nfcContainer"
- android:layout_width="match_parent"
- android:layout_height="0dp"
- android:layout_marginStart="16dp"
- android:layout_marginTop="24dp"
- android:layout_marginEnd="16dp"
- android:layout_marginBottom="24dp"
- android:visibility="visible"
- app:cardBackgroundColor="@android:color/white"
- app:cardCornerRadius="12dp"
- app:cardElevation="4dp"
- app:layout_constraintBottom_toBottomOf="parent"
- app:layout_constraintEnd_toEndOf="parent"
- app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toBottomOf="@id/titleBar">
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:gravity="center"
- android:orientation="vertical"
- android:padding="16dp">
-
- <TextView
- android:id="@+id/textView"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:gravity="center"
- android:text="璇峰皢鏂板崱璐村湪璁惧涓婅繘琛岃鍗�"
- android:textColor="#333333"
- android:textSize="18sp"
- android:textStyle="bold" />
-
- <TextView
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:gravity="center"
- android:text="灏嗚繘琛屽垵濮嬪寲鍗$墖\n鑰楁椂杈冮暱璇蜂笉瑕佺Щ鍔ㄥ崱鐗�"
- android:textColor="@color/base_blue_bg"
- android:textSize="18sp"
- android:layout_marginTop="20dp"
- android:textStyle="bold" />
-
- <ImageView
- android:id="@+id/nfcImageView"
- android:layout_width="200dp"
- android:layout_height="200dp"
- android:layout_marginTop="24dp"
- android:scaleType="fitCenter"
- android:src="@mipmap/nfc_write" />
-
- <TextView
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginTop="16dp"
- android:gravity="center"
- android:text="璇蜂繚鎸佹墜鎸佹満鍜屽崱鐗囦笉瑕佺Щ鍔�"
- android:textColor="#666666"
- android:textSize="14sp" />
- </LinearLayout>
- </androidx.cardview.widget.CardView>
-
- <ScrollView
- android:id="@+id/center_scroll"
- android:layout_width="match_parent"
- android:layout_height="0dp"
- android:fillViewport="true"
- android:scrollbars="none"
- android:visibility="gone"
- app:layout_constraintBottom_toBottomOf="parent"
- app:layout_constraintTop_toBottomOf="@+id/titleBar">
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical"
- android:paddingBottom="16dp"
- android:paddingLeft="16dp"
- android:paddingRight="16dp"
- android:paddingTop="10dp">
-
- <androidx.cardview.widget.CardView
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginBottom="10dp"
- app:cardCornerRadius="8dp"
- app:cardElevation="2dp">
-
- <LinearLayout
- android:id="@+id/center_data"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical"
- android:padding="16dp">
-
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginBottom="10dp"
- android:text="鍩烘湰淇℃伅"
- android:textColor="#333333"
- android:textSize="18sp"
- android:textStyle="bold" />
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginBottom="6dp"
- android:gravity="center_vertical"
- android:orientation="horizontal">
-
- <TextView
- android:layout_width="105dp"
- android:layout_height="wrap_content"
- android:text="鍗″彿锛�"
- android:textColor="#666666"
- android:textSize="@dimen/new_card_size" />
-
- <TextView
- android:id="@+id/newCard_arerNumber"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginStart="8dp"
- android:textColor="#333333"
- android:textSize="@dimen/new_card_size" />
- </LinearLayout>
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginBottom="6dp"
- android:gravity="center_vertical"
- android:orientation="horizontal">
-
- <TextView
- android:layout_width="105dp"
- android:layout_height="wrap_content"
- android:text="濮撳悕锛�"
- android:textColor="#666666"
- android:textSize="@dimen/new_card_size" />
-
- <TextView
- android:id="@+id/newCard_userName"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginStart="8dp"
- android:textColor="#333333"
- android:textSize="@dimen/new_card_size" />
- </LinearLayout>
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginBottom="6dp"
- android:gravity="center_vertical"
- android:orientation="horizontal">
-
- <TextView
- android:layout_width="105dp"
- android:layout_height="wrap_content"
- android:text="韬唤璇佸彿锛�"
- android:textColor="#666666"
- android:textSize="@dimen/new_card_size" />
-
- <TextView
- android:id="@+id/newCard_idCard"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginStart="8dp"
- 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:gravity="center_vertical"
- android:orientation="horizontal">
-
- <TextView
- android:layout_width="105dp"
- android:layout_height="wrap_content"
- android:text="鍐滄埛缂栧彿锛�"
- android:textColor="#666666"
- android:textSize="@dimen/new_card_size" />
-
- <TextView
- android:id="@+id/newCard_farmerCode"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginStart="8dp"
- android:textColor="#333333"
- 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_marginBottom="10dp"
- app:cardCornerRadius="8dp"
- app:cardElevation="2dp">
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical"
- android:padding="16dp">
-
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginBottom="10dp"
- android:text="璐圭敤淇℃伅"
- android:textColor="#333333"
- android:textSize="18sp"
- android:textStyle="bold" />
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginBottom="12dp"
- android:gravity="center_vertical"
- android:orientation="horizontal">
-
- <TextView
- android:layout_width="105dp"
- android:layout_height="wrap_content"
- android:text="鍏呭�奸噾棰濓細"
- android:textColor="#666666"
- android:textSize="@dimen/new_card_size" />
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:background="@drawable/edit_text_bg_selector"
- android:orientation="horizontal"
- android:gravity="center_vertical"
- android:paddingStart="10dp"
- android:paddingEnd="10dp"
- android:paddingTop="8dp"
- android:paddingBottom="8dp">
-
- <EditText
- android:id="@+id/newCard_rechargeAmount"
- android:layout_width="0dp"
- android:layout_weight="1"
- android:layout_height="wrap_content"
- android:background="@null"
- android:hint="璇疯緭鍏ュ厖鍊奸噾棰�(閫夊~)"
- android:inputType="numberDecimal"
- android:textColor="#333333"
- android:textColorHint="#BBBBBB"
- android:textSize="@dimen/new_card_size" />
-
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="鍏�"
- android:textColor="#666666"
- android:textSize="@dimen/new_card_size" />
- </LinearLayout>
- </LinearLayout>
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginBottom="12dp"
- android:gravity="center_vertical"
- android:orientation="horizontal">
-
- <TextView
- android:layout_width="105dp"
- android:layout_height="wrap_content"
- android:text="宸ユ湰璐癸細"
- android:textColor="#666666"
- android:textSize="@dimen/new_card_size" />
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:background="@drawable/edit_text_bg_selector"
- android:orientation="horizontal"
- android:gravity="center_vertical"
- android:paddingStart="10dp"
- android:paddingEnd="10dp"
- android:paddingTop="8dp"
- android:paddingBottom="8dp">
-
- <EditText
- android:id="@+id/newCard_cardFee"
- android:layout_width="0dp"
- android:layout_weight="1"
- android:layout_height="wrap_content"
- android:background="@null"
- android:hint="璇疯緭鍏ュ伐鏈垂(閫夊~)"
- android:inputType="numberDecimal"
- android:textColor="#333333"
- android:textColorHint="#BBBBBB"
- android:textSize="@dimen/new_card_size" />
-
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="鍏�"
- android:textColor="#666666"
- android:textSize="@dimen/new_card_size" />
- </LinearLayout>
- </LinearLayout>
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginBottom="5dp"
- android:gravity="center_vertical"
- android:orientation="horizontal">
-
- <TextView
- android:layout_width="105dp"
- android:layout_height="wrap_content"
- android:text="澶囨敞锛�"
- android:textColor="#666666"
- android:textSize="@dimen/new_card_size" />
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:background="@drawable/edit_text_bg_selector"
- android:orientation="vertical"
- android:paddingStart="10dp"
- android:paddingEnd="10dp"
- android:paddingTop="8dp"
- android:paddingBottom="8dp">
-
- <EditText
- android:id="@+id/newCard_remark"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:background="@null"
- android:hint="璇疯緭鍏ュ娉�(閫夊~)"
- android:textColor="#333333"
- android:textColorHint="#BBBBBB"
- android:textSize="@dimen/new_card_size" />
- </LinearLayout>
- </LinearLayout>
- </LinearLayout>
- </androidx.cardview.widget.CardView>
-
- <androidx.cardview.widget.CardView
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- app:cardCornerRadius="8dp"
- app:cardElevation="2dp">
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical"
- android:padding="16dp">
-
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginBottom="10dp"
- android:text="鏀粯鏂瑰紡"
- android:textColor="#333333"
- android:textSize="18sp"
- android:textStyle="bold" />
-
- <RadioGroup
- android:id="@+id/newCard_paymentMethod"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal">
- <!-- 鍔ㄦ�佹坊鍔燫adioButton锛岀Щ闄ゅ浐瀹氱殑RadioButton -->
- </RadioGroup>
- </LinearLayout>
- </androidx.cardview.widget.CardView>
- <TextView
- android:id="@+id/newCard_registBtn"
- android:layout_width="match_parent"
- android:layout_height="56dp"
- android:layout_marginTop="15dp"
- android:background="@color/bottom_color"
- android:visibility="visible"
- android:gravity="center"
- android:text="纭寮�鍗�"
- android:textColor="#FFFFFF"
- android:textSize="16sp" />
- </LinearLayout>
- </ScrollView>
-
-</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/generallibrary/src/main/res/layout/activity_new_card_ge.xml b/generallibrary/src/main/res/layout/activity_new_card_ge.xml
index 43fe50f..c1c2477 100644
--- a/generallibrary/src/main/res/layout/activity_new_card_ge.xml
+++ b/generallibrary/src/main/res/layout/activity_new_card_ge.xml
@@ -1,9 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
+ xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:background="#F5F7FA">
+ android:background="@color/base_list_bg">
<com.dayu.baselibrary.view.TitleBar
android:id="@+id/titleBar"
@@ -11,31 +12,136 @@
android:layout_height="@dimen/dimen_title_height"
android:background="@color/title_bar_bg"
android:elevation="4dp"
- app:centerText="鏂板崱寮�鎴�"
- app:leftImage="@mipmap/icon_back" />
+ app:centerText="鐢ㄦ埛寮�鍗�"
+ app:leftImage="@mipmap/icon_back"
+ tools:ignore="MissingConstraints" />
+
+ <androidx.cardview.widget.CardView
+ android:id="@+id/nfcContainer"
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ android:layout_marginStart="16dp"
+ android:layout_marginTop="24dp"
+ android:layout_marginEnd="16dp"
+ android:layout_marginBottom="24dp"
+ android:visibility="visible"
+ app:cardBackgroundColor="@android:color/white"
+ app:cardCornerRadius="12dp"
+ app:cardElevation="4dp"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@id/titleBar">
+
+ <FrameLayout
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:gravity="center"
+ android:orientation="vertical"
+ android:padding="16dp">
+
+ <TextView
+ android:id="@+id/textView"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:gravity="center"
+ android:text="璇峰皢鏂板崱璐村湪璁惧涓婅繘琛岃鍗�"
+ android:textColor="#333333"
+ android:textSize="18sp"
+ android:textStyle="bold" />
+
+ <TextView
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:gravity="center"
+ android:text="灏嗚繘琛屽垵濮嬪寲鍗$墖\n鑰楁椂杈冮暱璇蜂笉瑕佺Щ鍔ㄥ崱鐗�"
+ android:textColor="@color/base_blue_bg"
+ android:textSize="18sp"
+ android:layout_marginTop="20dp"
+ android:textStyle="bold" />
+
+ <ImageView
+ android:id="@+id/nfcImageView"
+ android:layout_width="200dp"
+ android:layout_height="200dp"
+ android:layout_marginTop="24dp"
+ android:scaleType="fitCenter"
+ android:src="@mipmap/nfc_write" />
+
+ <TextView
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="16dp"
+ android:gravity="center"
+ android:text="璇蜂繚鎸佹墜鎸佹満鍜屽崱鐗囦笉瑕佺Щ鍔�"
+ android:textColor="#666666"
+ android:textSize="14sp" />
+ </LinearLayout>
+
+ <RelativeLayout
+ android:id="@+id/loadingContainer"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:background="#80000000"
+ android:visibility="gone">
+
+ <com.pnikosis.materialishprogress.ProgressWheel
+ android:id="@+id/nfcProgressWheel"
+ android:layout_width="100dp"
+ android:layout_height="100dp"
+ android:layout_centerInParent="true"
+ app:matProg_barColor="@color/base_blue_bg"
+ app:matProg_progressIndeterminate="true"
+ app:matProg_barWidth="8dp"
+ app:matProg_rimColor="#33000000"
+ app:matProg_rimWidth="8dp"
+ app:matProg_spinSpeed="0.5"/>
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_below="@id/nfcProgressWheel"
+ android:layout_centerHorizontal="true"
+ android:layout_marginTop="12dp"
+ android:text="姝e湪澶勭悊NFC鍗$墖..."
+ android:textColor="#FFFFFF"
+ android:textSize="16sp"/>
+ </RelativeLayout>
+ </FrameLayout>
+ </androidx.cardview.widget.CardView>
<ScrollView
+ android:id="@+id/center_scroll"
android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_above="@+id/newCard_registBtn"
- android:layout_below="@+id/titleBar"
+ android:layout_height="0dp"
android:fillViewport="true"
- android:scrollbars="none">
+ android:scrollbars="none"
+ android:visibility="gone"
+ app:layout_constraintBottom_toTopOf="@+id/newCard_registBtn"
+ app:layout_constraintTop_toBottomOf="@+id/titleBar">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
- android:padding="16dp">
+ android:paddingBottom="16dp"
+ android:paddingLeft="16dp"
+ android:paddingRight="16dp"
+ android:paddingTop="10dp">
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_marginBottom="16dp"
+ android:layout_marginBottom="10dp"
app:cardCornerRadius="8dp"
app:cardElevation="2dp">
<LinearLayout
+ android:id="@+id/center_data"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
@@ -44,7 +150,7 @@
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_marginBottom="16dp"
+ android:layout_marginBottom="10dp"
android:text="鍩烘湰淇℃伅"
android:textColor="#333333"
android:textSize="18sp"
@@ -53,14 +159,14 @@
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_marginBottom="16dp"
+ android:layout_marginBottom="6dp"
android:gravity="center_vertical"
android:orientation="horizontal">
<TextView
- android:layout_width="wrap_content"
+ android:layout_width="105dp"
android:layout_height="wrap_content"
- android:text="@string/eq_no"
+ android:text="鍗″彿锛�"
android:textColor="#666666"
android:textSize="@dimen/new_card_size" />
@@ -69,7 +175,6 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
- android:inputType="number"
android:textColor="#333333"
android:textSize="@dimen/new_card_size" />
</LinearLayout>
@@ -77,94 +182,78 @@
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_marginBottom="16dp"
+ android:layout_marginBottom="6dp"
android:gravity="center_vertical"
android:orientation="horizontal">
<TextView
- android:layout_width="80dp"
+ android:layout_width="105dp"
android:layout_height="wrap_content"
- android:text="濮撳悕"
+ android:text="濮撳悕锛�"
android:textColor="#666666"
android:textSize="@dimen/new_card_size" />
- <LinearLayout
- android:layout_width="0dp"
+ <TextView
+ android:id="@+id/newCard_userName"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_weight="1"
- android:background="#FFFFFF"
- android:orientation="vertical">
-
- <EditText
- android:id="@+id/newCard_name"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:background="@null"
- android:hint="璇疯緭鍏ュ鍚�"
- android:inputType="textPersonName"
- android:padding="12dp"
- android:textSize="@dimen/new_card_size" />
- </LinearLayout>
-
- <ImageView
- android:id="@+id/newCard_scanBtn"
- android:layout_width="45dp"
- android:layout_height="45dp"
- android:background="?attr/selectableItemBackgroundBorderless"
- android:padding="10dp"
- android:src="@mipmap/icon_scan"
- />
+ android:layout_marginStart="8dp"
+ android:textColor="#333333"
+ android:textSize="@dimen/new_card_size" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_marginBottom="16dp"
+ android:layout_marginBottom="6dp"
android:gravity="center_vertical"
android:orientation="horizontal">
<TextView
- android:layout_width="80dp"
+ android:layout_width="105dp"
android:layout_height="wrap_content"
- android:text="韬唤璇佸彿"
+ android:text="韬唤璇佸彿锛�"
android:textColor="#666666"
android:textSize="@dimen/new_card_size" />
- <LinearLayout
+ <TextView
+ android:id="@+id/newCard_idCard"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:background="#FFFFFF"
- android:orientation="vertical">
-
- <EditText
- android:id="@+id/newCard_id"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:background="@null"
- android:digits="0123456789Xx"
- android:hint="璇疯緭鍏ヨ韩浠借瘉鍙�"
- android:inputType="text"
- android:maxLength="18"
- android:padding="12dp"
- android:textSize="@dimen/new_card_size" />
- </LinearLayout>
+ android:layout_marginStart="8dp"
+ android:textColor="#333333"
+ android:textSize="@dimen/new_card_size" />
</LinearLayout>
- <TextView
- android:id="@+id/newCard_idTip"
- android:layout_width="wrap_content"
+ <LinearLayout
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_marginBottom="16dp"
- android:text="鎵弿鍚庤鏍稿韬唤淇℃伅鏃犺"
- android:textColor="#FF4500"
- android:visibility="gone" />
+ android:layout_marginBottom="5dp"
+ android:gravity="center_vertical"
+ android:orientation="horizontal">
+
+ <TextView
+ android:layout_width="105dp"
+ android:layout_height="wrap_content"
+ android:text="鍐滄埛缂栧彿锛�"
+ android:textColor="#666666"
+ android:textSize="@dimen/new_card_size" />
+
+ <TextView
+ android:id="@+id/newCard_farmerCode"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="8dp"
+ android:textColor="#333333"
+ 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_marginBottom="16dp"
+ android:layout_marginBottom="10dp"
app:cardCornerRadius="8dp"
app:cardElevation="2dp">
@@ -177,135 +266,187 @@
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_marginBottom="16dp"
- android:text="鑱旂郴鏂瑰紡"
- android:textColor="#333333"
- android:textSize="18sp"
- android:textStyle="bold" />
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginBottom="16dp"
- android:gravity="center_vertical"
- android:orientation="horizontal">
-
- <TextView
- android:layout_width="80dp"
- android:layout_height="wrap_content"
- android:text="鐢佃瘽"
- android:textColor="#666666"
- android:textSize="@dimen/new_card_size" />
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:background="#FFFFFF"
- android:orientation="vertical">
-
- <EditText
- android:id="@+id/newCard_phone"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:background="@null"
- android:hint="璇疯緭鍏ユ墜鏈哄彿鐮�"
- android:inputType="phone"
- android:maxLength="11"
- android:padding="12dp"
- android:textSize="@dimen/new_card_size" />
- </LinearLayout>
- </LinearLayout>
- </LinearLayout>
- </androidx.cardview.widget.CardView>
-
- <androidx.cardview.widget.CardView
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- app:cardCornerRadius="8dp"
- app:cardElevation="2dp">
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical"
- android:padding="16dp">
-
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginBottom="16dp"
+ android:layout_marginBottom="10dp"
android:text="璐圭敤淇℃伅"
android:textColor="#333333"
android:textSize="18sp"
android:textStyle="bold" />
-
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
+ android:layout_marginBottom="12dp"
android:gravity="center_vertical"
android:orientation="horizontal">
<TextView
- android:layout_width="80dp"
+ android:layout_width="105dp"
android:layout_height="wrap_content"
- android:text="宸ユ湰璐�(鍏�)"
+ android:text="宸ユ湰璐癸細"
android:textColor="#666666"
android:textSize="@dimen/new_card_size" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:background="#FFFFFF"
- android:orientation="vertical">
+ android:background="@drawable/edit_text_bg_selector"
+ android:orientation="horizontal"
+ android:gravity="center_vertical"
+ android:paddingStart="10dp"
+ android:paddingEnd="10dp"
+ android:paddingTop="8dp"
+ android:paddingBottom="8dp">
<EditText
- android:id="@+id/newCard_morny"
+ android:id="@+id/newCard_cardFee"
+ android:layout_width="0dp"
+ android:layout_weight="1"
+ android:layout_height="wrap_content"
+ android:background="@null"
+ android:hint="璇疯緭鍏ュ伐鏈垂(閫夊~)"
+ android:inputType="numberDecimal"
+ android:textColor="#333333"
+ android:textColorHint="#BBBBBB"
+ android:textSize="@dimen/new_card_size" />
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="鍏�"
+ android:textColor="#666666"
+ android:textSize="@dimen/new_card_size" />
+ </LinearLayout>
+ </LinearLayout>
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginBottom="12dp"
+ android:gravity="center_vertical"
+ android:orientation="horizontal">
+
+ <TextView
+ android:layout_width="105dp"
+ android:layout_height="wrap_content"
+ android:text="鍏呭�奸噾棰濓細"
+ android:textColor="#666666"
+ android:textSize="@dimen/new_card_size" />
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:background="@drawable/edit_text_bg_selector"
+ android:orientation="horizontal"
+ android:gravity="center_vertical"
+ android:paddingStart="10dp"
+ android:paddingEnd="10dp"
+ android:paddingTop="8dp"
+ android:paddingBottom="8dp">
+
+ <EditText
+ android:id="@+id/newCard_rechargeAmount"
+ android:layout_width="0dp"
+ android:layout_weight="1"
+ android:layout_height="wrap_content"
+ android:background="@null"
+ android:hint="璇疯緭鍏ュ厖鍊奸噾棰�(閫夊~)"
+ android:inputType="numberDecimal"
+ android:textColor="#333333"
+ android:textColorHint="#BBBBBB"
+ android:textSize="@dimen/new_card_size" />
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="鍏�"
+ android:textColor="#666666"
+ android:textSize="@dimen/new_card_size" />
+ </LinearLayout>
+ </LinearLayout>
+
+
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginBottom="5dp"
+ android:gravity="center_vertical"
+ android:orientation="horizontal">
+
+ <TextView
+ android:layout_width="105dp"
+ android:layout_height="wrap_content"
+ android:text="澶囨敞锛�"
+ android:textColor="#666666"
+ android:textSize="@dimen/new_card_size" />
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:background="@drawable/edit_text_bg_selector"
+ android:orientation="vertical"
+ android:paddingStart="10dp"
+ android:paddingEnd="10dp"
+ android:paddingTop="8dp"
+ android:paddingBottom="8dp">
+
+ <EditText
+ android:id="@+id/newCard_remark"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@null"
- android:hint="璇疯緭鍏ュ伐鏈垂"
- android:inputType="numberDecimal"
- android:padding="12dp"
+ android:hint="璇疯緭鍏ュ娉�(閫夊~)"
+ android:textColor="#333333"
+ android:textColorHint="#BBBBBB"
android:textSize="@dimen/new_card_size" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>
- <!-- 闅愯棌鐨勬按鏉冨唴姘撮噺閮ㄥ垎 -->
- <LinearLayout
+ <androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:visibility="gone">
+ app:cardCornerRadius="8dp"
+ app:cardElevation="2dp">
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="姘存潈鍐呮按閲忥細"
- android:textSize="@dimen/new_card_size" />
-
- <EditText
- android:id="@+id/newCard_water"
+ <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:inputType="number"
- android:maxLength="5"
- android:textSize="@dimen/new_card_size" />
- </LinearLayout>
+ android:orientation="vertical"
+ android:padding="16dp">
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginBottom="10dp"
+ android:text="鏀粯鏂瑰紡"
+ android:textColor="#333333"
+ android:textSize="18sp"
+ android:textStyle="bold" />
+
+ <RadioGroup
+ android:id="@+id/newCard_paymentMethod"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal">
+ <!-- 鍔ㄦ�佹坊鍔燫adioButton锛岀Щ闄ゅ浐瀹氱殑RadioButton -->
+ </RadioGroup>
+ </LinearLayout>
+ </androidx.cardview.widget.CardView>
</LinearLayout>
</ScrollView>
-
+
<TextView
android:id="@+id/newCard_registBtn"
android:layout_width="match_parent"
android:layout_height="56dp"
- android:layout_alignParentBottom="true"
- android:layout_marginStart="16dp"
- android:layout_marginEnd="16dp"
- android:layout_marginBottom="16dp"
- android:background="#4285F4"
+ android:background="@color/bottom_color"
android:gravity="center"
- android:text="纭寮�鎴�"
+ android:text="纭寮�鍗�"
android:textColor="#FFFFFF"
- android:textSize="16sp" />
-</RelativeLayout>
\ No newline at end of file
+ android:textSize="16sp"
+ android:visibility="gone"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent" />
+
+</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallBeatIndicator.java b/pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallBeatIndicator.java
index a8a6e15..ea67842 100644
--- a/pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallBeatIndicator.java
+++ b/pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallBeatIndicator.java
@@ -1,9 +1,9 @@
package com.wang.avi.indicators;
+import android.animation.ValueAnimator;
import android.graphics.Canvas;
import android.graphics.Paint;
-import android.animation.ValueAnimator;
import com.wang.avi.Indicator;
import java.util.ArrayList;
diff --git a/pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallClipRotateIndicator.java b/pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallClipRotateIndicator.java
index 5d65321..be07563 100644
--- a/pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallClipRotateIndicator.java
+++ b/pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallClipRotateIndicator.java
@@ -1,10 +1,10 @@
package com.wang.avi.indicators;
+import android.animation.ValueAnimator;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.RectF;
-import android.animation.ValueAnimator;
import com.wang.avi.Indicator;
import java.util.ArrayList;
diff --git a/pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallClipRotateMultipleIndicator.java b/pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallClipRotateMultipleIndicator.java
index 2c59506..a1512cd 100644
--- a/pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallClipRotateMultipleIndicator.java
+++ b/pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallClipRotateMultipleIndicator.java
@@ -1,10 +1,10 @@
package com.wang.avi.indicators;
+import android.animation.ValueAnimator;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.RectF;
-import android.animation.ValueAnimator;
import com.wang.avi.Indicator;
import java.util.ArrayList;
diff --git a/pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallClipRotatePulseIndicator.java b/pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallClipRotatePulseIndicator.java
index 3687ed3..94a1c40 100644
--- a/pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallClipRotatePulseIndicator.java
+++ b/pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallClipRotatePulseIndicator.java
@@ -1,10 +1,10 @@
package com.wang.avi.indicators;
+import android.animation.ValueAnimator;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.RectF;
-import android.animation.ValueAnimator;
import com.wang.avi.Indicator;
import java.util.ArrayList;
diff --git a/pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallGridBeatIndicator.java b/pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallGridBeatIndicator.java
index c115c6a..2bd3222 100644
--- a/pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallGridBeatIndicator.java
+++ b/pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallGridBeatIndicator.java
@@ -1,9 +1,9 @@
package com.wang.avi.indicators;
+import android.animation.ValueAnimator;
import android.graphics.Canvas;
import android.graphics.Paint;
-import android.animation.ValueAnimator;
import com.wang.avi.Indicator;
import java.util.ArrayList;
diff --git a/pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallGridPulseIndicator.java b/pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallGridPulseIndicator.java
index e0f043f..e966173 100644
--- a/pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallGridPulseIndicator.java
+++ b/pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallGridPulseIndicator.java
@@ -1,9 +1,9 @@
package com.wang.avi.indicators;
+import android.animation.ValueAnimator;
import android.graphics.Canvas;
import android.graphics.Paint;
-import android.animation.ValueAnimator;
import com.wang.avi.Indicator;
import java.util.ArrayList;
diff --git a/pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallPulseIndicator.java b/pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallPulseIndicator.java
index eef80b0..f827a79 100644
--- a/pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallPulseIndicator.java
+++ b/pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallPulseIndicator.java
@@ -1,9 +1,9 @@
package com.wang.avi.indicators;
+import android.animation.ValueAnimator;
import android.graphics.Canvas;
import android.graphics.Paint;
-import android.animation.ValueAnimator;
import com.wang.avi.Indicator;
import java.util.ArrayList;
diff --git a/pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallPulseSyncIndicator.java b/pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallPulseSyncIndicator.java
index 862f92d..78a69a7 100644
--- a/pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallPulseSyncIndicator.java
+++ b/pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallPulseSyncIndicator.java
@@ -1,9 +1,9 @@
package com.wang.avi.indicators;
+import android.animation.ValueAnimator;
import android.graphics.Canvas;
import android.graphics.Paint;
-import android.animation.ValueAnimator;
import com.wang.avi.Indicator;
import java.util.ArrayList;
diff --git a/pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallScaleIndicator.java b/pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallScaleIndicator.java
index 3e52f7c..1e055ce 100644
--- a/pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallScaleIndicator.java
+++ b/pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallScaleIndicator.java
@@ -1,10 +1,10 @@
package com.wang.avi.indicators;
+import android.animation.ValueAnimator;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.view.animation.LinearInterpolator;
-import android.animation.ValueAnimator;
import com.wang.avi.Indicator;
import java.util.ArrayList;
diff --git a/pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallScaleMultipleIndicator.java b/pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallScaleMultipleIndicator.java
index 43d4aaa..8507a67 100644
--- a/pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallScaleMultipleIndicator.java
+++ b/pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallScaleMultipleIndicator.java
@@ -1,10 +1,10 @@
package com.wang.avi.indicators;
+import android.animation.ValueAnimator;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.view.animation.LinearInterpolator;
-import android.animation.ValueAnimator;
import com.wang.avi.Indicator;
import java.util.ArrayList;
diff --git a/pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallScaleRippleIndicator.java b/pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallScaleRippleIndicator.java
index d791f71..c3d8172 100644
--- a/pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallScaleRippleIndicator.java
+++ b/pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallScaleRippleIndicator.java
@@ -1,10 +1,9 @@
package com.wang.avi.indicators;
+import android.animation.ValueAnimator;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.view.animation.LinearInterpolator;
-
-import android.animation.ValueAnimator;
import java.util.ArrayList;
diff --git a/pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallScaleRippleMultipleIndicator.java b/pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallScaleRippleMultipleIndicator.java
index 5dc132b..1aa0a81 100644
--- a/pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallScaleRippleMultipleIndicator.java
+++ b/pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallScaleRippleMultipleIndicator.java
@@ -1,10 +1,9 @@
package com.wang.avi.indicators;
+import android.animation.ValueAnimator;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.view.animation.LinearInterpolator;
-
-import android.animation.ValueAnimator;
import java.util.ArrayList;
diff --git a/pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallSpinFadeLoaderIndicator.java b/pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallSpinFadeLoaderIndicator.java
index d93fbb3..3ccfef0 100644
--- a/pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallSpinFadeLoaderIndicator.java
+++ b/pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallSpinFadeLoaderIndicator.java
@@ -1,9 +1,9 @@
package com.wang.avi.indicators;
+import android.animation.ValueAnimator;
import android.graphics.Canvas;
import android.graphics.Paint;
-import android.animation.ValueAnimator;
import com.wang.avi.Indicator;
import java.util.ArrayList;
diff --git a/pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallTrianglePathIndicator.java b/pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallTrianglePathIndicator.java
index 1a3a9ba..28a60e2 100644
--- a/pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallTrianglePathIndicator.java
+++ b/pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallTrianglePathIndicator.java
@@ -1,10 +1,10 @@
package com.wang.avi.indicators;
+import android.animation.ValueAnimator;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.view.animation.LinearInterpolator;
-import android.animation.ValueAnimator;
import com.wang.avi.Indicator;
import java.util.ArrayList;
diff --git a/pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallZigZagDeflectIndicator.java b/pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallZigZagDeflectIndicator.java
index 93aec2e..7550a82 100644
--- a/pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallZigZagDeflectIndicator.java
+++ b/pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallZigZagDeflectIndicator.java
@@ -1,8 +1,9 @@
package com.wang.avi.indicators;
-import android.view.animation.LinearInterpolator;
import android.animation.ValueAnimator;
+import android.view.animation.LinearInterpolator;
+
import java.util.ArrayList;
/**
diff --git a/pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallZigZagIndicator.java b/pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallZigZagIndicator.java
index d01c8ff..ff4427c 100644
--- a/pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallZigZagIndicator.java
+++ b/pickerviewlibrary/src/main/java/com/wang/avi/indicators/BallZigZagIndicator.java
@@ -1,10 +1,10 @@
package com.wang.avi.indicators;
+import android.animation.ValueAnimator;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.view.animation.LinearInterpolator;
-import android.animation.ValueAnimator;
import com.wang.avi.Indicator;
import java.util.ArrayList;
diff --git a/pickerviewlibrary/src/main/java/com/wang/avi/indicators/CubeTransitionIndicator.java b/pickerviewlibrary/src/main/java/com/wang/avi/indicators/CubeTransitionIndicator.java
index 181024f..9fa4204 100644
--- a/pickerviewlibrary/src/main/java/com/wang/avi/indicators/CubeTransitionIndicator.java
+++ b/pickerviewlibrary/src/main/java/com/wang/avi/indicators/CubeTransitionIndicator.java
@@ -1,11 +1,11 @@
package com.wang.avi.indicators;
+import android.animation.ValueAnimator;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.RectF;
import android.view.animation.LinearInterpolator;
-import android.animation.ValueAnimator;
import com.wang.avi.Indicator;
import java.util.ArrayList;
diff --git a/pickerviewlibrary/src/main/java/com/wang/avi/indicators/LineScaleIndicator.java b/pickerviewlibrary/src/main/java/com/wang/avi/indicators/LineScaleIndicator.java
index 83bfe86..c51afef 100644
--- a/pickerviewlibrary/src/main/java/com/wang/avi/indicators/LineScaleIndicator.java
+++ b/pickerviewlibrary/src/main/java/com/wang/avi/indicators/LineScaleIndicator.java
@@ -1,10 +1,10 @@
package com.wang.avi.indicators;
+import android.animation.ValueAnimator;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.RectF;
-import android.animation.ValueAnimator;
import com.wang.avi.Indicator;
import java.util.ArrayList;
diff --git a/pickerviewlibrary/src/main/java/com/wang/avi/indicators/LineScalePartyIndicator.java b/pickerviewlibrary/src/main/java/com/wang/avi/indicators/LineScalePartyIndicator.java
index b316e23..31ee441 100644
--- a/pickerviewlibrary/src/main/java/com/wang/avi/indicators/LineScalePartyIndicator.java
+++ b/pickerviewlibrary/src/main/java/com/wang/avi/indicators/LineScalePartyIndicator.java
@@ -1,10 +1,10 @@
package com.wang.avi.indicators;
+import android.animation.ValueAnimator;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.RectF;
-import android.animation.ValueAnimator;
import com.wang.avi.Indicator;
import java.util.ArrayList;
diff --git a/pickerviewlibrary/src/main/java/com/wang/avi/indicators/PacmanIndicator.java b/pickerviewlibrary/src/main/java/com/wang/avi/indicators/PacmanIndicator.java
index 9a3a2e6..1090abb 100644
--- a/pickerviewlibrary/src/main/java/com/wang/avi/indicators/PacmanIndicator.java
+++ b/pickerviewlibrary/src/main/java/com/wang/avi/indicators/PacmanIndicator.java
@@ -1,11 +1,11 @@
package com.wang.avi.indicators;
+import android.animation.ValueAnimator;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.RectF;
import android.view.animation.LinearInterpolator;
-import android.animation.ValueAnimator;
import com.wang.avi.Indicator;
import java.util.ArrayList;
--
Gitblit v1.8.0