添加搜索连接设备ui改版

This commit is contained in:
yezhiqiu
2025-12-22 10:43:35 +08:00
parent 5b489a2519
commit 2b36860052
11 changed files with 366 additions and 176 deletions

View File

@@ -0,0 +1,44 @@
package com.abbidot.tracker.adapter
import android.content.Context
import android.view.View
import androidx.core.content.ContextCompat
import com.abbidot.baselibrary.constant.ConState
import com.abbidot.baselibrary.list.BaseRecyclerAdapter
import com.abbidot.baselibrary.list.RecyclerViewHolder
import com.abbidot.tracker.R
import com.abbidot.tracker.bean.DeviceBean
/**
*Created by .yzq on 2025/12/19/周五.
* @link
* @description:
*/
class ScanDeviceAdapter(
ctx: Context, list: MutableList<DeviceBean>?
) : BaseRecyclerAdapter<DeviceBean>(ctx, list) {
var isConnect = false
override fun getEmptyLayoutId(viewType: Int) = 0
override fun getItemLayoutId(viewType: Int) = R.layout.layout_san_device_item
override fun bindData(holder: RecyclerViewHolder?, position: Int, item: DeviceBean) {
holder?.let {
it.getTextView(R.id.tv_add_new_tracker3_device_out_id_item).apply {
text = item.deviceOutId
val tColor = if (isConnect) {
R.color.line_color1
} else {
R.color.data_black_color
}
setTextColor(ContextCompat.getColor(mContext, tColor))
}
holder.getView(R.id.ld_add_new_tracker3_connect_state).visibility =
if (item.conState == ConState.CONNECTING) View.VISIBLE
else View.GONE
}
}
}

View File

@@ -26,9 +26,11 @@ import androidx.core.view.WindowInsetsCompat
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentTransaction import androidx.fragment.app.FragmentTransaction
import androidx.viewbinding.ViewBinding import androidx.viewbinding.ViewBinding
import com.abbidot.baselibrary.constant.MMKVKey
import com.abbidot.baselibrary.network.exception.ErrorCode import com.abbidot.baselibrary.network.exception.ErrorCode
import com.abbidot.baselibrary.util.AppUtils import com.abbidot.baselibrary.util.AppUtils
import com.abbidot.baselibrary.util.LogUtil import com.abbidot.baselibrary.util.LogUtil
import com.abbidot.baselibrary.util.MMKVUtil
import com.abbidot.tracker.R import com.abbidot.tracker.R
import com.abbidot.tracker.constant.ConstantInt import com.abbidot.tracker.constant.ConstantInt
import com.abbidot.tracker.constant.GetResultCallback import com.abbidot.tracker.constant.GetResultCallback
@@ -94,6 +96,7 @@ abstract class BaseActivity<T : ViewBinding>(val inflater: (inflater: LayoutInfl
//防止按钮多次点击 //防止按钮多次点击
private var mLimitExecutionTime = 0L private var mLimitExecutionTime = 0L
var checkCrash = true
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
isFrontRunning = true isFrontRunning = true
@@ -195,6 +198,11 @@ abstract class BaseActivity<T : ViewBinding>(val inflater: (inflater: LayoutInfl
* 初始化 * 初始化
*/ */
open fun initData() { open fun initData() {
if (checkCrash) {
//出现闪退,退出当前页面
val isCrash = MMKVUtil.getBoolean(MMKVKey.isCrash, false)
if (isCrash) finish()
}
//沉浸式状态栏 //沉浸式状态栏
QMUIStatusBarHelper.translucent(window) QMUIStatusBarHelper.translucent(window)
//判断是否是深色模式 //判断是否是深色模式
@@ -560,6 +568,7 @@ abstract class BaseActivity<T : ViewBinding>(val inflater: (inflater: LayoutInfl
//拦截请求异常code //拦截请求异常code
if (netErrorCodeTips(exceptionCode)) { if (netErrorCodeTips(exceptionCode)) {
//已经处理相关错误码就直接返回 //已经处理相关错误码就直接返回
getResultCallback.onErrorCode()
return return
} }
} }

View File

@@ -9,5 +9,6 @@ interface GetResultCallback {
fun onResult(any: Any) fun onResult(any: Any)
//默认可以不重写相当于java中的default修饰的 //默认可以不重写相当于java中的default修饰的
fun onRequestError(exceptionCode:String?) {} fun onRequestError(exceptionCode: String?) {}
fun onErrorCode() {}
} }

View File

@@ -124,6 +124,7 @@ class HomeV2Activity : BaseActivity<ActivityHomeV2Binding>(ActivityHomeV2Binding
override fun initData() { override fun initData() {
isEdgeToEdgeAdapterNavigationBars = false isEdgeToEdgeAdapterNavigationBars = false
checkCrash=false
super.initData() super.initData()
setStatusBarLight() setStatusBarLight()
@@ -168,7 +169,7 @@ class HomeV2Activity : BaseActivity<ActivityHomeV2Binding>(ActivityHomeV2Binding
MMKVUtil.putBoolean(MMKVKey.isCrash, false) MMKVUtil.putBoolean(MMKVKey.isCrash, false)
showToast(R.string.txt_show_crash) showToast(R.string.txt_show_crash)
mCountdownType = ConstantInt.Type0 mCountdownType = ConstantInt.Type0
mCountDownTimerViewModel.startCountDown(5) mCountDownTimerViewModel.startCountDown(4)
} else { } else {
val connectivityManager = getSystemService(CONNECTIVITY_SERVICE) as ConnectivityManager val connectivityManager = getSystemService(CONNECTIVITY_SERVICE) as ConnectivityManager
val networkCallback: ConnectivityManager.NetworkCallback = val networkCallback: ConnectivityManager.NetworkCallback =

View File

@@ -94,7 +94,7 @@ class AddNewTracker1Activity :
*/ */
private fun checkPermissions() { private fun checkPermissions() {
Util.checkBluetoothPermissionsEnabled(mContext, { Util.checkBluetoothPermissionsEnabled(mContext, {
val intent = Intent(mContext, AddNewTracker2Activity::class.java) val intent = Intent(mContext, AddNewTracker3Activity::class.java)
intent.putExtra(ConstantString.isFirstBind, isFirstBind) intent.putExtra(ConstantString.isFirstBind, isFirstBind)
startActivity(intent) startActivity(intent)
}) })

View File

@@ -1,143 +1,235 @@
package com.abbidot.tracker.ui.activity.device package com.abbidot.tracker.ui.activity.device
import android.animation.AnimatorSet
import android.content.Intent import android.content.Intent
import android.text.TextUtils import android.text.TextUtils
import android.view.View import android.view.View
import android.widget.NumberPicker
import androidx.activity.viewModels import androidx.activity.viewModels
import com.abbidot.baselibrary.constant.ConState import com.abbidot.baselibrary.constant.ConState
import com.abbidot.baselibrary.constant.EventName import com.abbidot.baselibrary.constant.EventName
import com.abbidot.baselibrary.eventbus.XEventBus import com.abbidot.baselibrary.eventbus.XEventBus
import com.abbidot.baselibrary.list.BaseRecyclerAdapter
import com.abbidot.baselibrary.util.LogUtil
import com.abbidot.tracker.R import com.abbidot.tracker.R
import com.abbidot.tracker.adapter.ScanDeviceAdapter
import com.abbidot.tracker.base.BaseActivity import com.abbidot.tracker.base.BaseActivity
import com.abbidot.tracker.base.BaseDialog
import com.abbidot.tracker.bean.BleTrackDeviceBean import com.abbidot.tracker.bean.BleTrackDeviceBean
import com.abbidot.tracker.bean.DataBean import com.abbidot.tracker.bean.DeviceBean
import com.abbidot.tracker.constant.ConstantInt
import com.abbidot.tracker.constant.ConstantString import com.abbidot.tracker.constant.ConstantString
import com.abbidot.tracker.constant.GetResultCallback import com.abbidot.tracker.constant.GetResultCallback
import com.abbidot.tracker.databinding.ActivityAddNewTracker3Binding import com.abbidot.tracker.databinding.ActivityAddNewTracker3Binding
import com.abbidot.tracker.util.Util
import com.abbidot.tracker.util.ViewUtil import com.abbidot.tracker.util.ViewUtil
import com.abbidot.tracker.util.bluetooth.SRBleUtil import com.abbidot.tracker.util.bluetooth.SRBleUtil
import com.abbidot.tracker.vm.ConnectionDeviceViewModel import com.abbidot.tracker.vm.ConnectionDeviceViewModel
import com.abbidot.tracker.vm.TrackerSetViewModel import com.abbidot.tracker.vm.TrackerSetViewModel
import com.clj.fastble.BleManager
import com.clj.fastble.callback.BleScanCallback
import com.clj.fastble.data.BleDevice
import com.clj.fastble.scan.BleScanRuleConfig
import com.clj.fastble.utils.HexUtil
import com.qmuiteam.qmui.util.QMUIDisplayHelper
class AddNewTracker3Activity : class AddNewTracker3Activity :
BaseActivity<ActivityAddNewTracker3Binding>(ActivityAddNewTracker3Binding::inflate), BaseActivity<ActivityAddNewTracker3Binding>(ActivityAddNewTracker3Binding::inflate) {
NumberPicker.OnValueChangeListener {
private val mTrackerSetViewModel: TrackerSetViewModel by viewModels() private val mTrackerSetViewModel: TrackerSetViewModel by viewModels()
private val mConnectionDeviceViewModel: ConnectionDeviceViewModel by viewModels() private val mConnectionDeviceViewModel: ConnectionDeviceViewModel by viewModels()
private var isFirstBind = false private var isFirstBind = false
private var mDeviceOutId = ""
private var mDeviceId = "" private var mDeviceId = ""
private var mScanDeviceList: ArrayList<DataBean>? = null private var mDeviceOutId = ""
private var mConBleMac = "" private var mConBleMac = ""
private lateinit var mScanDeviceAdapter: ScanDeviceAdapter
private var mAnimatorSet: AnimatorSet? = null
override fun getTopBar() = mViewBinding.ilAddNewTracker3TopBar.titleTopBar override fun getTopBar() = mViewBinding.ilAddNewTracker3TopBar.titleTopBar
override fun initData() { override fun initData() {
super.initData() super.initData()
setTopBarTitle(R.string.txt_add_new_tracker) setTopBarTitle(R.string.txt_add_new_tracker)
setLeftBackImage(R.drawable.icon_white_back_svg) setLeftBackImage(R.drawable.icon_white_back_svg)
mRightImageButton = addRightImageButton(R.drawable.icon_refresh)
intent.extras?.apply { intent.extras?.apply {
isFirstBind = getBoolean(ConstantString.isFirstBind, false) isFirstBind = getBoolean(ConstantString.isFirstBind, false)
mDeviceOutId = getString(ConstantString.DeviceOutId, "")
mScanDeviceList = Util.getParcelableArrayListAdaptive(
intent, ConstantString.DeviceInfo, DataBean::class.java
)
} }
if (null == mScanDeviceList) finish() mScanDeviceAdapter = ScanDeviceAdapter(mContext, mutableListOf()).apply {
setOnItemClickListener(object : BaseRecyclerAdapter.OnItemClickListener {
mViewBinding.apply { override fun onItemClick(itemView: View?, pos: Int) {
if (isConnect) return
mScanDeviceList?.let { SRBleUtil.instance.cancelBleScan("AddNewTracker2Activity,开始连接蓝牙,取消蓝牙扫描")
if (it.size == 1) { disconnectBle()
mDeviceOutId = it[0].name getData().let {
tvAddNewTracker3DeviceOutId.visibility = View.VISIBLE isConnect = true
rlAddNewTracker3DeviceLayout.visibility = View.GONE it[pos].conState = ConState.CONNECTING
tvAddNewTracker3DeviceOutId.text = mDeviceOutId notifyItemRangeChanged(0, it.size)
} else if (it.size > 1) { mDeviceOutId = it[pos].deviceOutId
mDeviceOutId = it[0].name mConBleMac = it[pos].macId
val deviceOutIds = mutableListOf<String>() mTrackerSetViewModel.bindDevice(
for (d in it) {
deviceOutIds.add(d.name)
}
tvAddNewTracker3DeviceOutId.visibility = View.GONE
rlAddNewTracker3DeviceLayout.visibility = View.VISIBLE
npAddNewTracker3DeviceList.let { np ->
ViewUtil.instance.setNumberPickerAttributes(
mContext,
np,
0,
it.size - 1,
0,
26,
valueChangeListener = this@AddNewTracker3Activity,
removeUpDownLine = true,
loopSelector = false
)
np.displayedValues = deviceOutIds.toTypedArray()
}
}
}
setOnClickListenerViews(btnPairTrackerNo, btnPairTrackerYes, mRightImageButton)
}
}
override fun liveDataObserve() {
//接收蓝牙连接状态
XEventBus.observe(this, EventName.ConnectDeviceState) { ble: BleTrackDeviceBean ->
setButtonEnabled(mViewBinding.btnPairTrackerYes, ConstantInt.Type1)
if (ble.conState == ConState.CONNECTED) {
mConBleMac = ble.mac
val intent = Intent(mContext, AddPairedSuccessActivity::class.java)
intent.putExtra(ConstantString.DeviceOutId, mDeviceOutId)
intent.putExtra(ConstantString.isFirstBind, isFirstBind)
intent.putExtra(ConstantString.DeviceId, mDeviceId)
intent.putExtra(ConstantString.Mac, ble.mac)
startActivity(intent)
}
}
//搜索蓝牙的设备状态
XEventBus.observe(this, EventName.ActionConDeviceState) { conState: Int ->
if (conState == ConState.DEVICE_NOT_FOUND) {
setButtonEnabled(mViewBinding.btnPairTrackerYes, ConstantInt.Type1)
showToast(R.string.txt_ble_connect_fail)
}
}
XEventBus.observe(this, EventName.RefreshDevice) {
finish()
}
mTrackerSetViewModel.mAddBindDeviceLiveData.observe(this) {
setButtonEnabled(mViewBinding.btnPairTrackerYes, ConstantInt.Type1)
dealRequestResult(it, object : GetResultCallback {
override fun onResult(any: Any) {
it.getOrNull()?.apply {
mDeviceId = deviceId
setButtonEnabled(mViewBinding.btnPairTrackerYes, ConstantInt.Type0)
//连接蓝牙,方便发送激活指令
mConnectionDeviceViewModel.connectDeviceToDeviceOutId(
this@AddNewTracker3Activity, mDeviceOutId this@AddNewTracker3Activity, mDeviceOutId
) )
} }
} }
}) })
} }
mViewBinding.apply {
ViewUtil.instance.setRecyclerViewVerticalLinearLayout(
mContext,
rvAddNewTracker3DeviceList,
mScanDeviceAdapter,
top = QMUIDisplayHelper.dpToPx(12)
)
setOnClickListenerViews(ivAddNewTracker3RefreshBtn)
}
startScanBle()
} }
override fun onValueChange(picker: NumberPicker?, oldVal: Int, newVal: Int) { override fun liveDataObserve() {
mScanDeviceList?.let { //接收蓝牙连接状态
mDeviceOutId = it[newVal].name XEventBus.observe(this, EventName.ConnectDeviceState) { ble: BleTrackDeviceBean ->
if (mConBleMac == ble.mac) {
if (ble.conState == ConState.CONNECTED) {
setNoConnectState()
val intent = Intent(mContext, AddPairedSuccessActivity::class.java)
intent.putExtra(ConstantString.DeviceOutId, mDeviceOutId)
intent.putExtra(ConstantString.isFirstBind, isFirstBind)
intent.putExtra(ConstantString.DeviceId, mDeviceId)
intent.putExtra(ConstantString.Mac, ble.mac)
startActivity(intent)
} else if (ble.conState == ConState.CONNECTION_FAIL) {
setNoConnectState()
} }
} }
}
//搜索蓝牙的设备状态
// XEventBus.observe(this, EventName.ActionConDeviceState) { conState: Int ->
// if (conState == ConState.DEVICE_NOT_FOUND) {
// setNoConnectState()
// showToast(R.string.txt_ble_connect_fail)
// }
// }
XEventBus.observe(this, EventName.RefreshDevice) {
finish()
}
mTrackerSetViewModel.mAddBindDeviceLiveData.observe(this) {
dealRequestResult(it, object : GetResultCallback {
override fun onResult(any: Any) {
it.getOrNull()?.apply {
mDeviceId = deviceId
//连接蓝牙,方便发送激活指令
mConnectionDeviceViewModel.connectDeviceToMac(
this@AddNewTracker3Activity, mConBleMac
)
}
}
override fun onErrorCode() {
super.onErrorCode()
setNoConnectState()
}
})
}
}
private fun setNoConnectState() {
mScanDeviceAdapter.apply {
getData().let {
if (it.size > 0) {
isConnect = false
for (device in it) {
if (device.conState == ConState.CONNECTING) device.conState =
ConState.DISCONNECTED
}
notifyItemRangeChanged(0, it.size)
}
}
}
}
private fun startScanBle() {
SRBleUtil.instance.cancelBleScan("AddNewTracker2Activity,已经在扫描蓝牙,取消蓝牙扫描")
mScanDeviceAdapter.getData().let { list ->
mScanDeviceAdapter.notifyItemRangeRemoved(0, list.size)
list.clear()
mViewBinding.rvAddNewTracker3DeviceList.visibility = View.GONE
}
mViewBinding.ivAddNewTracker3RefreshBtn.let {
it.isEnabled = false
if (null == mAnimatorSet) {
mAnimatorSet = ViewUtil.instance.viewAlphaAndRotationObjectAnimator(it, true)
} else {
mAnimatorSet!!.start()
}
}
// 扫描超时时间,可选
val scanRuleConfig = BleScanRuleConfig.Builder().setScanTimeOut(15 * 1000).build()
BleManager.getInstance().initScanRule(scanRuleConfig)
BleManager.getInstance().scan(object : BleScanCallback() {
override fun onScanStarted(success: Boolean) {
LogUtil.e("开始扫描...$success")
}
override fun onScanning(bleDevice: BleDevice?) {
LogUtil.d("onScanning....$bleDevice")
bleDevice?.apply {
if (null != name && name.contains(SRBleUtil.instance.trackDeviceBleStartName)) {
val start = 45
val end = start + 6
val subArray = scanRecord.sliceArray(start until end)
LogUtil.e("截取后的外显id广播=${HexUtil.formatHexString(subArray, true)}")
val deviceOutId = subArray.decodeToString()
DeviceBean().let {
it.deviceOutId = deviceOutId
it.macId = mac
mScanDeviceAdapter.getData().let { list ->
ViewUtil.instance.viewShow(mViewBinding.rvAddNewTracker3DeviceList)
list.add(it)
mScanDeviceAdapter.notifyItemRangeInserted(list.size - 1, 1)
}
}
}
}
}
override fun onScanFinished(scanResultList: MutableList<BleDevice>?) {
LogUtil.e("automaticConnection--扫描完成...${scanResultList?.size}")
scanFinished()
}
})
}
private fun scanFinished() {
mAnimatorSet?.cancel()
mViewBinding.ivAddNewTracker3RefreshBtn.isEnabled = true
if (mScanDeviceAdapter.getData().size == 0) {
ViewUtil.instance.showDialog(
mContext,
R.string.txt_no_search_device,
object : BaseDialog.OnDialogOkListener {
override fun onOkClick(dialog: BaseDialog<*>) {
dialog.dismiss()
startScanBle()
}
},
okTextResId = R.string.txt_ok,
cancelTextResId = R.string.txt_cancel,
cancelListener = object : BaseDialog.OnDialogCancelListener {
override fun onCancelClick(dialog: BaseDialog<*>) {
dialog.dismiss()
finish()
}
})
}
}
override fun leftBackOnClick() { override fun leftBackOnClick() {
disconnectBle() disconnectBle()
@@ -156,29 +248,11 @@ class AddNewTracker3Activity :
override fun onClick(v: View?) { override fun onClick(v: View?) {
mViewBinding.apply { mViewBinding.apply {
when (v!!) { when (v!!) {
btnPairTrackerNo -> { ivAddNewTracker3RefreshBtn -> {
val intent = Intent(mContext, AddNewTracker4Activity::class.java)
intent.putExtra(ConstantString.isFirstBind, isFirstBind)
startActivity(intent)
}
btnPairTrackerYes -> {
disconnectBle() disconnectBle()
setButtonEnabled(mViewBinding.btnPairTrackerYes, ConstantInt.Type0) startScanBle()
mTrackerSetViewModel.bindDevice(
this@AddNewTracker3Activity, mDeviceOutId
)
}
mRightImageButton -> {
disconnectBle()
val intent = Intent(mContext, AddNewTracker2Activity::class.java)
intent.putExtra(ConstantString.isFirstBind, isFirstBind)
startActivityFinish(intent)
} }
} }
} }
} }
} }

View File

@@ -34,6 +34,7 @@ import android.widget.ProgressBar
import android.widget.RelativeLayout import android.widget.RelativeLayout
import android.widget.TextView import android.widget.TextView
import androidx.annotation.DrawableRes import androidx.annotation.DrawableRes
import androidx.core.animation.doOnCancel
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.core.view.isGone import androidx.core.view.isGone
import androidx.core.view.isInvisible import androidx.core.view.isInvisible
@@ -728,6 +729,11 @@ class ViewUtil private constructor() {
} }
val animatorSet = AnimatorSet().apply { val animatorSet = AnimatorSet().apply {
play(objectAnimator).with(objectAnimator2) play(objectAnimator).with(objectAnimator2)
//取消动画,状态恢复原来状态
doOnCancel {
view.alpha = 1f
view.rotation = 0f
}
start() start()
} }
return animatorSet return animatorSet

View File

@@ -70,8 +70,7 @@ class GeoCoderViewModel : ViewModel() {
if (AppUtils.isChina(AppUtils.SWITCH_MAP_TYPE)) { if (AppUtils.isChina(AppUtils.SWITCH_MAP_TYPE)) {
baiduMapReverseGeocoder(latitude, longitude) baiduMapReverseGeocoder(latitude, longitude)
} else { } else {
// baiduMapReverseGeocoder(-110.95, 44.65) // baiduMapReverseGeocoder(latitude, longitude)
// mapBoxReverseGeocoder(42.23, -103.18)
mapBoxReverseGeocoder(latitude, longitude) mapBoxReverseGeocoder(latitude, longitude)
} }
} }

View File

@@ -32,8 +32,7 @@
<RelativeLayout <RelativeLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="0dp" android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center_vertical" android:gravity="center_vertical"
android:orientation="horizontal"> android:orientation="horizontal">
@@ -48,74 +47,98 @@
android:layout_height="@dimen/dp_200" android:layout_height="@dimen/dp_200"
android:layout_alignParentEnd="true" android:layout_alignParentEnd="true"
android:src="@drawable/icon_pair_tracker_image2" /> android:src="@drawable/icon_pair_tracker_image2" />
</RelativeLayout>
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_add_new_tracker3_refresh_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_marginTop="@dimen/dp_210"
android:layout_marginEnd="@dimen/dp_18"
android:src="@drawable/icon_refresh" />
<com.abbidot.tracker.widget.TypefaceTextView <com.abbidot.tracker.widget.TypefaceTextView
style="@style/my_TextView_style_v2" style="@style/my_TextView_style_v2"
android:layout_width="match_parent" android:layout_alignTop="@id/iv_add_new_tracker3_refresh_btn"
android:layout_marginBottom="@dimen/dp_14" android:layout_marginStart="@dimen/dp_40"
android:text="@string/txt_id_number" android:text="@string/txt_id_number"
android:textColor="@color/select_color3" android:textColor="@color/select_color3"
android:textSize="@dimen/textSize16" android:textSize="@dimen/textSize16"
app:typeface="@string/roboto_regular_font" /> app:typeface="@string/roboto_regular_font" />
<com.abbidot.tracker.widget.TypefaceTextView
android:id="@+id/tv_add_new_tracker3_device_out_id"
style="@style/my_TextView_style_v2"
android:layout_width="match_parent"
android:text="a0c0c1"
android:textAllCaps="true"
android:textSize="@dimen/textSize36"
android:textStyle="bold" />
<RelativeLayout
android:id="@+id/rl_add_new_tracker3_device_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone">
<NumberPicker
android:id="@+id/np_add_new_tracker3_device_list"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true" />
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@id/np_add_new_tracker3_device_list"
android:layout_alignBottom="@id/np_add_new_tracker3_device_list"
android:layout_marginEnd="@dimen/dp_8"
android:layout_toStartOf="@id/np_add_new_tracker3_device_list"
android:src="@drawable/icon_permission_check_svg" />
</RelativeLayout> </RelativeLayout>
<com.abbidot.tracker.widget.TypefaceButton
android:id="@+id/btn_pair_tracker_no" <androidx.recyclerview.widget.RecyclerView
style="@style/my_match_RoundRect_Button_style" android:id="@+id/rv_add_new_tracker3_device_list"
android:layout_height="@dimen/dp_50" android:layout_width="match_parent"
android:layout_marginHorizontal="@dimen/dp_16" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_68" android:layout_marginHorizontal="@dimen/dp_18"
android:layout_marginBottom="@dimen/dp_8" android:layout_marginVertical="@dimen/dp_10"
android:background="@color/block_color" android:background="@drawable/shape24_white_bg"
android:text="@string/txt_no" android:fadeScrollbars="false"
android:textSize="@dimen/textSize14" android:paddingTop="@dimen/dp_6"
android:textStyle="bold" android:paddingBottom="@dimen/dp_18"
android:visibility="gone" android:scrollbars="vertical"
app:qmui_radius="@dimen/dp_24" /> android:visibility="gone" />
<!-- <com.abbidot.tracker.widget.TypefaceTextView-->
<!-- android:id="@+id/tv_add_new_tracker3_device_out_id"-->
<!-- style="@style/my_TextView_style_v2"-->
<!-- android:layout_width="match_parent"-->
<!-- android:text="a0c0c1"-->
<!-- android:textAllCaps="true"-->
<!-- android:textSize="@dimen/textSize36"-->
<!-- android:textStyle="bold" />-->
<!-- <RelativeLayout-->
<!-- android:id="@+id/rl_add_new_tracker3_device_layout"-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:visibility="gone">-->
<!-- <NumberPicker-->
<!-- android:id="@+id/np_add_new_tracker3_device_list"-->
<!-- android:layout_width="wrap_content"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:layout_centerHorizontal="true" />-->
<!-- <androidx.appcompat.widget.AppCompatImageView-->
<!-- android:layout_width="wrap_content"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:layout_alignTop="@id/np_add_new_tracker3_device_list"-->
<!-- android:layout_alignBottom="@id/np_add_new_tracker3_device_list"-->
<!-- android:layout_marginEnd="@dimen/dp_8"-->
<!-- android:layout_toStartOf="@id/np_add_new_tracker3_device_list"-->
<!-- android:src="@drawable/icon_permission_check_svg" />-->
<!-- </RelativeLayout>-->
<!-- <com.abbidot.tracker.widget.TypefaceButton-->
<!-- android:id="@+id/btn_pair_tracker_no"-->
<!-- style="@style/my_match_RoundRect_Button_style"-->
<!-- android:layout_height="@dimen/dp_50"-->
<!-- android:layout_marginHorizontal="@dimen/dp_16"-->
<!-- android:layout_marginTop="@dimen/dp_68"-->
<!-- android:layout_marginBottom="@dimen/dp_8"-->
<!-- android:background="@color/block_color"-->
<!-- android:text="@string/txt_no"-->
<!-- android:textSize="@dimen/textSize14"-->
<!-- android:textStyle="bold"-->
<!-- android:visibility="gone"-->
<!-- app:qmui_radius="@dimen/dp_24" />-->
<com.abbidot.tracker.widget.TypefaceButton <!-- <com.abbidot.tracker.widget.TypefaceButton-->
android:id="@+id/btn_pair_tracker_yes" <!-- android:id="@+id/btn_pair_tracker_yes"-->
style="@style/my_match_RoundRect_Button_style" <!-- style="@style/my_match_RoundRect_Button_style"-->
android:layout_height="@dimen/dp_50" <!-- android:layout_height="@dimen/dp_50"-->
android:layout_marginHorizontal="@dimen/dp_16" <!-- android:layout_marginHorizontal="@dimen/dp_16"-->
android:layout_marginTop="@dimen/dp_50" <!-- android:layout_marginTop="@dimen/dp_50"-->
android:layout_marginBottom="@dimen/dp_32" <!-- android:layout_marginBottom="@dimen/dp_32"-->
android:text="@string/register_txt_next" <!-- android:text="@string/register_txt_next"-->
android:textSize="@dimen/textSize14" <!-- android:textSize="@dimen/textSize14"-->
android:textStyle="bold" <!-- android:textStyle="bold"-->
app:qmui_radius="@dimen/dp_24" /> <!-- app:qmui_radius="@dimen/dp_24" />-->
</androidx.appcompat.widget.LinearLayoutCompat> </androidx.appcompat.widget.LinearLayoutCompat>

View File

@@ -0,0 +1,32 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.LinearLayoutCompat xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal"
android:paddingHorizontal="@dimen/dp_30">
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="@dimen/dp_24"
android:layout_height="@dimen/dp_24"
android:layout_marginEnd="@dimen/dp_10"
android:src="@drawable/icon_tracker_device_small" />
<com.abbidot.tracker.widget.TypefaceTextView
android:id="@+id/tv_add_new_tracker3_device_out_id_item"
style="@style/my_TextView_style_v2"
android:text="a0c0c1"
android:textAllCaps="true"
android:textSize="@dimen/textSize24"
android:textStyle="bold" />
<View
android:layout_width="0dp"
android:layout_height="@dimen/dp_1"
android:layout_weight="1" />
<com.qmuiteam.qmui.widget.QMUILoadingView
android:id="@+id/ld_add_new_tracker3_connect_state"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</androidx.appcompat.widget.LinearLayoutCompat>

View File

@@ -46,6 +46,7 @@
<dimen name="dp_180">180dp</dimen> <dimen name="dp_180">180dp</dimen>
<dimen name="dp_190">190dp</dimen> <dimen name="dp_190">190dp</dimen>
<dimen name="dp_200">200dp</dimen> <dimen name="dp_200">200dp</dimen>
<dimen name="dp_210">210dp</dimen>
<dimen name="dp_220">220dp</dimen> <dimen name="dp_220">220dp</dimen>
<dimen name="dp_255">255dp</dimen> <dimen name="dp_255">255dp</dimen>
<dimen name="dp_260">260dp</dimen> <dimen name="dp_260">260dp</dimen>