From 5f953aa816c9ba52a375da88134cd63669fcb3ea Mon Sep 17 00:00:00 2001
From: qiji4215 <qiji4215@navinfo.com>
Date: Fri, 2 Jun 2023 13:57:50 +0800
Subject: [PATCH] =?UTF-8?q?1.=E8=A7=A3=E5=86=B3=E6=96=B0=E5=A2=9E=E9=97=AE?=
 =?UTF-8?q?=E9=A2=98=E5=90=8E=E7=82=B9=E5=87=BB=E8=8E=B7=E5=8F=96=E6=95=B0?=
 =?UTF-8?q?=E6=8D=AE=E6=97=A0=E6=95=882.=E9=A2=84=E8=AD=A6=E9=9D=A2?=
 =?UTF-8?q?=E6=9D=BF=E5=A2=9E=E5=8A=A0=E5=BF=AB=E9=80=9F=E9=97=AE=E9=A2=98?=
 =?UTF-8?q?=E8=AE=B0=E5=BD=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../omqs/ui/activity/login/LoginViewModel.kt  |   2 +-
 .../omqs/ui/activity/map/MainActivity.kt      |   3 +-
 .../omqs/ui/activity/map/MainViewModel.kt     | 131 ++++++++++--------
 .../omqs/ui/activity/map/SignAdapter.kt       |   7 +-
 .../EvaluationResultFragment.kt               |  20 ++-
 .../EvaluationResultViewModel.kt              |  43 +++---
 .../res/drawable-xhdpi/icon_evaluation.png    | Bin 0 -> 704 bytes
 .../res/drawable-xxhdpi/icon_evaluation.png   | Bin 0 -> 988 bytes
 app/src/main/res/layout/adapter_sign.xml      |  11 ++
 9 files changed, 138 insertions(+), 79 deletions(-)
 create mode 100644 app/src/main/res/drawable-xhdpi/icon_evaluation.png
 create mode 100644 app/src/main/res/drawable-xxhdpi/icon_evaluation.png

diff --git a/app/src/main/java/com/navinfo/omqs/ui/activity/login/LoginViewModel.kt b/app/src/main/java/com/navinfo/omqs/ui/activity/login/LoginViewModel.kt
index cd36992d..520c3332 100644
--- a/app/src/main/java/com/navinfo/omqs/ui/activity/login/LoginViewModel.kt
+++ b/app/src/main/java/com/navinfo/omqs/ui/activity/login/LoginViewModel.kt
@@ -76,7 +76,7 @@ class LoginViewModel @Inject constructor(
     var jobLogin: Job? = null;
 
     init {
-        loginUser.value = LoginUserBean(userCode = "02911", passWord = "123456")
+        loginUser.value = LoginUserBean(userCode = "haofuyue00213", passWord = "123456")
     }
 
 
diff --git a/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainActivity.kt b/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainActivity.kt
index fadd8700..e400c1a7 100644
--- a/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainActivity.kt
+++ b/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainActivity.kt
@@ -75,11 +75,12 @@ class MainActivity : BaseActivity() {
      * 提前显示要素看板
      */
     private val signAdapter by lazy {
-        SignAdapter { position, signBean ->
+        SignAdapter { position, autoSave,signBean ->
             rightController.currentDestination?.let {
                 if (it.id == R.id.RightEmptyFragment) {
                     val bundle = Bundle()
                     bundle.putParcelable("SignBean", signBean)
+                    bundle.putBoolean("AutoSave", autoSave)
                     rightController.navigate(R.id.EvaluationResultFragment, bundle)
                 }
             }
diff --git a/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainViewModel.kt b/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainViewModel.kt
index cc45b163..dfd92f34 100644
--- a/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainViewModel.kt
+++ b/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainViewModel.kt
@@ -85,6 +85,7 @@ class MainViewModel @Inject constructor(
 
     //录音图标
     var volume: ImageView? = null
+
     var mSoundMeter: SoundMeter? = null
 
     var menuState: Boolean = false
@@ -98,6 +99,8 @@ class MainViewModel @Inject constructor(
      */
     private var bSelectRoad = false
 
+    private var linkIdCache = ""
+
     init {
         mapController.mMapView.vtmMap.events.bind(Map.UpdateListener { e, mapPosition ->
             when (e) {
@@ -210,80 +213,92 @@ class MainViewModel @Inject constructor(
             val linkList = realmOperateHelper.queryLink(
                 point = point,
             )
-            //看板数据
-            val signList = mutableListOf<SignBean>()
-            val topSignList = mutableListOf<SignBean>()
-            mapController.lineHandler.linksLayer.clear()
             if (linkList.isNotEmpty()) {
+                //看板数据
+                val signList = mutableListOf<SignBean>()
+                val topSignList = mutableListOf<SignBean>()
+                mapController.lineHandler.linksLayer.clear()
+
                 val link = linkList[0]
+
                 val linkId = link.properties[RenderEntity.Companion.LinkTable.linkPid]
-                Log.e("jingo", "捕捉到的linkid $linkId ${link.geometry}")
-                mapController.lineHandler.showLine(link.geometry)
-                linkId?.let {
-                    var elementList = realmOperateHelper.queryLinkByLinkPid(it)
-                    for (element in elementList) {
-                        val distance = GeometryTools.distanceToDouble(
-                            point, GeometryTools.createGeoPoint(element.geometry)
-                        )
 
-                        val signBean = SignBean(
-                            iconId = SignUtil.getSignIcon(element),
-                            iconText = SignUtil.getSignIconText(element),
-                            distance = distance.toInt(),
-                            elementId = element.id,
-                            linkId = linkId,
-                            geometry = element.geometry,
-                            name = SignUtil.getSignNameText(element),
-                            bottomRightText = SignUtil.getSignBottomRightText(element),
-                            elementCode = element.code
-                        )
+                if(linkIdCache!=linkId){
 
-                        when (element.code) {
-                            2002, 2008, 2010, 2041 -> topSignList.add(
-                                signBean
+                    Log.e("jingo", "捕捉到的linkid $linkId ${link.geometry}")
+                    mapController.lineHandler.showLine(link.geometry)
+                    linkId?.let {
+                        var elementList = realmOperateHelper.queryLinkByLinkPid(it)
+                        for (element in elementList) {
+                            val distance = GeometryTools.distanceToDouble(
+                                point, GeometryTools.createGeoPoint(element.geometry)
                             )
-                            4002, 4003, 4004, 4022 -> signList.add(
-                                signBean
+
+                            val signBean = SignBean(
+                                iconId = SignUtil.getSignIcon(element),
+                                iconText = SignUtil.getSignIconText(element),
+                                distance = distance.toInt(),
+                                elementId = element.id,
+                                linkId = linkId,
+                                geometry = element.geometry,
+                                name = SignUtil.getSignNameText(element),
+                                bottomRightText = SignUtil.getSignBottomRightText(element),
+                                elementCode = element.code
                             )
+
+                            when (element.code) {
+                                2002, 2008, 2010, 2041 -> topSignList.add(
+                                    signBean
+                                )
+                                4002, 4003, 4004, 4022 -> signList.add(
+                                    signBean
+                                )
+                            }
+
                         }
 
-                    }
-
-                    val realm = Realm.getDefaultInstance()
-                    val entity = realm.where(RenderEntity::class.java)
-                        .equalTo("table", "OMDB_RESTRICTION")
-                        .and()
-                        .equalTo(
-                            "properties['linkIn']",
-                            it
-                        ).findFirst()
-                    if (entity != null) {
-                        val outLink = entity.properties["linkOut"]
-                        val linkOutEntity = realm.where(RenderEntity::class.java)
-                            .equalTo("table", "OMDB_RD_LINK")
+                        val realm = Realm.getDefaultInstance()
+                        val entity = realm.where(RenderEntity::class.java)
+                            .equalTo("table", "OMDB_RESTRICTION")
                             .and()
                             .equalTo(
-                                "properties['${RenderEntity.Companion.LinkTable.linkPid}']",
-                                outLink
+                                "properties['linkIn']",
+                                it
                             ).findFirst()
-                        if (linkOutEntity != null) {
-                            mapController.lineHandler.linksLayer.addLine(
-                                linkOutEntity.geometry,
-                                0x7DFF0000
-                            )
-                            Log.e("jingo", "捕捉到的linkid $outLink ${linkOutEntity.geometry}")
+                        if (entity != null) {
+                            val outLink = entity.properties["linkOut"]
+                            val linkOutEntity = realm.where(RenderEntity::class.java)
+                                .equalTo("table", "OMDB_RD_LINK")
+                                .and()
+                                .equalTo(
+                                    "properties['${RenderEntity.Companion.LinkTable.linkPid}']",
+                                    outLink
+                                ).findFirst()
+                            if (linkOutEntity != null) {
+                                mapController.lineHandler.linksLayer.addLine(
+                                    linkOutEntity.geometry,
+                                    0x7DFF0000
+                                )
+                                Log.e("jingo", "捕捉到的linkid $outLink ${linkOutEntity.geometry}")
+                            }
                         }
                     }
+
+                    liveDataTopSignList.postValue(topSignList.distinctBy { it.elementCode })
+                    liveDataSignList.postValue(signList.distinctBy { it.elementCode })
+                    val speechText = SignUtil.getRoadSpeechText(topSignList)
+                    withContext(Dispatchers.Main) {
+                        speakMode?.speakText(speechText)
+                    }
                 }
 
+                linkIdCache = linkId ?: ""
+
+                Log.e("jingo", "自动捕捉数据 共${signList.size}条")
+
+            }else{
+                ToastUtils.showLong("未捕捉到数据")
             }
-            liveDataTopSignList.postValue(topSignList.distinctBy { it.elementCode })
-            liveDataSignList.postValue(signList.distinctBy { it.elementCode })
-            val speechText = SignUtil.getRoadSpeechText(topSignList)
-            withContext(Dispatchers.Main) {
-                speakMode?.speakText(speechText)
-            }
-            Log.e("jingo", "自动捕捉数据 共${signList.size}条")
         }
     }
 
@@ -483,6 +498,8 @@ class MainViewModel @Inject constructor(
      */
     fun setSelectRoad(select: Boolean) {
         bSelectRoad = select
+        //去掉缓存
+        linkIdCache =  ""
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
             mapController.lineHandler.removeLine()
             liveDataSignList.value = mutableListOf()
diff --git a/app/src/main/java/com/navinfo/omqs/ui/activity/map/SignAdapter.kt b/app/src/main/java/com/navinfo/omqs/ui/activity/map/SignAdapter.kt
index e1ca6085..b5072080 100644
--- a/app/src/main/java/com/navinfo/omqs/ui/activity/map/SignAdapter.kt
+++ b/app/src/main/java/com/navinfo/omqs/ui/activity/map/SignAdapter.kt
@@ -8,7 +8,7 @@ import com.navinfo.omqs.databinding.AdapterSignBinding
 import com.navinfo.omqs.ui.other.BaseRecyclerViewAdapter
 import com.navinfo.omqs.ui.other.BaseViewHolder
 
-class SignAdapter(private var itemListener: ((Int, SignBean) -> Unit?)? = null) :
+class SignAdapter(private var itemListener: ((Int, Boolean, SignBean) -> Unit?)? = null) :
     BaseRecyclerViewAdapter<SignBean>() {
     override fun getItemViewRes(position: Int): Int {
         return R.layout.adapter_sign
@@ -27,9 +27,12 @@ class SignAdapter(private var itemListener: ((Int, SignBean) -> Unit?)? = null)
             bd.signMainIconBg.setImageResource(item.iconId)
         bd.signMainIcon.text = item.iconText
         bd.signBottomText.text = item.name
+        bd.signMainFastError.setOnClickListener{
+            itemListener?.invoke(position, true,item)
+        }
         bd.signBottomRightText.text = item.bottomRightText
         bd.root.setOnClickListener {
-            itemListener?.invoke(position, item)
+            itemListener?.invoke(position, false,item)
         }
     }
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/evaluationresult/EvaluationResultFragment.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/evaluationresult/EvaluationResultFragment.kt
index 210893fa..f44a8f3c 100644
--- a/app/src/main/java/com/navinfo/omqs/ui/fragment/evaluationresult/EvaluationResultFragment.kt
+++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/evaluationresult/EvaluationResultFragment.kt
@@ -102,12 +102,18 @@ class EvaluationResultFragment : BaseFragment(), View.OnClickListener {
                         voiceOnTouchStart()//Do Something
                         Log.e("qj", "voiceOnTouchStart")
                     }
+
                     MotionEvent.ACTION_UP -> {
                         voiceOnTouchStop()//Do Something
-                        Log.e("qj", "voiceOnTouchStop")
+                        Log.e("qj", "ACTION_UP")
+                    }
+
+                    MotionEvent.ACTION_CANCEL -> {
+                        voiceOnTouchStop()//Do Something
+                        Log.e("qj", "ACTION_CANCEL")
                     }
                 }
-                return v?.onTouchEvent(event) ?: true
+                return true
             }
         })
 
@@ -117,18 +123,26 @@ class EvaluationResultFragment : BaseFragment(), View.OnClickListener {
 //        val id = args.qsId
         var id = ""
         var signBean: SignBean? = null
+        var autoSave: Boolean = false
         var filePath: String = ""
         arguments?.let {
             id = it.getString("QsId", "")
             filePath = it.getString("filePath", "")
             try {
                 signBean = it.getParcelable("SignBean")
+                autoSave = it.getBoolean("AutoSave")
             } catch (e: java.lang.Exception) {
             }
         }
 
         if (id == null || id.isEmpty()) {
             viewModel.initNewData(signBean, filePath)
+            //增加监听,联动列表自动保存
+            viewModel.liveDataRightTypeList.observe(viewLifecycleOwner) {
+                if (autoSave) {
+                    viewModel.saveData()
+                }
+            }
         } else {
             viewModel.initData(id)
         }
@@ -288,6 +302,7 @@ class EvaluationResultFragment : BaseFragment(), View.OnClickListener {
 
                     }
                 }
+
                 else -> {}
             }
         }
@@ -299,6 +314,7 @@ class EvaluationResultFragment : BaseFragment(), View.OnClickListener {
 
     @RequiresApi(Build.VERSION_CODES.Q)
     fun voiceOnTouchStop() {
+        Log.e("qj", "voiceOnTouchStop====${Constant.IS_VIDEO_SPEED}")
         if (Constant.IS_VIDEO_SPEED) {
             viewModel.stopSoundMeter()
         }
diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/evaluationresult/EvaluationResultViewModel.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/evaluationresult/EvaluationResultViewModel.kt
index 99158c55..5684e00d 100644
--- a/app/src/main/java/com/navinfo/omqs/ui/fragment/evaluationresult/EvaluationResultViewModel.kt
+++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/evaluationresult/EvaluationResultViewModel.kt
@@ -34,8 +34,12 @@ import com.navinfo.omqs.util.DateTimeUtil
 import com.navinfo.omqs.util.SoundMeter
 import com.navinfo.omqs.util.SpeakMode
 import dagger.hilt.android.lifecycle.HiltViewModel
+import io.realm.OrderedCollectionChangeSet
 import io.realm.Realm
 import io.realm.RealmList
+import io.realm.RealmModel
+import io.realm.RealmResults
+import io.realm.kotlin.addChangeListener
 import io.realm.kotlin.where
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.launch
@@ -359,28 +363,35 @@ class EvaluationResultViewModel @Inject constructor(
 
     fun initData(id: String) {
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
+
             viewModelScope.launch(Dispatchers.IO) {
-                val realm = Realm.getDefaultInstance()
-                val objects = realm.where<QsRecordBean>().equalTo("id", id).findFirst()
 
-                if (objects != null) {
-                    oldBean = realm.copyFromRealm(objects)
-                    oldBean?.let {
-                        liveDataQsRecordBean.postValue(it.copy())
-                        val p = GeometryTools.createGeoPoint(it.geometry)
-                        mapController.markerHandle.addMarker(
-                            GeoPoint(p.latitude, p.longitude), markerTitle
-                        )
+                Realm.getDefaultInstance().use { realm ->
+                    realm.executeTransactionAsync { bgRealm ->
+                        // find the item
+                        val objects = bgRealm.where(QsRecordBean::class.java).equalTo("id", id).findFirst()
+                        if (objects != null) {
+                            oldBean = bgRealm.copyFromRealm(objects)
+                            oldBean?.let {
+                                liveDataQsRecordBean.postValue(it.copy())
+                                val p = GeometryTools.createGeoPoint(it.geometry)
+                                mapController.markerHandle.addMarker(GeoPoint(p.latitude, p.longitude), markerTitle)
 
-                        if (it.linkId.isNotEmpty()) {
-                            val link = realmOperateHelper.queryLink(it.linkId)
-                            link?.let { l ->
-                                mapController.lineHandler.showLine(l.geometry)
+                                //获取linkid
+                                if (it.linkId.isNotEmpty()) {
+                                    viewModelScope.launch(Dispatchers.IO) {
+                                        val link = realmOperateHelper.queryLink(it.linkId)
+                                        link?.let { l ->
+                                            mapController.lineHandler.showLine(l.geometry)
+                                        }
+                                    }
+                                }
+                                liveDataQsRecordBean.value?.attachmentBeanList = it.attachmentBeanList
+                                // 显示语音数据到界面
+                                getChatMsgEntityList()
                             }
                         }
                     }
-                    // 显示语音数据到界面
-                    getChatMsgEntityList()
                 }
             }
         }
diff --git a/app/src/main/res/drawable-xhdpi/icon_evaluation.png b/app/src/main/res/drawable-xhdpi/icon_evaluation.png
new file mode 100644
index 0000000000000000000000000000000000000000..04625fac73f354fc8f27ddf47d6dab9601d4a9b4
GIT binary patch
literal 704
zcmV;x0zdtUP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F80007qNkl<ZSVzs5
zL3YzH5Qb-L>~sT!9q&<xbOZH@^aL~~XnKN%6VMyboPclw!VSy`NKZhza$wWE2Hs;C
zS{B8s{qrQ(#UW`V$AO?t-ixKtH=|!OBc=l5^CPDLoA&_hs%6aSFVTpA5fhC-Nl>|n
zkGCc?F)__1lZG|tkceLrQQc&|Vgq`K5FP&;jTWt02=K|XTVVTjk&S0I1G<$9(YY-m
zw*m||oi16*>lF+P5Q+VH(U=P`^xS}$_ExZS&IBe_OwA`>#UO8Y1|amD9y1@TcJs^{
zCWypNJ`z&^*J6`rt{q5{rvK%tpG^!sr_apKwF?P@%DHG}nz#W7A5xuN_f&5nov}Os
z5r{heS#+dsOU{Erp)UiV9EhSVc@zpjCYZ$LkEY(2jeuGYyz|GRtpJv}a%Cexgvs`q
zc%T5nnkz%`_+LgK&6e>#FBAS%9D#B+!5a=Y@9eT=eJJAnssI2SbLcs3W`4UqfSP;6
zM6cEXAce@`Ist%_|3Cw46d{4$r-`WMqNoOlaA+sEDXp=^T_SE2u>;^m3h-CzzaB-_
zgESK^aTR4QC+2*=C-b^_HU&<$$D;AO8Wv2)Wov;<!%xR?kT1uD5>goenF0N=P%Zs*
zN8~vJVt%GSy>bnS6=Nss4W|H3t5p4Y&lwT%eI11C`|}zAQQM?_m&*6YqL<m9X-d=T
zNPQCs9ps<ivnC|}|J=4*Lc}&pftagWLzC|VwE%L0JdVq|PGHvQF4`U68A)3ze%>tY
z+fY8w61Ka`L_>PLaUOLSJyf*-8MOi-tHn&MMfy-p22+4Y1iFXm%r!I>mC^{KYB8!{
mtB&iMu<_$+VEQc2_WA|DEs6AAh;vi`0000<MNUMnLSTZd?K>R+

literal 0
HcmV?d00001

diff --git a/app/src/main/res/drawable-xxhdpi/icon_evaluation.png b/app/src/main/res/drawable-xxhdpi/icon_evaluation.png
new file mode 100644
index 0000000000000000000000000000000000000000..a41e13cf87f4d22256c33a5114226e545d99acb9
GIT binary patch
literal 988
zcmV<210(#2P)<h;3K|Lk000e1NJLTq001xm001xu1^@s6R|5Hm000A{Nkl<ZXhZFq
zT~6CT5Xb-HVCSKNrf-!>((qD}r-l=ho}h37-~>%iKym`o8-x=OPCz&T;VIBQ5G7RV
zV}KWGH=b&pICA`vIO`9Jgr!JGW@qQOGdr_0YeG!V&-Im0rlM>!qXKXaMBB5Xc?d=a
zK!*q&Q#a1bztM|2Jw*}FU0>N&i1wJU15i#vR*!(Dsq4qGFj4^51$B=>H2_5krG1AG
zbJH}8`m!KP0sMHUR!jv)UiXL#0|0X)`(V^Jh8TvC8XDlbpdB(GRy~cUr;K>_!!JYZ
znYqtGfSVk0e^%9#L{~jPMP@!I4~*tKg1G>e@@wiDK$S%+k<@zvYMXt%9wa{y;D1ow
zR+@o&xv%@WZy>-`LA{V(dFD%ocM}qc96_&TtQF)=z5rM2Y6A*=m6=G4VblCvzWv*F
zkMHKyHW7W2m8*<+%e}EZ03tb&qMXT2k|Y3tUiMz!a)wwBz*RxJiJG92vVgTXuKh3r
z&@E^+0uH0Be!>>8RAXJ=uru})U=nq1B+oQ6%t>0n0$@Ha4~%{B_Y~l&pjH7oin{t~
zSU}8?z1QD}z2F3p51TIPq%AO>j=z=qM#BQ=zD1EVYxBnPqy*3@^^GkHAWrv5%Y|$=
z8Uy6D76@NrS^fkQnOi^N(eA_o(PO_;csedL&IvXE$F=%tx)2zr6vxrQ4WF6?n9pAT
z{9G?B3jjQPvA|PWfW;mdCo=6>Mj;1)I+QK-p40+%9*A1%Jz*F<NaQRe+JqqTG;SFX
zXZYCKk)p7%0IZf_hA!gF#)->fzAO!l%CsKn7BtZ*exLZnu}$Ep2jV_bi;~aJg#hfw
zwMced?5>G>aYUn}GqG<?Y*l8@xho+6CY_1MR!GzWCVwy88dZBMc^X^S`OFSe<|N8q
zOAdhVviC-DZfDMNrM%iCqCHuNqyYTn`Zjkbml|yleUyXX4%p|4XxyEaxeWBQ6a!tz
zei7GxkXwM+QO>C2DeUJ>ATsnQL#?=Cw+zfY<%PVkcVrRVNk;9-7+1vcle7@P4zG`^
zY9q?VUJirrh|T@Y!Kk%pTqporhzPMJWkf$Rxib^vlnuQa_QHE9fT=asv?_r`H(Tny
z%eM$(J_mEn?`mqE6_y5YMybbDb%%gzgm8Puj24)i%PPJwj4tv$=X=rJhN_CMQ^c<r
ze38dO;SPx(nQiT1)DHVeL6APu76=0<a*6RuEr$7IAdEb}|M>^Y2uCMlZoXOo0000<
KMNUMnLSTZ3J;Oo(

literal 0
HcmV?d00001

diff --git a/app/src/main/res/layout/adapter_sign.xml b/app/src/main/res/layout/adapter_sign.xml
index eb570520..189bc7ef 100644
--- a/app/src/main/res/layout/adapter_sign.xml
+++ b/app/src/main/res/layout/adapter_sign.xml
@@ -47,4 +47,15 @@
         android:layout_alignParentRight="true"
         android:layout_marginRight="15dp"
         android:textSize="14sp"/>
+
+    <ImageView
+        android:id="@+id/sign_main_fast_error"
+        android:layout_marginRight="4dp"
+        android:layout_marginTop="4dp"
+        android:layout_alignParentRight="true"
+        android:layout_alignParentTop="true"
+        android:background="@drawable/icon_evaluation"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"/>
+
 </RelativeLayout>
\ No newline at end of file