@@ -66,6 +66,7 @@ | |||
<entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/layout/_xpopup_ext_time_picker.xml" value="0.23632218844984804" /> | |||
<entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/layout/activity_course_main.xml" value="0.33" /> | |||
<entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/layout/activity_course_statistics_detail.xml" value="0.33" /> | |||
<entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/layout/activity_course_test.xml" value="0.31567028985507245" /> | |||
<entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/layout/activity_exam_learn_spell.xml" value="0.47690217391304346" /> | |||
<entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/layout/activity_learn_base.xml" value="0.4979166666666667" /> | |||
<entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/layout/activity_learn_creading.xml" value="0.4304093567251462" /> | |||
@@ -132,6 +133,7 @@ | |||
<entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/layout/item_memo_detail_list_for_literacy.xml" value="0.67" /> | |||
<entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/layout/item_memo_detail_list_literacy.xml" value="0.5" /> | |||
<entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/layout/item_memo_detail_list_pinyin.xml" value="0.67" /> | |||
<entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/layout/item_service_center_item.xml" value="0.717816683831102" /> | |||
<entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/layout/item_spell_single_word.xml" value="0.23632218844984804" /> | |||
<entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/layout/item_statics_for_time.xml" value="0.27717391304347827" /> | |||
<entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/layout/item_statistics_bottom_course_change.xml" value="0.30842391304347827" /> | |||
@@ -149,6 +151,7 @@ | |||
<entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/layout/merge_memo_list_item_literacy_header.xml" value="0.5" /> | |||
<entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/layout/merge_memo_list_item_pinyin_header.xml" value="0.5" /> | |||
<entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/layout/merge_recyclerview_smart_refresh_layout.xml" value="0.34427083333333336" /> | |||
<entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/layout/service_center_fragment.xml" value="0.31567028985507245" /> | |||
<entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/layout/smart_refresh_header.xml" value="0.34427083333333336" /> | |||
<entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/layout/statics_tab_top_radiobutton.xml" value="0.20833333333333334" /> | |||
<entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/layout/textview.xml" value="0.49773550724637683" /> |
@@ -67,6 +67,7 @@ | |||
android:launchMode="singleTask" | |||
android:screenOrientation="portrait" | |||
android:windowSoftInputMode="adjustPan|adjustResize|stateHidden" /> | |||
<activity android:name=".module.m_service_center.CourseTestActivity" /> | |||
</application> | |||
</manifest> |
@@ -3,6 +3,8 @@ package com.xkl.cdl.adapter | |||
import android.annotation.SuppressLint | |||
import android.view.ViewGroup | |||
import androidx.core.util.set | |||
import com.google.android.flexbox.FlexboxLayout | |||
import com.google.android.flexbox.FlexboxLayoutManager | |||
import com.suliang.common.base.adapter.BaseAdapterViewHolder | |||
import com.suliang.common.base.adapter.BaseRVAdapterVM | |||
import com.xkl.cdl.R | |||
@@ -43,6 +45,11 @@ class AdapterCourseLessonTestChoose(vm:MemoTestViewModel): BaseRVAdapterVM<Lesso | |||
} | |||
} | |||
} | |||
//加上这句话,保证主轴上的子view均分主轴剩余空间 | |||
if (layoutParams is FlexboxLayoutManager.LayoutParams){ | |||
(layoutParams as FlexboxLayoutManager.LayoutParams).flexGrow = 1f | |||
} | |||
} | |||
} | |||
@@ -0,0 +1,69 @@ | |||
package com.xkl.cdl.adapter | |||
import android.annotation.SuppressLint | |||
import android.view.ViewGroup | |||
import com.suliang.common.base.adapter.BaseAdapterViewHolder | |||
import com.suliang.common.base.adapter.BaseRVAdapterVM | |||
import com.suliang.common.databinding.ItemEmptyBinding | |||
import com.xkl.cdl.R | |||
import com.xkl.cdl.data.bean.course.Course | |||
import com.xkl.cdl.databinding.ItemCheckboxBinding | |||
import com.xkl.cdl.module.m_service_center.CourseTestViewModel | |||
/** | |||
* author suliang | |||
* create 2022/6/17 14:30 | |||
* Describe: | |||
*/ | |||
class AdapterCourseTestChoose(vm:CourseTestViewModel): BaseRVAdapterVM<Course,CourseTestViewModel>(vm) { | |||
private var checkedPosition = -1 | |||
override fun setData(data : MutableList<Course>?) { | |||
checkedPosition = -1 | |||
super.setData(data) | |||
} | |||
override fun onBindEmptyViewHolder(holder : BaseAdapterViewHolder) { | |||
(holder.binding as ItemEmptyBinding).apply { | |||
val nullOrEmpty = vm.keyWordSearch.value.isNullOrEmpty() | |||
imgEmpty.setImageResource(if (nullOrEmpty) R.mipmap.empty_nothing else R.mipmap.empty_nothing_search) | |||
tvContent.setText(if (nullOrEmpty) R.string.empty_nothing else R.string.empty_nothing_search) | |||
} | |||
} | |||
override fun coverViewHolder(parent : ViewGroup, viewType : Int) : BaseAdapterViewHolder { | |||
return BaseAdapterViewHolder(inflateBinding(parent, R.layout.item_checkbox)) | |||
} | |||
@SuppressLint("SetTextI18n") | |||
override fun onBindVH(holder : BaseAdapterViewHolder, position : Int) { | |||
val item = getItem(position) | |||
(holder.binding as ItemCheckboxBinding).cbItem.apply { | |||
text = item.courseTitle | |||
isChecked = false | |||
// when{ | |||
// vm.checkedCourse.value == item -> { | |||
// isChecked = true | |||
// checkedPosition = position | |||
// } | |||
// else -> isChecked = false | |||
// } | |||
setOnClickListener{ | |||
vm.checkedCourse.value = if (isChecked) { | |||
if (checkedPosition != position && checkedPosition != -1){ | |||
notifyItemChanged(checkedPosition) | |||
} | |||
checkedPosition = position | |||
item | |||
} else { | |||
checkedPosition = -1 | |||
null | |||
} | |||
} | |||
} | |||
} | |||
} |
@@ -7,5 +7,6 @@ import com.xkl.cdl.data.bean.course.Course | |||
* create 2022/6/9 16:35 | |||
* Describe: 备忘本进入内容详情时,传递数据 MemoListDetailActivity | |||
* memoList:String value 格式 {project_id}_{pack_id}_{course_id}_{chapter_id}_{lesson_id}_{entity_id}_{review_num}_{Y-m-d H:i:s}_{Y-m-d H:i:s} | |||
* pageResource : 1备忘本 2课程测试 | |||
*/ | |||
data class MemoData(val course : Course, val memoList: MutableList<String>) | |||
data class MemoData(val course : Course, val memoList: MutableList<String>,val pageResource: Int) |
@@ -68,7 +68,8 @@ class LearnDialog private constructor() : BaseDialogFragment<DialogLessonLearnBi | |||
AppConstants.TEST_TYPE_AFTER_TOTAL -> initCourseAfterTestOver() | |||
//作文知识点测试结束 | |||
AppConstants.TEST_TYPE_COMPOSITION -> initCompositionExamLessonTestOver() | |||
//备忘本测试 | |||
//备忘本测试 课程测试 | |||
AppConstants.TEST_TYPE_SERVICE_CENTER, | |||
AppConstants.TEST_TYPE_MEMO -> initMemoTestOver() | |||
} | |||
//学习结束弹窗 | |||
@@ -430,7 +431,7 @@ class LearnDialog private constructor() : BaseDialogFragment<DialogLessonLearnBi | |||
tvScore.visibility = View.VISIBLE | |||
tvTip.visibility = View.VISIBLE | |||
tvTitle.visibility = View.VISIBLE | |||
tvTitle.text = "恭喜你,完成备忘本测试!" | |||
tvTitle.text = if (learnDialogBean.examType == AppConstants.TEST_TYPE_MEMO) "恭喜你,完成备忘本测试!" else "恭喜你,完成课程测试" | |||
tvTip1.visibility = View.VISIBLE | |||
tvTip1.text = "《${learnDialogBean.showTimeCount}》" //课程题目 | |||
incStatisticsNumber.root.visibility = View.VISIBLE |
@@ -600,7 +600,7 @@ class LearnExamActivity : BaseActivityVM<ActivityLearnExamBinding, LearnExamView | |||
correctNumber = vm.correctLiveData.value!! | |||
errorNumber = vm.errorLiveData.value!! | |||
//备忘本需要显示课程名称 | |||
if (examType == AppConstants.TEST_TYPE_MEMO){ | |||
if (examType == AppConstants.TEST_TYPE_MEMO || examType == AppConstants.TEST_TYPE_SERVICE_CENTER){ | |||
showTimeCount = vm.intentData.showTitle | |||
} | |||
} | |||
@@ -717,6 +717,7 @@ class LearnExamActivity : BaseActivityVM<ActivityLearnExamBinding, LearnExamView | |||
} | |||
} | |||
//备忘本测试 | |||
AppConstants.TEST_TYPE_SERVICE_CENTER, | |||
AppConstants.TEST_TYPE_MEMO -> when(action){ | |||
//完成 | |||
AppConstants.DIALOG_OVER -> { | |||
@@ -731,7 +732,6 @@ class LearnExamActivity : BaseActivityVM<ActivityLearnExamBinding, LearnExamView | |||
} | |||
//查看详情 | |||
AppConstants.DIALOG_MEMO_TEST_DETAIL -> { | |||
// TODO: 2022/6/20 进入测试详情界面 | |||
vm.learnExam?.let { | |||
DataTransferHolder.instance.putData(value = it.build()) | |||
startActivity(TestDetailActivity::class.java) |
@@ -59,7 +59,7 @@ class CourseReviewFragment : BaseFragmentVM<FragmentCourseReviewBinding, CourseM | |||
} | |||
//查看备忘本 | |||
binding.tvSeeMemo.click { | |||
DataTransferHolder.instance.putData(value = MemoData(vm.course, vm.coursePackMainActivityVM.coursePackChildrenMemo[vm.course.courseId] ?: mutableListOf())) | |||
DataTransferHolder.instance.putData(value = MemoData(vm.course, vm.coursePackMainActivityVM.coursePackChildrenMemo[vm.course.courseId] ?: mutableListOf(),1)) | |||
startActivity(MemoListDetailActivity::class.java) | |||
} | |||
} |
@@ -2,6 +2,7 @@ package com.xkl.cdl.module.m_memo | |||
import android.annotation.SuppressLint | |||
import android.os.Bundle | |||
import android.view.View | |||
import androidx.lifecycle.ViewModelProvider | |||
import com.google.android.flexbox.FlexDirection | |||
import com.google.android.flexbox.FlexWrap | |||
@@ -22,13 +23,24 @@ class MemoTestActivity : BaseActivityVM<ActivityMemoTestBinding, MemoTestViewMod | |||
@SuppressLint("NotifyDataSetChanged") | |||
override fun initActivity(savedInstanceState : Bundle?) { | |||
//先默认设置为备忘本的测试 | |||
vm.recordTestType = 1 | |||
binding.titleBar.onBackClick = { | |||
finish() | |||
} | |||
binding.tvCourse.setHtml("当前课程:<font color=\'#5082E6\'>${vm.memoData.course.courseTitle}</font>") | |||
binding.rgRange.setOnCheckedChangeListener { group, checkedId -> | |||
when(checkedId){ | |||
R.id.rb_memo -> { | |||
vm.recordTestType = 1 | |||
vm.queryMemoLesson() | |||
} | |||
R.id.rb_lesson -> { | |||
vm.recordTestType = 2 | |||
vm.queryAllLesson() | |||
} | |||
} | |||
} | |||
binding.recyclerView.apply { | |||
layoutManager = FlexboxLayoutManager(this@MemoTestActivity, FlexDirection.ROW, FlexWrap.WRAP) | |||
@@ -68,6 +80,18 @@ class MemoTestActivity : BaseActivityVM<ActivityMemoTestBinding, MemoTestViewMod | |||
} | |||
} | |||
when(vm.recordTestType){ | |||
1 -> { //备忘本 | |||
binding.tvCourse.setHtml("当前课程:<font color=\'#5082E6\'>${vm.memoData.course.courseTitle}</font>") | |||
binding.rbMemo.isChecked = true | |||
} | |||
2 -> { //课程测试 | |||
binding.group1.visibility = View.VISIBLE | |||
binding.tvCourse.visibility = View.GONE | |||
binding.rbLesson.isChecked = true | |||
} | |||
} | |||
} | |||
override fun initViewModel() : MemoTestViewModel { | |||
@@ -76,7 +100,6 @@ class MemoTestActivity : BaseActivityVM<ActivityMemoTestBinding, MemoTestViewMod | |||
override fun loadData() { | |||
vm.queryMemoLesson() | |||
//列表显示: 默认设置为全选 | |||
vm.showLessonListLivaData.observe(this) { | |||
@@ -91,7 +114,7 @@ class MemoTestActivity : BaseActivityVM<ActivityMemoTestBinding, MemoTestViewMod | |||
} | |||
//全部 | |||
2 -> { | |||
for (i in 0 until vm.memoTestLessonList.size) { | |||
for (i in 0 until vm.allLessonList.size) { | |||
vm.checkLessonArray.put(i, true) | |||
} | |||
adapter.setData(vm.allLessonList) |
@@ -30,7 +30,7 @@ class MemoTestViewModel : BaseViewModel() { | |||
memoData.course.courseId, memoData.course.courseType) | |||
//记录选择的是备忘本测试还是课程的所有章节测试 1:备忘本 2:课程章节 | |||
var recordTestType = 1 | |||
var recordTestType = memoData.pageResource | |||
//该课程备忘本的课时数据 | |||
lateinit var memoTestLessonList : MutableList<Lesson> | |||
@@ -43,6 +43,7 @@ class MemoTestViewModel : BaseViewModel() { | |||
/**选中item集合 key position value: Boolean*/ | |||
val checkLessonArray = SparseBooleanArray() | |||
/** 是否是全选 */ | |||
var isAllCheck = MutableLiveData<Boolean>(true) | |||
@@ -50,29 +51,37 @@ class MemoTestViewModel : BaseViewModel() { | |||
return this::memoTestLessonList.isInitialized | |||
} | |||
fun isAllLessonListInit() : Boolean { | |||
return this::memoTestLessonList.isInitialized | |||
private fun isAllLessonListInit() : Boolean { | |||
return this::allLessonList.isInitialized | |||
} | |||
/** 查询备忘本的测试 */ | |||
fun queryMemoLesson() { | |||
DataRepository.queryMemoLesson(dbControlBase, memoData.memoList).compose(diskIo2Main()).subscribe({ | |||
memoTestLessonList = it.toMutableList() | |||
showLessonListLivaData.value = 1 | |||
}, { | |||
it.printStackTrace() | |||
}) | |||
if (isMemeTestLessonListInit()) { | |||
showLessonListLivaData.value = 1 | |||
} else { | |||
DataRepository.queryMemoLesson(dbControlBase, memoData.memoList).compose(diskIo2Main()).subscribe({ | |||
memoTestLessonList = it.toMutableList() | |||
showLessonListLivaData.value = 1 | |||
}, { | |||
it.printStackTrace() | |||
}) | |||
} | |||
} | |||
/** 查询课程的所有课时 */ | |||
fun queryAllLesson() { | |||
DataRepository.getCourseAllLesson(dbControlBase, CourseDetail()).compose(diskIo2Main()).subscribe({ | |||
memoTestLessonList = it.toMutableList() | |||
showLessonListLivaData.value = 2 | |||
}, { | |||
it.printStackTrace() | |||
}) | |||
if (isAllLessonListInit()) { | |||
showLessonListLivaData.value = 2 | |||
} else { | |||
DataRepository.getCourseAllLesson(dbControlBase, CourseDetail()).compose(diskIo2Main()).subscribe({ | |||
allLessonList = it.toMutableList() | |||
showLessonListLivaData.value = 2 | |||
}, { | |||
it.printStackTrace() | |||
}) | |||
} | |||
} | |||
/** 开始测试,获取数据 | |||
@@ -82,70 +91,56 @@ class MemoTestViewModel : BaseViewModel() { | |||
fun toStartTest(count : Int) : MutableLiveData<ExamData> { | |||
val result = MutableLiveData<ExamData>() | |||
Observable.fromCallable<ExamData>() { | |||
return@fromCallable when(recordTestType) { | |||
//备忘本测试 | |||
1 -> { | |||
//查询的lesson | |||
val queryLesson = mutableListOf<Lesson>() | |||
//拼接的lesson名称 | |||
val lessonListName = when { | |||
isAllCheck.value!! -> { | |||
queryLesson.addAll(memoTestLessonList) | |||
"全部" | |||
} | |||
else -> { | |||
val builder = StringBuilder() | |||
memoTestLessonList.forEachIndexed { index, lesson -> | |||
if (checkLessonArray.get(index)) { | |||
queryLesson.add(lesson) | |||
if (isShowLessonName()) { | |||
builder.append("${lesson.chapterName}.${lesson.lessonName}、") | |||
} else { | |||
builder.append("${lesson.chapterName}、") | |||
} | |||
} | |||
//查询的lesson | |||
val queryLesson = mutableListOf<Lesson>() | |||
//拼接的lesson名称 | |||
val lessonListName = when { | |||
isAllCheck.value!! -> { | |||
queryLesson.addAll(if (recordTestType == 1) memoTestLessonList else allLessonList) | |||
"全部" | |||
} | |||
else -> { | |||
val builder = StringBuilder() | |||
(if (recordTestType == 1) memoTestLessonList else allLessonList).forEachIndexed { index, lesson -> | |||
if (checkLessonArray.get(index)) { | |||
queryLesson.add(lesson) | |||
if (isShowLessonName()) { | |||
builder.append("${lesson.chapterName}.${lesson.lessonName}、") | |||
} else { | |||
builder.append("${lesson.chapterName}、") | |||
} | |||
//去除顿号 | |||
builder.substring(0, builder.length - 1) | |||
} | |||
} | |||
//保存的题目 | |||
val saveTitle = "${memoData.course.courseTitle}@@${lessonListName}" | |||
//查询测试数据 | |||
val testDataList = DBCourseManager.queryMemoTest(dbControlBase,queryLesson,count) | |||
ExamData(memoData.course.subjectId, AppConstants.TEST_TYPE_MEMO, memoData.course.courseTitle, | |||
saveTitle).apply { | |||
coursePackId = memoData.course.coursePackId //课程包id, 测试错误上次数据需要 | |||
coursePackType = memoData.course.coursePackType //课程包类型 | |||
courseId = memoData.course.courseId //课程id | |||
courseType = memoData.course.courseType //课程类型 | |||
testData = testDataList //测试题数据 | |||
} | |||
//去除顿号 | |||
builder.substring(0, builder.length - 1) | |||
} | |||
//章节测试 | |||
else -> ExamData(memoData.course.subjectId, AppConstants.TEST_TYPE_MEMO, memoData.course.courseTitle, | |||
"saveTitle").apply { | |||
coursePackId = memoData.course.coursePackId //课程包id, 测试错误上次数据需要 | |||
coursePackType = memoData.course.coursePackType //课程包类型 | |||
courseId = memoData.course.courseId //课程id | |||
courseType = memoData.course.courseType //课程类型 | |||
// testData : List<ExamBean>? = null //测试题数据 | |||
} | |||
} | |||
}.compose(diskIo2Main()) | |||
.subscribe({ | |||
result.value = it | |||
},{ | |||
it.printStackTrace() | |||
showToast(ToastEvent("测试数据获取异常")) | |||
}) | |||
//保存的题目 | |||
val saveTitle = "${memoData.course.courseTitle}@@${lessonListName}" | |||
//查询测试数据 | |||
val testDataList = DBCourseManager.queryMemoTest(dbControlBase, queryLesson, count) | |||
//测试类型 | |||
val examType = if (recordTestType == 1) AppConstants.TEST_TYPE_MEMO else AppConstants.TEST_TYPE_SERVICE_CENTER | |||
return@fromCallable ExamData(memoData.course.subjectId, examType, memoData.course.courseTitle, | |||
saveTitle).apply { | |||
coursePackId = memoData.course.coursePackId //课程包id, 测试错误上次数据需要 | |||
coursePackType = memoData.course.coursePackType //课程包类型 | |||
courseId = memoData.course.courseId //课程id | |||
courseType = memoData.course.courseType //课程类型 | |||
testData = testDataList //测试题数据 | |||
} | |||
}.compose(diskIo2Main()).subscribe({ | |||
result.value = it | |||
}, { | |||
it.printStackTrace() | |||
showToast(ToastEvent("测试数据获取异常")) | |||
}) | |||
return result | |||
} | |||
/**显示章节名称 还是显示课时名称 true章节+课时 false 章节*/ | |||
fun isShowLessonName() : Boolean{ | |||
fun isShowLessonName() : Boolean { | |||
return memoData.course.courseType != AppConstants.COURSE_TYPE_CHINESE_COMPOSITION | |||
} | |||
} |
@@ -0,0 +1,58 @@ | |||
package com.xkl.cdl.module.m_service_center | |||
import android.os.Bundle | |||
import android.widget.Adapter | |||
import androidx.lifecycle.ViewModelProvider | |||
import androidx.recyclerview.widget.LinearLayoutManager | |||
import com.suliang.common.base.activity.BaseActivityVM | |||
import com.suliang.common.extension.click | |||
import com.xkl.cdl.adapter.AdapterCourseTestChoose | |||
import com.xkl.cdl.data.DataTransferHolder | |||
import com.xkl.cdl.databinding.ActivityCourseTestBinding | |||
import com.xkl.cdl.module.m_memo.MemoTestActivity | |||
class CourseTestActivity : BaseActivityVM<ActivityCourseTestBinding,CourseTestViewModel>() { | |||
override fun initViewModel() : CourseTestViewModel { | |||
return ViewModelProvider(this)[CourseTestViewModel::class.java] | |||
} | |||
override fun initActivity(savedInstanceState : Bundle?) { | |||
binding.vm = vm | |||
binding.titleBar.onBackClick = { _ -> finish()} | |||
binding.recyclerView.apply { | |||
layoutManager = LinearLayoutManager(this@CourseTestActivity,LinearLayoutManager.VERTICAL,false) | |||
adapter = AdapterCourseTestChoose(vm) | |||
} | |||
binding.tvNext.click { | |||
vm.loadErrorData().observe(this){ | |||
DataTransferHolder.instance.putData(value = it) | |||
startActivity(MemoTestActivity::class.java) | |||
} | |||
} | |||
vm.checkedCourse.observe(this){ | |||
binding.tvNext.isEnabled = it != null | |||
} | |||
vm.updateAdapterLiveData.observe(this){ | |||
vm.checkedCourse.value = null | |||
(binding.recyclerView.adapter as AdapterCourseTestChoose).apply { | |||
needShowEmptyView = it.size == 0 | |||
setData(it) | |||
} | |||
} | |||
vm.keyWordSearch.observe(this){ keyword -> | |||
vm.updateAdapterLiveData.value = vm.allCourseList.filter { | |||
it.courseTitle.contains(keyword) | |||
}.toMutableList() | |||
} | |||
} | |||
override fun loadData() { | |||
vm.loadAllCourse() | |||
} | |||
} |
@@ -0,0 +1,57 @@ | |||
package com.xkl.cdl.module.m_service_center | |||
import androidx.lifecycle.MutableLiveData | |||
import com.google.protobuf.ProtocolStringList | |||
import com.suliang.common.base.viewmodel.BaseViewModel | |||
import com.suliang.common.extension.diskIo2Main | |||
import com.suliang.common.extension.io2Main | |||
import com.xkl.cdl.data.AppConstants | |||
import com.xkl.cdl.data.bean.course.Course | |||
import com.xkl.cdl.data.bean.intentdata.MemoData | |||
import com.xkl.cdl.data.manager.CourseManager | |||
import com.xkl.cdl.data.repository.DataRepository | |||
import io.reactivex.rxjava3.core.Observable | |||
class CourseTestViewModel : BaseViewModel() { | |||
//关键字查询 | |||
val keyWordSearch = MutableLiveData<String>() | |||
//选中Course | |||
var checkedCourse = MutableLiveData<Course?>() | |||
val allCourseList = mutableListOf<Course>() | |||
val updateAdapterLiveData = MutableLiveData<MutableList<Course>>() | |||
fun loadAllCourse(){ | |||
Observable.fromCallable{ | |||
CourseManager.subjectWithCoursePackMap.forEach { | |||
it.value.forEach { | |||
//排除口语 | |||
if (it.coursePackType != AppConstants.COURSEPACK_TYPE_ENGLISH_SPOKEN) { | |||
it.childrenCourses.forEach { | |||
allCourseList.add(it) | |||
} | |||
} | |||
} | |||
} | |||
}.compose(io2Main()) | |||
.subscribe{ | |||
updateAdapterLiveData.value = allCourseList | |||
} | |||
} | |||
/** 查询指定课程的备忘本数据 */ | |||
fun loadErrorData() : MutableLiveData<MemoData>{ | |||
val result = MutableLiveData<MemoData>() | |||
checkedCourse.value?.let { | |||
DataRepository.getReviewData(it.subjectId, it.coursePackId, it.courseId) | |||
.compose(diskIo2Main()) | |||
.subscribe { errorList : ProtocolStringList -> | |||
result.value = MemoData(it,errorList.toMutableList(),2) | |||
} | |||
} | |||
return result | |||
} | |||
} |
@@ -1,14 +1,20 @@ | |||
package com.xkl.cdl.module.m_service_center | |||
import android.graphics.Color | |||
import androidx.lifecycle.ViewModelProvider | |||
import android.os.Bundle | |||
import androidx.fragment.app.Fragment | |||
import android.view.LayoutInflater | |||
import android.view.View | |||
import android.view.ViewGroup | |||
import androidx.recyclerview.widget.GridLayoutManager | |||
import com.suliang.common.base.adapter.BaseAdapterViewHolder | |||
import com.suliang.common.base.adapter.BaseRVAdapter | |||
import com.suliang.common.base.fragment.BaseFragmentVM | |||
import com.suliang.common.extension.click | |||
import com.xkl.cdl.R | |||
import com.xkl.cdl.databinding.FragmentMyBinding | |||
import com.xkl.cdl.databinding.ItemServiceCenterItemBinding | |||
import com.xkl.cdl.databinding.ServiceCenterFragmentBinding | |||
import com.xkl.cdl.module.main.MainActivityViewModel | |||
@@ -18,17 +24,45 @@ class ServiceCenterFragment : BaseFragmentVM<ServiceCenterFragmentBinding, Main | |||
@JvmStatic | |||
fun newInstance() = ServiceCenterFragment() | |||
} | |||
// override fun onActivityCreated(savedInstanceState: Bundle?) { | |||
// super.onActivityCreated(savedInstanceState) | |||
//// viewModel = ViewModelProvider(this).get(ServiceCenterViewModel::class.java) | |||
// // TODO: Use the ViewModel | |||
// } | |||
override fun initFragment() { | |||
val items = mutableListOf(Item("课程测试", R.drawable.ic_test_course, Color.parseColor("#1A58D4DB")), | |||
Item("测词汇量", R.drawable.ic_test_count, Color.parseColor("#1AFF8B52")), | |||
Item("测试成绩", R.drawable.ic_test_score, Color.parseColor("#1AF26255")), | |||
Item("词典", R.drawable.ic_dictionary, Color.parseColor("#1A52CC52"))) | |||
binding.rv.apply { | |||
layoutManager = GridLayoutManager(requireContext(),2,GridLayoutManager.VERTICAL,false) | |||
setHasFixedSize(true) | |||
adapter = object : BaseRVAdapter<Item>() { | |||
override fun coverViewHolder(parent : ViewGroup, viewType : Int) : BaseAdapterViewHolder { | |||
return BaseAdapterViewHolder(inflateBinding(parent,R.layout.item_service_center_item)) | |||
} | |||
override fun onBindVH(holder : BaseAdapterViewHolder, position : Int) { | |||
val item = getItem(position) | |||
(holder.binding as ItemServiceCenterItemBinding).apply { | |||
iv.setImageResource(item.icon) | |||
iv.setBackgroundColor(item.backgroundColor) | |||
tv.text = item.name | |||
root.click { | |||
startTo(position) | |||
} | |||
} | |||
} | |||
}.apply { | |||
setData(items) | |||
} | |||
} | |||
} | |||
private fun startTo(position : Int) { | |||
when(position){ | |||
0 -> startActivity(CourseTestActivity::class.java) | |||
1 -> "" | |||
2 -> "" | |||
3 -> "" | |||
} | |||
} | |||
override fun loadData() { | |||
} | |||
@@ -37,4 +71,7 @@ class ServiceCenterFragment : BaseFragmentVM<ServiceCenterFragmentBinding, Main | |||
return ViewModelProvider(requireActivity())[MainActivityViewModel::class.java] | |||
} | |||
data class Item(val name : String, val icon : Int, val backgroundColor:Int) | |||
} |
@@ -0,0 +1,6 @@ | |||
<?xml version="1.0" encoding="utf-8"?> | |||
<selector xmlns:android="http://schemas.android.com/apk/res/android"> | |||
<item android:color="@color/theme_color" android:state_enabled="true"/> | |||
<item android:color="#d0d0d0" android:state_enabled="false"/> | |||
<item android:color="@color/theme_color"/> | |||
</selector> |
@@ -0,0 +1,120 @@ | |||
<?xml version="1.0" encoding="utf-8"?> | |||
<layout xmlns:android="http://schemas.android.com/apk/res/android" | |||
xmlns:app="http://schemas.android.com/apk/res-auto"> | |||
<data> | |||
<variable | |||
name="vm" | |||
type="com.xkl.cdl.module.m_service_center.CourseTestViewModel" /> | |||
</data> | |||
<androidx.constraintlayout.widget.ConstraintLayout | |||
android:layout_width="match_parent" | |||
android:layout_height="match_parent" | |||
android:background="@color/white"> | |||
<com.suliang.common.widget.TitleBar | |||
android:id="@+id/title_bar" | |||
android:layout_width="match_parent" | |||
android:layout_height="@dimen/title_bar_height" | |||
app:titleTextValue="@string/course_test" | |||
app:layout_constraintTop_toTopOf="parent" /> | |||
<View | |||
android:id="@+id/v_1" | |||
android:layout_width="0dp" | |||
android:layout_height="36dp" | |||
app:layout_constraintStart_toStartOf="parent" | |||
app:layout_constraintEnd_toEndOf="parent" | |||
app:layout_constraintTop_toBottomOf="@+id/title_bar" | |||
android:background="@color/white_1" /> | |||
<TextView | |||
android:id="@+id/tv_1" | |||
android:layout_width="wrap_content" | |||
android:layout_height="wrap_content" | |||
android:text="①请选择测试课程" | |||
android:textSize="@dimen/smallSize" | |||
android:textColor="@color/theme_color" | |||
app:layout_constraintTop_toTopOf="@+id/v_1" | |||
app:layout_constraintBottom_toBottomOf="@+id/v_1" | |||
app:layout_constraintStart_toStartOf="parent" | |||
app:layout_constraintEnd_toStartOf="@+id/v_2" | |||
android:layout_marginStart="@dimen/global_spacing" /> | |||
<View | |||
android:id="@+id/v_2" | |||
android:layout_width="0dp" | |||
android:layout_height="@dimen/line_height" | |||
app:layout_constraintTop_toTopOf="@+id/v_1" | |||
app:layout_constraintBottom_toBottomOf="@+id/v_1" | |||
app:layout_constraintStart_toEndOf="@+id/tv_1" | |||
app:layout_constraintEnd_toStartOf="@+id/tv_2" | |||
android:background="@color/gray_2" | |||
android:layout_marginStart="14dp" | |||
android:layout_marginEnd="14dp" /> | |||
<TextView | |||
android:id="@+id/tv_2" | |||
android:layout_width="wrap_content" | |||
android:layout_height="wrap_content" | |||
android:text="②请选择测试范围" | |||
android:textSize="@dimen/smallSize" | |||
android:textColor="@color/gray_2" | |||
app:layout_constraintTop_toTopOf="@+id/v_1" | |||
app:layout_constraintBottom_toBottomOf="@+id/v_1" | |||
app:layout_constraintStart_toEndOf="@+id/v_2" | |||
app:layout_constraintEnd_toEndOf="parent" | |||
android:layout_marginEnd="@dimen/global_spacing" /> | |||
<com.suliang.common.widget.InputSearchEditText | |||
android:id="@+id/et_search" | |||
android:layout_width="0dp" | |||
android:layout_height="36dp" | |||
android:layout_marginStart="@dimen/global_spacing" | |||
android:layout_marginEnd="@dimen/global_spacing" | |||
android:layout_marginTop="10dp" | |||
android:background="@drawable/et_search_bg" | |||
android:drawablePadding="4dp" | |||
android:gravity="center_vertical" | |||
android:hint="@string/search_hint_input_key_word" | |||
android:maxLines="1" | |||
android:paddingLeft="16dp" | |||
android:paddingRight="16dp" | |||
android:singleLine="true" | |||
android:textColor="@color/main_text_color" | |||
android:textSize="@dimen/normalSize" | |||
app:layout_constraintEnd_toEndOf="parent" | |||
app:layout_constraintStart_toStartOf="parent" | |||
app:layout_constraintTop_toBottomOf="@+id/v_1" | |||
app:layout_constraintBottom_toTopOf="@+id/recyclerView" | |||
android:text="@={vm.keyWordSearch}" /> | |||
<androidx.recyclerview.widget.RecyclerView | |||
android:id="@+id/recyclerView" | |||
android:layout_width="0dp" | |||
android:layout_height="0dp" | |||
android:layout_marginLeft="@dimen/global_spacing" | |||
android:layout_marginRight="@dimen/global_spacing" | |||
app:layout_constraintStart_toStartOf="parent" | |||
app:layout_constraintEnd_toEndOf="parent" | |||
app:layout_constraintTop_toBottomOf="@+id/et_search" | |||
app:layout_constraintBottom_toTopOf="@+id/tv_next" | |||
android:padding="@dimen/global_spacing" /> | |||
<com.google.android.material.button.MaterialButton | |||
android:id="@+id/tv_next" | |||
style="@style/common_button_style" | |||
app:layout_constraintStart_toStartOf="parent" | |||
app:layout_constraintEnd_toEndOf="parent" | |||
app:layout_constraintTop_toBottomOf="@+id/recyclerView" | |||
app:layout_constraintBottom_toBottomOf="parent" | |||
android:layout_marginBottom="42dp" | |||
android:layout_marginTop="40dp" | |||
android:text="@string/next_step" | |||
android:backgroundTint="@color/com_btn_enable_selector" | |||
android:enabled="false" /> | |||
</androidx.constraintlayout.widget.ConstraintLayout> | |||
</layout> |
@@ -12,7 +12,7 @@ | |||
android:layout_width="match_parent" | |||
android:layout_height="@dimen/title_bar_height" | |||
app:layout_constraintTop_toTopOf="parent" | |||
app:titleTextValue="课程测试" | |||
app:titleTextValue="@string/course_test" | |||
app:barBackground="@color/white"/> | |||
<TextView | |||
@@ -29,7 +29,120 @@ | |||
android:paddingEnd="@dimen/global_spacing" | |||
android:paddingTop="12dp" | |||
android:paddingBottom="12dp" | |||
tools:text="当前课程:测试课程认读"/> | |||
tools:text="当前课程:测试课程认读" | |||
android:visibility="gone" | |||
tools:visibility="visible"/> | |||
<View | |||
android:id="@+id/v_1" | |||
android:layout_width="0dp" | |||
android:layout_height="36dp" | |||
app:layout_constraintStart_toStartOf="parent" | |||
app:layout_constraintEnd_toEndOf="parent" | |||
app:layout_constraintTop_toBottomOf="@+id/tv_course" | |||
android:background="@color/white_1"/> | |||
<TextView | |||
android:id="@+id/tv_1" | |||
android:layout_width="wrap_content" | |||
android:layout_height="wrap_content" | |||
android:text="①请选择测试课程" | |||
android:textSize="@dimen/smallSize" | |||
android:textColor="@color/gray_2" | |||
app:layout_constraintTop_toTopOf="@+id/v_1" | |||
app:layout_constraintBottom_toBottomOf="@+id/v_1" | |||
app:layout_constraintStart_toStartOf="parent" | |||
app:layout_constraintEnd_toStartOf="@+id/v_2" | |||
android:layout_marginStart="@dimen/global_spacing" /> | |||
<View | |||
android:id="@+id/v_2" | |||
android:layout_width="0dp" | |||
android:layout_height="@dimen/line_height" | |||
app:layout_constraintTop_toTopOf="@+id/v_1" | |||
app:layout_constraintBottom_toBottomOf="@+id/v_1" | |||
app:layout_constraintStart_toEndOf="@+id/tv_1" | |||
app:layout_constraintEnd_toStartOf="@+id/tv_2" | |||
android:background="@color/gray_2" | |||
android:layout_marginStart="14dp" | |||
android:layout_marginEnd="14dp"/> | |||
<TextView | |||
android:id="@+id/tv_2" | |||
android:layout_width="wrap_content" | |||
android:layout_height="wrap_content" | |||
android:text="②请选择测试范围" | |||
android:textSize="@dimen/smallSize" | |||
android:textColor="@color/theme_color" | |||
app:layout_constraintTop_toTopOf="@+id/v_1" | |||
app:layout_constraintBottom_toBottomOf="@+id/v_1" | |||
app:layout_constraintStart_toEndOf="@+id/v_2" | |||
app:layout_constraintEnd_toEndOf="parent" | |||
android:layout_marginEnd="@dimen/global_spacing"/> | |||
<androidx.constraintlayout.widget.Group | |||
android:id="@+id/group_1" | |||
android:layout_width="wrap_content" | |||
android:layout_height="wrap_content" | |||
app:constraint_referenced_ids="v_1,tv_1,v_2,tv_2,tv_choose_range,rg_range" | |||
android:visibility="gone" | |||
tools:visibility="visible"/> | |||
<TextView | |||
android:id="@+id/tv_choose_range" | |||
android:layout_width="wrap_content" | |||
android:layout_height="wrap_content" | |||
android:text="请选择测范围" | |||
android:textColor="@color/gray_2" | |||
android:layout_marginTop="10dp" | |||
android:layout_marginStart="@dimen/global_spacing" | |||
android:textSize="@dimen/smallSize" | |||
app:layout_constraintTop_toBottomOf="@+id/v_1" | |||
app:layout_constraintStart_toStartOf="parent" | |||
/> | |||
<RadioGroup | |||
android:id="@+id/rg_range" | |||
android:layout_width="match_parent" | |||
android:layout_height="44dp" | |||
android:layout_marginLeft="@dimen/global_spacing" | |||
android:layout_marginRight="@dimen/global_spacing" | |||
android:orientation="horizontal" | |||
app:layout_constraintTop_toBottomOf="@+id/tv_choose_range" | |||
> | |||
<RadioButton | |||
android:id="@+id/rb_lesson" | |||
android:button="@null" | |||
android:layout_width="0dp" | |||
android:layout_height="wrap_content" | |||
android:text="全部" | |||
android:textColor="@color/main_text_color" | |||
android:background="@color/white" | |||
android:textSize="16dp" | |||
android:layout_weight="1" | |||
android:drawablePadding="8dp" | |||
android:checked="false" | |||
android:drawableStart="@drawable/choose_single" | |||
/> | |||
<RadioButton | |||
android:id="@+id/rb_memo" | |||
android:button="@null" | |||
android:layout_width="0dp" | |||
android:layout_height="wrap_content" | |||
android:text="@string/memo" | |||
android:layout_weight="1" | |||
android:textColor="@color/main_text_color" | |||
android:background="@color/white" | |||
android:textSize="16dp" | |||
android:drawablePadding="8dp" | |||
android:checked="false" | |||
android:drawableStart="@drawable/choose_single" | |||
/> | |||
<View | |||
android:layout_width="0dp" | |||
android:layout_height="0dp" | |||
android:layout_weight="1"/> | |||
</RadioGroup> | |||
<TextView | |||
android:id="@+id/tv_choose_number" | |||
@@ -40,7 +153,7 @@ | |||
android:layout_marginTop="10dp" | |||
android:layout_marginStart="@dimen/global_spacing" | |||
android:textSize="@dimen/smallSize" | |||
app:layout_constraintTop_toBottomOf="@+id/tv_course" | |||
app:layout_constraintTop_toBottomOf="@+id/rg_range" | |||
app:layout_constraintStart_toStartOf="parent" | |||
/> | |||
<RadioGroup | |||
@@ -158,6 +271,7 @@ | |||
android:layout_height="match_parent" | |||
android:layout_marginLeft="@dimen/global_spacing" | |||
android:layout_marginRight="@dimen/global_spacing" | |||
android:overScrollMode="never" | |||
/> | |||
</androidx.appcompat.widget.LinearLayoutCompat> |
@@ -16,6 +16,7 @@ | |||
android:paddingTop="4dp" | |||
android:paddingBottom="4dp" | |||
android:layout_marginRight="8dp" | |||
android:singleLine="true" | |||
android:drawableStart="@drawable/choose_multiple"> | |||
</CheckBox> | |||
@@ -0,0 +1,40 @@ | |||
<?xml version="1.0" encoding="utf-8"?> | |||
<layout xmlns:android="http://schemas.android.com/apk/res/android" | |||
xmlns:tools="http://schemas.android.com/tools" | |||
xmlns:app="http://schemas.android.com/apk/res-auto"> | |||
<data> | |||
</data> | |||
<androidx.appcompat.widget.LinearLayoutCompat | |||
android:layout_width="match_parent" | |||
android:layout_height="wrap_content" | |||
android:gravity="center" | |||
android:orientation="vertical" | |||
android:background="@drawable/shape_rounder_12_white" | |||
android:paddingTop="33dp" | |||
android:paddingBottom="33dp" | |||
android:layout_marginTop="11dp" | |||
android:layout_marginLeft="11dp"> | |||
<com.google.android.material.imageview.ShapeableImageView | |||
android:id="@+id/iv" | |||
android:layout_width="72dp" | |||
android:layout_height="72dp" | |||
android:src="@drawable/ic_test_course" | |||
app:shapeAppearance="@style/CircleStyle" | |||
app:contentPadding="@dimen/global_spacing" /> | |||
<TextView | |||
android:id="@+id/tv" | |||
android:layout_width="wrap_content" | |||
android:layout_height="wrap_content" | |||
android:textSize="@dimen/normalSize" | |||
android:textColor="@color/main_text_color" | |||
tools:text="选项" | |||
android:layout_marginTop="12dp" /> | |||
</androidx.appcompat.widget.LinearLayoutCompat> | |||
</layout> |
@@ -1,14 +1,30 @@ | |||
<?xml version="1.0" encoding="utf-8"?> | |||
<FrameLayout | |||
<androidx.appcompat.widget.LinearLayoutCompat | |||
xmlns:android="http://schemas.android.com/apk/res/android" | |||
xmlns:tools="http://schemas.android.com/tools" | |||
android:layout_width="match_parent" | |||
android:layout_height="match_parent" | |||
tools:context=".module.m_service_center.ServiceCenterFragment"> | |||
android:orientation="vertical" | |||
tools:context=".module.m_service_center.ServiceCenterFragment" | |||
android:background="@color/white_1"> | |||
<TextView | |||
android:layout_width="match_parent" | |||
android:layout_height="match_parent" | |||
android:text="Hello" /> | |||
android:layout_height="@dimen/title_bar_height" | |||
android:text="@string/serviceCenter" | |||
android:gravity="center" | |||
android:textColor="@color/main_text_color" | |||
android:textSize="@dimen/bigSize" | |||
android:textStyle="bold" | |||
android:background="@color/white"/> | |||
</FrameLayout> | |||
<androidx.recyclerview.widget.RecyclerView | |||
android:id="@+id/rv" | |||
android:layout_width="match_parent" | |||
android:layout_height="wrap_content" | |||
android:overScrollMode="never" | |||
android:paddingTop="5dp" | |||
android:paddingStart="5dp" | |||
android:paddingEnd="@dimen/global_spacing"/> | |||
</androidx.appcompat.widget.LinearLayoutCompat> |
@@ -92,5 +92,7 @@ | |||
<string name="test_type_1">测试类型:</string> | |||
<string name="test_use_time_1">用时:</string> | |||
<string name="test_time_1">测试时间:</string> | |||
<string name="course_test">课程测试</string> | |||
<string name="next_step">下一步</string> | |||
</resources> |
@@ -7,6 +7,11 @@ | |||
<item name="cornerFamily">rounded</item> | |||
<item name="cornerSize">8dp</item> | |||
</style> | |||
<!--圆形图片--> | |||
<style name="CircleStyle"> | |||
<item name="cornerFamily">rounded</item> | |||
<item name="cornerSize">50%</item> | |||
</style> | |||
<!--通用按钮style https://blog.csdn.net/weixin_42046829/article/details/110224702 | |||
https://www.jianshu.com/p/bc71b4179cb2--> |
@@ -0,0 +1,36 @@ | |||
<vector xmlns:android="http://schemas.android.com/apk/res/android" | |||
xmlns:aapt="http://schemas.android.com/aapt" | |||
android:width="40dp" | |||
android:height="40dp" | |||
android:viewportWidth="40" | |||
android:viewportHeight="40"> | |||
<path | |||
android:pathData="M8,3L32,3C33.1046,3 34,3.8954 34,5L34,35C34,36.1046 33.1046,37 32,37L12,37C8.6863,37 6,34.3137 6,31L6,5C6,3.8954 6.8954,3 8,3Z" | |||
android:strokeWidth="1" | |||
android:fillColor="#FFFFFF" | |||
android:fillType="evenOdd" | |||
android:strokeColor="#00000000"/> | |||
<path | |||
android:pathData="M32,3C33.1046,3 34,3.8954 34,5L34,25C34,26.1046 33.1046,27 32,27L12.64,27C10.6945,27 9.1055,28.4675 9.005,30.3141L9,30.5C9,32.3706 10.5262,33.8985 12.4467,33.9951L12.64,34L32.5,34C33.3284,34 34,34.6716 34,35.5C34,36.3284 33.3284,37 32.5,37L12,37C8.6863,37 6,34.3137 6,31L6,5C6,3.8954 6.8954,3 8,3L32,3Z" | |||
android:strokeWidth="1" | |||
android:fillColor="#02D8AF" | |||
android:fillType="evenOdd" | |||
android:strokeColor="#00000000"/> | |||
<path | |||
android:pathData="M20.2949,22C20.9525,22 21.5433,21.9577 22.0674,21.873C22.5915,21.7884 23.0814,21.6419 23.5371,21.4336C23.9928,21.2253 24.4128,20.9486 24.7969,20.6035C25.2852,20.1543 25.6855,19.6449 25.998,19.0752C26.3105,18.5055 26.5417,17.8659 26.6914,17.1563C26.8411,16.4466 26.916,15.6621 26.916,14.8027C26.916,12.1986 26.1706,10.2585 24.6797,8.9824C24.1068,8.4811 23.4688,8.1393 22.7656,7.957C22.0625,7.7747 21.2194,7.6836 20.2363,7.6836L20.2363,7.6836L16.457,7.6836C15.832,7.6836 15.3796,7.8236 15.0996,8.1035C14.8197,8.3835 14.6797,8.8359 14.6797,9.4609L14.6797,9.4609L14.6797,19.959C14.6797,20.4212 14.7204,20.7972 14.8018,21.0869C14.8831,21.3766 15.0573,21.6012 15.3242,21.7607C15.5911,21.9202 15.9883,22 16.5156,22L16.5156,22L20.2949,22ZM19.7773,19.6953L17.5801,19.6953L17.5801,9.9785L19.4941,9.9785C20.3796,9.9785 21.1348,10.0745 21.7598,10.2666C22.3848,10.4587 22.9105,10.9063 23.3369,11.6094C23.7633,12.3125 23.9766,13.3704 23.9766,14.7832C23.9766,16.7884 23.4915,18.2012 22.5215,19.0215C22.3066,19.2103 22.0527,19.3568 21.7598,19.4609C21.4668,19.5651 21.1836,19.6302 20.9102,19.6563C20.6367,19.6823 20.2591,19.6953 19.7773,19.6953L19.7773,19.6953Z" | |||
android:strokeWidth="1" | |||
android:fillType="evenOdd" | |||
android:strokeColor="#00000000"> | |||
<aapt:attr name="android:fillColor"> | |||
<gradient | |||
android:startY="7.6836" | |||
android:startX="20.79785" | |||
android:endY="21.796333" | |||
android:endX="20.79785" | |||
android:type="linear"> | |||
<item android:offset="0" android:color="#FFF2FFF4"/> | |||
<item android:offset="1" android:color="#FFCCFFF6"/> | |||
</gradient> | |||
</aapt:attr> | |||
</path> | |||
</vector> |
@@ -0,0 +1,76 @@ | |||
<vector xmlns:android="http://schemas.android.com/apk/res/android" | |||
xmlns:aapt="http://schemas.android.com/aapt" | |||
android:width="40dp" | |||
android:height="40dp" | |||
android:viewportWidth="40" | |||
android:viewportHeight="40"> | |||
<path | |||
android:pathData="M14,3L26,3C27.1046,3 28,3.8954 28,5L28,17C28,18.1046 27.1046,19 26,19L14,19C12.8954,19 12,18.1046 12,17L12,5C12,3.8954 12.8954,3 14,3Z" | |||
android:strokeWidth="1" | |||
android:fillColor="#FF8631" | |||
android:fillType="evenOdd" | |||
android:strokeColor="#00000000"/> | |||
<path | |||
android:pathData="M5,21L17,21C18.1046,21 19,21.8954 19,23L19,35C19,36.1046 18.1046,37 17,37L5,37C3.8954,37 3,36.1046 3,35L3,23C3,21.8954 3.8954,21 5,21Z" | |||
android:strokeWidth="1" | |||
android:fillColor="#FF8631" | |||
android:fillType="evenOdd" | |||
android:strokeColor="#00000000"/> | |||
<path | |||
android:pathData="M23,21L35,21C36.1046,21 37,21.8954 37,23L37,35C37,36.1046 36.1046,37 35,37L23,37C21.8954,37 21,36.1046 21,35L21,23C21,21.8954 21.8954,21 23,21Z" | |||
android:strokeWidth="1" | |||
android:fillColor="#FF8631" | |||
android:fillType="evenOdd" | |||
android:strokeColor="#00000000"/> | |||
<path | |||
android:pathData="M23.8978,16.4782C24.1743,16.4782 24.4104,16.3803 24.6063,16.1845C24.8021,15.9887 24.9,15.7732 24.9,15.5382C24.9,15.3125 24.7963,14.9507 24.589,14.4531L24.589,14.4531L21.9418,7.9146C21.8174,7.5874 21.7148,7.3259 21.6342,7.1301C21.5536,6.9342 21.4545,6.7511 21.337,6.5806C21.2195,6.4101 21.0651,6.2707 20.8739,6.1624C20.6827,6.0541 20.4442,6 20.1585,6C19.8775,6 19.6413,6.0541 19.4501,6.1624C19.2588,6.2707 19.1045,6.4124 18.987,6.5875C18.8695,6.7626 18.7589,6.9826 18.6552,7.2476C18.5515,7.5125 18.4628,7.7395 18.3891,7.9284L18.3891,7.9284L15.7972,14.5084C15.6912,14.771 15.6152,14.9761 15.5691,15.1235C15.523,15.271 15.5,15.4138 15.5,15.5521C15.5,15.7917 15.5991,16.0059 15.7972,16.1949C15.9953,16.3838 16.2234,16.4782 16.4815,16.4782C16.7856,16.4782 17.0045,16.3895 17.1381,16.2121C17.2717,16.0347 17.433,15.6926 17.6219,15.1857L17.6219,15.1857L18.1057,13.8863L22.2251,13.8863L22.709,15.1581C22.7735,15.3148 22.8507,15.4956 22.9405,15.7007C23.0304,15.9057 23.1145,16.0578 23.1928,16.1568C23.2711,16.2559 23.3679,16.3342 23.4831,16.3918C23.5983,16.4494 23.7365,16.4782 23.8978,16.4782ZM21.6722,12.345L18.6449,12.345L20.1447,8.1634L21.6722,12.345Z" | |||
android:strokeWidth="1" | |||
android:fillType="evenOdd" | |||
android:strokeColor="#00000000"> | |||
<aapt:attr name="android:fillColor"> | |||
<gradient | |||
android:startY="6" | |||
android:startX="20.2" | |||
android:endY="16.4782" | |||
android:endX="20.2" | |||
android:type="linear"> | |||
<item android:offset="0" android:color="#FFFFFBF2"/> | |||
<item android:offset="1" android:color="#FFFFD4CC"/> | |||
</gradient> | |||
</aapt:attr> | |||
</path> | |||
<path | |||
android:pathData="M11.1248,33.6289C11.6327,33.6289 12.0772,33.6037 12.4581,33.5534C12.8391,33.503 13.1762,33.4165 13.4696,33.2939C13.9382,33.0881 14.3103,32.7696 14.5862,32.3383C14.8621,31.907 15,31.422 15,30.8834C15,29.7187 14.3673,28.9349 13.1018,28.532C14.0651,28.0854 14.5468,27.3804 14.5468,26.4171C14.5468,26.1368 14.5008,25.8708 14.4089,25.619C14.3169,25.3673 14.1834,25.1374 14.0082,24.9294C13.8331,24.7214 13.6316,24.5495 13.4039,24.4138C13.1368,24.2518 12.8347,24.1423 12.4975,24.0854C12.1604,24.0285 11.7619,24 11.3021,24L11.3021,24L8.1823,24C7.7663,24 7.4652,24.093 7.2791,24.2791C7.093,24.4652 7,24.7707 7,25.1954L7,25.1954L7,32.4335C7,32.8495 7.0909,33.1527 7.2726,33.3432C7.4543,33.5337 7.7575,33.6289 8.1823,33.6289L8.1823,33.6289L11.1248,33.6289ZM10.7373,27.954L8.9507,27.954L8.9507,25.4647L10.5337,25.4647C11.243,25.4647 11.7707,25.5446 12.1166,25.7044C12.4625,25.8643 12.6355,26.1872 12.6355,26.6732C12.6355,26.9009 12.5807,27.1067 12.4713,27.2906C12.3311,27.549 12.1286,27.7241 11.8637,27.8161C11.5988,27.908 11.2233,27.954 10.7373,27.954L10.7373,27.954ZM11.046,32.1642L8.9507,32.1642L8.9507,29.353L10.9803,29.353C11.659,29.353 12.1691,29.4625 12.5107,29.6814C12.8522,29.9004 13.023,30.2529 13.023,30.7389C13.023,31.6891 12.364,32.1642 11.046,32.1642L11.046,32.1642Z" | |||
android:strokeWidth="1" | |||
android:fillType="evenOdd" | |||
android:strokeColor="#00000000"> | |||
<aapt:attr name="android:fillColor"> | |||
<gradient | |||
android:startY="24" | |||
android:startX="11" | |||
android:endY="33.6289" | |||
android:endX="11" | |||
android:type="linear"> | |||
<item android:offset="0" android:color="#FFFFFBF2"/> | |||
<item android:offset="1" android:color="#FFFFD4CC"/> | |||
</gradient> | |||
</aapt:attr> | |||
</path> | |||
<path | |||
android:pathData="M29.652,33.9752C30.3232,33.9752 30.911,33.8677 31.4155,33.6528C31.9199,33.4378 32.3345,33.1582 32.6591,32.8139C32.9837,32.4695 33.2217,32.1186 33.373,31.7611C33.5243,31.4035 33.6,31.0713 33.6,30.7642C33.6,30.5229 33.5167,30.3211 33.35,30.1588C33.1833,29.9965 32.9837,29.9154 32.7512,29.9154C32.4792,29.9154 32.2818,29.9954 32.159,30.1555C32.0362,30.3157 31.9331,30.5229 31.8497,30.7774C31.6523,31.3169 31.3595,31.726 30.9713,32.0045C30.5831,32.2831 30.1082,32.4223 29.5467,32.4223C29.0291,32.4223 28.5773,32.2995 28.1913,32.0539C27.8053,31.8082 27.507,31.4364 27.2964,30.9386C27.0858,30.4407 26.9806,29.8167 26.9806,29.0666C26.9806,27.9436 27.2185,27.0772 27.6945,26.4675C28.1704,25.8577 28.8098,25.5529 29.6125,25.5529C30.117,25.5529 30.5414,25.6713 30.8858,25.9082C31.2301,26.1451 31.5295,26.5026 31.7839,26.9807C31.9375,27.2702 32.0767,27.4742 32.2018,27.5927C32.3268,27.7111 32.5143,27.7703 32.7643,27.7703C32.9881,27.7703 33.1789,27.6848 33.3368,27.5137C33.4947,27.3426 33.5737,27.1452 33.5737,26.9215C33.5737,26.5135 33.4114,26.0804 33.0868,25.622C32.7622,25.1636 32.295,24.7786 31.6852,24.4672C31.0755,24.1557 30.3802,24 29.5994,24C28.9589,24 28.3558,24.1141 27.7899,24.3422C27.224,24.5703 26.7305,24.9025 26.3094,25.339C25.8883,25.7755 25.5648,26.3008 25.3389,26.9149C25.113,27.529 25,28.2243 25,29.0008C25,29.4789 25.045,29.9307 25.1349,30.3562C25.2248,30.7817 25.3597,31.182 25.5396,31.5571C25.7194,31.9321 25.9365,32.271 26.191,32.5737C26.4761,32.9071 26.7887,33.1757 27.1286,33.3797C27.4686,33.5837 27.8469,33.7339 28.2637,33.8305C28.6804,33.927 29.1432,33.9752 29.652,33.9752Z" | |||
android:strokeWidth="1" | |||
android:fillType="evenOdd" | |||
android:strokeColor="#00000000"> | |||
<aapt:attr name="android:fillColor"> | |||
<gradient | |||
android:startY="24" | |||
android:startX="29.3" | |||
android:endY="33.9752" | |||
android:endX="29.3" | |||
android:type="linear"> | |||
<item android:offset="0" android:color="#FFFFFBF2"/> | |||
<item android:offset="1" android:color="#FFFFD4CC"/> | |||
</gradient> | |||
</aapt:attr> | |||
</path> | |||
</vector> |
@@ -0,0 +1,70 @@ | |||
<vector xmlns:android="http://schemas.android.com/apk/res/android" | |||
xmlns:aapt="http://schemas.android.com/aapt" | |||
android:width="40dp" | |||
android:height="40dp" | |||
android:viewportWidth="40" | |||
android:viewportHeight="40"> | |||
<path | |||
android:pathData="M8,5L32,5C33.1046,5 34,5.8954 34,7L34,35C34,36.1046 33.1046,37 32,37L8,37C6.8954,37 6,36.1046 6,35L6,7C6,5.8954 6.8954,5 8,5Z" | |||
android:strokeWidth="1" | |||
android:fillColor="#39D0FE" | |||
android:fillType="evenOdd" | |||
android:strokeColor="#00000000"/> | |||
<path | |||
android:pathData="M15.5,3L24.5,3C25.8807,3 27,4.1193 27,5.5C27,6.8807 25.8807,8 24.5,8L15.5,8C14.1193,8 13,6.8807 13,5.5C13,4.1193 14.1193,3 15.5,3Z" | |||
android:strokeWidth="1" | |||
android:fillColor="#39D0FE" | |||
android:fillType="evenOdd" | |||
android:strokeColor="#00000000"/> | |||
<path | |||
android:pathData="M22.8526,16.0332L14.7545,24.1313C14.5582,24.3277 14.3064,24.4592 14.0331,24.5083L11.3202,24.9957C11.1723,25.0223 11.0309,24.9239 11.0043,24.776C10.9986,24.7442 10.9986,24.7116 11.0043,24.6798L11.4917,21.9669C11.5408,21.6936 11.6723,21.4418 11.8687,21.2455L19.9668,13.1474L22.8526,16.0332ZM24.4023,11.5977C25.1992,12.3946 25.1992,13.6866 24.4023,14.4835L23.601,15.2848L20.7152,12.399L21.5165,11.5977C22.3134,10.8008 23.6054,10.8008 24.4023,11.5977Z" | |||
android:strokeWidth="1" | |||
android:fillType="evenOdd" | |||
android:strokeColor="#00000000"> | |||
<aapt:attr name="android:fillColor"> | |||
<gradient | |||
android:startY="10.8008" | |||
android:startX="18.0989" | |||
android:endY="25.0223" | |||
android:endX="18.0989" | |||
android:type="linear"> | |||
<item android:offset="0" android:color="#FFF2FDFF"/> | |||
<item android:offset="1" android:color="#FFCCF0FF"/> | |||
</gradient> | |||
</aapt:attr> | |||
</path> | |||
<path | |||
android:pathData="M21.5,22L28.5,22C29.3284,22 30,22.6716 30,23.5C30,24.3284 29.3284,25 28.5,25L21.5,25C20.6716,25 20,24.3284 20,23.5C20,22.6716 20.6716,22 21.5,22Z" | |||
android:strokeWidth="1" | |||
android:fillType="evenOdd" | |||
android:strokeColor="#00000000"> | |||
<aapt:attr name="android:fillColor"> | |||
<gradient | |||
android:startY="22" | |||
android:startX="25" | |||
android:endY="25" | |||
android:endX="25" | |||
android:type="linear"> | |||
<item android:offset="0" android:color="#FFF2FDFF"/> | |||
<item android:offset="1" android:color="#FFCCF0FF"/> | |||
</gradient> | |||
</aapt:attr> | |||
</path> | |||
<path | |||
android:pathData="M11.5,28L28.5,28C29.3284,28 30,28.6716 30,29.5C30,30.3284 29.3284,31 28.5,31L11.5,31C10.6716,31 10,30.3284 10,29.5C10,28.6716 10.6716,28 11.5,28Z" | |||
android:strokeWidth="1" | |||
android:fillType="evenOdd" | |||
android:strokeColor="#00000000"> | |||
<aapt:attr name="android:fillColor"> | |||
<gradient | |||
android:startY="28" | |||
android:startX="20" | |||
android:endY="31" | |||
android:endX="20" | |||
android:type="linear"> | |||
<item android:offset="0" android:color="#FFF2FDFF"/> | |||
<item android:offset="1" android:color="#FFCCF0FF"/> | |||
</gradient> | |||
</aapt:attr> | |||
</path> | |||
</vector> |
@@ -0,0 +1,64 @@ | |||
<vector xmlns:android="http://schemas.android.com/apk/res/android" | |||
xmlns:aapt="http://schemas.android.com/aapt" | |||
android:width="40dp" | |||
android:height="40dp" | |||
android:viewportWidth="40" | |||
android:viewportHeight="40"> | |||
<path | |||
android:pathData="M8,3L32,3C33.1046,3 34,3.8954 34,5L34,35C34,36.1046 33.1046,37 32,37L8,37C6.8954,37 6,36.1046 6,35L6,5C6,3.8954 6.8954,3 8,3Z" | |||
android:strokeWidth="1" | |||
android:fillColor="#FF7164" | |||
android:fillType="evenOdd" | |||
android:strokeColor="#00000000"/> | |||
<path | |||
android:pathData="M17.4515,8C17.7858,8 18.0648,8.0634 18.2886,8.1901C18.5124,8.3168 18.693,8.4799 18.8305,8.6794C18.968,8.8789 19.0839,9.0933 19.1783,9.3224C19.2727,9.5516 19.3926,9.8576 19.5382,10.2404L19.5382,10.2404L22.636,17.8919L22.7124,18.0801C22.9041,18.5664 23,18.9269 23,19.1618C23,19.4368 22.8854,19.6888 22.6563,19.918C22.4271,20.1472 22.1507,20.2618 21.8272,20.2618C21.6385,20.2618 21.4767,20.2281 21.3419,20.1607C21.2071,20.0933 21.0939,20.0016 21.0022,19.8857C20.9105,19.7697 20.8121,19.5918 20.707,19.3518C20.6018,19.1119 20.5115,18.9002 20.436,18.7169L20.436,18.7169L19.8699,17.2287L15.0493,17.2287L14.4831,18.7493L14.4017,18.9627C14.2153,19.4395 14.0537,19.7687 13.9169,19.9504C13.7605,20.158 13.5044,20.2618 13.1485,20.2618C12.8466,20.2618 12.5797,20.1512 12.3478,19.9301C12.1159,19.7091 12,19.4583 12,19.1779C12,19.0162 12.027,18.849 12.0809,18.6765C12.1348,18.5039 12.2238,18.264 12.3478,17.9566L12.3478,17.9566L15.3809,10.2566L15.4489,10.0825C15.5202,9.9 15.6013,9.6925 15.6923,9.4599C15.8136,9.1499 15.943,8.8924 16.0805,8.6875C16.218,8.4826 16.3987,8.3168 16.6224,8.1901C16.8462,8.0634 17.1225,8 17.4515,8ZM17.4353,10.5316L15.6801,15.425L19.2228,15.425L17.4353,10.5316ZM25.5,8.1045C25.9602,8.1045 26.3333,8.4776 26.3333,8.9378L26.333,9.7705L27.1667,9.7712C27.6269,9.7712 28,10.1443 28,10.6045C28,11.0647 27.6269,11.4378 27.1667,11.4378L26.333,11.4375L26.3333,12.2712C26.3333,12.7314 25.9602,13.1045 25.5,13.1045C25.0398,13.1045 24.6667,12.7314 24.6667,12.2712L24.666,11.4375L23.8333,11.4378C23.3731,11.4378 23,11.0647 23,10.6045C23,10.1443 23.3731,9.7712 23.8333,9.7712L24.666,9.7705L24.6667,8.9378C24.6667,8.4776 25.0398,8.1045 25.5,8.1045Z" | |||
android:strokeWidth="1" | |||
android:fillType="evenOdd" | |||
android:strokeColor="#00000000"> | |||
<aapt:attr name="android:fillColor"> | |||
<gradient | |||
android:startY="8" | |||
android:startX="20" | |||
android:endY="20.091866" | |||
android:endX="20" | |||
android:type="linear"> | |||
<item android:offset="0" android:color="#FFFFF7F2"/> | |||
<item android:offset="1" android:color="#FFFFCCD5"/> | |||
</gradient> | |||
</aapt:attr> | |||
</path> | |||
<path | |||
android:pathData="M11.5,23L28.5,23C29.3284,23 30,23.6716 30,24.5C30,25.3284 29.3284,26 28.5,26L11.5,26C10.6716,26 10,25.3284 10,24.5C10,23.6716 10.6716,23 11.5,23Z" | |||
android:strokeWidth="1" | |||
android:fillType="evenOdd" | |||
android:strokeColor="#00000000"> | |||
<aapt:attr name="android:fillColor"> | |||
<gradient | |||
android:startY="23" | |||
android:startX="20" | |||
android:endY="25.958424" | |||
android:endX="20" | |||
android:type="linear"> | |||
<item android:offset="0" android:color="#FFFFF7F2"/> | |||
<item android:offset="1" android:color="#FFFFCCD5"/> | |||
</gradient> | |||
</aapt:attr> | |||
</path> | |||
<path | |||
android:pathData="M11.5,29L28.5,29C29.3284,29 30,29.6716 30,30.5C30,31.3284 29.3284,32 28.5,32L11.5,32C10.6716,32 10,31.3284 10,30.5C10,29.6716 10.6716,29 11.5,29Z" | |||
android:strokeWidth="1" | |||
android:fillType="evenOdd" | |||
android:strokeColor="#00000000"> | |||
<aapt:attr name="android:fillColor"> | |||
<gradient | |||
android:startY="29" | |||
android:startX="20" | |||
android:endY="31.958424" | |||
android:endX="20" | |||
android:type="linear"> | |||
<item android:offset="0" android:color="#FFFFF7F2"/> | |||
<item android:offset="1" android:color="#FFFFCCD5"/> | |||
</gradient> | |||
</aapt:attr> | |||
</path> | |||
</vector> |