Prechádzať zdrojové kódy

1.添加获取moca试题库module

王鹏鹏 2 rokov pred
rodič
commit
c7fb899421

+ 1 - 1
.idea/misc.xml

@@ -128,7 +128,7 @@
         <entry key="..\:/workspace/hcp-pad/moca/src/main/res/layout/fragment_draw_design.xml" value="0.22239583333333332" />
         <entry key="..\:/workspace/hcp-pad/moca/src/main/res/layout/fragment_identify_picture.xml" value="0.23697916666666666" />
         <entry key="..\:/workspace/hcp-pad/moca/src/main/res/layout/fragment_identify_result.xml" value="0.22239583333333332" />
-        <entry key="..\:/workspace/hcp-pad/moca/src/main/res/layout/fragment_listen_record.xml" value="0.23697916666666666" />
+        <entry key="..\:/workspace/hcp-pad/moca/src/main/res/layout/fragment_listen_record.xml" value="0.6" />
         <entry key="..\:/workspace/hcp-pad/moca/src/main/res/layout/fragment_multiple_choice.xml" value="0.23697916666666666" />
         <entry key="..\:/workspace/hcp-pad/moca/src/main/res/layout/fragment_record_result.xml" value="0.23697916666666666" />
         <entry key="..\:/workspace/hcp-pad/moca/src/main/res/layout/fragment_signature.xml" value="0.23697916666666666" />

+ 19 - 0
moca/src/main/java/com/yingyangfly/moca/adapter/VerifyAnswersAdapter.kt

@@ -1,5 +1,6 @@
 package com.yingyangfly.moca.adapter
 
+import android.text.TextUtils
 import com.yingyang.moca.R
 import com.yingyang.moca.databinding.ItemVerifyAnswersBinding
 import com.yingyangfly.baselib.adapter.BaseDataBindingAdapter
@@ -10,11 +11,29 @@ import com.yingyangfly.baselib.db.QuestionsBean
  */
 class VerifyAnswersAdapter(override val layoutId: Int = R.layout.item_verify_answers) :
     BaseDataBindingAdapter<QuestionsBean, ItemVerifyAnswersBinding>() {
+
+    var onCheckClickListener: ((bean: QuestionsBean) -> Unit)? = null
+
     override fun onBindViewHolder(
         binding: ItemVerifyAnswersBinding,
         item: QuestionsBean,
         position: Int
     ) {
         binding.data = item
+        binding.radioCorrect.isChecked = TextUtils.equals(item.inputString, "是")
+        binding.radioDeny.isChecked = TextUtils.equals(item.inputString, "否")
+        binding.radioChoice.setOnCheckedChangeListener { group, checkedId ->
+            item.reviewId = item.id
+            item.reviewAnswer = ""
+            if (checkedId == R.id.radioCorrect) {
+                item.inputString = "是"
+                item.correct = "1"
+                onCheckClickListener?.invoke(item)
+            } else if (checkedId == R.id.radioDeny) {
+                item.inputString = "否"
+                item.correct = "0"
+                onCheckClickListener?.invoke(item)
+            }
+        }
     }
 }

+ 5 - 0
moca/src/main/java/com/yingyangfly/moca/drawdesign/VerifyAnswersFragment.kt

@@ -37,6 +37,11 @@ class VerifyAnswersFragment : BaseFragment<FragmentVerifyAnswersBinding>() {
     override fun initViews() {
         binding {
             rvChoice.adapter = adapter
+            adapter.onCheckClickListener = {
+                if (dao != null) {
+                    dao?.update(it)
+                }
+            }
         }
     }
 

+ 60 - 7
moca/src/main/java/com/yingyangfly/moca/identify/IdentifyResultFragment.kt

@@ -6,7 +6,10 @@ import androidx.navigation.Navigation
 import com.yingyang.moca.R
 import com.yingyang.moca.databinding.FragmentIdentifyResultBinding
 import com.yingyangfly.baselib.base.BaseFragment
+import com.yingyangfly.baselib.db.QuestionsBean
 import com.yingyangfly.baselib.ext.setOnSingleClickListener
+import com.yingyangfly.baselib.ext.toast
+import com.yingyangfly.moca.adapter.ChoiceAdapter
 
 /**
  * 识图结果
@@ -17,6 +20,8 @@ class IdentifyResultFragment : BaseFragment<FragmentIdentifyResultBinding>() {
      * 问题id
      */
     var questionId = 0
+    private val choiceItemList = mutableListOf<QuestionsBean>()
+    private val adapter by lazy { ChoiceAdapter() }
 
     override fun onCreate(savedInstanceState: Bundle?) {
         questionId = arguments?.getInt("questionId") ?: 33
@@ -24,7 +29,9 @@ class IdentifyResultFragment : BaseFragment<FragmentIdentifyResultBinding>() {
     }
 
     override fun initViews() {
-
+        binding {
+            rvChoice.adapter = adapter
+        }
     }
 
     override fun initListener() {
@@ -39,12 +46,14 @@ class IdentifyResultFragment : BaseFragment<FragmentIdentifyResultBinding>() {
             }
 
             btnNext.setOnSingleClickListener {
-                val controller = Navigation.findNavController(it)
-                val bundle = bundleOf("questionId" to 44)
-                controller.navigate(
-                    R.id.action_identifyResultFragment_to_listenRecordFragment,
-                    bundle
-                )
+                if(judge()) {
+                    val controller = Navigation.findNavController(it)
+                    val bundle = bundleOf("questionId" to 44)
+                    controller.navigate(
+                        R.id.action_identifyResultFragment_to_listenRecordFragment,
+                        bundle
+                    )
+                }
             }
         }
     }
@@ -52,4 +61,48 @@ class IdentifyResultFragment : BaseFragment<FragmentIdentifyResultBinding>() {
     override fun initData() {
 
     }
+
+    override fun onResume() {
+        super.onResume()
+        loadData()
+    }
+
+    /**
+     * 加载数据
+     */
+    private fun loadData() {
+        choiceItemList.clear()
+        if (dao != null) {
+            val firstquestion = dao?.getQuestion(questionId)
+            if (firstquestion != null) {
+                choiceItemList.add(firstquestion)
+            }
+            val secondQuestionnId = questionId + 1
+            val secondQuestion = dao?.getQuestion(secondQuestionnId)
+            if (secondQuestion != null) {
+                choiceItemList.add(secondQuestion)
+            }
+            val thirdQuestionId = questionId + 2
+            val thirdQuestion = dao?.getQuestion(thirdQuestionId)
+            if (thirdQuestion != null) {
+                choiceItemList.add(thirdQuestion)
+            }
+        }
+        adapter.setData(choiceItemList)
+    }
+
+    /**
+     * 非空判断
+     */
+    private fun judge(): Boolean {
+        if (choiceItemList.isNullOrEmpty().not()) {
+            choiceItemList.forEach {
+                if (it.inputString.isNullOrEmpty()) {
+                    "请判断答案是否正确".toast()
+                    return false
+                }
+            }
+        }
+        return true
+    }
 }

+ 59 - 2
moca/src/main/java/com/yingyangfly/moca/record/ListenRecordFragment.kt

@@ -7,6 +7,7 @@ import com.yingyang.moca.R
 import com.yingyang.moca.databinding.FragmentListenRecordBinding
 import com.yingyangfly.baselib.base.BaseFragment
 import com.yingyangfly.baselib.ext.setOnSingleClickListener
+import com.yingyangfly.baselib.voice.PlayVoice
 
 /**
  * 听录音说答案
@@ -16,7 +17,14 @@ class ListenRecordFragment : BaseFragment<FragmentListenRecordBinding>() {
     /**
      * 问题id
      */
-    var questionId = 0
+    private var questionId = 0
+    private var playVoice: PlayVoice? = null
+
+    private var firstWord = ""
+    private var secondWord = ""
+    private var thirdWord = ""
+    private var fourthWord = ""
+    private var fifthWord = ""
 
     override fun onCreate(savedInstanceState: Bundle?) {
         questionId = arguments?.getInt("questionId") ?: 33
@@ -24,7 +32,8 @@ class ListenRecordFragment : BaseFragment<FragmentListenRecordBinding>() {
     }
 
     override fun initViews() {
-
+        playVoice = PlayVoice()
+        playVoice?.setContext(mContext)
     }
 
     override fun initListener() {
@@ -46,10 +55,58 @@ class ListenRecordFragment : BaseFragment<FragmentListenRecordBinding>() {
                     bundle
                 )
             }
+
+            imagePlay.setOnSingleClickListener {
+                playVoice?.speakWithParagraph(firstWord, secondWord, thirdWord)
+            }
         }
     }
 
     override fun initData() {
 
     }
+
+    override fun onResume() {
+        super.onResume()
+        loadData()
+    }
+
+    /**
+     * 加载数据
+     */
+    private fun loadData() {
+        if (dao != null) {
+            val firstquestion = dao?.getQuestion(questionId)
+            if (firstquestion != null) {
+                firstWord = firstquestion.reviewItem
+            }
+            val secondQuestionnId = questionId + 1
+            val secondQuestion = dao?.getQuestion(secondQuestionnId)
+            if (secondQuestion != null) {
+                secondWord = secondQuestion.reviewItem
+            }
+            val thirdQuestionId = questionId + 2
+            val thirdQuestion = dao?.getQuestion(thirdQuestionId)
+            if (thirdQuestion != null) {
+                thirdWord = thirdQuestion.reviewItem
+            }
+            val fourthQuestionnId = questionId + 3
+            val fourthQuestion = dao?.getQuestion(fourthQuestionnId)
+            if (fourthQuestion != null) {
+                fourthWord = fourthQuestion.reviewItem
+            }
+            val fifthQuestionId = questionId + 4
+            val fifthQuestion = dao?.getQuestion(fifthQuestionId)
+            if (fifthQuestion != null) {
+                fifthWord = fifthQuestion.reviewItem
+            }
+        }
+    }
+
+    override fun onPause() {
+        super.onPause()
+        if (playVoice != null) {
+            playVoice?.stop()
+        }
+    }
 }

+ 76 - 0
moca/src/main/res/layout/fragment_identify_result.xml

@@ -6,6 +6,82 @@
         android:layout_width="match_parent"
         android:layout_height="match_parent">
 
+        <TextView
+            android:id="@+id/tvTitle"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="@dimen/divider_202px"
+            android:layout_marginTop="@dimen/divider_53px"
+            android:layout_marginEnd="@dimen/divider_200px"
+            android:gravity="center"
+            android:text="@string/may_i_ask_if_subjects_correctly_name_animals_picture"
+            android:textColor="@color/color_FF222222"
+            android:textSize="@dimen/divider_34px"
+            android:textStyle="bold"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <com.google.android.material.card.MaterialCardView
+            android:id="@+id/contentLayout"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="@dimen/divider_32px"
+            android:minWidth="@dimen/divider_620px"
+            android:minHeight="@dimen/divider_264px"
+            android:theme="@style/Theme.MaterialComponents.NoActionBar"
+            app:cardBackgroundColor="@android:color/white"
+            app:cardCornerRadius="@dimen/divider_20px"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/tvTitle"
+            app:strokeColor="@color/color_FF979797"
+            app:strokeWidth="@dimen/divider_1px">
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:gravity="center_vertical"
+                android:orientation="horizontal">
+
+                <LinearLayout
+                    android:layout_width="@dimen/divider_191px"
+                    android:layout_height="match_parent"
+                    android:background="@color/color_FF4A76FF"
+                    android:gravity="center"
+                    android:orientation="vertical">
+
+                    <androidx.appcompat.widget.AppCompatImageView
+                        android:layout_width="@dimen/divider_65px"
+                        android:layout_height="@dimen/divider_86px"
+                        android:layout_gravity="center"
+                        android:background="@mipmap/icon_doctor_head" />
+
+                    <androidx.appcompat.widget.AppCompatTextView
+                        android:id="@+id/tvYear"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:layout_marginTop="@dimen/divider_31px"
+                        android:background="@color/color_FF4A76FF"
+                        android:gravity="center_horizontal"
+                        android:text="@string/staff_judgment"
+                        android:textColor="@android:color/white"
+                        android:textSize="@dimen/divider_24px" />
+
+                </LinearLayout>
+
+                <androidx.recyclerview.widget.RecyclerView
+                    android:id="@+id/rvChoice"
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent"
+                    android:layout_marginTop="@dimen/divider_15px"
+                    android:layout_marginBottom="@dimen/divider_23px"
+                    app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />
+
+            </LinearLayout>
+        </com.google.android.material.card.MaterialCardView>
+
+
         <androidx.appcompat.widget.AppCompatButton
             android:id="@+id/btnPrevious"
             android:layout_width="@dimen/divider_240px"

+ 13 - 0
moca/src/main/res/layout/fragment_listen_record.xml

@@ -25,6 +25,7 @@
             app:layout_constraintTop_toTopOf="parent" />
 
         <androidx.appcompat.widget.AppCompatImageView
+            android:id="@+id/imagePlay"
             android:layout_width="@dimen/divider_154px"
             android:layout_height="@dimen/divider_154px"
             android:layout_marginTop="@dimen/divider_56px"
@@ -33,6 +34,18 @@
             app:layout_constraintStart_toStartOf="parent"
             app:layout_constraintTop_toBottomOf="@+id/tvTitle" />
 
+        <androidx.appcompat.widget.AppCompatTextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="@dimen/divider_20px"
+            android:text="@string/click_play"
+            android:textColor="@color/color_FF222222"
+            android:textSize="@dimen/divider_28px"
+            android:textStyle="bold"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/imagePlay" />
+
         <androidx.appcompat.widget.AppCompatButton
             android:id="@+id/btnPrevious"
             android:layout_width="@dimen/divider_240px"

+ 1 - 0
moca/src/main/res/values/strings.xml

@@ -30,4 +30,5 @@
     <string name="please_name_animals_in_the_picture" tools:ignore="ResourceName">请您说出图片中动物的名称</string>
     <string name="you_will_hea_words_please_listen_remember_please_listen_to_the_question" tools:ignore="ResourceName">下面您将听到几个词,请您仔细听并努力记住这些词,等一下要问您,请听题</string>
     <string name="previous_page" tools:ignore="ResourceName">上一页</string>
+    <string name="may_i_ask_if_subjects_correctly_name_animals_picture" tools:ignore="ResourceName">请问受试者是否正确说出图中动物名称</string>
 </resources>