Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ specs/
.agent/
.agents/
.codex/
.claude/

# Local configuration and secrets
local.properties
Expand Down Expand Up @@ -143,8 +144,9 @@ ehthumbs.db
hs_err_pid*
replay_pid*

# API Docs
api-docs.json

# Keep the Gradle wrapper JAR even when generic JAR files are ignored.
!/gradle/wrapper/gradle-wrapper.jar

# API Docs
api-docs.json
1 change: 1 addition & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
@AGENTS.md
1 change: 1 addition & 0 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ dependencies {
implementation(project(":feature:main:impl"))
implementation(project(":feature:mypage:impl"))
implementation(project(":feature:onboarding:impl"))
implementation(project(":feature:interview:impl"))
implementation(libs.androidx.activity.compose)
implementation(libs.androidx.core.ktx)
implementation(libs.androidx.lifecycle.runtime.ktx)
Expand Down
8 changes: 4 additions & 4 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,14 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />

<uses-feature
android:name="android.hardware.camera"
android:required="false" />

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />

<application
android:name=".DMinus14App"
android:allowBackup="true"
Expand Down
4 changes: 2 additions & 2 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
<resources>
<string name="app_name">D-14</string>
</resources>
<string name="app_name">Hilit</string>
</resources>
1 change: 1 addition & 0 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ plugins {
alias(libs.plugins.kotlin.android) apply false
alias(libs.plugins.kotlin.compose) apply false
alias(libs.plugins.kotlin.jvm) apply false
alias(libs.plugins.kotlin.serialization) apply false
alias(libs.plugins.kotlin.ksp) apply false
alias(libs.plugins.dagger.hilt.android) apply false

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="14dp"
android:height="14dp"
android:viewportWidth="14"
android:viewportHeight="14">
<path
android:pathData="M0,0h14v14h-14z"
android:fillColor="#FF5757"/>
<path
android:pathData="M6,2h2v7h-2z"
android:fillColor="#ffffff"/>
<path
android:pathData="M6,10h2v2h-2z"
android:fillColor="#ffffff"/>
</vector>
29 changes: 29 additions & 0 deletions core/resources/src/commonMain/composeResources/drawable/finish.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="74dp"
android:height="74dp"
android:viewportWidth="74"
android:viewportHeight="74">
<group>
<clip-path
android:pathData="M0,0h74v74h-74z"/>
<path
android:pathData="M15,5H58V19L15,18V5Z"
android:fillColor="#ACEBA0"/>
<path
android:pathData="M42.823,3.865L58.476,6.712L58.194,20.923L42.54,16.653L28.819,19.5L12.184,17.298L17,11L14.246,3.865L28.034,6L42.823,3.865Z"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#000000"/>
<path
android:pathData="M31,24h6v6h-6z"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#000000"/>
<path
android:pathData="M39.751,33.221L39.88,33.238L64.196,36.414L63.144,47.074L44.5,45.281L43.468,50.043L50.82,74H38.844L34.707,61.134L31.616,74H19.088L23.768,57.5L22.201,59.604L10.563,45.008L17.448,37.497L17.813,37.329L25.222,33.405L25.62,33.221H39.751ZM19.855,40.79L15.739,45.281L22.799,53.685L26,51L21.5,45.555L23.768,43.153L23.878,43.068L24,43L26.782,41.5L28.773,49.36L29,50L24.349,70H28.413L32.398,53.145H36.488L41.82,70H45.364L38.851,50.284L38.944,49.789L40.706,41.5L59.543,43.153L59.803,39.874L39.488,37.221H26.5L19.855,40.79ZM60.832,1V34.145L56.832,33.645V1H60.832Z"
android:fillColor="#000000"/>
<path
android:pathData="M60.476,49V74.001H56.476V48.5L60.476,49Z"
android:fillColor="#000000"/>
</group>
</vector>
19 changes: 19 additions & 0 deletions core/resources/src/commonMain/composeResources/drawable/mic.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M9,3h6v12h-6z"
android:fillColor="#ACEBA0"/>
<path
android:pathData="M5,12V19L19,19V12"
android:strokeWidth="2.5"
android:fillColor="#00000000"
android:strokeColor="#ACEBA0"/>
<path
android:pathData="M12,18V23.5"
android:strokeWidth="2.5"
android:fillColor="#00000000"
android:strokeColor="#ACEBA0"/>
</vector>
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<group>
<clip-path
android:pathData="M0,0h24v24h-24z"/>
<path
android:pathData="M10.225,20.275C9.742,19.792 9.5,19.2 9.5,18.5C9.5,17.8 9.742,17.208 10.225,16.725C10.708,16.242 11.3,16 12,16C12.7,16 13.292,16.242 13.775,16.725C14.258,17.208 14.5,17.8 14.5,18.5C14.5,19.2 14.258,19.792 13.775,20.275C13.292,20.758 12.7,21 12,21C11.3,21 10.708,20.758 10.225,20.275ZM6.35,15.35L4.25,13.2C5.233,12.217 6.388,11.438 7.713,10.863C9.038,10.288 10.467,10.001 12,10C13.533,9.999 14.962,10.291 16.288,10.875C17.614,11.459 18.768,12.251 19.75,13.25L17.65,15.35C16.917,14.617 16.067,14.042 15.1,13.625C14.133,13.208 13.1,13 12,13C10.9,13 9.867,13.208 8.9,13.625C7.933,14.042 7.083,14.617 6.35,15.35ZM2.1,11.1L0,9C1.533,7.433 3.325,6.208 5.375,5.325C7.425,4.442 9.633,4 12,4C14.367,4 16.575,4.442 18.625,5.325C20.675,6.208 22.467,7.433 24,9L21.9,11.1C20.617,9.817 19.129,8.813 17.438,8.088C15.747,7.363 13.934,7.001 12,7C10.066,6.999 8.254,7.362 6.563,8.088C4.872,8.814 3.385,9.818 2.1,11.1Z"
android:fillColor="#ACEBA0"/>
</group>
</vector>
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import com.dminus14.app.domain.exception.ServerException
import kotlinx.coroutines.runBlocking
import okhttp3.MultipartBody
import okhttp3.ResponseBody
import okhttp3.ResponseBody.Companion.toResponseBody
import org.junit.Assert.assertEquals
import org.junit.Assert.assertNotNull
import org.junit.Assert.assertSame
Expand Down Expand Up @@ -614,7 +615,7 @@ class InterviewRemoteDataSourceTest {
): ResponseBody {
requestedStreamSessionId = sessionId
requestedStreamQuestionId = questionId
return ResponseBody.create(null, "")
return "".toResponseBody(null)
}

override suspend fun getResume(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,24 +78,24 @@ internal fun hilitFixedBottomButtonColors(
enabled: Boolean,
colors: HilitColors,
): BtnColorSet =
when {
type == HilitButtonType.Light && enabled -> {
when (type) {
HilitButtonType.Light if enabled -> {
BtnColorSet(
contentColor = colors.hilitWhite,
backgroundColor = colors.hilitBlack800,
pressColor = colors.gray900,
)
}

type == HilitButtonType.Dark && enabled -> {
HilitButtonType.Dark if enabled -> {
BtnColorSet(
contentColor = colors.hilitBlack800,
backgroundColor = colors.hilitWhite,
pressColor = colors.gray100,
)
}

type == HilitButtonType.Light -> {
HilitButtonType.Light -> {
BtnColorSet(
contentColor = colors.gray300,
backgroundColor = colors.gray50,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,10 +41,11 @@ enum class HilitMiniButtonColor {
fun HilitMiniButton(
onClick: () -> Unit,
modifier: Modifier = Modifier,
enabled: Boolean = true,
color: HilitMiniButtonColor = HilitMiniButtonColor.Light,
content: @Composable () -> Unit,
) {
val style = hilitMiniButtonStyle(color = color, colors = HilitTheme.colors)
val style = hilitMiniButtonStyle(color = color, colors = HilitTheme.colors, enabled = enabled)
val interactionSource = remember { MutableInteractionSource() }

CompositionLocalProvider(LocalContentColor provides style.contentColor) {
Expand All @@ -54,6 +55,7 @@ fun HilitMiniButton(
modifier
.background(style.backgroundColor)
.clickable(
enabled = enabled,
interactionSource = interactionSource,
indication = null,
role = Role.Button,
Expand All @@ -78,9 +80,10 @@ internal data class HilitMiniButtonStyle(
internal fun hilitMiniButtonStyle(
color: HilitMiniButtonColor,
colors: HilitColors,
enabled: Boolean,
): HilitMiniButtonStyle =
when (color) {
HilitMiniButtonColor.Light -> {
HilitMiniButtonColor.Light if enabled -> {
HilitMiniButtonStyle(
backgroundColor = colors.gray100,
contentColor = colors.hilitBlack800,
Expand All @@ -89,7 +92,7 @@ internal fun hilitMiniButtonStyle(
)
}

HilitMiniButtonColor.Dark -> {
HilitMiniButtonColor.Dark if enabled -> {
HilitMiniButtonStyle(
backgroundColor = colors.gray900,
contentColor = colors.hilitWhite,
Expand All @@ -106,6 +109,15 @@ internal fun hilitMiniButtonStyle(
contentSpacing = 8.dp,
)
}

else -> {
HilitMiniButtonStyle(
backgroundColor = colors.hilitWhite,
contentColor = colors.gray300,
contentPadding = 8.dp,
contentSpacing = 8.dp,
)
}
}

@Composable
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import com.dminus14.app.core.resources.Res
import com.dminus14.app.core.resources.ai_sparkle
import com.dminus14.app.core.resources.alert_red
import com.dminus14.app.core.resources.apple_logo
import com.dminus14.app.core.resources.book
import com.dminus14.app.core.resources.cancel
Expand All @@ -21,10 +22,13 @@ import com.dminus14.app.core.resources.edit
import com.dminus14.app.core.resources.expand
import com.dminus14.app.core.resources.file
import com.dminus14.app.core.resources.fill_warning
import com.dminus14.app.core.resources.finish
import com.dminus14.app.core.resources.hiiii_logo
import com.dminus14.app.core.resources.info
import com.dminus14.app.core.resources.kakao_logo
import com.dminus14.app.core.resources.left
import com.dminus14.app.core.resources.mic
import com.dminus14.app.core.resources.network
import com.dminus14.app.core.resources.pause
import com.dminus14.app.core.resources.play
import com.dminus14.app.core.resources.plus
Expand Down Expand Up @@ -92,6 +96,10 @@ enum class HilitIconAsset(
Undo("undo", 16.dp, Res.drawable.undo, preservesOriginalColors = true),
Voice("voice", 28.dp, Res.drawable.voice, preservesOriginalColors = true),
Book("book", 63.dp, Res.drawable.book, preservesOriginalColors = true),
Mic("mic", 24.dp, Res.drawable.mic),
Network("network", 24.dp, Res.drawable.network),
AlertRed("alert", 14.dp, Res.drawable.alert_red, preservesOriginalColors = true),
Finish("finish", 74.dp, Res.drawable.finish, preservesOriginalColors = true),
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -329,7 +329,7 @@ private fun HilitModalDualButtonPreview() {
}

@Composable
private fun HilitModalPreviewHost(content: @Composable () -> Unit) {
fun HilitModalPreviewHost(content: @Composable () -> Unit) {
HilitTheme {
Box(modifier = Modifier.fillMaxSize()) {
content()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ enum class HilitTextHighlightColor {
Green,
Red,
Blue,
Black,
}

/**
Expand Down Expand Up @@ -278,6 +279,13 @@ internal fun hilitTextHighlightStyle(
contentColor = colors.positive800,
)
}

HilitTextHighlightColor.Black -> {
HilitTextHighlightStyle(
backgroundColor = colors.hilitBlack800,
contentColor = colors.hilitGreen500,
)
}
}

internal fun normalizedHighlightRanges(text: AnnotatedString): List<HilitTextRange> {
Expand Down
9 changes: 9 additions & 0 deletions feature/interview/api/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
plugins {
alias(libs.plugins.dminus14.jvm.library)
alias(libs.plugins.dminus14.kotlin.quality)
alias(libs.plugins.kotlin.serialization)
}

dependencies {
implementation(libs.androidx.navigation3.runtime)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.dminus14.app.feature.interview.api

import androidx.navigation3.runtime.NavKey
import kotlinx.serialization.Serializable

/** 면접 진행 화면 route */
@Serializable
data object InterviewRoute : NavKey

/** 면접 오류 유형 */
enum class InterviewErrorType {
MIC,
NETWORK,
}

/** 면접 오류 화면 route */
@Serializable
data class InterviewErrorRoute(
val errorType: InterviewErrorType,
) : NavKey
20 changes: 20 additions & 0 deletions feature/interview/impl/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
plugins {
alias(libs.plugins.dminus14.android.feature)
}

android {
namespace = "com.dminus14.app.feature.interview"
}

dependencies {
api(project(":feature:interview:api"))

implementation(project(":core:common"))
implementation(project(":core:permission"))
implementation(project(":designsystem"))

implementation(libs.androidx.camera.core)
implementation(libs.androidx.camera.camera2)
implementation(libs.androidx.camera.lifecycle)
implementation(libs.androidx.camera.view)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.dminus14.app.feature.interview

/**
* `interview:impl` 내 둘 이상의 Screen이 공유하는 상수.
* 특정 Screen 하나에만 쓰이는 값은 해당 Contract나 사용처 파일에 둔다.
*/
object InterviewConstants {
const val MAX_INTERVIEW_SECONDS: Int = 720
const val CAN_FINISH_INTERVIEW_SECONDS: Int = 480
}
Loading
Loading