1.优化区分信号弱/无信号(4种状态:1. wifi zone 中/关机/休眠/充电/超时无上报-关,2. 信号大于50-强,信号大于0小于50 -弱,3. 信号等于0-无)
2.修复围栏编辑和添加保存时/删除时,还可以输入内容和点‘取消’按钮 3.修复删除围栏时,还可以点击编辑按钮 4.修复轨迹页面围栏名字太长,列表对不齐 5.修复轨迹只有3个点时,滑块滑不动的bug 6.修复直播页面第三个导航无法点击bug 7.校对多语言字符
This commit is contained in:
@@ -46,6 +46,9 @@ class SubscriptionHistoryAdapter(
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 保险订单
|
||||
*/
|
||||
private fun bindAnnualCareData(holder: BaseViewHolder, item: SubscriptionsOrderBean) {
|
||||
holder.setText(
|
||||
R.id.tv_subscription_annual_care_order_id,
|
||||
@@ -111,26 +114,28 @@ class SubscriptionHistoryAdapter(
|
||||
visibility = View.VISIBLE
|
||||
when (item.orderStatus) {
|
||||
1 -> {
|
||||
val updateTimestamp = Utils.stringToTimestamp(item.updateTime, isUtc = true)
|
||||
val nowTimestamp = System.currentTimeMillis()
|
||||
// val updateTimestamp = Utils.stringToTimestamp(item.updateTime, isUtc = true)
|
||||
// val nowTimestamp = System.currentTimeMillis()
|
||||
if (item.enabled == ConstantInt.Type0 || (item.surplusDays == 0L && item.subscriptionStatus == ConstantInt.Close)) {
|
||||
visibility = View.GONE
|
||||
} else if (item.mealUnit == ConstantString.PackageUnitDay) {
|
||||
visibility = View.VISIBLE
|
||||
setText(R.string.txt_refund)
|
||||
} else if (item.mealUnit == ConstantString.PackageUnitMonth) {
|
||||
val day7Timestamp = 7 * 24 * 60 * 60 * 1000L
|
||||
// val day7Timestamp = 7 * 24 * 60 * 60 * 1000L
|
||||
//套餐超出7天不能退款
|
||||
if (nowTimestamp - updateTimestamp <= day7Timestamp) {
|
||||
// if (nowTimestamp - updateTimestamp <= day7Timestamp) {
|
||||
if (item.isRefundable == ConstantInt.Type1) {
|
||||
visibility = View.VISIBLE
|
||||
setText(R.string.txt_refund)
|
||||
} else {
|
||||
visibility = View.GONE
|
||||
}
|
||||
} else {
|
||||
val day30Timestamp = 30 * 24 * 60 * 60 * 1000L
|
||||
// val day30Timestamp = 30 * 24 * 60 * 60 * 1000L
|
||||
//套餐超出30天不能退款
|
||||
if (nowTimestamp - updateTimestamp <= day30Timestamp) {
|
||||
// if (nowTimestamp - updateTimestamp <= day30Timestamp) {
|
||||
if (item.isRefundable == ConstantInt.Type1) {
|
||||
visibility = View.VISIBLE
|
||||
setText(R.string.txt_refund)
|
||||
} else {
|
||||
|
||||
@@ -55,6 +55,7 @@ data class SubscriptionsOrderBean(
|
||||
var endTime: Long,
|
||||
var refundTime: Long,
|
||||
var planTimeMonthsCount: Int,
|
||||
var isRefundable: Int,//是否显示退款按钮 1:是 0:否
|
||||
@MultipleEntity var menuType: Int,
|
||||
var isUpdateOrder: Int = 0//是否是升级订单 1:是 0:否
|
||||
) : Parcelable, MultiItemEntity {
|
||||
@@ -101,6 +102,7 @@ data class SubscriptionsOrderBean(
|
||||
0L,
|
||||
0L,
|
||||
0,
|
||||
0,
|
||||
menuType,
|
||||
0
|
||||
)
|
||||
|
||||
@@ -65,7 +65,6 @@ import com.hjq.permissions.XXPermissions
|
||||
import com.hjq.permissions.permission.PermissionLists
|
||||
import com.huantansheng.easyphotos.EasyPhotos
|
||||
import com.qmuiteam.qmui.widget.QMUITopBar
|
||||
import com.tencent.bugly.crashreport.CrashReport
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.launch
|
||||
@@ -212,7 +211,7 @@ class HomeV2Activity : BaseActivity<ActivityHomeV2Binding>(ActivityHomeV2Binding
|
||||
mDataViewModel.getHomeBindPetList(this@HomeV2Activity)
|
||||
|
||||
//设置bugly的用户id
|
||||
CrashReport.setUserId(MMKVUtil.getString(MMKVKey.Email))
|
||||
// CrashReport.setUserId(MMKVUtil.getString(MMKVKey.Email))
|
||||
//预先加载相册,防止上传头像几千张照片加载慢
|
||||
XXPermissions.with(this).permission(PermissionLists.getReadMediaImagesPermission())
|
||||
.request { _, deniedList ->
|
||||
|
||||
@@ -35,7 +35,6 @@ import com.baidu.mapapi.SDKInitializer
|
||||
import com.hjq.toast.Toaster
|
||||
import com.qmuiteam.qmui.arch.QMUIActivity
|
||||
import com.stripe.android.PaymentConfiguration
|
||||
import com.tencent.bugly.crashreport.CrashReport
|
||||
import com.tencent.mm.opensdk.constants.ConstantsAPI
|
||||
import com.tencent.mm.opensdk.openapi.IWXAPI
|
||||
import java.util.Calendar
|
||||
@@ -220,8 +219,8 @@ class SplashActivity : QMUIActivity() {
|
||||
}
|
||||
|
||||
//腾讯bugly初始化
|
||||
val buglyKey = Util.getMetadata(applicationContext, KeyNames.BUG_LY_KEY_NAME)
|
||||
CrashReport.initCrashReport(applicationContext, buglyKey, AppUtils.isDebug())
|
||||
// val buglyKey = Util.getMetadata(applicationContext, KeyNames.BUG_LY_KEY_NAME)
|
||||
// CrashReport.initCrashReport(applicationContext, buglyKey, AppUtils.isDebug())
|
||||
}
|
||||
|
||||
private fun initMapbox() {
|
||||
|
||||
@@ -71,6 +71,9 @@ open class AddAndEditFencesZoneBaseActivity :
|
||||
var mFencesList: GetFencesBean? = null
|
||||
var isEditFences = false
|
||||
|
||||
//冻结点击
|
||||
private var isBlockedClick = false
|
||||
|
||||
private var mShowCenterLocationType = ConstantInt.OtherLocationType
|
||||
private val mDefaultFencesName =
|
||||
arrayOf("Home", "Office", "Garden", "Park", "Play", "Unsafe", "Vegetable Garden", "Water")
|
||||
@@ -211,6 +214,11 @@ open class AddAndEditFencesZoneBaseActivity :
|
||||
setFenceName()
|
||||
}
|
||||
|
||||
override fun leftBackOnClick() {
|
||||
if (isBlockedClick) return
|
||||
super.leftBackOnClick()
|
||||
}
|
||||
|
||||
open fun mapLoadOk() {
|
||||
drawFences()
|
||||
}
|
||||
@@ -358,7 +366,7 @@ open class AddAndEditFencesZoneBaseActivity :
|
||||
|
||||
override fun onRequestError(exceptionCode: String?) {
|
||||
super.onRequestError(exceptionCode)
|
||||
setButtonEnabled(mViewBinding.btnSaveFencesZone, ConstantInt.Type1)
|
||||
setDisableState(false)
|
||||
}
|
||||
})
|
||||
}
|
||||
@@ -376,6 +384,11 @@ open class AddAndEditFencesZoneBaseActivity :
|
||||
R.string.txt_delete_success, isFinish = true, gravity = Gravity.CENTER
|
||||
)
|
||||
}
|
||||
|
||||
override fun onRequestError(exceptionCode: String?) {
|
||||
super.onRequestError(exceptionCode)
|
||||
setDisableState(false)
|
||||
}
|
||||
})
|
||||
}
|
||||
mFencesManageViewModel.mUpdateFenceLiveData.observe(this) {
|
||||
@@ -391,7 +404,7 @@ open class AddAndEditFencesZoneBaseActivity :
|
||||
|
||||
override fun onRequestError(exceptionCode: String?) {
|
||||
super.onRequestError(exceptionCode)
|
||||
setButtonEnabled(mViewBinding.btnSaveFencesZone, ConstantInt.Type1)
|
||||
setDisableState(false)
|
||||
}
|
||||
})
|
||||
}
|
||||
@@ -416,6 +429,23 @@ open class AddAndEditFencesZoneBaseActivity :
|
||||
showToast(resStringId, isFinish = true, gravity = Gravity.CENTER)
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置禁止状态
|
||||
*/
|
||||
private fun setDisableState(isDisable: Boolean) {
|
||||
isBlockedClick = isDisable
|
||||
mViewBinding.apply {
|
||||
if (isDisable) {
|
||||
ilFencesZoneNameInput.etInputContent.isEnabled = false
|
||||
setButtonEnabled(btnSaveFencesZone, ConstantInt.Type0)
|
||||
} else {
|
||||
ilFencesZoneNameInput.etInputContent.isEnabled = true
|
||||
setButtonEnabled(btnSaveFencesZone, ConstantInt.Type1)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
override fun onWindowFocusChanged(hasFocus: Boolean) {
|
||||
super.onWindowFocusChanged(hasFocus)
|
||||
bottomMarginOverlap()
|
||||
@@ -659,7 +689,7 @@ open class AddAndEditFencesZoneBaseActivity :
|
||||
else ConstantInt.Type2
|
||||
}
|
||||
mActionType = ConstantInt.Type0
|
||||
setButtonEnabled(mViewBinding.btnSaveFencesZone, ConstantInt.Type0)
|
||||
setDisableState(true)
|
||||
name = fenceName
|
||||
when (fenceShapeType) {
|
||||
ConstantInt.CircleShapeType -> {
|
||||
@@ -687,13 +717,14 @@ open class AddAndEditFencesZoneBaseActivity :
|
||||
* 更新围栏
|
||||
*/
|
||||
fun updateFences(fencesBean: FencesBean) {
|
||||
if (isBlockedClick) return
|
||||
val fenceName = mViewBinding.ilFencesZoneNameInput.etInputContent.text.toString()
|
||||
if (TextUtils.isEmpty(fenceName)) {
|
||||
showToast(R.string.txt_not_null, gravity = Gravity.CENTER)
|
||||
return
|
||||
}
|
||||
mActionType = ConstantInt.Type1
|
||||
setButtonEnabled(mViewBinding.btnSaveFencesZone, ConstantInt.Type0)
|
||||
setDisableState(true)
|
||||
mPetBean?.let {
|
||||
if (BleManager.getInstance().isConnected(it.macID)) {
|
||||
sendFenceData()
|
||||
@@ -746,12 +777,14 @@ open class AddAndEditFencesZoneBaseActivity :
|
||||
* 删除围栏
|
||||
*/
|
||||
fun deleteFences(fencesBean: FencesBean) {
|
||||
if (isBlockedClick) return
|
||||
ViewUtil.instance.showDialog(
|
||||
this, R.string.txt_delete_tips, object : BaseDialog.OnDialogOkListener {
|
||||
override fun onOkClick(dialog: BaseDialog<*>) {
|
||||
dialog.dismiss()
|
||||
mPetBean?.let {
|
||||
mActionType = ConstantInt.Type2
|
||||
setDisableState(true)
|
||||
if (BleManager.getInstance().isConnected(it.macID)) {
|
||||
//删除蓝牙标志
|
||||
fencesBean.isOn = ConstantInt.Type2
|
||||
@@ -884,7 +917,7 @@ open class AddAndEditFencesZoneBaseActivity :
|
||||
}
|
||||
|
||||
tvFencesZoneShapeResetBtn -> recoverDefaultFencesView()
|
||||
btnCancelFencesZone -> finish()
|
||||
btnCancelFencesZone -> if (!isBlockedClick) finish()
|
||||
ivFencesZoneMapSwitchBtn -> switchMapType()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -57,6 +57,9 @@ class PreviewFencesZoneActivity :
|
||||
//操作类型,0增加,1编辑,2删除
|
||||
private var mActionType = ConstantInt.Type1
|
||||
|
||||
//冻结点击
|
||||
private var isBlockedClick = false
|
||||
|
||||
override fun getTopBar() = mViewBinding.previewFencesZoneTopBar.titleTopBar
|
||||
|
||||
override fun initData() {
|
||||
@@ -129,6 +132,11 @@ class PreviewFencesZoneActivity :
|
||||
}
|
||||
}
|
||||
|
||||
override fun leftBackOnClick() {
|
||||
if (isBlockedClick) return
|
||||
super.leftBackOnClick()
|
||||
}
|
||||
|
||||
override fun liveDataObserve() {
|
||||
//获取所有围栏返回
|
||||
mFencesManageViewModel.mFencesLiveData.observe(this) {
|
||||
@@ -167,6 +175,11 @@ class PreviewFencesZoneActivity :
|
||||
XEventBus.post(EventName.DeleteFences)
|
||||
showToast(R.string.txt_delete_success, true, gravity = Gravity.CENTER)
|
||||
}
|
||||
|
||||
override fun onRequestError(exceptionCode: String?) {
|
||||
super.onRequestError(exceptionCode)
|
||||
isBlockedClick = false
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
@@ -367,6 +380,7 @@ class PreviewFencesZoneActivity :
|
||||
* 删除围栏
|
||||
*/
|
||||
private fun deleteFences() {
|
||||
if (isBlockedClick) return
|
||||
ViewUtil.instance.showDialog(
|
||||
this, R.string.txt_delete_tips, object : BaseDialog.OnDialogOkListener {
|
||||
override fun onOkClick(dialog: BaseDialog<*>) {
|
||||
@@ -374,6 +388,7 @@ class PreviewFencesZoneActivity :
|
||||
mPetBean?.let {
|
||||
mCurrentFences?.apply {
|
||||
mActionType = ConstantInt.Type2
|
||||
isBlockedClick = true
|
||||
if (modeType == ConstantInt.Type3) modeType = ConstantInt.Type3
|
||||
else if (BleManager.getInstance().isConnected(it.macID)) {
|
||||
//删除蓝牙标志
|
||||
@@ -402,6 +417,7 @@ class PreviewFencesZoneActivity :
|
||||
}
|
||||
|
||||
private fun goEditFences() {
|
||||
if (isBlockedClick) return
|
||||
Util.checkLocationPermissionsGpsEnabled(this, {
|
||||
mCurrentFences?.apply {
|
||||
val intent = if (fenceType == ConstantInt.SafeZone) Intent(
|
||||
@@ -422,7 +438,10 @@ class PreviewFencesZoneActivity :
|
||||
btnPreviewFencesEdit -> goEditFences()
|
||||
|
||||
mRightImageButton -> deleteFences()
|
||||
cbPreviewFencesSwitch -> mCurrentFences?.apply { changeOnAndOff(this) }
|
||||
cbPreviewFencesSwitch -> {
|
||||
if (isBlockedClick) return
|
||||
mCurrentFences?.apply { changeOnAndOff(this) }
|
||||
}
|
||||
|
||||
ivPreviewFencesMapSwitchBtn -> {
|
||||
mPreviewFencesMapCommon.switchSatelliteAndNormalMapType()
|
||||
|
||||
@@ -216,6 +216,7 @@ class LiveActivityV3 : BaseActivity<ActivityLiveV3Binding>(ActivityLiveV3Binding
|
||||
ilLiveV2OperateLayout.btnLiveV2Issue,
|
||||
ilMapLiveV2IssueLayout.tvCloseIssueBtn,
|
||||
ilLiveV3MapDeviceBatteryLayout.ivDeviceCloseBtn,
|
||||
ilLiveV3MapPetLocation.ivPetLocationNavigationBtn,
|
||||
ilLiveV3MapDeviceMsg.ivDeviceMsgCloseBtn
|
||||
)
|
||||
|
||||
@@ -1258,6 +1259,11 @@ class LiveActivityV3 : BaseActivity<ActivityLiveV3Binding>(ActivityLiveV3Binding
|
||||
mMapDeviceBean?.isCloseMsg = true
|
||||
ilLiveV3MapDeviceMsg.root.visibility = View.GONE
|
||||
}
|
||||
|
||||
ilLiveV3MapPetLocation.ivPetLocationNavigationBtn -> {
|
||||
if (isLimitClick()) return
|
||||
mMapViewModel.showNavigationDialog(this@LiveActivityV3, mMapDeviceBean)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,7 +11,6 @@ import android.view.Gravity
|
||||
import android.view.View
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.core.net.toUri
|
||||
import androidx.core.view.WindowInsetsCompat
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.fragment.app.commit
|
||||
@@ -28,20 +27,17 @@ import com.abbidot.baselibrary.util.MMKVUtil
|
||||
import com.abbidot.baselibrary.util.Utils
|
||||
import com.abbidot.tracker.R
|
||||
import com.abbidot.tracker.adapter.HomeMapDeviceStateAdapter
|
||||
import com.abbidot.tracker.adapter.SelectMapListDialogAdapter
|
||||
import com.abbidot.tracker.base.BaseDialog
|
||||
import com.abbidot.tracker.base.BaseFragment
|
||||
import com.abbidot.tracker.bean.BleReportDataBean
|
||||
import com.abbidot.tracker.bean.BleTrackDeviceBean
|
||||
import com.abbidot.tracker.bean.DataBean
|
||||
import com.abbidot.tracker.bean.MapDeviceBean
|
||||
import com.abbidot.tracker.bean.MenuTxtBean
|
||||
import com.abbidot.tracker.constant.ConstantInt
|
||||
import com.abbidot.tracker.constant.ConstantString
|
||||
import com.abbidot.tracker.constant.GetResultCallback
|
||||
import com.abbidot.tracker.databinding.FragmentMapV3Binding
|
||||
import com.abbidot.tracker.dialog.CommonDialog1
|
||||
import com.abbidot.tracker.dialog.SelectMapListDialog
|
||||
import com.abbidot.tracker.dialog.SelectMapTypeDialog
|
||||
import com.abbidot.tracker.ui.activity.HomeV2Activity
|
||||
import com.abbidot.tracker.ui.activity.map.LiveActivityV3
|
||||
@@ -107,13 +103,6 @@ class MapV3Fragment : BaseFragment<FragmentMapV3Binding>(FragmentMapV3Binding::i
|
||||
private var needGpsToGCJ02 = true
|
||||
private var mAnimatorSet: AnimatorSet? = null
|
||||
|
||||
private val mMapGooglePackageName = "com.google.android.apps.maps"
|
||||
private val mMapGaoDePackageName = "com.autonavi.minimap"
|
||||
private val mMapBaiduPackageName = "com.baidu.BaiduMap"
|
||||
|
||||
private lateinit var mSelectMapListDialogAdapter: SelectMapListDialogAdapter
|
||||
private var mSelectMapListDialog: SelectMapListDialog? = null
|
||||
|
||||
//一键定位开始的时间戳
|
||||
private var notifyRefreshLocationTimestamp = 0L
|
||||
|
||||
@@ -940,88 +929,6 @@ class MapV3Fragment : BaseFragment<FragmentMapV3Binding>(FragmentMapV3Binding::i
|
||||
// }
|
||||
// }
|
||||
|
||||
private fun showNavigationDialog() {
|
||||
if (null == mSelectMapListDialog) {
|
||||
val mapList = mutableListOf<MenuTxtBean>()
|
||||
ViewUtil.instance.addMenuBean(
|
||||
mapList,
|
||||
getString(R.string.map_navigate_map_google),
|
||||
mMapGooglePackageName,
|
||||
R.drawable.ico_map_google
|
||||
)
|
||||
ViewUtil.instance.addMenuBean(
|
||||
mapList,
|
||||
getString(R.string.map_navigate_map_gaode),
|
||||
mMapGaoDePackageName,
|
||||
R.drawable.ico_map_gaode
|
||||
)
|
||||
ViewUtil.instance.addMenuBean(
|
||||
mapList,
|
||||
getString(R.string.map_baidu_map),
|
||||
mMapBaiduPackageName,
|
||||
R.drawable.ico_map_gaode
|
||||
)
|
||||
|
||||
mSelectMapListDialogAdapter = SelectMapListDialogAdapter(mContext!!, mapList)
|
||||
mSelectMapListDialogAdapter.setOnItemClickListener(object :
|
||||
BaseRecyclerAdapter.OnItemClickListener {
|
||||
override fun onItemClick(itemView: View?, pos: Int) {
|
||||
selectMapNavigation(mapList[pos])
|
||||
}
|
||||
})
|
||||
mSelectMapListDialog = SelectMapListDialog(mContext!!, mSelectMapListDialogAdapter)
|
||||
}
|
||||
mSelectMapListDialog!!.show()
|
||||
}
|
||||
|
||||
/**
|
||||
* 选择地图开始跳转
|
||||
*/
|
||||
private fun selectMapNavigation(item: MenuTxtBean) {
|
||||
mSelectMapListDialog?.dismiss()
|
||||
mMapDeviceBean?.apply {
|
||||
try {
|
||||
when (item.menuValue) {
|
||||
//谷歌地图
|
||||
mMapGooglePackageName -> {
|
||||
var lat = latitude
|
||||
var lon = longitude
|
||||
if (MMKVUtil.getBoolean(MMKVKey.isGpsToGCJ02)) {
|
||||
val convertLatLon =
|
||||
LonAndLatUtil.convertFromWGS84ToGCJ02(latitude, longitude)
|
||||
lat = convertLatLon[0]
|
||||
lon = convertLatLon[1]
|
||||
}
|
||||
val uri = "google.navigation:q=${lat},${lon}&mode=w".toUri()
|
||||
val intent = Intent(Intent.ACTION_VIEW, uri)
|
||||
intent.setPackage(item.menuValue)
|
||||
startActivity(intent)
|
||||
}
|
||||
//高德地图 https://lbs.amap.com/api/amap-mobile/guide/android/walk-navi
|
||||
mMapGaoDePackageName -> {
|
||||
val uri = "amapuri://openFeature?featureName=OnFootNavi&sourceApplication=${
|
||||
getString(
|
||||
R.string.app_name
|
||||
)
|
||||
}&lat=${latitude}&lon=${longitude}&dev=1".toUri()
|
||||
val intent = Intent(Intent.ACTION_VIEW, uri)
|
||||
intent.setPackage(item.menuValue)
|
||||
startActivity(intent)
|
||||
}
|
||||
//百度地图 https://lbs.baidu.com/docs/webapi?title=mapadjustment/uri/andriod
|
||||
mMapBaiduPackageName -> {
|
||||
val uri =
|
||||
"baidumap://map/direction?destination=name:|latlng:${latitude},${longitude}&mode=walking&coord_type=wgs84".toUri()
|
||||
val intent = Intent(Intent.ACTION_VIEW, uri)
|
||||
intent.setPackage(item.menuValue)
|
||||
startActivity(intent)
|
||||
}
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
showToast(getString(R.string.txt_no_install), gravity = Gravity.CENTER)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onClick(v: View?) {
|
||||
mViewBinding.apply {
|
||||
@@ -1094,7 +1001,9 @@ class MapV3Fragment : BaseFragment<FragmentMapV3Binding>(FragmentMapV3Binding::i
|
||||
ilHomeMapPetLocation.ivPetLocationNavigationBtn -> {
|
||||
if (isLimitClick()) return
|
||||
// goNavigation()
|
||||
showNavigationDialog()
|
||||
getHomeV2Activity()?.let {
|
||||
mMapViewModel.showNavigationDialog(it, mMapDeviceBean)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,23 +1,33 @@
|
||||
package com.abbidot.tracker.vm
|
||||
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.os.CountDownTimer
|
||||
import android.view.Gravity
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.appcompat.widget.AppCompatImageView
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.core.net.toUri
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.abbidot.baselibrary.constant.MMKVKey
|
||||
import com.abbidot.baselibrary.list.BaseRecyclerAdapter
|
||||
import com.abbidot.baselibrary.util.MMKVUtil
|
||||
import com.abbidot.baselibrary.util.Utils
|
||||
import com.abbidot.tracker.R
|
||||
import com.abbidot.tracker.adapter.SelectMapListDialogAdapter
|
||||
import com.abbidot.tracker.base.BaseActivity
|
||||
import com.abbidot.tracker.bean.DataBean
|
||||
import com.abbidot.tracker.bean.MapDeviceBean
|
||||
import com.abbidot.tracker.bean.MenuTxtBean
|
||||
import com.abbidot.tracker.bean.PetBean
|
||||
import com.abbidot.tracker.constant.ConstantInt
|
||||
import com.abbidot.tracker.dialog.SelectMapListDialog
|
||||
import com.abbidot.tracker.retrofit2.NetworkApi
|
||||
import com.abbidot.tracker.util.LonAndLatUtil
|
||||
import com.abbidot.tracker.util.Util
|
||||
import com.abbidot.tracker.util.ViewUtil
|
||||
import com.abbidot.tracker.util.bluetooth.SRBleUtil
|
||||
@@ -39,6 +49,13 @@ class MapViewModel : ViewModel() {
|
||||
|
||||
var mDeviceMsgType = ConstantInt.SpecialType
|
||||
|
||||
private val mMapGooglePackageName = "com.google.android.apps.maps"
|
||||
private val mMapGaoDePackageName = "com.autonavi.minimap"
|
||||
private val mMapBaiduPackageName = "com.baidu.BaiduMap"
|
||||
private var mSelectMapListDialogAdapter: SelectMapListDialogAdapter? = null
|
||||
private var mSelectMapListDialog: SelectMapListDialog? = null
|
||||
private var mMapDeviceBean: MapDeviceBean? = null
|
||||
|
||||
fun setupRefreshLocation(deviceId: String) {
|
||||
viewModelScope.launch {
|
||||
val result = NetworkApi.setupRefreshLocation(deviceId)
|
||||
@@ -185,7 +202,10 @@ class MapViewModel : ViewModel() {
|
||||
}
|
||||
}
|
||||
//网络无信号/ 分钟后无上报所有绿点取消显示
|
||||
else if (lteSignal <= ConstantInt.NoSignal || Util.isTimeoutReport(updateTime,gnssInterval)) {
|
||||
else if (lteSignal <= ConstantInt.NoSignal || Util.isTimeoutReport(
|
||||
updateTime, gnssInterval
|
||||
)
|
||||
) {
|
||||
// setNoState(context, deviceStateList)
|
||||
|
||||
//警告状态
|
||||
@@ -307,7 +327,7 @@ class MapViewModel : ViewModel() {
|
||||
) {
|
||||
mapDeviceBean.let {
|
||||
//是否超时上报
|
||||
val isTimeoutReport = Util.isTimeoutReport(it.updateTime,it.gnssInterval)
|
||||
val isTimeoutReport = Util.isTimeoutReport(it.updateTime, it.gnssInterval)
|
||||
deviceStateList[0].apply {
|
||||
menuType = ConstantInt.Open
|
||||
val lteValue =
|
||||
@@ -322,14 +342,12 @@ class MapViewModel : ViewModel() {
|
||||
deviceStateList[1].apply {
|
||||
menuType = ConstantInt.Open
|
||||
val gpsValue =
|
||||
if (isTimeoutReport || it.powerSwitch == ConstantInt.Type0 || it.powerSwitch == ConstantInt.Type2 || it.inWifiZone == ConstantInt.Type1) {
|
||||
if (isTimeoutReport || it.powerSwitch == ConstantInt.Type0 || it.powerSwitch == ConstantInt.Type2 || it.powerSwitch == ConstantInt.Type3 || it.inWifiZone == ConstantInt.Type1) {
|
||||
menuType = ConstantInt.Close
|
||||
context.getString(R.string.tracker_manage_set_led_off)
|
||||
} else if (it.gpsSignal > ConstantInt.WeakSignal) {
|
||||
context.getString(R.string.txt_strong_signal)
|
||||
} else {
|
||||
context.getString(R.string.txt_weak_signal)
|
||||
}
|
||||
} else if (it.gpsSignal > ConstantInt.WeakSignal) context.getString(R.string.txt_strong_signal)
|
||||
else if (it.gpsSignal == ConstantInt.NoSignal) context.getString(R.string.txt_no_signal)
|
||||
else context.getString(R.string.txt_weak_signal)
|
||||
value = context.getString(R.string.tracker_manage_set_gps) + ":$gpsValue"
|
||||
}
|
||||
deviceStateList[2].apply {
|
||||
@@ -550,6 +568,96 @@ class MapViewModel : ViewModel() {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 显示导航地图
|
||||
*/
|
||||
fun showNavigationDialog(activity: BaseActivity<*>, mapDeviceBean: MapDeviceBean?) {
|
||||
mMapDeviceBean = mapDeviceBean
|
||||
if (null == mSelectMapListDialog) {
|
||||
val mapList = mutableListOf<MenuTxtBean>()
|
||||
ViewUtil.instance.addMenuBean(
|
||||
mapList,
|
||||
activity.getString(R.string.map_navigate_map_google),
|
||||
mMapGooglePackageName,
|
||||
R.drawable.ico_map_google
|
||||
)
|
||||
ViewUtil.instance.addMenuBean(
|
||||
mapList,
|
||||
activity.getString(R.string.map_navigate_map_gaode),
|
||||
mMapGaoDePackageName,
|
||||
R.drawable.ico_map_gaode
|
||||
)
|
||||
ViewUtil.instance.addMenuBean(
|
||||
mapList,
|
||||
activity.getString(R.string.map_baidu_map),
|
||||
mMapBaiduPackageName,
|
||||
R.drawable.ico_map_gaode
|
||||
)
|
||||
|
||||
mSelectMapListDialogAdapter = SelectMapListDialogAdapter(activity, mapList).apply {
|
||||
setOnItemClickListener(object : BaseRecyclerAdapter.OnItemClickListener {
|
||||
override fun onItemClick(itemView: View?, pos: Int) {
|
||||
selectMapNavigation(activity, mapList[pos])
|
||||
}
|
||||
})
|
||||
}
|
||||
mSelectMapListDialog = SelectMapListDialog(activity, mSelectMapListDialogAdapter!!)
|
||||
}
|
||||
mSelectMapListDialog?.show()
|
||||
}
|
||||
|
||||
/**
|
||||
* 选择地图开始跳转
|
||||
*/
|
||||
private fun selectMapNavigation(activity: BaseActivity<*>, item: MenuTxtBean) {
|
||||
mSelectMapListDialog?.dismiss()
|
||||
mMapDeviceBean?.apply {
|
||||
try {
|
||||
when (item.menuValue) {
|
||||
//谷歌地图
|
||||
mMapGooglePackageName -> {
|
||||
var lat = latitude
|
||||
var lon = longitude
|
||||
if (MMKVUtil.getBoolean(MMKVKey.isGpsToGCJ02)) {
|
||||
val convertLatLon =
|
||||
LonAndLatUtil.convertFromWGS84ToGCJ02(latitude, longitude)
|
||||
lat = convertLatLon[0]
|
||||
lon = convertLatLon[1]
|
||||
}
|
||||
val uri = "google.navigation:q=${lat},${lon}&mode=w".toUri()
|
||||
val intent = Intent(Intent.ACTION_VIEW, uri)
|
||||
intent.setPackage(item.menuValue)
|
||||
activity.startActivity(intent)
|
||||
}
|
||||
//高德地图 https://lbs.amap.com/api/amap-mobile/guide/android/walk-navi
|
||||
mMapGaoDePackageName -> {
|
||||
val uri = "amapuri://openFeature?featureName=OnFootNavi&sourceApplication=${
|
||||
activity.getString(
|
||||
R.string.app_name
|
||||
)
|
||||
}&lat=${latitude}&lon=${longitude}&dev=1".toUri()
|
||||
val intent = Intent(Intent.ACTION_VIEW, uri)
|
||||
intent.setPackage(item.menuValue)
|
||||
activity.startActivity(intent)
|
||||
}
|
||||
//百度地图 https://lbs.baidu.com/docs/webapi?title=mapadjustment/uri/andriod
|
||||
mMapBaiduPackageName -> {
|
||||
val uri =
|
||||
"baidumap://map/direction?destination=name:|latlng:${latitude},${longitude}&mode=walking&coord_type=wgs84".toUri()
|
||||
val intent = Intent(Intent.ACTION_VIEW, uri)
|
||||
intent.setPackage(item.menuValue)
|
||||
activity.startActivity(intent)
|
||||
}
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
activity.showToast(
|
||||
activity.getString(R.string.txt_no_install), gravity = Gravity.CENTER
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 停止获取数据
|
||||
*/
|
||||
|
||||
@@ -27,6 +27,8 @@ public class NoClickSlideSeekBar extends AppCompatSeekBar {
|
||||
private Rect mThumbRect;
|
||||
|
||||
private int mX, mY;
|
||||
//是否可以滑动
|
||||
private boolean isCanSile = true;
|
||||
|
||||
private NoClickSlideSeekBar(Context context) {
|
||||
super(context);
|
||||
@@ -42,22 +44,28 @@ public class NoClickSlideSeekBar extends AppCompatSeekBar {
|
||||
|
||||
@Override
|
||||
public boolean onTouchEvent(MotionEvent event) {
|
||||
|
||||
if (MotionEvent.ACTION_DOWN == event.getAction()) {
|
||||
isCanSile = true;
|
||||
mThumbRect = getThumb().getBounds();
|
||||
}
|
||||
mX = (int) event.getX();
|
||||
mY = (int) event.getY();
|
||||
mX = (int) event.getX();
|
||||
mY = (int) event.getY();
|
||||
|
||||
if (mStaus == STATUS.STATUS_CLICK && !checkBound()) {
|
||||
isCanSile = false;
|
||||
return true;
|
||||
}
|
||||
if (mStaus == STATUS.STATUS_SLIDE && checkBound()) {
|
||||
isCanSile = false;
|
||||
return true;
|
||||
}
|
||||
if (mStaus == STATUS.STATUS_UNABLE) {
|
||||
isCanSile = false;
|
||||
return true;
|
||||
}
|
||||
|
||||
if (mStaus == STATUS.STATUS_CLICK && !checkBound()) {
|
||||
return true;
|
||||
}
|
||||
if (mStaus == STATUS.STATUS_SLIDE && checkBound()) {
|
||||
if (!isCanSile)
|
||||
return true;
|
||||
}
|
||||
if (mStaus == STATUS.STATUS_UNABLE) {
|
||||
return true;
|
||||
}
|
||||
return super.onTouchEvent(event);
|
||||
}
|
||||
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
android:layout_below="@id/tv_history_fence_type_time"
|
||||
android:layout_alignStart="@id/tv_history_fence_type_time"
|
||||
android:layout_marginTop="@dimen/dp_6"
|
||||
android:gravity="start"
|
||||
android:text="@string/app_name"
|
||||
android:textColor="@color/select_color3"
|
||||
android:textSize="@dimen/textSize14"
|
||||
|
||||
@@ -43,7 +43,6 @@
|
||||
<string name="register_txt_bind_phone">Bindung</string>
|
||||
<string name="login_txt_login_finish">Abgeschlossen</string>
|
||||
<!-- system -->
|
||||
<string name="system_txt_copyright">Copyright © %d ABBIDOT All rights reserved</string>
|
||||
<string name="system_txt_data">Daten</string>
|
||||
<string name="system_txt_map">Karte</string>
|
||||
<string name="system_txt_profile">Profil</string>
|
||||
@@ -374,7 +373,7 @@
|
||||
<string name="txt_goal_percent">%s%%</string>
|
||||
<string name="txt_legal_info_title">Rechtliche Informationen</string>
|
||||
<string name="txt_legal_info_content">Willkommen in der Abbidot App! Um Ihre Rechte besser zu schützen, erläutern wir in dieser Datenschutzerklärung, wie wir Ihre Daten erfassen, nutzen, verarbeiten und schützen. Bitte lesen Sie die Datenschutzerklärung und Nutzungsbedingungen sorgfältig.</string>
|
||||
<string name="txt_read_and_accept">Datenschutzerklärung & Nutzungsbedingungen akzeptieren</string>
|
||||
<string name="txt_read_and_accept">Datenschutzerklärung & AGB</string>
|
||||
<string name="txt_accept">Ich akzeptiere</string>
|
||||
<string name="txt_deny">Ablehnen</string>
|
||||
<string name="txt_no_down_url">Keine Download-Adresse</string>
|
||||
@@ -556,8 +555,8 @@
|
||||
<string name="txt_add_new_tracker">Neuen Tracker hinzufügen</string>
|
||||
<string name="txt_charge_power_on">Laden und einschalten</string>
|
||||
<string name="txt_step_one">Schritt 1:</string>
|
||||
<string name="txt_step_one_tips">Laden Sie den Tracker zuerst auf; rotes Licht leuchtet.</string>
|
||||
<string name="txt_step_two_tips">Kabel abziehen, 3 grüne Blitze – Gerät eingeschaltet.</string>
|
||||
<string name="txt_step_one_tips">Tracker laden; 3 weiße Lampen blinken, dann leuchtet rot dauerhaft.</string>
|
||||
<string name="txt_step_two_tips">Kabel abziehen; langsames grünes Blinken zeigt an, dass das Gerät eingeschaltet ist.</string>
|
||||
<string name="txt_step_two">Schritt 2:</string>
|
||||
<string name="txt_searching_tracker">Suche nach Tracker</string>
|
||||
<string name="txt_searching_tracker_tip">Halten Sie das Telefon nahe an den Tracker.</string>
|
||||
@@ -575,10 +574,10 @@
|
||||
<string name="txt_benefits">Vorteile</string>
|
||||
<string name="txt_monthly_subscription">Monatliches Abonnement</string>
|
||||
<string name="txt_money_unit">$%s</string>
|
||||
<string name="txt_per_month">/pro Monat</string>
|
||||
<string name="txt_per_year">/pro Jahr</string>
|
||||
<string name="txt_per_month_money">$%s/pro Monat</string>
|
||||
<string name="txt_per_year_money">$%s/pro Jahr</string>
|
||||
<string name="txt_per_month">/Monat</string>
|
||||
<string name="txt_per_year">/Jahr</string>
|
||||
<string name="txt_per_month_money">$%s/Monat</string>
|
||||
<string name="txt_per_year_money">$%s/Jahr</string>
|
||||
<string name="txt_popular">Beliebt</string>
|
||||
<string name="txt_confirm_plan">Plan bestätigen</string>
|
||||
<string name="txt_device_number">Gerätenummer</string>
|
||||
@@ -621,7 +620,7 @@
|
||||
<string name="txt_permanent_residence_tip">Dauerhafter Wohnort spart Energie, verbessert Ortung.</string>
|
||||
<string name="txt_is_pet_home">Ist dies das Zuhause Ihres Haustieres?</string>
|
||||
<string name="txt_permanent_residence">Dauerhafter Wohnsitz</string>
|
||||
<string name="txt_choose_wifi">WLAN-Netzwerk wählen, kein Passwort nötig.</string>
|
||||
<string name="txt_choose_wifi">WLAN-Netzwerk wähle</string>
|
||||
<string name="txt_later">Später</string>
|
||||
<string name="txt_measurement_units_tip">Welche Maßeinheiten für Ihr Haustier?</string>
|
||||
<string name="txt_your_height">Größe Ihres Haustieres</string>
|
||||
@@ -865,7 +864,7 @@
|
||||
<string name="txt_expired">Abgelaufen</string>
|
||||
<string name="txt_upgrade_plan">Tarif upgraden</string>
|
||||
<string name="txt_residual_value">Restwert</string>
|
||||
<string name="txt_month_unit">/Monat x%s</string>
|
||||
<string name="txt_month_unit">Monat x%s</string>
|
||||
<string name="txt_auto_subscription_year">(Verlängerung zu $%s jährlich danach)</string>
|
||||
<string name="txt_auto_subscription_month">(Verlängerung zu $%s monatlich danach)</string>
|
||||
<string name="txt_about_dec">Haustiere orten und trainieren, um Verlust/Gefahren vorzubeugen.</string>
|
||||
@@ -891,12 +890,12 @@
|
||||
<string name="txt_incorrect_password">Falsches Passwort. Bitte erneut versuchen.</string>
|
||||
<string name="txt_view_access">Ihr Zugriff ist abgelaufen.</string>
|
||||
<string name="txt_invites_you_check">„%s“ lädt dich ein, den Status von „%s“ zu prüfen.</string>
|
||||
<string name="txt_about_track_duration_dec">Solange der Tracker deinen Buddy sicher in der Energiesparzone erkennt, bleiben LIVE-Tracking, Licht und Ton aus.</string>
|
||||
<string name="txt_about_track_duration_dec">Solange der Tracker deinen Buddy sicher in der Energiesparzone erkennt, bleiben LIVE-Tracking, Licht und Ton aus.</string>
|
||||
<string name="txt_about_track_duration">Info zur Tracking-Dauer</string>
|
||||
<string name="txt_subscription_expired">Ihr Abonnement ist abgelaufen. Bitte aufladen.</string>
|
||||
<string name="txt_fences_set">%s Geofences gesetzt</string>
|
||||
<string name="txt_is_nearby">%s ist in der Nähe</string>
|
||||
<string name="txt_delete_tracker_dec">Tracker nur löschen, wenn du ihn zurückgibst oder weitergibst.</string>
|
||||
<string name="txt_delete_tracker_dec">Nur wenn du deinen Tracker zurückgibst oder weitergibst, solltest du ihn von deinem Konto entkoppeln.</string>
|
||||
<string name="txt_be_deleted">Wird gelöscht</string>
|
||||
<string name="txt_led_setting">LED-Einstellung</string>
|
||||
<string name="txt_reserve">Reserve</string>
|
||||
@@ -921,5 +920,64 @@
|
||||
<string name="txt_please_enter_email">E-Mail-Adresse eingeben.</string>
|
||||
<string name="txt_wifi_password_dec">Wi-Fi gewährleistet Tracker-Verbindung bei schwachem LTE.</string>
|
||||
<string name="txt_update_time">Updated: %s</string>
|
||||
<string name="txt_1_year_subscription">1-Jahres-Abonnement</string>
|
||||
<string name="txt_2_year_subscription">2-Jahres-Abonnement</string>
|
||||
<string name="txt_3_year_subscription">3-Jahres-Abonnement</string>
|
||||
<string name="txt_as_low_as">Schon ab</string>
|
||||
<string name="txt_payment_manager">Zahlungsmanager</string>
|
||||
<string name="txt_billed_annually">Jährliche Abrechnung</string>
|
||||
<string name="txt_basic_plan">Basisplan</string>
|
||||
<string name="txt_premium_plan">Premiumplan</string>
|
||||
<string name="txt_real_time_tracking">Echtzeitverfolgung</string>
|
||||
<string name="txt_activity_logs">Aktivitäts-/Ruheprotokolle</string>
|
||||
<string name="txt_notifications_emergencies">Benachrichtigungen bei Notfällen</string>
|
||||
<string name="txt_customized_led">Anpassbare LED</string>
|
||||
<string name="txt_geofencing">Geofencing</string>
|
||||
<string name="txt_route_records">Routenverlauf</string>
|
||||
<string name="txt_family_sharing">Teilen mit Familienmitgliedern</string>
|
||||
<string name="txt_customer_support">Premium-Kundensupport</string>
|
||||
<string name="txt_show_crash">Das Programm hat eine Ausnahme und wird beendet</string>
|
||||
<string name="txt_activate_subscribe">Abo aktivieren</string>
|
||||
<string name="txt_powered_off">Ausgeschaltet</string>
|
||||
<string name="txt_near">In der Nähe von %s</string>
|
||||
<string name="txt_charging">Lädt</string>
|
||||
<string name="txt_total_time">Gesamtzeit</string>
|
||||
<string name="txt_live_works_cellular">Live funktioniert nur über Mobilfunk</string>
|
||||
<string name="txt_unbind_device">Gerät entkoppeln</string>
|
||||
<string name="txt_edit_profile">Profil bearbeiten</string>
|
||||
<string name="txt_no_internet">Keine Internetverbindung</string>
|
||||
<string name="txt_per_day">/Tag</string>
|
||||
<string name="txt_renewal_day">Verlängerung: $%s/%s Tag am %s</string>
|
||||
<string name="txt_day_unit">/Tag x%s</string>
|
||||
<string name="txt_location_tip">Die ABBIDOT-App sammelt Standortdaten. Die Route und Entfernung zwischen dem aktuellen Standort und dem Gerät können berechnet werden.</string>
|
||||
<string name="txt_auto_subscription_day">(Verlängerung für $%s pro %s Tag danach)</string>
|
||||
<string name="txt_auto_subscription_days">(Verlängerung für $%s/%s Tage danach)</string>
|
||||
<string name="txt_auto_subscription_years">(Verlängerung für $%s/%s Jahre danach)</string>
|
||||
<string name="txt_auto_subscription_months">(Verlängerung für $%s/%s Monate danach)</string>
|
||||
<string name="txt_system_error">Systemfehler: Bitte später erneut versuchen.</string>
|
||||
<string name="txt_missing_param">Fehlende Parameter.</string>
|
||||
<string name="txt_tracker_busy">Tracker beschäftigt. Bitte warten und erneut versuchen.</string>
|
||||
<string name="txt_tracker_offline">Tracker offline. Vorgang nicht möglich.</string>
|
||||
<string name="txt_tracker_live">Live-Stream läuft. Einstellungen nicht verfügbar.</string>
|
||||
<string name="txt_abnormity">Vorgang fehlgeschlagen. Bitte erneut versuchen.</string>
|
||||
<string name="txt_locating">Ortsbestimmung…</string>
|
||||
<string name="txt_tone">Ton</string>
|
||||
<string name="txt_locate_works">Ortung funktioniert nur über Mobilfunk</string>
|
||||
<string name="txt_pet_close">Haustier ist in der Nähe, Radar versuchen</string>
|
||||
<string name="txt_load_more_pull_text">Ziehen zum Laden weiterer Inhalte</string>
|
||||
<string name="txt_load_more_release_text">Loslassen zum Laden</string>
|
||||
<string name="txt_fully_charged">Voll aufgeladen</string>
|
||||
<string name="txt_fell_asleep">Vor %@ eingeschlafen</string>
|
||||
<string name="txt_move_wake_up">Bewegen Sie %@ zum Aufwecken</string>
|
||||
<string name="txt_time_line">Zeitleiste</string>
|
||||
<string name="txt_phone_close_device">Halten Sie das Telefon nah ans Gerät</string>
|
||||
<string name="txt_auto_renew_cancel">Auto-Verlängerung: Kündigen</string>
|
||||
<string name="txt_year_care">%s-Jahres-Garantie</string>
|
||||
<string name="txt_expiry_time">Ablaufdatum:</string>
|
||||
<string name="txt_replacement_year">1 Austausch pro Jahr, aus jedem Grund</string>
|
||||
<string name="txt_bluetooth_radar">Bluetooth Radar</string>
|
||||
<string name="txt_fence_saved">espeichert. Aktiv, wenn online.</string>
|
||||
<string name="txt_renewal_years">Verlängerung: $%s / %s Jahre am %s</string>
|
||||
<string name="txt_renewal_months">Verlängerung: $%s / %s Monate am %s</string>
|
||||
|
||||
</resources>
|
||||
@@ -40,9 +40,9 @@
|
||||
<item>中国</item>
|
||||
<item>日本</item>
|
||||
</string-array>
|
||||
|
||||
<!--Key Name 简体中文 -->
|
||||
<!--http://stackoverflow.com/questions/17502824/whats-wrong-with-this-format-string-->
|
||||
|
||||
<!--简体中文-Android-->
|
||||
<!-- login -->
|
||||
<string name="start_txt_asking">已有设备?</string>
|
||||
<string name="start_txt_no">还没有</string>
|
||||
@@ -127,7 +127,7 @@
|
||||
<!-- tracker -->
|
||||
<string name="tracker_enter_id">输入设备ID</string>
|
||||
<string name="tracker_activate">激活</string>
|
||||
<string name="tracker_activate_cancel">激活设备以继续</string>
|
||||
<string name="tracker_activate_cancel">激活设备并继续</string>
|
||||
<string name="tracker_activate_no">不用了,谢谢</string>
|
||||
<string name="tracker_activate_yes">激活</string>
|
||||
<string name="tracker_manage">我的设备</string>
|
||||
@@ -160,7 +160,7 @@
|
||||
<string name="tracker_manage_set_add_family_invite">邀请</string>
|
||||
<string name="tracker_manage_set_add_family_succ">邀请成功,请通知你的家人</string>
|
||||
<string name="tracker_manage_set_add_family_back">返回</string>
|
||||
<string name="tracker_manage_set_duration">追踪时间</string>
|
||||
<string name="tracker_manage_set_duration">追踪间隔</string>
|
||||
<string name="tracker_manage_set_power">关机</string>
|
||||
<string name="tracker_manage_set_fence_title">围栏</string>
|
||||
<string name="tracker_manage_set_fence_detail">围栏详情</string>
|
||||
@@ -260,7 +260,7 @@
|
||||
<string name="txt_persisted_unit">天</string>
|
||||
<string name="txt_device_renewal">您的设备已过期,请充值</string>
|
||||
<string name="txt_unbind_pet_tips">确定要解绑宠物?</string>
|
||||
<string name="txt_stop_live_tips">停止监控宠物轨迹?</string>
|
||||
<string name="txt_stop_live_tips">停止直播?</string>
|
||||
<string name="txt_share_pet_tips">确定要分享\'%s\'的宠物数据</string>
|
||||
<string name="txt_bind_pet_tips">确定要添加此宠物吗?</string>
|
||||
<string name="txt_delete">删除</string>
|
||||
@@ -441,7 +441,7 @@
|
||||
<string name="txt_upgrading">升级中</string>
|
||||
<string name="txt_upgrade_start">准备升级</string>
|
||||
<string name="txt_device_connect_success">设备连接成功</string>
|
||||
<string name="txt_latest_version">当前是最新版本</string>
|
||||
<string name="txt_latest_version">已是最新版本</string>
|
||||
<string name="txt_device_has_bind">该设备已被绑定</string>
|
||||
<string name="txt_activity">活动</string>
|
||||
<string name="txt_route">路线</string>
|
||||
@@ -599,8 +599,8 @@
|
||||
<string name="txt_add_new_tracker">添加追踪器</string>
|
||||
<string name="txt_charge_power_on">充电并开机</string>
|
||||
<string name="txt_step_one">第一步:</string>
|
||||
<string name="txt_step_one_tips">先为追踪器充电,红灯亮起</string>
|
||||
<string name="txt_step_two_tips">拔掉充电线后绿灯闪烁3次——设备已启动</string>
|
||||
<string name="txt_step_one_tips">先给追踪器充电;三个白色灯闪烁,红灯亮起。</string>
|
||||
<string name="txt_step_two_tips">拔掉电缆,一个绿灯闪烁,设备已开启。</string>
|
||||
<string name="txt_step_two">第二步:</string>
|
||||
<string name="txt_searching_tracker">搜索追踪器</string>
|
||||
<string name="txt_searching_tracker_tip">将手机靠近追踪器</string>
|
||||
@@ -664,7 +664,7 @@
|
||||
<string name="txt_permanent_residence_tip">常住地点可省电并优化定位。</string>
|
||||
<string name="txt_is_pet_home">这是您宠物的家吗?</string>
|
||||
<string name="txt_permanent_residence">常住地点</string>
|
||||
<string name="txt_choose_wifi">选择Wi-Fi网络,无需密码。</string>
|
||||
<string name="txt_choose_wifi">选择Wi-Fi网络</string>
|
||||
<string name="txt_later">稍后</string>
|
||||
<string name="txt_measurement_units_tip">您宠物的计量单位是?</string>
|
||||
<string name="txt_your_height">您宠物的身高</string>
|
||||
@@ -738,7 +738,7 @@
|
||||
<string name="txt_hours">小时 (hours)</string>
|
||||
<string name="txt_search_device">正在搜索…</string>
|
||||
<string name="txt_no_search_device">请保持追踪器开机并在附近以便扫描。</string>
|
||||
<string name="txt_battery_less_than">电量低于%s%%</string>
|
||||
<string name="txt_battery_less_than">电量低于 %s%%</string>
|
||||
<string name="txt_outside">户外</string>
|
||||
<string name="txt_inside">室内</string>
|
||||
<string name="txt_7days_avg">7日均值</string>
|
||||
@@ -765,7 +765,7 @@
|
||||
<string name="txt_no_signal">无信号</string>
|
||||
<string name="txt_wifi">WiFi</string>
|
||||
<string name="txt_set_measurement_units">选择计量单位</string>
|
||||
<string name="txt_metric">公制 (厘米, 千克)</string>
|
||||
<string name="txt_metric">公制 (厘米, 千克) </string>
|
||||
<string name="txt_imperial">英制 (英寸, 磅)</string>
|
||||
<string name="txt_km_h">公里/小时 (km/h)</string>
|
||||
<string name="txt_mph">英里/小时 (mph)</string>
|
||||
@@ -824,7 +824,7 @@
|
||||
<string name="txt_tailwag_explorer">摇尾探险家 (Tailwag Explorer)</string>
|
||||
<string name="txt_pawsome_partner">超棒拍档 (Pawsome Partner)</string>
|
||||
<string name="txt_1_year_hugger">一年抱抱族 (1 Year Hugger)</string>
|
||||
<string name="txt_purrfect_partner">喵不可言 (Purrfect Partner - 适用于猫) / 汪星挚友 (适用于狗)</string>
|
||||
<string name="txt_purrfect_partner">汪星挚友(Purrfect Partner) </string>
|
||||
<string name="txt_2_year_companion">两年同伴 (2 Year Companion)</string>
|
||||
<string name="txt_faithful_friend">忠实好友 (Faithful Friend)</string>
|
||||
<string name="txt_3_year_harmony">三载和谐 (3 Year Harmony)</string>
|
||||
@@ -939,7 +939,7 @@
|
||||
<string name="txt_subscription_expired">您的订阅已过期,请续费</string>
|
||||
<string name="txt_fences_set">%s 围栏设置</string>
|
||||
<string name="txt_is_nearby">%s 在附近</string>
|
||||
<string name="txt_delete_tracker_dec">仅在您要退回或赠送追踪器时,才将其从您的账户中删除。</string>
|
||||
<string name="txt_delete_tracker_dec">仅在您要退回或赠送追踪器时,才将其从您的账户中解绑。</string>
|
||||
<string name="txt_be_deleted">将被删除</string>
|
||||
<string name="txt_led_setting">LED灯设置</string>
|
||||
<string name="txt_reserve">预留</string>
|
||||
@@ -964,15 +964,64 @@
|
||||
<string name="txt_please_enter_email">请输入邮箱。</string>
|
||||
<string name="txt_wifi_password_dec">当LTE信号弱时,Wi-Fi可确保追踪器保持连接</string>
|
||||
<string name="txt_update_time">更新于:%s</string>
|
||||
<string name="txt_1_year_subscription">1年订阅</string>
|
||||
<string name="txt_2_year_subscription">2年订阅</string>
|
||||
<string name="txt_3_year_subscription">3年订阅</string>
|
||||
<string name="txt_as_low_as">低至</string>
|
||||
<string name="txt_show_crash">APP出现异常,即将退出!</string>
|
||||
<string name="txt_system_error">系统异常</string>
|
||||
<string name="txt_missing_param">缺少参数</string>
|
||||
<string name="txt_tracker_busy">Tracker设备繁忙,还有之前的下发任务未完成</string>
|
||||
<string name="txt_tracker_offline">Tracker设备未在线</string>
|
||||
<string name="txt_tracker_live">Tracker启动了Live直播</string>
|
||||
<string name="txt_abnormity">其他异常</string>
|
||||
<string name="txt_load_more_pull_text">上拉加载更多</string>
|
||||
<string name="txt_load_more_release_text">松手加载更多</string>
|
||||
<string name="txt_payment_manager">支付管理</string>
|
||||
<string name="txt_billed_annually">按年计费</string>
|
||||
<string name="txt_basic_plan">基础计划</string>
|
||||
<string name="txt_premium_plan">高级计划</string>
|
||||
<string name="txt_real_time_tracking">实时追踪</string>
|
||||
<string name="txt_activity_logs">活动/休息</string>
|
||||
<string name="txt_notifications_emergencies">紧急情况日志</string>
|
||||
<string name="txt_customized_led">自定义LED灯</string>
|
||||
<string name="txt_geofencing">地理围栏</string>
|
||||
<string name="txt_route_records">路线历史记录</string>
|
||||
<string name="txt_family_sharing">家庭成员共享</string>
|
||||
<string name="txt_customer_support">高级客户支持</string>
|
||||
<string name="txt_show_crash">程序出现异常,即将退出</string>
|
||||
<string name="txt_activate_subscribe">激活订阅</string>
|
||||
<string name="txt_powered_off">已关机</string>
|
||||
<string name="txt_near">靠近%s</string>
|
||||
<string name="txt_charging">充电中</string>
|
||||
<string name="txt_total_time">总时间</string>
|
||||
<string name="txt_live_works_cellular">直播仅限蜂窝网络</string>
|
||||
<string name="txt_unbind_device">解绑设备</string>
|
||||
<string name="txt_edit_profile">编辑资料</string>
|
||||
<string name="txt_no_internet">无网络连接</string>
|
||||
<string name="txt_per_day">/天</string>
|
||||
<string name="txt_renewal_day">续费:$%s/%s天,于%s</string>
|
||||
<string name="txt_day_unit">/天 x%s</string>
|
||||
<string name="txt_location_tip">ABBIDOT应用收集位置数据,可计算当前位置与设备之间的路线和距离。</string>
|
||||
<string name="txt_auto_subscription_day">(之后按$%s每%s天续费)</string>
|
||||
<string name="txt_auto_subscription_days">(之后按$%s/%s天续费)</string>
|
||||
<string name="txt_auto_subscription_years">(之后按$%s/%s年续费)</string>
|
||||
<string name="txt_auto_subscription_months">(之后按$%s/%s月续费)</string>
|
||||
<string name="txt_system_error">系统错误:请稍后重试。</string>
|
||||
<string name="txt_missing_param">缺少参数。</string>
|
||||
<string name="txt_tracker_busy">定位器繁忙,请稍后重试。</string>
|
||||
<string name="txt_tracker_offline">定位器离线,无法继续。</string>
|
||||
<string name="txt_tracker_live">直播进行中,设置不可用。</string>
|
||||
<string name="txt_abnormity">操作失败,请重试。</string>
|
||||
<string name="txt_locating">定位中…</string>
|
||||
<string name="txt_tone">提示音</string>
|
||||
<string name="txt_locate_works">定位仅适用于蜂窝网络</string>
|
||||
<string name="txt_pet_close">宠物靠近,请尝试雷达</string>
|
||||
<string name="txt_load_more_pull_text">下拉加载更多</string>
|
||||
<string name="txt_load_more_release_text">释放加载</string>
|
||||
<string name="txt_fully_charged">已充满电</string>
|
||||
<string name="txt_fell_asleep">%s前进入休眠</string>
|
||||
<string name="txt_move_wake_up">移动%s以唤醒</string>
|
||||
<string name="txt_time_line">时间线</string>
|
||||
<string name="txt_phone_close_device">保持手机靠近设备</string>
|
||||
<string name="txt_auto_renew_cancel">自动续订:取消</string>
|
||||
<string name="txt_year_care">%s 年保险</string>
|
||||
<string name="txt_expiry_time">到期时间:</string>
|
||||
<string name="txt_replacement_year">每年 1 次换新,任何原因均可</string>
|
||||
<string name="txt_bluetooth_radar">蓝牙雷达</string>
|
||||
<string name="txt_fence_saved">已保存,上线时生效。</string>
|
||||
<string name="txt_renewal_years">续订:$%s / %s 年,于 %s</string>
|
||||
<string name="txt_renewal_months">续订:$%s / %s 月,于 %s</string>
|
||||
|
||||
</resources>
|
||||
@@ -97,9 +97,9 @@
|
||||
<item>86</item>
|
||||
<item>81</item>
|
||||
</integer-array>
|
||||
<!--字符串英文-->
|
||||
<!--Key Name English-->
|
||||
<!--http://stackoverflow.com/questions/17502824/whats-wrong-with-this-format-string-->
|
||||
|
||||
<!-- English-Android -->
|
||||
<!-- login -->
|
||||
<string name="start_txt_asking">Already have a GPS Tracker?</string>
|
||||
<string name="start_txt_no">Not yet</string>
|
||||
@@ -262,7 +262,7 @@
|
||||
<string name="map_navigate_map_google">Google Map</string>
|
||||
<string name="map_navigate_map_gaode">Gaode Map</string>
|
||||
<string name="map_navigate_cancel">Cancel</string>
|
||||
<string name="txt_no_install">Install the map app to navigate</string>
|
||||
<string name="txt_no_install">The APP is not installed, please download and install the app first</string>
|
||||
<!-- Data -->
|
||||
<string name="data_active_time">Active Time</string>
|
||||
<string name="data_active_goal">Goal</string>
|
||||
@@ -796,7 +796,7 @@
|
||||
<string name="txt_hours">hours</string>
|
||||
<string name="txt_search_device">Searching…</string>
|
||||
<string name="txt_no_search_device">Keep tracker on and nearby to scan.</string>
|
||||
<string name="txt_battery_less_than">Less than %s%%</string>
|
||||
<string name="txt_battery_less_than">Battery less than %s%%</string>
|
||||
<string name="txt_outside">Outside</string>
|
||||
<string name="txt_inside">Inside</string>
|
||||
<string name="txt_7days_avg">7 Days Avg.</string>
|
||||
@@ -823,7 +823,7 @@
|
||||
<string name="txt_no_signal">No signal</string>
|
||||
<string name="txt_wifi">WiFi</string>
|
||||
<string name="txt_set_measurement_units">Select measurement unit</string>
|
||||
<string name="txt_metric">Metric(cm, kg)</string>
|
||||
<string name="txt_metric">Metric(cm, kg) </string>
|
||||
<string name="txt_imperial">Imperial(in, lb)</string>
|
||||
<string name="txt_km_h">km/h</string>
|
||||
<string name="txt_mph">mph</string>
|
||||
@@ -941,12 +941,12 @@
|
||||
<string name="txt_renewal_month">Renewal: $%s/month on %s</string>
|
||||
<string name="txt_renewal_month1">Renewal:</string>
|
||||
<string name="txt_renewal_month2">/month on</string>
|
||||
<string name="txt_annual_care">Replacement Coverage</string>
|
||||
<string name="txt_annual_care">Annual Care Protection</string>
|
||||
<string name="txt_replace_guarantee_dec">$12.90/year for peace of mind and easy 1-unit replacement annually.</string>
|
||||
<string name="txt_replace_guarantee">Replacement Guarantee</string>
|
||||
<string name="txt_enter_discount_code">Enter discount code</string>
|
||||
<string name="txt_check">Check</string>
|
||||
<string name="txt_annual_care_text">Replacement Coverage</string>
|
||||
<string name="txt_annual_care_text">Annual Care</string>
|
||||
<string name="txt_annual_care_text1">Annual Care: </string>
|
||||
<string name="txt_ble_connect_fail">Bluetooth connection failed</string>
|
||||
<string name="txt_led_light_set">LED Light Settings</string>
|
||||
@@ -1008,7 +1008,7 @@
|
||||
<string name="txt_delete_succe">Delete successfully</string>
|
||||
<string name="txt_edit_pay_method">Edit Payment Method</string>
|
||||
<string name="txt_sure_delete_card">Sure to delete this card?</string>
|
||||
<string name="txt_account_exists_log_in">Account exists. Log in now?</string>
|
||||
<string name="txt_account_exists_log_in">Account exists. Log in now?</string>
|
||||
<string name="txt_time_out_of_range">Selected date is out of range</string>
|
||||
<string name="txt_power_on_off_install_tip">Shake to wake your tracker next time.</string>
|
||||
<string name="txt_check_tracker_status_top_tip">Turn on the tracker, open the app, go to \'Pet\' > \'Tracker\' on the dashboard, then tap \'Network\', \'GPS\', \'Battery\', \'WiFi zone\', \'Bluetooth\', or \'Light\' to check connectivity, signal, or battery status.</string>
|
||||
@@ -1022,6 +1022,9 @@
|
||||
<string name="txt_please_enter_email">Please enter email address.</string>
|
||||
<string name="txt_wifi_password_dec">Wi-Fi ensures your tracker stays connected when LTE signals are weak.</string>
|
||||
<string name="txt_update_time">Updated: %s</string>
|
||||
<string name="txt_1_year_subscription">1 Year Subscription</string>
|
||||
<string name="txt_2_year_subscription">2 Year Subscription</string>
|
||||
<string name="txt_3_year_subscription">3 Year Subscription</string>
|
||||
<string name="txt_as_low_as">As low as</string>
|
||||
<string name="txt_payment_manager">Payment Manager</string>
|
||||
<string name="txt_billed_annually">Billed annually</string>
|
||||
@@ -1031,42 +1034,34 @@
|
||||
<string name="txt_activity_logs">Activity/Resting Logs</string>
|
||||
<string name="txt_notifications_emergencies">Notifications for Emergencies</string>
|
||||
<string name="txt_customized_led">Customized LED</string>
|
||||
<string name="txt_bluetooth_radar">Bluetooth Radar</string>
|
||||
<string name="txt_geofencing">Geofencing</string>
|
||||
<string name="txt_route_records">Route History Records</string>
|
||||
<string name="txt_family_sharing">Family Members Sharing</string>
|
||||
<string name="txt_customer_support">Premium Customer Support</string>
|
||||
<string name="txt_renewal_years">Renewal: $%s/%s years on %s</string>
|
||||
<string name="txt_renewal_months">Renewal: $%s/%s months on %s</string>
|
||||
<string name="txt_replacement_year">1 replacement/year, any reason</string>
|
||||
<string name="txt_expiry_time">Expiry Time:</string>
|
||||
<string name="txt_year_care">%s Year Care</string>
|
||||
<string name="txt_fence_saved">Saved. Active when online.</string>
|
||||
<string name="txt_show_crash">The program has an exception and is about to exit</string>
|
||||
<string name="txt_activate_subscribe">Activate Subscription</string>
|
||||
<string name="txt_powered_off">Powered off</string>
|
||||
<string name="txt_near">Near %s</string>
|
||||
<string name="txt_charging">Charging</string>
|
||||
<string name="txt_total_time">Total Time</string>
|
||||
<string name="txt_live_works_cellular">Live works on cellular only</string>
|
||||
<string name="txt_unbind_device">Unbind Device</string>
|
||||
<string name="txt_edit_profile">Edit Profile</string>
|
||||
<string name="txt_no_internet">No internet connection</string>
|
||||
<string name="txt_per_day">/day</string>
|
||||
<string name="txt_renewal_day">Renewal: $%s/%s day on %s</string>
|
||||
<string name="txt_day_unit">/day x%s</string>
|
||||
<string name="txt_location_tip">ABBIDOT APP collects location data,The route and distance between the current location and the device can be calculated.</string>
|
||||
<string name="txt_auto_subscription_day">(Renew at $%s per %s day thereafter)</string>
|
||||
<string name="txt_auto_subscription_days">(Renew at $%s/%s days thereafter)</string>
|
||||
<string name="txt_auto_subscription_years">(Renew at $%s/%s years thereafter)</string>
|
||||
<string name="txt_auto_subscription_months">(Renew at $%s/%s months thereafter)</string>
|
||||
<string name="txt_system_error">System Error: Please try again later.</string>
|
||||
<string name="txt_missing_param">Missing Parameters.</string>
|
||||
<string name="txt_tracker_busy">Tracker Busy. Please wait and retry.</string>
|
||||
<string name="txt_tracker_offline">Tracker Offline. Unable to proceed.</string>
|
||||
<string name="txt_tracker_live">Live stream in progress. Settings unavailable.</string>
|
||||
<string name="txt_abnormity">Operation failed. Please try again.</string>
|
||||
<string name="txt_per_day">/day</string>
|
||||
<string name="txt_renewal_day">Renewal: $%s/%s day on %s</string>
|
||||
<string name="txt_day_unit">/day x%s</string>
|
||||
<string name="txt_location_tip">"ABBIDOT APP collects location data,The route and distance between the current location and the device can be calculated."</string>
|
||||
<string name="txt_auto_subscription_day">(Renew at $%s per day thereafter)</string>
|
||||
<string name="txt_auto_subscription_days">(Renew at $%s/%s days thereafter)</string>
|
||||
<string name="txt_locating">Locating…</string>
|
||||
<string name="txt_auto_subscription_years">(Renew at $%s/%s years thereafter)</string>
|
||||
<string name="txt_auto_subscription_months">(Renew at $%s/%s months thereafter)</string>
|
||||
<string name="txt_tone">Tone</string>
|
||||
<string name="txt_locate_works">Locate works on cellular only</string>
|
||||
<string name="txt_pet_close">Pet is close, try Radar</string>
|
||||
@@ -1075,9 +1070,17 @@
|
||||
<string name="txt_fully_charged">Fully charged</string>
|
||||
<string name="txt_fell_asleep">Fell asleep %s ago</string>
|
||||
<string name="txt_move_wake_up">Move %s to wake up</string>
|
||||
<string name="map_baidu_map">Baidu Map</string>
|
||||
<string name="txt_time_line">Timeline</string>
|
||||
<string name="txt_phone_close_device">Keep phone close to device</string>
|
||||
<string name="txt_auto_renew_cancel">Auto-Renew: Cancel</string>
|
||||
<string name="txt_year_care">%s Year Care</string>
|
||||
<string name="txt_expiry_time">Expiry Time:</string>
|
||||
<string name="txt_replacement_year">1 replacement/year, any reason</string>
|
||||
<string name="txt_total_time">Total Time</string>
|
||||
<string name="txt_bluetooth_radar">Bluetooth Radar</string>
|
||||
<string name="txt_fence_saved">Saved. Active when online.</string>
|
||||
<string name="txt_renewal_years">Renewal: $%s/%s years on %s</string>
|
||||
<string name="txt_renewal_months">Renewal: $%s/%s months on %s</string>
|
||||
<string name="map_baidu_map">Baidu Map</string>
|
||||
|
||||
</resources>
|
||||
Reference in New Issue
Block a user