Skip to content

Commit

Permalink
Merge pull request #219 from TimerTiTi/217-remove-special-characters-…
Browse files Browse the repository at this point in the history
…in-task-name

close #217 remove special characters in task name
  • Loading branch information
koreatlwls authored Jan 5, 2025
2 parents a5ddcc3 + 102d604 commit 3292173
Show file tree
Hide file tree
Showing 17 changed files with 61 additions and 32 deletions.
4 changes: 2 additions & 2 deletions build-logic/src/main/kotlin/com/titi/common/BuildInfo.kt
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ object BuildType {

object AppConfig {
const val APP_ID = "com.titi.app"
const val APP_VERSION_NAME = "1.4.9"
const val APP_VERSION_CODE = 51
const val APP_VERSION_NAME = "1.4.10"
const val APP_VERSION_CODE = 52
const val APP_NAME = "TiTi"
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,13 @@ fun String.isAfterH(hour: Int): Boolean {

return inputDateTime.dayOfMonth != currentDateTime.dayOfMonth && currentDateTime.hour >= hour
}

fun String.containsSpecialCharacter(): Boolean {
val specialCharacters = "!@#$%^&*()_+-=[]{}|;':\",./<>?"
return this.any { it in specialCharacters }
}

fun String.removeSpecialCharacter(): String {
val specialCharacters = "!@#$%^&*()_+-=[]{}|;':\",./<>?"
return this.filterNot { it in specialCharacters }
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.titi.app.doamin.daily.mapper

import com.titi.app.core.util.removeSpecialCharacter
import com.titi.app.data.daily.api.model.DailyRepositoryModel
import com.titi.app.data.daily.api.model.TaskHistoryRepositoryModel
import com.titi.app.doamin.daily.model.Daily
Expand All @@ -15,6 +16,18 @@ internal fun DailyRepositoryModel.toDomainModel() = Daily(
taskHistories = taskHistories?.mapValues { it.value.map { it.toDomainModel() } },
)

internal fun DailyRepositoryModel.toDomainModelWithRemovingSpecialCharacters() = Daily(
id = id,
status = status,
day = day,
timeLine = timeline,
maxTime = maxTime,
tasks = tasks?.mapKeys { it.key.removeSpecialCharacter() },
taskHistories = taskHistories
?.mapKeys { it.key.removeSpecialCharacter() }
?.mapValues { it.value.map { it.toDomainModel() } },
)

internal fun TaskHistoryRepositoryModel.toDomainModel() = TaskHistory(
startDate = startDate,
endDate = endDate,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package com.titi.app.doamin.daily.usecase

import com.titi.app.core.util.getDailyDayWithHour
import com.titi.app.data.daily.api.DailyRepository
import com.titi.app.doamin.daily.mapper.toDomainModel
import com.titi.app.doamin.daily.mapper.toDomainModelWithRemovingSpecialCharacters
import com.titi.app.doamin.daily.model.Daily
import javax.inject.Inject
import kotlinx.coroutines.flow.Flow
Expand All @@ -17,6 +17,6 @@ class GetTodayDailyFlowUseCase @Inject constructor(
return dailyRepository.getDateDailyFlow(
startDateTime = timePair.first,
endDateTime = timePair.second,
).map { it?.toDomainModel() ?: Daily() }
).map { it?.toDomainModelWithRemovingSpecialCharacters() ?: Daily() }
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@ package com.titi.app.doamin.daily.usecase

import com.titi.app.core.util.getDailyDayWithHour
import com.titi.app.data.daily.api.DailyRepository
import com.titi.app.doamin.daily.mapper.toDomainModel
import com.titi.app.doamin.daily.mapper.toDomainModelWithRemovingSpecialCharacters
import com.titi.app.doamin.daily.mapper.toRepositoryModel
import com.titi.app.doamin.daily.model.Daily
import javax.inject.Inject

Expand All @@ -12,9 +13,13 @@ class GetTodayDailyUseCase @Inject constructor(
suspend operator fun invoke(): Daily {
val timePair = getDailyDayWithHour(6)

return dailyRepository.getDateDaily(
val daily = dailyRepository.getDateDaily(
startDateTime = timePair.first,
endDateTime = timePair.second,
)?.toDomainModel() ?: Daily()
)?.toDomainModelWithRemovingSpecialCharacters() ?: Daily()

dailyRepository.upsert(daily.toRepositoryModel())

return daily
}
}
1 change: 1 addition & 0 deletions domain/task/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,5 @@ android {

dependencies {
implementation(project(":data:task:api"))
implementation(project(":core:util"))
}
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
package com.titi.app.domain.task.mapper

import com.titi.app.core.util.removeSpecialCharacter
import com.titi.app.data.task.api.model.TaskRepositoryModel
import com.titi.app.domain.task.model.Task

internal fun TaskRepositoryModel.toDomainModel() = Task(
id = id,
position = position,
taskName = taskName,
taskName = taskName.removeSpecialCharacter(),
taskTargetTime = taskTargetTime,
isTaskTargetTimeOn = isTaskTargetTimeOn,
savedSumTime = savedSumTime,
Expand Down
2 changes: 1 addition & 1 deletion domain/time/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,6 @@ android {

dependencies {
implementation(project(":data:time:api"))

implementation(project(":core:util"))
implementation(libs.threetenabp)
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.titi.app.domain.time.mapper

import com.titi.app.core.util.removeSpecialCharacter
import com.titi.app.data.time.api.model.CurrentTaskRepositoryModel
import com.titi.app.data.time.api.model.RecordTimesRepositoryModel
import com.titi.app.domain.time.model.CurrentTask
Expand All @@ -19,7 +20,7 @@ internal fun RecordTimesRepositoryModel.toDomainModel() = RecordTimes(
)

internal fun CurrentTaskRepositoryModel.toDomainModel() = CurrentTask(
taskName = taskName,
taskName = taskName.removeSpecialCharacter(),
taskTargetTime = taskTargetTime,
isTaskTargetTimeOn = isTaskTargetTimeOn,
)
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,19 @@ package com.titi.app.domain.time.usecase

import com.titi.app.data.time.api.RecordTimesRepository
import com.titi.app.domain.time.mapper.toDomainModel
import com.titi.app.domain.time.mapper.toRepositoryModel
import com.titi.app.domain.time.model.RecordTimes
import javax.inject.Inject

class GetRecordTimesUseCase @Inject constructor(
private val recordTimesRepository: RecordTimesRepository,
) {
suspend operator fun invoke() =
recordTimesRepository.getRecordTimes()?.toDomainModel() ?: RecordTimes()
suspend operator fun invoke(): RecordTimes {
val recordTimes = recordTimesRepository.getRecordTimes()
?.toDomainModel()
?: RecordTimes()

recordTimesRepository.setRecordTimes(recordTimes.toRepositoryModel())
return recordTimes
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ import com.titi.app.core.designsystem.component.TdsText
import com.titi.app.core.designsystem.extension.getTimeString
import com.titi.app.core.designsystem.theme.TdsColor
import com.titi.app.core.designsystem.theme.TdsTextStyle
import com.titi.app.core.util.removeSpecialCharacter
import com.titi.app.core.util.toOnlyTime
import com.titi.app.feature.edit.mapper.toFeatureModel
import com.titi.app.feature.edit.model.DateTimeTaskHistory
Expand Down Expand Up @@ -299,8 +300,8 @@ private fun EditTaskContent(
if (taskName.isNotEmpty()) {
EditTaskNameDialog(
taskName = TextFieldValue(
text = taskName,
selection = TextRange(taskName.length),
text = taskName.removeSpecialCharacter(),
selection = TextRange(taskName.removeSpecialCharacter().length),
),
onPositive = {
onEditActions(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,6 @@ import com.titi.app.feature.time.navigation.navigateToTimer
import com.titi.app.feature.time.navigation.timeGraph
import com.titi.app.feature.webview.navigateToWebView
import com.titi.app.feature.webview.webViewGraph
import java.net.URLEncoder
import java.nio.charset.StandardCharsets

@Composable
fun TiTiNavHost(
Expand Down Expand Up @@ -74,9 +72,7 @@ fun TiTiNavHost(
context.startActivity(intent)
},
onNavigateToMeasure = {
navController.navigateToMeasure(
URLEncoder.encode(it, StandardCharsets.UTF_8.toString()),
)
navController.navigateToMeasure(it)
},
onNavigateToDestination = {
navController.navigateToTopLevelDestination(it)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,6 @@ import androidx.navigation.NavType
import androidx.navigation.compose.composable
import androidx.navigation.navArgument
import com.titi.app.feature.measure.ui.MeasuringScreen
import java.net.URLDecoder
import java.nio.charset.StandardCharsets

private const val MEASURE_SCREEN = "measure"
const val MEASURE_ARG = "splashResultState"
Expand All @@ -29,12 +27,6 @@ fun NavGraphBuilder.measureGraph(onFinish: (isFinish: Boolean) -> Unit) {
MeasuringScreen(
splashResultState = it.arguments
?.getString(MEASURE_ARG, "")
?.let { jsonString ->
URLDecoder.decode(
jsonString,
StandardCharsets.UTF_8.toString(),
)
}
?: "",
onFinish = onFinish,
)
Expand Down
5 changes: 2 additions & 3 deletions release-note.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,2 @@
TiTi android 1.4.9
- recordTimes, Daily 동기화
- measuring finish event
TiTi android 1.4.10
- Special Characters 대응
1 change: 1 addition & 0 deletions tds/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,5 @@ android {

dependencies {
implementation(project(":core:ui"))
implementation(project(":core:util"))
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import androidx.compose.ui.focus.focusRequester
import androidx.compose.ui.platform.LocalSoftwareKeyboardController
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import com.titi.app.core.util.containsSpecialCharacter
import com.titi.app.tds.R
import com.titi.app.tds.component.TtdsOutLinedTextField
import com.titi.app.tds.model.TtdsDialogInfo
Expand Down Expand Up @@ -53,7 +54,7 @@ fun AddTaskNameDialog(onPositive: (String) -> Unit, onShowDialog: (Boolean) -> U
text = taskName,
placeholder = stringResource(id = R.string.tasks_hint_newtasktitle),
onValueChange = {
if (it.length <= 12) {
if (it.length <= 12 && !it.containsSpecialCharacter()) {
taskName = it
}
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import androidx.compose.ui.platform.LocalSoftwareKeyboardController
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.input.TextFieldValue
import androidx.compose.ui.unit.dp
import com.titi.app.core.util.containsSpecialCharacter
import com.titi.app.tds.R
import com.titi.app.tds.component.TtdsOutLinedTextField
import com.titi.app.tds.model.TtdsDialogInfo
Expand Down Expand Up @@ -57,7 +58,7 @@ fun EditTaskNameDialog(
.focusRequester(modifyTaskNameFocusRequester),
text = editTaskName,
onValueChange = {
if (it.text.length <= 12) {
if (it.text.length <= 12 && !it.text.containsSpecialCharacter()) {
editTaskName = it
}
},
Expand Down

0 comments on commit 3292173

Please sign in to comment.