diff --git a/.gitignore b/.gitignore index b338da72..22d45b08 100644 --- a/.gitignore +++ b/.gitignore @@ -481,3 +481,5 @@ lint/tmp/ # Android Profiling *.hprof +/report + diff --git a/core/ui/build.gradle.kts b/core/ui/build.gradle.kts index 82219c0d..1bef3edd 100644 --- a/core/ui/build.gradle.kts +++ b/core/ui/build.gradle.kts @@ -2,6 +2,7 @@ plugins { alias(libs.plugins.suwiki.android.library) alias(libs.plugins.suwiki.android.library.compose) + alias(libs.plugins.kotlin.serialization) } android { @@ -10,4 +11,5 @@ android { dependencies { implementation(projects.core.model) implementation(libs.kotlinx.immutable) + implementation(libs.kotlinx.serialization.json) } diff --git a/core/ui/src/main/java/com/suwiki/core/ui/extension/Json.kt b/core/ui/src/main/java/com/suwiki/core/ui/extension/Json.kt new file mode 100644 index 00000000..976e2bf3 --- /dev/null +++ b/core/ui/src/main/java/com/suwiki/core/ui/extension/Json.kt @@ -0,0 +1,13 @@ +package com.suwiki.core.ui.extension + +import android.net.Uri +import kotlinx.serialization.encodeToString +import kotlinx.serialization.json.Json + +inline fun Json.encodeToUri(value: T): String { + return Uri.encode(encodeToString(value)) +} + +inline fun Json.decodeFromUri(value: String): T { + return decodeFromString(Uri.decode(value)) +} diff --git a/feature/lectureevaluation/editor/src/main/java/com/suwiki/feature/lectureevaluation/editor/examevaluation/MyExamEvaluationEditViewModel.kt b/feature/lectureevaluation/editor/src/main/java/com/suwiki/feature/lectureevaluation/editor/examevaluation/MyExamEvaluationEditViewModel.kt index f71cb21e..f6f95bd0 100644 --- a/feature/lectureevaluation/editor/src/main/java/com/suwiki/feature/lectureevaluation/editor/examevaluation/MyExamEvaluationEditViewModel.kt +++ b/feature/lectureevaluation/editor/src/main/java/com/suwiki/feature/lectureevaluation/editor/examevaluation/MyExamEvaluationEditViewModel.kt @@ -7,6 +7,7 @@ import com.suwiki.core.model.enums.ExamLevel import com.suwiki.core.model.enums.ExamType import com.suwiki.core.model.lectureevaluation.exam.MyExamEvaluation import com.suwiki.core.model.user.User +import com.suwiki.core.ui.extension.decodeFromUri import com.suwiki.domain.lectureevaluation.editor.usecase.exam.DeleteExamEvaluationUseCase import com.suwiki.domain.lectureevaluation.editor.usecase.exam.UpdateExamEvaluationUseCase import com.suwiki.domain.user.usecase.GetUserInfoUseCase @@ -34,7 +35,7 @@ class MyExamEvaluationEditViewModel @Inject constructor( container(MyExamEvaluationEditState()) private val myExamEvaluation = savedStateHandle.get(MyEvaluationEditRoute.myExamEvaluation)!! - private val myExamEvaluationItem: MyExamEvaluation = Json.decodeFromString(myExamEvaluation) + private val myExamEvaluationItem: MyExamEvaluation = Json.decodeFromUri(myExamEvaluation) suspend fun initData() = intent { showLoadingScreen() diff --git a/feature/lectureevaluation/editor/src/main/java/com/suwiki/feature/lectureevaluation/editor/lectureevaluation/MyLectureEvaluationEditViewModel.kt b/feature/lectureevaluation/editor/src/main/java/com/suwiki/feature/lectureevaluation/editor/lectureevaluation/MyLectureEvaluationEditViewModel.kt index 2833eaac..ed135391 100644 --- a/feature/lectureevaluation/editor/src/main/java/com/suwiki/feature/lectureevaluation/editor/lectureevaluation/MyLectureEvaluationEditViewModel.kt +++ b/feature/lectureevaluation/editor/src/main/java/com/suwiki/feature/lectureevaluation/editor/lectureevaluation/MyLectureEvaluationEditViewModel.kt @@ -7,6 +7,7 @@ import com.suwiki.core.model.enums.HomeworkLevel import com.suwiki.core.model.enums.TeamLevel import com.suwiki.core.model.lectureevaluation.lecture.MyLectureEvaluation import com.suwiki.core.model.user.User +import com.suwiki.core.ui.extension.decodeFromUri import com.suwiki.domain.lectureevaluation.editor.usecase.lecture.DeleteLectureEvaluationUseCase import com.suwiki.domain.lectureevaluation.editor.usecase.lecture.UpdateLectureEvaluationUseCase import com.suwiki.domain.user.usecase.GetUserInfoUseCase @@ -35,7 +36,7 @@ class MyLectureEvaluationEditViewModel @Inject constructor( container(MyLectureEvaluationEditState()) private val myLectureEvaluation = savedStateHandle.get(MyEvaluationEditRoute.myLectureEvaluation)!! - private val myLectureEvaluationItem: MyLectureEvaluation = Json.decodeFromString(myLectureEvaluation) + private val myLectureEvaluationItem: MyLectureEvaluation = Json.decodeFromUri(myLectureEvaluation) suspend fun initData() = intent { showLoadingScreen() diff --git a/feature/lectureevaluation/my/src/main/java/com/suwiki/feature/lectureevaluation/my/MyEvaluationScreen.kt b/feature/lectureevaluation/my/src/main/java/com/suwiki/feature/lectureevaluation/my/MyEvaluationScreen.kt index 57da21d2..7aa46b4d 100644 --- a/feature/lectureevaluation/my/src/main/java/com/suwiki/feature/lectureevaluation/my/MyEvaluationScreen.kt +++ b/feature/lectureevaluation/my/src/main/java/com/suwiki/feature/lectureevaluation/my/MyEvaluationScreen.kt @@ -1,6 +1,7 @@ package com.suwiki.feature.lectureevaluation.my import android.annotation.SuppressLint +import android.net.Uri import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.background import androidx.compose.foundation.layout.Column @@ -36,6 +37,7 @@ import com.suwiki.core.model.lectureevaluation.exam.MyExamEvaluation import com.suwiki.core.model.lectureevaluation.lecture.MyLectureEvaluation import com.suwiki.core.ui.extension.OnBottomReached import com.suwiki.core.ui.extension.collectWithLifecycle +import com.suwiki.core.ui.extension.encodeToUri import com.suwiki.feature.lectureevaluation.my.model.MyEvaluationTab import com.suwiki.feature.lectureevaluation.my.model.MyExamEvaluationsSample import com.suwiki.feature.lectureevaluation.my.model.MyLectureEvaluationsSample @@ -183,7 +185,7 @@ fun MyEvaluationLazyColumn( SuwikiReviewEditContainer( semesterText = item.selectedSemester, classNameText = item.lectureInfo.lectureName, - onClickEditButton = { onClickLectureEditButton(Json.encodeToString(item)) }, + onClickEditButton = { onClickLectureEditButton(Json.encodeToUri(item)) }, ) } is MyExamEvaluation -> { @@ -192,7 +194,7 @@ fun MyEvaluationLazyColumn( SuwikiReviewEditContainer( semesterText = examSemester ?: stringResource(R.string.word_semester), classNameText = examName ?: stringResource(R.string.word_lecture_name), - onClickEditButton = { onClickExamEditButton(Json.encodeToString(item)) }, + onClickEditButton = { onClickExamEditButton(Json.encodeToUri(item)) }, ) } }