From add82bda148478bb465762a2b63b46dfbcffb28d Mon Sep 17 00:00:00 2001 From: dltkd1395 Date: Wed, 24 Jan 2024 23:52:16 +0900 Subject: [PATCH 01/47] release 1.0.1 --- AOS/whatsNewDirectory/whatsnew-ko-KR | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 AOS/whatsNewDirectory/whatsnew-ko-KR diff --git a/AOS/whatsNewDirectory/whatsnew-ko-KR b/AOS/whatsNewDirectory/whatsnew-ko-KR new file mode 100644 index 00000000..92415fa2 --- /dev/null +++ b/AOS/whatsNewDirectory/whatsnew-ko-KR @@ -0,0 +1,9 @@ +2023.12.15 +version: 1.0.1 + +πŸ’‘ About MindSync +λ§ˆμΈλ“œλ§΅μ„ μ‚¬μš©ν•˜μ—¬ 아이디어λ₯Ό μ‹œκ°μ μœΌλ‘œ ν‘œν˜„ν•΄λ³΄μ„Έμš”. +ν˜‘μ—…μ„ μ›ν•˜λŠ” μΉœκ΅¬λ‚˜ λ™λ£Œλ₯Ό μ΄ˆλŒ€ν•˜λŠ” 것도 κ°€λŠ₯ν•©λ‹ˆλ‹€. +κ°„νŽΈν•˜κ²Œ λ§ˆμΈλ“œλ§΅μ„ μƒμ„±ν•˜κ³ , λ‹€λ₯Έ μ‚¬μš©μžλ“€κ³Ό μ‹€μ‹œκ°„μœΌλ‘œ 곡동 νŽΈμ§‘μ„ 진행할 수 μžˆμ–΄μš”! +🐞 BugFix +- λ§ˆμΈλ“œλ§΅μ΄ λ‹€λ₯Έ λ³΄λ“œμ— λ³΅μ‚¬λ˜λŠ” ν˜„μƒ ν•΄κ²° \ No newline at end of file From a3e0b7dbcf5ca86ae34a89692d1baeacef163d11 Mon Sep 17 00:00:00 2001 From: dltkd1395 Date: Wed, 24 Jan 2024 23:52:52 +0900 Subject: [PATCH 02/47] =?UTF-8?q?chore(#136):=20JDK=20=EB=B9=8C=EB=93=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/AOS-distribute.yml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 .github/workflows/AOS-distribute.yml diff --git a/.github/workflows/AOS-distribute.yml b/.github/workflows/AOS-distribute.yml new file mode 100644 index 00000000..168934b8 --- /dev/null +++ b/.github/workflows/AOS-distribute.yml @@ -0,0 +1,17 @@ +name: AOS-distribute +on: + push: + branches: + - distribute + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Set up JDK 17 + uses: actions/setup-java@v3 + with: + distribution: 'corretto' + java-version: 17 From 41e102a73b8038d41864d4ff586dba90fb813e72 Mon Sep 17 00:00:00 2001 From: dltkd1395 Date: Wed, 24 Jan 2024 23:53:35 +0900 Subject: [PATCH 03/47] =?UTF-8?q?chore(#316):=20keystore,=20properties=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/AOS-distribute.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.github/workflows/AOS-distribute.yml b/.github/workflows/AOS-distribute.yml index 168934b8..63f4c8d6 100644 --- a/.github/workflows/AOS-distribute.yml +++ b/.github/workflows/AOS-distribute.yml @@ -15,3 +15,13 @@ jobs: with: distribution: 'corretto' java-version: 17 + + - name: Create Properties File + env: + RELEASE_KEYSTORE: ${{ secrets.KEY_STORE_BASE_64 }} + KEYSTORE_PROPERTIES: ${{ secrets.KEYSTORE_PROPERTIES }} + LOCAL_PROPERTIES: ${{ secrets.LOCAL_PROPERTIES }} + run: | + echo "$RELEASE_KEYSTORE" | base64 -d > AOS/app/mindsync_keystore + echo "$KEYSTORE_PROPERTIES" > AOS/keystore.properties + echo "$LOCAL_PROPERTIES" > AOS/local.properties From aae8e46d2875a31dba1c4b4366c02779475c999e Mon Sep 17 00:00:00 2001 From: dltkd1395 Date: Wed, 24 Jan 2024 23:54:13 +0900 Subject: [PATCH 04/47] =?UTF-8?q?chore(#316):=20google-services.json=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/AOS-distribute.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/AOS-distribute.yml b/.github/workflows/AOS-distribute.yml index 63f4c8d6..3ceda997 100644 --- a/.github/workflows/AOS-distribute.yml +++ b/.github/workflows/AOS-distribute.yml @@ -25,3 +25,6 @@ jobs: echo "$RELEASE_KEYSTORE" | base64 -d > AOS/app/mindsync_keystore echo "$KEYSTORE_PROPERTIES" > AOS/keystore.properties echo "$LOCAL_PROPERTIES" > AOS/local.properties + + - name: Create google-services.json + run: echo '${{ secrets.GOOGLE_SERVICES_JSON }}' > AOS/app/google-services.json From c31145c27cb5a839eca7962e478bd3962fdb87b4 Mon Sep 17 00:00:00 2001 From: dltkd1395 Date: Wed, 24 Jan 2024 23:54:46 +0900 Subject: [PATCH 05/47] =?UTF-8?q?chore(#316):=20aab=20=EB=B9=8C=EB=93=9C?= =?UTF-8?q?=20=EB=B0=8F=20=EC=97=85=EB=A1=9C=EB=93=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/AOS-distribute.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.github/workflows/AOS-distribute.yml b/.github/workflows/AOS-distribute.yml index 3ceda997..e4a5e667 100644 --- a/.github/workflows/AOS-distribute.yml +++ b/.github/workflows/AOS-distribute.yml @@ -28,3 +28,13 @@ jobs: - name: Create google-services.json run: echo '${{ secrets.GOOGLE_SERVICES_JSON }}' > AOS/app/google-services.json + + - name: Build Release AAB + run: ./gradlew bundleRelease + working-directory: ./AOS + + - name: Upload AAB + uses: actions/upload-artifact@v2 + with: + name: app-release.aab + path: AOS/app/build/outputs/bundle/release/app-release.aab From 5ca9e61fe635dbcb2dab63018bdb25e684cdcb67 Mon Sep 17 00:00:00 2001 From: dltkd1395 Date: Wed, 24 Jan 2024 23:55:32 +0900 Subject: [PATCH 06/47] =?UTF-8?q?chore(#316):=20aab=20=EB=8B=A4=EC=9A=B4?= =?UTF-8?q?=EB=A1=9C=EB=93=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/AOS-distribute.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.github/workflows/AOS-distribute.yml b/.github/workflows/AOS-distribute.yml index e4a5e667..6625a050 100644 --- a/.github/workflows/AOS-distribute.yml +++ b/.github/workflows/AOS-distribute.yml @@ -38,3 +38,13 @@ jobs: with: name: app-release.aab path: AOS/app/build/outputs/bundle/release/app-release.aab + + deploy: + needs: build + runs-on: ubuntu-latest + steps: + - name: Download AAB + uses: actions/download-artifact@v2 + with: + name: app-release.aab + path: AOS/app/build/outputs/bundle/release/ From 229c91901c069eb8ea20eff780d122600b54c23d Mon Sep 17 00:00:00 2001 From: dltkd1395 Date: Wed, 24 Jan 2024 23:55:48 +0900 Subject: [PATCH 07/47] =?UTF-8?q?chore(#316):=20service=5Faccount.json=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/AOS-distribute.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/AOS-distribute.yml b/.github/workflows/AOS-distribute.yml index 6625a050..c247a62a 100644 --- a/.github/workflows/AOS-distribute.yml +++ b/.github/workflows/AOS-distribute.yml @@ -48,3 +48,6 @@ jobs: with: name: app-release.aab path: AOS/app/build/outputs/bundle/release/ + + - name: Create service_account.json + run: echo '${{ secrets.GOOGLE_PLAY_STORE_SERVICE_ACCOUT }}' > service_account.json From 9a3f01c19ad38969843d4922c19a53dc8a61e17f Mon Sep 17 00:00:00 2001 From: dltkd1395 Date: Wed, 24 Jan 2024 23:56:06 +0900 Subject: [PATCH 08/47] =?UTF-8?q?chore(#316):=20=EB=A6=B4=EB=A6=AC?= =?UTF-8?q?=EC=A6=88=20=EB=B2=84=EC=A0=84=20=EC=B6=94=EC=B6=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/AOS-distribute.yml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/.github/workflows/AOS-distribute.yml b/.github/workflows/AOS-distribute.yml index c247a62a..38cecf49 100644 --- a/.github/workflows/AOS-distribute.yml +++ b/.github/workflows/AOS-distribute.yml @@ -51,3 +51,17 @@ jobs: - name: Create service_account.json run: echo '${{ secrets.GOOGLE_PLAY_STORE_SERVICE_ACCOUT }}' > service_account.json + + - name: Extract Release Version + run: echo "##[set-output name=version;]$(echo '${{ github.event.head_commit.message }}' | egrep -o '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}')" + id: extract_version_name + + - name: Create GitHub Release + uses: actions/create-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ steps.extract_version_name.outputs.version }} + release_name: ${{ steps.extract_version_name.outputs.version }} + files: | + AOS/app/build/outputs/bundle/release/app-release.aab From a56131ddb7cc63884868421289fbdc972f2c731b Mon Sep 17 00:00:00 2001 From: dltkd1395 Date: Wed, 24 Jan 2024 23:56:46 +0900 Subject: [PATCH 09/47] =?UTF-8?q?chore(#316):=20google=20play=20store=20?= =?UTF-8?q?=EB=B0=B0=ED=8F=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/AOS-distribute.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.github/workflows/AOS-distribute.yml b/.github/workflows/AOS-distribute.yml index 38cecf49..3f6a2e5e 100644 --- a/.github/workflows/AOS-distribute.yml +++ b/.github/workflows/AOS-distribute.yml @@ -65,3 +65,13 @@ jobs: release_name: ${{ steps.extract_version_name.outputs.version }} files: | AOS/app/build/outputs/bundle/release/app-release.aab + + - name: Deploy to Google Play Store + uses: r0adkll/upload-google-play@v1 + with: + serviceAccountJson: service_account.json + packageName: boostcamp.and07.mindsync + releaseName: ${{ steps.extract_version_name.outputs.version }} + releaseFiles: AOS/app/build/outputs/bundle/release/app-release.aab + track: production + whatsNewDirectory: AOS/whatsNewDirectory \ No newline at end of file From 4055da822017e7f7fb3bf552e30fd6e2cce43040 Mon Sep 17 00:00:00 2001 From: dltkd1395 Date: Thu, 25 Jan 2024 00:10:06 +0900 Subject: [PATCH 10/47] =?UTF-8?q?chore(#316):=20google-services=20?= =?UTF-8?q?=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AOS/app/build.gradle.kts | 1 + AOS/build.gradle.kts | 1 + 2 files changed, 2 insertions(+) diff --git a/AOS/app/build.gradle.kts b/AOS/app/build.gradle.kts index 08ffd4c6..fc73ecc6 100644 --- a/AOS/app/build.gradle.kts +++ b/AOS/app/build.gradle.kts @@ -7,6 +7,7 @@ plugins { kotlin("kapt") id("com.google.dagger.hilt.android") id("kotlinx-serialization") + id("com.google.gms.google-services") } android { diff --git a/AOS/build.gradle.kts b/AOS/build.gradle.kts index e0fa51ec..d26e3558 100644 --- a/AOS/build.gradle.kts +++ b/AOS/build.gradle.kts @@ -4,6 +4,7 @@ plugins { id("com.google.dagger.hilt.android") version "2.48" apply false id("org.jlleitschuh.gradle.ktlint") version "11.6.1" apply false kotlin("plugin.serialization") version "1.9.0" + id("com.google.gms.google-services") version "4.4.0" apply false } buildscript { repositories { From b3f6763a3e4223049619f51c8c0c9eafc64d4273 Mon Sep 17 00:00:00 2001 From: dltkd1395 Date: Thu, 25 Jan 2024 00:10:51 +0900 Subject: [PATCH 11/47] =?UTF-8?q?chore(#316):=20signingConfigs=20=EC=84=A4?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AOS/app/build.gradle.kts | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/AOS/app/build.gradle.kts b/AOS/app/build.gradle.kts index fc73ecc6..e369d42c 100644 --- a/AOS/app/build.gradle.kts +++ b/AOS/app/build.gradle.kts @@ -1,3 +1,4 @@ +import java.io.FileInputStream import java.util.Properties plugins { @@ -10,6 +11,10 @@ plugins { id("com.google.gms.google-services") } +val keystorePropertiesFile = rootProject.file("keystore.properties") +val keystoreProperties = Properties() +keystoreProperties.load(FileInputStream(keystorePropertiesFile)) + android { namespace = "boostcamp.and07.mindsync" compileSdk = 34 @@ -35,13 +40,22 @@ android { buildConfigField("String", "KAKAO_CLIENT_ID", "$kakaoClientId") manifestPlaceholders["KAKAO_CLIENT_ID"] = removeQuotationKakaoClientId } + signingConfigs { + create("release") { + keyAlias = keystoreProperties["keyAlias"] as String + keyPassword = keystoreProperties["keyPassword"] as String + storeFile = file(keystoreProperties["storeFile"] as String) + storePassword = keystoreProperties["storePassword"] as String + } + } buildTypes { - release { + getByName("release") { isMinifyEnabled = false proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro", ) + signingConfig = signingConfigs.getByName("release") } } buildFeatures { From c8d67a769e023c50509bd7401c46cc391b5125a2 Mon Sep 17 00:00:00 2001 From: dltkd1395 Date: Thu, 25 Jan 2024 00:11:10 +0900 Subject: [PATCH 12/47] release 1.0.1 --- AOS/app/build.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/AOS/app/build.gradle.kts b/AOS/app/build.gradle.kts index e369d42c..63823ce6 100644 --- a/AOS/app/build.gradle.kts +++ b/AOS/app/build.gradle.kts @@ -31,8 +31,8 @@ android { applicationId = "boostcamp.and07.mindsync" minSdk = 26 targetSdk = 34 - versionCode = 1 - versionName = "1.0" + versionCode = 8 + versionName = "1.0.1" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" buildConfigField("String", "BASE_URL", "$url") From fdc214fa9cef462a481b621756b04b52331e5d78 Mon Sep 17 00:00:00 2001 From: SangJun Lee <39490416+hegleB@users.noreply.github.com> Date: Thu, 25 Jan 2024 00:18:41 +0900 Subject: [PATCH 13/47] =?UTF-8?q?chore(#316):=20keystore=20=ED=8C=8C?= =?UTF-8?q?=EC=9D=BC=EB=AA=85=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/AOS-distribute.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/AOS-distribute.yml b/.github/workflows/AOS-distribute.yml index 3f6a2e5e..ed1eed57 100644 --- a/.github/workflows/AOS-distribute.yml +++ b/.github/workflows/AOS-distribute.yml @@ -22,7 +22,7 @@ jobs: KEYSTORE_PROPERTIES: ${{ secrets.KEYSTORE_PROPERTIES }} LOCAL_PROPERTIES: ${{ secrets.LOCAL_PROPERTIES }} run: | - echo "$RELEASE_KEYSTORE" | base64 -d > AOS/app/mindsync_keystore + echo "$RELEASE_KEYSTORE" | base64 -d > AOS/app/release.keystore echo "$KEYSTORE_PROPERTIES" > AOS/keystore.properties echo "$LOCAL_PROPERTIES" > AOS/local.properties @@ -74,4 +74,4 @@ jobs: releaseName: ${{ steps.extract_version_name.outputs.version }} releaseFiles: AOS/app/build/outputs/bundle/release/app-release.aab track: production - whatsNewDirectory: AOS/whatsNewDirectory \ No newline at end of file + whatsNewDirectory: AOS/whatsNewDirectory From 06192d54b2ab38ab187e77fcbe30b4e454ebe607 Mon Sep 17 00:00:00 2001 From: dltkd1395 Date: Thu, 25 Jan 2024 00:24:43 +0900 Subject: [PATCH 14/47] release 1.0.1 --- AOS/app/build.gradle.kts | 1 - 1 file changed, 1 deletion(-) diff --git a/AOS/app/build.gradle.kts b/AOS/app/build.gradle.kts index 63823ce6..c40b80e7 100644 --- a/AOS/app/build.gradle.kts +++ b/AOS/app/build.gradle.kts @@ -10,7 +10,6 @@ plugins { id("kotlinx-serialization") id("com.google.gms.google-services") } - val keystorePropertiesFile = rootProject.file("keystore.properties") val keystoreProperties = Properties() keystoreProperties.load(FileInputStream(keystorePropertiesFile)) From 26206fdb10119d2942900c02e31058a39340ea3e Mon Sep 17 00:00:00 2001 From: dltkd1395 Date: Sat, 17 Feb 2024 22:17:29 +0900 Subject: [PATCH 15/47] =?UTF-8?q?refactor:=20=ED=94=84=EB=A1=9C=ED=95=84?= =?UTF-8?q?=20UI=20=EC=83=81=ED=83=9C=20=EA=B4=80=EB=A6=AC=EB=A5=BC=20?= =?UTF-8?q?=EC=9C=84=ED=95=9C=20=ED=8C=8C=EB=9D=BC=EB=AF=B8=ED=84=B0=20?= =?UTF-8?q?=ED=83=80=EC=9E=85=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mindsync/ui/profile/ProfileScreen.kt | 61 ++++++------------- 1 file changed, 18 insertions(+), 43 deletions(-) diff --git a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/profile/ProfileScreen.kt b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/profile/ProfileScreen.kt index f8df91a2..7ef9b487 100644 --- a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/profile/ProfileScreen.kt +++ b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/profile/ProfileScreen.kt @@ -33,6 +33,8 @@ import androidx.compose.runtime.MutableState import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip @@ -56,6 +58,7 @@ import boostcamp.and07.mindsync.ui.theme.MindSyncTheme import boostcamp.and07.mindsync.ui.theme.Red2 import coil.compose.AsyncImage import kotlinx.coroutines.flow.collectLatest +import kotlinx.coroutines.launch @Composable fun ProfileScreen( @@ -68,69 +71,41 @@ fun ProfileScreen( showImagePicker: () -> Unit, ) { val uiState by profileViewModel.uiState.collectAsStateWithLifecycle() - val nicknameColor = remember { mutableStateOf(Gray4) } + var nicknameColor by remember { mutableStateOf(Gray4) } val snackBarHostState = remember { SnackbarHostState() } + val coroutineScope = rememberCoroutineScope() HandleProfileEvents( profileViewModel = profileViewModel, onBack = onBack, - nicknameColor = nicknameColor, - snackBarHostState = snackBarHostState, - ) - Scaffold( - snackbarHost = { - SnackbarHost(hostState = snackBarHostState) + updateNicknameColor = { changedColor -> + nicknameColor = changedColor }, - ) { innerPadding -> - BoxWithConstraints( - modifier = Modifier - .padding(innerPadding) - .fillMaxWidth(), - ) { - val guidelineTop = maxHeight * 0.15f - val guidelineStart = maxWidth * 0.1f - val guidelineEnd = maxWidth * 0.1f - ProfileContent( - profileViewModel = profileViewModel, - guidelineTop = guidelineTop, - uiState = uiState, - showImagePicker = showImagePicker, - nicknameColor = nicknameColor, - showDialog = showDialog, - guidelineStart = guidelineStart, - guidelineEnd = guidelineEnd, - updateProfile = updateProfile, - ) - - if (uiState.isShownNicknameDialog) { - NickNameDialog( - uiState = uiState, - editNickname = editNickname, - closeDialog = { showDialog(false) }, - updateNickname = { updateNickname(it) }, + showSnackBar = { errorMessage -> + coroutineScope.launch { + snackBarHostState.showSnackbar( + message = errorMessage, + duration = SnackbarDuration.Short, ) } - } - } + }, + ) } @Composable private fun HandleProfileEvents( profileViewModel: ProfileViewModel, onBack: () -> Unit, - nicknameColor: MutableState, - snackBarHostState: SnackbarHostState, + updateNicknameColor: (Color) -> Unit, + showSnackBar: (String) -> Unit, ) { LaunchedEffect(profileViewModel.event) { profileViewModel.event.collectLatest { event -> when (event) { is ProfileUiEvent.NavigateToBack -> onBack() - is ProfileUiEvent.ShowMessage -> snackBarHostState.showSnackbar( - message = event.message, - duration = SnackbarDuration.Short, - ) + is ProfileUiEvent.ShowMessage -> showSnackBar(event.message) - is ProfileUiEvent.UpdateProfileNickName -> nicknameColor.value = Blue1 + is ProfileUiEvent.UpdateProfileNickName -> updateNicknameColor(Blue1) } } } From 7df9dd44a8a43f0b96c36f7882908476290fe5fb Mon Sep 17 00:00:00 2001 From: dltkd1395 Date: Sat, 17 Feb 2024 22:19:45 +0900 Subject: [PATCH 16/47] =?UTF-8?q?refactor:=20ProfileContent=20=ED=8C=8C?= =?UTF-8?q?=EB=9D=BC=EB=AF=B8=ED=84=B0=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mindsync/ui/profile/ProfileScreen.kt | 40 +++++++++---------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/profile/ProfileScreen.kt b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/profile/ProfileScreen.kt index 7ef9b487..8fe610a4 100644 --- a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/profile/ProfileScreen.kt +++ b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/profile/ProfileScreen.kt @@ -89,6 +89,16 @@ fun ProfileScreen( } }, ) + + ProfileContent( + uiState = uiState, + showImagePicker = showImagePicker, + nicknameColor = nicknameColor, + showDialog = showDialog, + updateProfile = updateProfile, + updateNickname = updateNickname, + editNickname = editNickname, + ) } @Composable @@ -113,15 +123,15 @@ private fun HandleProfileEvents( @Composable private fun ProfileContent( - profileViewModel: ProfileViewModel, - guidelineTop: Dp, - uiState: ProfileUiState, - showImagePicker: () -> Unit, - nicknameColor: MutableState, - showDialog: (Boolean) -> Unit, - guidelineStart: Dp, - guidelineEnd: Dp, - updateProfile: (String) -> Unit, + onBack: () -> Unit = { }, + uiState: ProfileUiState = ProfileUiState(), + showImagePicker: () -> Unit = { }, + nicknameColor: Color = Gray4, + showDialog: (Boolean) -> Unit = { }, + updateProfile: (String) -> Unit = { }, + updateNickname: (CharSequence) -> Unit = { }, + editNickname: (CharSequence) -> Unit = { }, + snackBarHostState: SnackbarHostState = SnackbarHostState(), ) { ProfileTopAppBar { profileViewModel.onClickBack() } Column( @@ -293,16 +303,6 @@ private fun ModifyButton( @Composable private fun ProfileScreenPreview() { MindSyncTheme { - Surface(modifier = Modifier.fillMaxSize()) { - ProfileScreen( - viewModel(), - onBack = { /*TODO*/ }, - updateNickname = { }, - updateProfile = { }, - editNickname = { }, - showDialog = { }, - showImagePicker = { }, - ) - } + ProfileContent() } } From 593eae4710c5c0756f92f1362c55bdcfbb003ce4 Mon Sep 17 00:00:00 2001 From: dltkd1395 Date: Sat, 17 Feb 2024 22:20:25 +0900 Subject: [PATCH 17/47] =?UTF-8?q?refactor:=20Scaffold=EC=97=90=20topBar=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mindsync/ui/profile/ProfileScreen.kt | 24 +++++-------------- 1 file changed, 6 insertions(+), 18 deletions(-) diff --git a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/profile/ProfileScreen.kt b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/profile/ProfileScreen.kt index 8fe610a4..13a165f9 100644 --- a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/profile/ProfileScreen.kt +++ b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/profile/ProfileScreen.kt @@ -25,11 +25,9 @@ import androidx.compose.material3.Scaffold import androidx.compose.material3.SnackbarDuration import androidx.compose.material3.SnackbarHost import androidx.compose.material3.SnackbarHostState -import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.MutableState import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember @@ -45,10 +43,8 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.Preview -import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import androidx.lifecycle.compose.collectAsStateWithLifecycle -import androidx.lifecycle.viewmodel.compose.viewModel import boostcamp.and07.mindsync.R import boostcamp.and07.mindsync.ui.dialog.NickNameDialog import boostcamp.and07.mindsync.ui.theme.Blue1 @@ -133,20 +129,12 @@ private fun ProfileContent( editNickname: (CharSequence) -> Unit = { }, snackBarHostState: SnackbarHostState = SnackbarHostState(), ) { - ProfileTopAppBar { profileViewModel.onClickBack() } - Column( - modifier = Modifier - .fillMaxSize() - .padding(top = guidelineTop), - ) { - ProfileImage( - modifier = Modifier - .align(Alignment.CenterHorizontally), - imageUri = uiState.imageUri, - showImagePicker = showImagePicker, - ) - - Row( + Scaffold( + topBar = { ProfileTopAppBar(onBack) }, + snackbarHost = { + SnackbarHost(hostState = snackBarHostState) + }, + ) { innerPadding -> modifier = Modifier .padding(top = 16.dp), verticalAlignment = Alignment.CenterVertically, From f1c10ab8c8178911df8e18524cb9ae42fe86f000 Mon Sep 17 00:00:00 2001 From: dltkd1395 Date: Sat, 17 Feb 2024 22:22:44 +0900 Subject: [PATCH 18/47] =?UTF-8?q?refactor:=20Compose=EC=9D=98=20ProfileCon?= =?UTF-8?q?tent=20=EB=A9=94=EC=84=9C=EB=93=9C=EB=A5=BC=20=ED=86=B5?= =?UTF-8?q?=ED=95=9C=20=ED=94=84=EB=A1=9C=ED=95=84=20=EA=B4=80=EB=A0=A8=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EA=B4=80=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mindsync/ui/profile/ProfileScreen.kt | 80 +++++++++++++------ 1 file changed, 56 insertions(+), 24 deletions(-) diff --git a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/profile/ProfileScreen.kt b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/profile/ProfileScreen.kt index 13a165f9..c231ca14 100644 --- a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/profile/ProfileScreen.kt +++ b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/profile/ProfileScreen.kt @@ -135,34 +135,66 @@ private fun ProfileContent( SnackbarHost(hostState = snackBarHostState) }, ) { innerPadding -> + BoxWithConstraints( modifier = Modifier - .padding(top = 16.dp), - verticalAlignment = Alignment.CenterVertically, + .padding(innerPadding) + .fillMaxWidth(), ) { - Spacer(modifier = Modifier.weight(1f)) - Nickname( - modifier = Modifier.weight(1f), - nickname = uiState.nickname, - nicknameColor = nicknameColor.value, - ) - NicknameEditButton( - modifier = Modifier.weight(0.2f), - showDialog = showDialog, - ) - Spacer(modifier = Modifier.weight(0.8f)) - } + val guidelineTop = maxHeight * 0.15f + val guidelineStart = maxWidth * 0.1f + val guidelineEnd = maxWidth * 0.1f + Column( + modifier = Modifier + .fillMaxSize() + .padding(top = guidelineTop), + ) { + ProfileImage( + modifier = Modifier + .align(Alignment.CenterHorizontally), + imageUri = uiState.imageUri, + showImagePicker = showImagePicker, + ) - ModifyButton( - modifier = Modifier - .padding( - top = 30.dp, - start = guidelineStart, - end = guidelineEnd, + Row( + modifier = Modifier + .padding(top = 16.dp), + verticalAlignment = Alignment.CenterVertically, + ) { + Spacer(modifier = Modifier.weight(1f)) + Nickname( + modifier = Modifier.weight(1f), + nickname = uiState.nickname, + nicknameColor = nicknameColor, + ) + NicknameEditButton( + modifier = Modifier.weight(0.2f), + showDialog = showDialog, + ) + Spacer(modifier = Modifier.weight(0.8f)) + } + + ModifyButton( + modifier = Modifier + .padding( + top = 30.dp, + start = guidelineStart, + end = guidelineEnd, + ) + .fillMaxWidth(), + profileImageName = stringResource(id = R.string.profile_image_name), + updateProfile = updateProfile, + isModify = uiState.isModify, ) - .fillMaxWidth(), - profileImageName = stringResource(id = R.string.profile_image_name), - updateProfile = updateProfile, - isModify = uiState.isModify, + } + } + } + + if (uiState.isShownNicknameDialog) { + NickNameDialog( + uiState = uiState, + editNickname = editNickname, + closeDialog = { showDialog(false) }, + updateNickname = { updateNickname(it) }, ) } } From df92c538b17becad618f132b54b85a2f6d8efebf Mon Sep 17 00:00:00 2001 From: dltkd1395 Date: Sat, 9 Mar 2024 18:44:06 +0900 Subject: [PATCH 19/47] =?UTF-8?q?feat(#327):=20Preview=20=EC=BB=B4?= =?UTF-8?q?=ED=8F=AC=EC=A0=80=EB=B8=94=20=ED=95=A8=EC=88=98=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../boostcamp/and07/mindsync/ui/components/MSPreview.kt | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 AOS/app/src/main/java/boostcamp/and07/mindsync/ui/components/MSPreview.kt diff --git a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/components/MSPreview.kt b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/components/MSPreview.kt new file mode 100644 index 00000000..1fb64bc7 --- /dev/null +++ b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/components/MSPreview.kt @@ -0,0 +1,9 @@ +package boostcamp.and07.mindsync.ui.components + +import androidx.compose.runtime.Composable +import boostcamp.and07.mindsync.ui.theme.MindSyncTheme + +@Composable +fun MSPreview(isDarkTheme: Boolean = false, content: @Composable () -> Unit) { + MindSyncTheme(darkTheme = isDarkTheme, content = content) +} From b9029e7444800bf764de395fa6f7662bc5bc43f2 Mon Sep 17 00:00:00 2001 From: dltkd1395 Date: Sat, 9 Mar 2024 18:44:35 +0900 Subject: [PATCH 20/47] =?UTF-8?q?feat(#327):=20Custom=20Button=20=EC=BB=B4?= =?UTF-8?q?=ED=8F=AC=EC=A0=80=EB=B8=94=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../and07/mindsync/ui/components/MSButton.kt | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 AOS/app/src/main/java/boostcamp/and07/mindsync/ui/components/MSButton.kt diff --git a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/components/MSButton.kt b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/components/MSButton.kt new file mode 100644 index 00000000..8ffc1f5d --- /dev/null +++ b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/components/MSButton.kt @@ -0,0 +1,52 @@ +package boostcamp.and07.mindsync.ui.components + +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.material3.Button +import androidx.compose.material3.ButtonDefaults +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.Shape +import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.tooling.preview.Preview +import boostcamp.and07.mindsync.ui.theme.Gray3 + +@Composable +fun MSButton( + modifier: Modifier = Modifier, + text: String = "", + onClick: () -> Unit, + textStyle: TextStyle = TextStyle.Default, + backgroundColor: Color = MaterialTheme.colorScheme.primary, + fontColor: Color = Color.Unspecified, + shape: Shape = CircleShape, + disableColor: Color = Gray3, + isEnabled: Boolean = false, +) { + Button( + modifier = modifier, + onClick = onClick, + shape = shape, + colors = ButtonDefaults.buttonColors( + containerColor = backgroundColor, + disabledContainerColor = disableColor, + ), + enabled = isEnabled, + ) { + Text( + text = text, + style = textStyle, + color = fontColor, + ) + } +} + +@Preview +@Composable +fun ButtonPreview() = MSPreview { + MSButton( + onClick = { }, + ) +} From 3977784b133677d3bcc3de25ed25851b26bdc3c1 Mon Sep 17 00:00:00 2001 From: dltkd1395 Date: Sat, 9 Mar 2024 18:45:02 +0900 Subject: [PATCH 21/47] =?UTF-8?q?feat(#327):=20BackIconButton=20=EC=BB=B4?= =?UTF-8?q?=ED=8F=AC=EC=A0=80=EB=B8=94=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mindsync/ui/components/MSIconButton.kt | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 AOS/app/src/main/java/boostcamp/and07/mindsync/ui/components/MSIconButton.kt diff --git a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/components/MSIconButton.kt b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/components/MSIconButton.kt new file mode 100644 index 00000000..db6f74ca --- /dev/null +++ b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/components/MSIconButton.kt @@ -0,0 +1,27 @@ +package boostcamp.and07.mindsync.ui.components + +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.res.painterResource +import boostcamp.and07.mindsync.R + +@Composable +fun BackIconButton( + modifier: Modifier = Modifier, + onClick: () -> Unit, + iconColor: Color = Color.Black, +) { + IconButton( + modifier = modifier, + onClick = onClick, + ) { + Icon( + painter = painterResource(id = R.drawable.ic_back), + contentDescription = null, + tint = iconColor, + ) + } +} From ffcadfcb0375cc9be8f6f35bd7c0edd3a11b663b Mon Sep 17 00:00:00 2001 From: dltkd1395 Date: Sat, 9 Mar 2024 18:45:26 +0900 Subject: [PATCH 22/47] =?UTF-8?q?feat(#327):=20MenuIconButton=20=EC=BB=B4?= =?UTF-8?q?=ED=8F=AC=EC=A0=80=EB=B8=94=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mindsync/ui/components/MSIconButton.kt | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/components/MSIconButton.kt b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/components/MSIconButton.kt index db6f74ca..6d80f048 100644 --- a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/components/MSIconButton.kt +++ b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/components/MSIconButton.kt @@ -25,3 +25,21 @@ fun BackIconButton( ) } } + +@Composable +fun MenuIconButton( + modifier: Modifier = Modifier, + onClick: () -> Unit, + iconColor: Color = Color.Black, +) { + IconButton( + modifier = modifier, + onClick = onClick, + ) { + Icon( + painter = painterResource(id = R.drawable.ic_menu), + contentDescription = null, + tint = iconColor, + ) + } +} From 1da17c066092cad7135a8d9bde6732c69719b335 Mon Sep 17 00:00:00 2001 From: dltkd1395 Date: Sat, 9 Mar 2024 18:50:30 +0900 Subject: [PATCH 23/47] =?UTF-8?q?feat(#327):=20CircleAddIconButton=20?= =?UTF-8?q?=EC=BB=B4=ED=8F=AC=EC=A0=80=EB=B8=94=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mindsync/ui/components/MSIconButton.kt | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/components/MSIconButton.kt b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/components/MSIconButton.kt index 6d80f048..986fcb90 100644 --- a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/components/MSIconButton.kt +++ b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/components/MSIconButton.kt @@ -43,3 +43,21 @@ fun MenuIconButton( ) } } + +@Composable +fun CircleAddIconButton( + modifier: Modifier = Modifier, + onClick: () -> Unit, + iconColor: Color = Color.Black, +) { + IconButton( + modifier = modifier, + onClick = onClick, + ) { + Icon( + painter = painterResource(id = R.drawable.ic_add), + contentDescription = null, + tint = iconColor, + ) + } +} From 1720595fa8171dcf439dff99cd2f32bf0bc821fa Mon Sep 17 00:00:00 2001 From: dltkd1395 Date: Sat, 9 Mar 2024 18:50:44 +0900 Subject: [PATCH 24/47] =?UTF-8?q?feat(#327):=20CopyIconButton=20=EC=BB=B4?= =?UTF-8?q?=ED=8F=AC=EC=A0=80=EB=B8=94=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mindsync/ui/components/MSIconButton.kt | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/components/MSIconButton.kt b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/components/MSIconButton.kt index 986fcb90..1b4f33cd 100644 --- a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/components/MSIconButton.kt +++ b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/components/MSIconButton.kt @@ -61,3 +61,21 @@ fun CircleAddIconButton( ) } } + +@Composable +fun CopyIconButton( + modifier: Modifier = Modifier, + onClick: () -> Unit, + iconColor: Color = Color.Black, +) { + IconButton( + modifier = modifier, + onClick = onClick, + ) { + Icon( + painter = painterResource(id = R.drawable.ic_copy), + contentDescription = null, + tint = iconColor, + ) + } +} From e1c03d8dfae1414c6719cd2673dd4512cb45ad2b Mon Sep 17 00:00:00 2001 From: dltkd1395 Date: Sat, 9 Mar 2024 18:50:56 +0900 Subject: [PATCH 25/47] =?UTF-8?q?feat(#327):=20RemoveconButton=20=EC=BB=B4?= =?UTF-8?q?=ED=8F=AC=EC=A0=80=EB=B8=94=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mindsync/ui/components/MSIconButton.kt | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/components/MSIconButton.kt b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/components/MSIconButton.kt index 1b4f33cd..ff366e1d 100644 --- a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/components/MSIconButton.kt +++ b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/components/MSIconButton.kt @@ -79,3 +79,21 @@ fun CopyIconButton( ) } } + +@Composable +fun RemoveIconButton( + modifier: Modifier = Modifier, + onClick: () -> Unit, + iconColor: Color = Color.Black, +) { + IconButton( + modifier = modifier, + onClick = onClick, + ) { + Icon( + painter = painterResource(id = R.drawable.ic_remove), + contentDescription = null, + tint = iconColor, + ) + } +} From fe9d9c071deac2e8374da79039c16b4812c264a3 Mon Sep 17 00:00:00 2001 From: dltkd1395 Date: Sat, 9 Mar 2024 18:51:12 +0900 Subject: [PATCH 26/47] =?UTF-8?q?feat(#327):=20RefreshconButton=20?= =?UTF-8?q?=EC=BB=B4=ED=8F=AC=EC=A0=80=EB=B8=94=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mindsync/ui/components/MSIconButton.kt | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/components/MSIconButton.kt b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/components/MSIconButton.kt index ff366e1d..0c050613 100644 --- a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/components/MSIconButton.kt +++ b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/components/MSIconButton.kt @@ -97,3 +97,21 @@ fun RemoveIconButton( ) } } + +@Composable +fun RefreshIconButton( + modifier: Modifier = Modifier, + onClick: () -> Unit, + iconColor: Color = Color.Black, +) { + IconButton( + modifier = modifier, + onClick = onClick, + ) { + Icon( + painter = painterResource(id = R.drawable.ic_refresh_board), + contentDescription = null, + tint = iconColor, + ) + } +} From ab02c2ba892d93f2b5ff9ee0fda2cdd5f72e09a8 Mon Sep 17 00:00:00 2001 From: dltkd1395 Date: Sat, 9 Mar 2024 18:51:42 +0900 Subject: [PATCH 27/47] =?UTF-8?q?feat(#327):=20EditIconButton=20=EC=BB=B4?= =?UTF-8?q?=ED=8F=AC=EC=A0=80=EB=B8=94=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mindsync/ui/components/MSIconButton.kt | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/components/MSIconButton.kt b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/components/MSIconButton.kt index 0c050613..31877e65 100644 --- a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/components/MSIconButton.kt +++ b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/components/MSIconButton.kt @@ -115,3 +115,21 @@ fun RefreshIconButton( ) } } + +@Composable +fun EditIconButton( + modifier: Modifier = Modifier, + onClick: () -> Unit, + iconColor: Color = Color.Black, +) { + IconButton( + modifier = modifier, + onClick = onClick, + ) { + Icon( + painter = painterResource(id = R.drawable.ic_outlined_drawing), + contentDescription = null, + tint = iconColor, + ) + } +} From ab8880cb2424d014ca35533c745aacfc56ce389f Mon Sep 17 00:00:00 2001 From: dltkd1395 Date: Sat, 9 Mar 2024 18:51:54 +0900 Subject: [PATCH 28/47] =?UTF-8?q?feat(#327):=20FoldIconButton=20=EC=BB=B4?= =?UTF-8?q?=ED=8F=AC=EC=A0=80=EB=B8=94=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mindsync/ui/components/MSIconButton.kt | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/components/MSIconButton.kt b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/components/MSIconButton.kt index 31877e65..24fac517 100644 --- a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/components/MSIconButton.kt +++ b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/components/MSIconButton.kt @@ -133,3 +133,21 @@ fun EditIconButton( ) } } + +@Composable +fun FoldIconButton( + modifier: Modifier = Modifier, + onClick: () -> Unit, + iconColor: Color = Color.Black, +) { + IconButton( + modifier = modifier, + onClick = onClick, + ) { + Icon( + painter = painterResource(id = R.drawable.ic_fold), + contentDescription = null, + tint = iconColor, + ) + } +} From caf0f609f3b352aa5dbd44707691d9a557f5a825 Mon Sep 17 00:00:00 2001 From: dltkd1395 Date: Sat, 9 Mar 2024 18:52:32 +0900 Subject: [PATCH 29/47] =?UTF-8?q?feat(#327):=20RestoreIconButton=20?= =?UTF-8?q?=EC=BB=B4=ED=8F=AC=EC=A0=80=EB=B8=94=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mindsync/ui/components/MSIconButton.kt | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/components/MSIconButton.kt b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/components/MSIconButton.kt index 24fac517..e80b6636 100644 --- a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/components/MSIconButton.kt +++ b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/components/MSIconButton.kt @@ -151,3 +151,21 @@ fun FoldIconButton( ) } } + +@Composable +fun RestoreIconButton( + modifier: Modifier = Modifier, + onClick: () -> Unit, + iconColor: Color = Color.Black, +) { + IconButton( + modifier = modifier, + onClick = onClick, + ) { + Icon( + painter = painterResource(id = R.drawable.ic_restore_board), + contentDescription = null, + tint = iconColor, + ) + } +} \ No newline at end of file From ae45f7b45c317f5b5445a04e0547946cb9989a96 Mon Sep 17 00:00:00 2001 From: dltkd1395 Date: Sat, 9 Mar 2024 18:53:04 +0900 Subject: [PATCH 30/47] =?UTF-8?q?feat(#327):=20RecycleBinRestoreFloatingBu?= =?UTF-8?q?tton=20=EC=BB=B4=ED=8F=AC=EC=A0=80=EB=B8=94=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ui/components/MSFloatingButton.kt | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 AOS/app/src/main/java/boostcamp/and07/mindsync/ui/components/MSFloatingButton.kt diff --git a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/components/MSFloatingButton.kt b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/components/MSFloatingButton.kt new file mode 100644 index 00000000..02b52b67 --- /dev/null +++ b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/components/MSFloatingButton.kt @@ -0,0 +1,27 @@ +package boostcamp.and07.mindsync.ui.components + +import androidx.compose.material3.FloatingActionButton +import androidx.compose.material3.Icon +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.res.painterResource +import boostcamp.and07.mindsync.R + +@Composable +fun RecycleBinRestoreFloatingButton( + modifier: Modifier = Modifier, + onClick: () -> Unit, + backgroundColor: Color = Color(0xFFD4BFF9), +) { + FloatingActionButton( + modifier = modifier, + onClick = onClick, + containerColor = backgroundColor, + ) { + Icon( + painter = painterResource(id = R.drawable.ic_restore_board), + contentDescription = null, + ) + } +} From 8730f299e4feae1ac51edf288367642f63075df4 Mon Sep 17 00:00:00 2001 From: dltkd1395 Date: Sat, 9 Mar 2024 18:53:25 +0900 Subject: [PATCH 31/47] =?UTF-8?q?feat(#327):=20RefreshFloatingButton=20?= =?UTF-8?q?=EC=BB=B4=ED=8F=AC=EC=A0=80=EB=B8=94=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mindsync/ui/components/MSFloatingButton.kt | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/components/MSFloatingButton.kt b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/components/MSFloatingButton.kt index 02b52b67..ae20a565 100644 --- a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/components/MSFloatingButton.kt +++ b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/components/MSFloatingButton.kt @@ -25,3 +25,21 @@ fun RecycleBinRestoreFloatingButton( ) } } + +@Composable +fun RefreshFloatingButton( + modifier: Modifier = Modifier, + onClick: () -> Unit, + backgroundColor: Color = Color(0xFFD4BFF9), +) { + FloatingActionButton( + modifier = modifier, + onClick = onClick, + containerColor = backgroundColor, + ) { + Icon( + painter = painterResource(id = R.drawable.ic_restore_board), + contentDescription = null, + ) + } +} \ No newline at end of file From f98259fd6e0a0a7063073663952c35ee8470ef0a Mon Sep 17 00:00:00 2001 From: dltkd1395 Date: Sat, 9 Mar 2024 18:54:49 +0900 Subject: [PATCH 32/47] =?UTF-8?q?refactor(#327):=20BackIconButton=20Compos?= =?UTF-8?q?able=EB=A1=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../and07/mindsync/ui/profile/ProfileScreen.kt | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/profile/ProfileScreen.kt b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/profile/ProfileScreen.kt index c231ca14..c75175c5 100644 --- a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/profile/ProfileScreen.kt +++ b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/profile/ProfileScreen.kt @@ -46,6 +46,7 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.lifecycle.compose.collectAsStateWithLifecycle import boostcamp.and07.mindsync.R +import boostcamp.and07.mindsync.ui.components.BackIconButton import boostcamp.and07.mindsync.ui.dialog.NickNameDialog import boostcamp.and07.mindsync.ui.theme.Blue1 import boostcamp.and07.mindsync.ui.theme.Gray3 @@ -206,14 +207,9 @@ private fun ProfileTopAppBar( Row( verticalAlignment = Alignment.CenterVertically, ) { - IconButton( + BackIconButton( onClick = { onBack() }, - ) { - Icon( - painter = painterResource(id = R.drawable.ic_back), - contentDescription = null, - ) - } + ) Text( text = stringResource(id = R.string.profile_my_page), style = MaterialTheme.typography.displayMedium, From 8ed324edd4bd1ef41083ea4a765190f8a769d6bd Mon Sep 17 00:00:00 2001 From: dltkd1395 Date: Sat, 9 Mar 2024 18:55:28 +0900 Subject: [PATCH 33/47] =?UTF-8?q?refactor(#327):=20EditIconButton=20Compos?= =?UTF-8?q?able=EB=A1=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../and07/mindsync/ui/profile/ProfileScreen.kt | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/profile/ProfileScreen.kt b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/profile/ProfileScreen.kt index c75175c5..35ba77e3 100644 --- a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/profile/ProfileScreen.kt +++ b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/profile/ProfileScreen.kt @@ -47,6 +47,7 @@ import androidx.compose.ui.unit.dp import androidx.lifecycle.compose.collectAsStateWithLifecycle import boostcamp.and07.mindsync.R import boostcamp.and07.mindsync.ui.components.BackIconButton +import boostcamp.and07.mindsync.ui.components.EditIconButton import boostcamp.and07.mindsync.ui.dialog.NickNameDialog import boostcamp.and07.mindsync.ui.theme.Blue1 import boostcamp.and07.mindsync.ui.theme.Gray3 @@ -280,15 +281,10 @@ private fun NicknameEditButton( modifier: Modifier = Modifier, showDialog: (Boolean) -> Unit, ) { - IconButton( + EditIconButton( modifier = modifier, onClick = { showDialog(true) }, - ) { - Icon( - painter = painterResource(id = R.drawable.ic_outlined_drawing), - contentDescription = null, - ) - } + ) } @Composable From 83839ec4544aa8d7d7154ddbc55e33941bfa24d8 Mon Sep 17 00:00:00 2001 From: dltkd1395 Date: Sat, 9 Mar 2024 18:56:03 +0900 Subject: [PATCH 34/47] =?UTF-8?q?refactor(#327):=20MSButton=20Composable?= =?UTF-8?q?=EB=A1=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mindsync/ui/profile/ProfileScreen.kt | 28 ++++++------------- 1 file changed, 9 insertions(+), 19 deletions(-) diff --git a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/profile/ProfileScreen.kt b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/profile/ProfileScreen.kt index 35ba77e3..4ca50b98 100644 --- a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/profile/ProfileScreen.kt +++ b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/profile/ProfileScreen.kt @@ -16,10 +16,6 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material3.Button -import androidx.compose.material3.ButtonDefaults -import androidx.compose.material3.Icon -import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Scaffold import androidx.compose.material3.SnackbarDuration @@ -48,9 +44,9 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle import boostcamp.and07.mindsync.R import boostcamp.and07.mindsync.ui.components.BackIconButton import boostcamp.and07.mindsync.ui.components.EditIconButton +import boostcamp.and07.mindsync.ui.components.MSButton import boostcamp.and07.mindsync.ui.dialog.NickNameDialog import boostcamp.and07.mindsync.ui.theme.Blue1 -import boostcamp.and07.mindsync.ui.theme.Gray3 import boostcamp.and07.mindsync.ui.theme.Gray4 import boostcamp.and07.mindsync.ui.theme.MindSyncTheme import boostcamp.and07.mindsync.ui.theme.Red2 @@ -294,21 +290,15 @@ private fun ModifyButton( updateProfile: (String) -> Unit, isModify: Boolean, ) { - Button( - onClick = { updateProfile(profileImageName) }, + MSButton( modifier = modifier, - colors = ButtonDefaults.buttonColors( - containerColor = Red2, - disabledContainerColor = Gray3, - ), - enabled = isModify, - ) { - Text( - text = stringResource(id = R.string.profile_modify), - style = MaterialTheme.typography.displaySmall, - color = Color.White, - ) - } + onClick = { updateProfile(profileImageName) }, + backgroundColor = Red2, + isEnabled = isModify, + text = stringResource(id = R.string.profile_modify), + textStyle = MaterialTheme.typography.displaySmall, + fontColor = Color.White, + ) } @Preview From 91631d92a2a5bdbb79c8d89ad4d8a7339b94d2ed Mon Sep 17 00:00:00 2001 From: dltkd1395 Date: Thu, 28 Mar 2024 13:02:27 +0900 Subject: [PATCH 35/47] =?UTF-8?q?feat(#328):=20rootNode=EC=97=90=20?= =?UTF-8?q?=EB=94=B0=EB=9D=BC=20=EC=9C=84=EC=B9=98=20=EC=A1=B0=EC=A0=95?= =?UTF-8?q?=ED=95=98=EA=B3=A0=20tree=20rootNode=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../boostcamp/and07/mindsync/data/model/Node.kt | 16 +++++++++++++--- .../and07/mindsync/data/model/NodePath.kt | 17 +++++++++++++++-- .../ui/view/layout/MindMapRightLayoutManager.kt | 14 ++++++-------- 3 files changed, 34 insertions(+), 13 deletions(-) diff --git a/AOS/app/src/main/java/boostcamp/and07/mindsync/data/model/Node.kt b/AOS/app/src/main/java/boostcamp/and07/mindsync/data/model/Node.kt index 3076c7d1..47c78fe6 100644 --- a/AOS/app/src/main/java/boostcamp/and07/mindsync/data/model/Node.kt +++ b/AOS/app/src/main/java/boostcamp/and07/mindsync/data/model/Node.kt @@ -10,7 +10,9 @@ sealed class Node( open val path: NodePath, open val description: String, open val children: List, -) : java.io.Serializable +) : java.io.Serializable { + abstract fun adjustPosition(horizontalSpacing: Dp, totalHeight: Dp): Node +} data class CircleNode( override val id: String, @@ -18,7 +20,11 @@ data class CircleNode( override val path: CirclePath = CirclePath(Dp(0f), Dp(0f), Dp(0f)), override val description: String, override val children: List, -) : Node(id, parentId, path, description, children) +) : Node(id, parentId, path, description, children) { + override fun adjustPosition(horizontalSpacing: Dp, totalHeight: Dp): Node { + return this.copy(path = path.adjustPath(horizontalSpacing, totalHeight)) + } +} data class RectangleNode( override val id: String, @@ -26,4 +32,8 @@ data class RectangleNode( override val path: RectanglePath = RectanglePath(Dp(0f), Dp(0f), Dp(0f), Dp(0f)), override val description: String, override val children: List, -) : Node(id, parentId, path, description, children) +) : Node(id, parentId, path, description, children) { + override fun adjustPosition(horizontalSpacing: Dp, totalHeight: Dp): Node { + return this.copy(path = path.adjustPath(horizontalSpacing, totalHeight)) + } +} diff --git a/AOS/app/src/main/java/boostcamp/and07/mindsync/data/model/NodePath.kt b/AOS/app/src/main/java/boostcamp/and07/mindsync/data/model/NodePath.kt index e6199f7e..04895c49 100644 --- a/AOS/app/src/main/java/boostcamp/and07/mindsync/data/model/NodePath.kt +++ b/AOS/app/src/main/java/boostcamp/and07/mindsync/data/model/NodePath.kt @@ -4,7 +4,12 @@ import boostcamp.and07.mindsync.ui.util.Dp import kotlinx.serialization.Serializable @Serializable -sealed class NodePath(open val centerX: Dp, open val centerY: Dp) +sealed class NodePath(open val centerX: Dp, open val centerY: Dp) { + abstract fun adjustPath(horizontalSpacing: Dp, totalHeight: Dp): NodePath + protected fun calculateNewCenterY(horizontalSpacing: Dp, totalHeight: Dp): Dp { + return centerY + totalHeight / 2 + horizontalSpacing + } +} data class RectanglePath( override val centerX: Dp, @@ -19,10 +24,18 @@ data class RectanglePath( fun rightX() = centerX + (width / (Dp(2f))) fun bottomY() = centerY + (height / (Dp(2f))) + + override fun adjustPath(horizontalSpacing: Dp, totalHeight: Dp): RectanglePath { + return this.copy(centerY = calculateNewCenterY(horizontalSpacing, totalHeight)) + } } data class CirclePath( override val centerX: Dp, override val centerY: Dp, val radius: Dp, -) : NodePath(centerX, centerY) +) : NodePath(centerX, centerY) { + override fun adjustPath(horizontalSpacing: Dp, totalHeight: Dp): CirclePath { + return this.copy(centerY = calculateNewCenterY(horizontalSpacing, totalHeight)) + } +} diff --git a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/view/layout/MindMapRightLayoutManager.kt b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/view/layout/MindMapRightLayoutManager.kt index cc965775..b3d4b4bd 100644 --- a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/view/layout/MindMapRightLayoutManager.kt +++ b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/view/layout/MindMapRightLayoutManager.kt @@ -10,20 +10,18 @@ class MindMapRightLayoutManager { private val horizontalSpacing = Dp(50f) private val verticalSpacing = Dp(50f) - fun arrangeNode(tree: Tree) { - val root = tree.getRootNode() + fun arrangeNode(tree: Tree, rootNode: Node? = null) { + val root = rootNode ?: tree.getRootNode() val totalHeight = measureChildHeight(root, tree) val newHead = if (root.path.centerX.dpVal <= (totalHeight / 2).dpVal) { - val newPath = - root.path.copy( - centerY = totalHeight / 2 + horizontalSpacing, - ) - root.copy(path = newPath) + root.adjustPosition(horizontalSpacing, totalHeight) } else { root } - tree.setRootNode(newHead) + if (rootNode == null) { + tree.setRootNode(newHead as CircleNode) + } recurArrangeNode(newHead, tree) } From e161489fc4fc9f171c560a62866613926a03700e Mon Sep 17 00:00:00 2001 From: dltkd1395 Date: Thu, 28 Mar 2024 13:03:43 +0900 Subject: [PATCH 36/47] =?UTF-8?q?feat(#328):=20=EC=84=A0=ED=83=9D=ED=95=9C?= =?UTF-8?q?=20=EB=85=B8=EB=93=9C=EC=99=80=20=EC=9E=90=EC=8B=9D=EB=93=A4?= =?UTF-8?q?=EC=9D=B4=20=EA=B5=AC=EC=A1=B0=20=EC=9C=A0=EC=A7=80=ED=95=98?= =?UTF-8?q?=EB=A9=B0=20=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../and07/mindsync/ui/view/NodeView.kt | 40 +++---------------- 1 file changed, 6 insertions(+), 34 deletions(-) diff --git a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/view/NodeView.kt b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/view/NodeView.kt index fa9b7d8a..f666f7b7 100644 --- a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/view/NodeView.kt +++ b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/view/NodeView.kt @@ -11,7 +11,6 @@ import boostcamp.and07.mindsync.R import boostcamp.and07.mindsync.data.model.CircleNode import boostcamp.and07.mindsync.data.model.Node import boostcamp.and07.mindsync.data.model.RectangleNode -import boostcamp.and07.mindsync.data.model.RectanglePath import boostcamp.and07.mindsync.data.model.Tree import boostcamp.and07.mindsync.ui.util.Dp import boostcamp.and07.mindsync.ui.util.Px @@ -21,7 +20,8 @@ import boostcamp.and07.mindsync.ui.view.layout.MindMapRightLayoutManager import boostcamp.and07.mindsync.ui.view.model.DrawInfo class NodeView( - val mindMapContainer: MindMapContainer, + private val lineView: LineView, + private val mindMapContainer: MindMapContainer, context: Context, attrs: AttributeSet?, ) : View(context, attrs) { @@ -77,6 +77,7 @@ class NodeView( } } attachedNode = null + lineView.updateTree(tree) invalidate() } } @@ -127,8 +128,10 @@ class NodeView( mindMapContainer.selectNode?.let { selectedNode -> if (selectedNode is CircleNode) return traverseMovedNode(tree.getRootNode(), selectedNode, dx, dy) + mindMapContainer.update(tree) } + lineView.updateTree(tree) invalidate() } @@ -142,43 +145,14 @@ class NodeView( val centerX = Dp(Px(dx).toDp(context)) val centerY = Dp(Px(dy).toDp(context)) tree.updateNode(target.id, target.description, target.children, centerX, centerY) - - target.children.forEach { nodeId -> - val childNode = tree.getNode(nodeId) - traverseChildNode( - target, - childNode, - target.path.centerX + (target.path as RectanglePath).width / 2 + DEFAULT_SPACING_VALUE, - ) - } } + rightLayoutManager.arrangeNode(tree, target as RectangleNode) node.children.forEach { nodeId -> traverseMovedNode(tree.getNode(nodeId), target, dx, dy) } } - private fun traverseChildNode( - target: Node, - node: Node, - childNodeSpacing: Dp, - ) { - tree.updateNode( - node.id, - node.description, - node.children, - childNodeSpacing, - target.path.centerY, - ) - node.children.forEach { nodeId -> - traverseChildNode( - node, - tree.getNode(nodeId), - childNodeSpacing + CHILD_NODE_SPACING_VALUE, - ) - } - } - fun updateTree(tree: Tree) { this.tree = tree invalidate() @@ -390,8 +364,6 @@ class NodeView( } companion object { - private const val DEFAULT_SPACING_VALUE = 50f - private const val CHILD_NODE_SPACING_VALUE = 7f private const val ATTACH_CIRCLE_NODE_RANGE_VALUE = 15f private const val ROUNDED_CORNER_RADIUS = 8f } From 8b15274970b9e8968ab6452189857d626d1c8d3a Mon Sep 17 00:00:00 2001 From: dltkd1395 Date: Thu, 28 Mar 2024 13:05:20 +0900 Subject: [PATCH 37/47] =?UTF-8?q?feat(#328):=20=EC=9B=80=EC=A7=81=EC=9E=84?= =?UTF-8?q?=20=EB=AA=A8=EB=93=9C=EC=97=90=EC=84=9C=20=EC=84=A0=ED=83=9D?= =?UTF-8?q?=EB=90=9C=20=EB=85=B8=EB=93=9C=EC=99=80=20=EB=B6=80=EB=AA=A8=20?= =?UTF-8?q?=EB=85=B8=EB=93=9C=20=EA=B0=84=EC=9D=98=20=EC=97=B0=EA=B2=B0?= =?UTF-8?q?=EC=84=A0=20=ED=95=B4=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../boostcamp/and07/mindsync/ui/view/LineView.kt | 16 ++++++++++++++-- .../and07/mindsync/ui/view/ZoomLayout.kt | 4 ++-- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/view/LineView.kt b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/view/LineView.kt index ef571024..14a5d7c3 100644 --- a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/view/LineView.kt +++ b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/view/LineView.kt @@ -15,13 +15,13 @@ import boostcamp.and07.mindsync.ui.util.toPx import boostcamp.and07.mindsync.ui.view.model.DrawInfo class LineView constructor( + private val mindMapContainer: MindMapContainer, context: Context, attrs: AttributeSet? = null, ) : View(context, attrs) { private val drawInfo = DrawInfo(context) private val path = Path() private lateinit var tree: Tree - private val paint = Paint() override fun onDraw(canvas: Canvas) { super.onDraw(canvas) @@ -64,6 +64,7 @@ class LineView constructor( else -> drawInfo.linePaint } + val startX = getNodeEdgeX(fromNode, true) val startY = fromNode.path.centerY.toPx(context) val endX = getNodeEdgeX(toNode, false) @@ -75,7 +76,18 @@ class LineView constructor( moveTo(startX, startY) cubicTo(midX, startY, midX, endY, endX, endY) } - canvas.drawPath(path, linePaint) + drawPathConditionally(toNode, canvas, path, linePaint) + } + + private fun drawPathConditionally( + toNode: Node, + canvas: Canvas, + path: Path, + linePaint: Paint, + ) { + if (!mindMapContainer.isMoving || mindMapContainer.selectNode?.id != toNode.id) { + canvas.drawPath(path, linePaint) + } } private fun getNodeEdgeX( diff --git a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/view/ZoomLayout.kt b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/view/ZoomLayout.kt index f8a8e84c..08b28d88 100644 --- a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/view/ZoomLayout.kt +++ b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/view/ZoomLayout.kt @@ -38,8 +38,8 @@ class ZoomLayout(context: Context, attrs: AttributeSet? = null) : FrameLayout(co lateinit var mindMapContainer: MindMapContainer fun initializeZoomLayout() { - nodeView = NodeView(mindMapContainer, context, attrs = null) - lineView = LineView(context, attrs = null) + lineView = LineView(mindMapContainer, context, attrs = null) + nodeView = NodeView(lineView, mindMapContainer, context, attrs = null) addView(lineView) addView(nodeView) } From 67cb911dfee0bbfc51bbf7f3eab0401e2f33fdee Mon Sep 17 00:00:00 2001 From: dltkd1395 Date: Thu, 28 Mar 2024 13:36:21 +0900 Subject: [PATCH 38/47] =?UTF-8?q?refactor(#328):=20uiMode=EC=97=90=20?= =?UTF-8?q?=EB=94=B0=EB=A5=B8=20line=20paint=20=ED=95=A8=EC=88=98=20?= =?UTF-8?q?=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/boostcamp/and07/mindsync/ui/view/LineView.kt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/view/LineView.kt b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/view/LineView.kt index 14a5d7c3..07704941 100644 --- a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/view/LineView.kt +++ b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/view/LineView.kt @@ -57,6 +57,7 @@ class LineView constructor( Configuration.UI_MODE_NIGHT_YES -> { drawInfo.darkModeLinePaint } + val linePaint = getLinePaintForMode() Configuration.UI_MODE_NIGHT_NO -> { drawInfo.linePaint @@ -77,6 +78,12 @@ class LineView constructor( cubicTo(midX, startY, midX, endY, endX, endY) } drawPathConditionally(toNode, canvas, path, linePaint) + + private fun getLinePaintForMode(): Paint { + return when (context.resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK) { + Configuration.UI_MODE_NIGHT_YES -> drawInfo.darkModeLinePaint + else -> drawInfo.linePaint + } } private fun drawPathConditionally( From c1e97d350c3b29282f14f48453ba6f77bac10b76 Mon Sep 17 00:00:00 2001 From: dltkd1395 Date: Thu, 28 Mar 2024 13:37:33 +0900 Subject: [PATCH 39/47] =?UTF-8?q?refactor(#328):=20path=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1=20=ED=95=A8=EC=88=98=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../and07/mindsync/ui/view/LineView.kt | 31 ++++++++----------- 1 file changed, 13 insertions(+), 18 deletions(-) diff --git a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/view/LineView.kt b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/view/LineView.kt index 07704941..507d2a32 100644 --- a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/view/LineView.kt +++ b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/view/LineView.kt @@ -52,32 +52,27 @@ class LineView constructor( toNode: Node, canvas: Canvas, ) { - val linePaint = - when (context.resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK) { - Configuration.UI_MODE_NIGHT_YES -> { - drawInfo.darkModeLinePaint - } val linePaint = getLinePaintForMode() - Configuration.UI_MODE_NIGHT_NO -> { - drawInfo.linePaint - } - - else -> drawInfo.linePaint - } + val path = createPath(fromNode, toNode) + drawPathConditionally(toNode, canvas, path, linePaint) + } + private fun createPath( + fromNode: Node, + toNode: Node, + ): Path { val startX = getNodeEdgeX(fromNode, true) val startY = fromNode.path.centerY.toPx(context) val endX = getNodeEdgeX(toNode, false) val endY = toNode.path.centerY.toPx(context) val midX = (startX + endX) / 2 - val path = - path.apply { - reset() - moveTo(startX, startY) - cubicTo(midX, startY, midX, endY, endX, endY) - } - drawPathConditionally(toNode, canvas, path, linePaint) + return path.apply { + reset() + moveTo(startX, startY) + cubicTo(midX, startY, midX, endY, endX, endY) + } + } private fun getLinePaintForMode(): Paint { return when (context.resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK) { From 2b010feb12367f7079d7352c1eb354e9d59d6b2b Mon Sep 17 00:00:00 2001 From: dltkd1395 Date: Thu, 28 Mar 2024 13:42:17 +0900 Subject: [PATCH 40/47] =?UTF-8?q?refactor(#328):=20=EB=85=B8=EB=93=9C=20?= =?UTF-8?q?=EC=9D=B4=EB=8F=99=20=EC=83=81=ED=83=9C=20=EC=A2=85=EB=A3=8C=20?= =?UTF-8?q?=EC=B2=98=EB=A6=AC=20=ED=95=A8=EC=88=98=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../boostcamp/and07/mindsync/ui/view/NodeView.kt | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/view/NodeView.kt b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/view/NodeView.kt index f666f7b7..0a82dc9c 100644 --- a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/view/NodeView.kt +++ b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/view/NodeView.kt @@ -67,14 +67,7 @@ class NodeView( MotionEvent.ACTION_UP, MotionEvent.ACTION_CANCEL -> { if (mindMapContainer.isMoving) { - mindMapContainer.isMoving = false - mindMapContainer.selectNode?.let { selectedNode -> - findIncludedNode(event.x, event.y) - attachNode(selectedNode) - attachedNode?.let { attachedNode -> - mindMapContainer.update(tree, selectedNode, attachedNode) - } - } + stopNodeMovement() } attachedNode = null lineView.updateTree(tree) @@ -84,6 +77,9 @@ class NodeView( return false } + private fun stopNodeMovement() { + mindMapContainer.isMoving = false + } private fun attachNode(selectedNode: Node) { attachedNode?.let { attachedNode -> tree.doPreorderTraversal { node -> From 35fc001c2bdc5c17f9c186045d8964702bd26cdf Mon Sep 17 00:00:00 2001 From: dltkd1395 Date: Thu, 28 Mar 2024 13:43:19 +0900 Subject: [PATCH 41/47] =?UTF-8?q?refactor(#328):=20=EC=84=A0=ED=83=9D?= =?UTF-8?q?=EB=90=9C=20=EB=85=B8=EB=93=9C=EA=B0=80=20=EB=8B=A4=EB=A5=B8=20?= =?UTF-8?q?=EB=85=B8=EB=93=9C=EC=97=90=20=EB=B6=80=EC=B0=A9=EB=90=98?= =?UTF-8?q?=EB=8A=94=20=ED=95=A8=EC=88=98=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../boostcamp/and07/mindsync/ui/view/NodeView.kt | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/view/NodeView.kt b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/view/NodeView.kt index 0a82dc9c..1c293aef 100644 --- a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/view/NodeView.kt +++ b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/view/NodeView.kt @@ -68,6 +68,7 @@ class NodeView( MotionEvent.ACTION_UP, MotionEvent.ACTION_CANCEL -> { if (mindMapContainer.isMoving) { stopNodeMovement() + updateTreeIfNodeAttached(event) } attachedNode = null lineView.updateTree(tree) @@ -80,6 +81,17 @@ class NodeView( private fun stopNodeMovement() { mindMapContainer.isMoving = false } + + private fun updateTreeIfNodeAttached(event: MotionEvent) { + mindMapContainer.selectNode?.let { selectedNode -> + findIncludedNode(event.x, event.y) + attachNode(selectedNode) + attachedNode?.let { attachedNode -> + mindMapContainer.update(tree, selectedNode, attachedNode) + } + } + } + private fun attachNode(selectedNode: Node) { attachedNode?.let { attachedNode -> tree.doPreorderTraversal { node -> From 737ca5aa87d4b858830fcd984407fd38b91c91ea Mon Sep 17 00:00:00 2001 From: dltkd1395 Date: Thu, 28 Mar 2024 13:43:54 +0900 Subject: [PATCH 42/47] =?UTF-8?q?refactor(#328):=20=EC=83=81=ED=83=9C=20?= =?UTF-8?q?=EC=B4=88=EA=B8=B0=ED=99=94=20=EB=B0=8F=20=ED=8A=B8=EB=A6=AC=20?= =?UTF-8?q?=EA=B0=B1=EC=8B=A0=20=ED=95=A8=EC=88=98=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/boostcamp/and07/mindsync/ui/view/NodeView.kt | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/view/NodeView.kt b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/view/NodeView.kt index 1c293aef..23bc221f 100644 --- a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/view/NodeView.kt +++ b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/view/NodeView.kt @@ -70,9 +70,7 @@ class NodeView( stopNodeMovement() updateTreeIfNodeAttached(event) } - attachedNode = null - lineView.updateTree(tree) - invalidate() + resetStateAndRefreshTree() } } return false @@ -92,6 +90,12 @@ class NodeView( } } + private fun resetStateAndRefreshTree() { + attachedNode = null + lineView.updateTree(tree) + invalidate() + } + private fun attachNode(selectedNode: Node) { attachedNode?.let { attachedNode -> tree.doPreorderTraversal { node -> From 7ba895a7c8c9d38264870061698af2efd1e5eee8 Mon Sep 17 00:00:00 2001 From: dltkd1395 Date: Thu, 28 Mar 2024 14:11:02 +0900 Subject: [PATCH 43/47] =?UTF-8?q?design(#328):=20=EB=B6=88=ED=95=84?= =?UTF-8?q?=EC=9A=94=ED=95=9C=20undo=20=EB=B2=84=ED=8A=BC=20=EC=A0=9C?= =?UTF-8?q?=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/res/layout/fragment_mind_map.xml | 21 ++++--------------- 1 file changed, 4 insertions(+), 17 deletions(-) diff --git a/AOS/app/src/main/res/layout/fragment_mind_map.xml b/AOS/app/src/main/res/layout/fragment_mind_map.xml index 95721581..c1141545 100644 --- a/AOS/app/src/main/res/layout/fragment_mind_map.xml +++ b/AOS/app/src/main/res/layout/fragment_mind_map.xml @@ -28,7 +28,7 @@ android:layout_width="0dp" android:layout_height="0dp" android:visibility="@{vm.selectedNode != null ? View.VISIBLE : View.GONE}" - app:constraint_referenced_ids="imgbtn_mind_map_add,imgbtn_mind_map_back,imgbtn_mind_map_remove,imgbtn_mind_map_edit,view_mind_map_side_bar" + app:constraint_referenced_ids="imgbtn_mind_map_add,imgbtn_mind_map_remove,imgbtn_mind_map_edit,view_mind_map_side_bar" app:layout_constraintBottom_toBottomOf="@id/view_mind_map_side_bar" app:layout_constraintEnd_toEndOf="@id/view_mind_map_side_bar" app:layout_constraintStart_toStartOf="@id/view_mind_map_side_bar" @@ -74,23 +74,10 @@ android:background="@android:color/transparent" android:src="@drawable/ic_outlined_drawing" app:layout_constraintBottom_toBottomOf="@id/view_mind_map_side_bar" - app:layout_constraintEnd_toStartOf="@id/imgbtn_mind_map_back" + app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_chainStyle="spread" app:layout_constraintStart_toEndOf="@id/imgbtn_mind_map_remove" app:layout_constraintTop_toTopOf="@id/view_mind_map_side_bar" /> - - - - + - + \ No newline at end of file From 8120059f61082f879222c45d5d7b62ce362baf14 Mon Sep 17 00:00:00 2001 From: dltkd1395 Date: Fri, 29 Mar 2024 18:47:47 +0900 Subject: [PATCH 44/47] =?UTF-8?q?chore(#328):=20=EB=B6=88=ED=95=84?= =?UTF-8?q?=EC=9A=94=ED=95=9C=20release=EA=B4=80=EB=A0=A8=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AOS/app/build.gradle.kts | 23 +---------------------- 1 file changed, 1 insertion(+), 22 deletions(-) diff --git a/AOS/app/build.gradle.kts b/AOS/app/build.gradle.kts index c40b80e7..c8aadabb 100644 --- a/AOS/app/build.gradle.kts +++ b/AOS/app/build.gradle.kts @@ -1,4 +1,3 @@ -import java.io.FileInputStream import java.util.Properties plugins { @@ -10,9 +9,6 @@ plugins { id("kotlinx-serialization") id("com.google.gms.google-services") } -val keystorePropertiesFile = rootProject.file("keystore.properties") -val keystoreProperties = Properties() -keystoreProperties.load(FileInputStream(keystorePropertiesFile)) android { namespace = "boostcamp.and07.mindsync" @@ -39,24 +35,7 @@ android { buildConfigField("String", "KAKAO_CLIENT_ID", "$kakaoClientId") manifestPlaceholders["KAKAO_CLIENT_ID"] = removeQuotationKakaoClientId } - signingConfigs { - create("release") { - keyAlias = keystoreProperties["keyAlias"] as String - keyPassword = keystoreProperties["keyPassword"] as String - storeFile = file(keystoreProperties["storeFile"] as String) - storePassword = keystoreProperties["storePassword"] as String - } - } - buildTypes { - getByName("release") { - isMinifyEnabled = false - proguardFiles( - getDefaultProguardFile("proguard-android-optimize.txt"), - "proguard-rules.pro", - ) - signingConfig = signingConfigs.getByName("release") - } - } + buildFeatures { viewBinding = true dataBinding = true From 07f3e8b3df70751056bd30384d30bec2dd42beeb Mon Sep 17 00:00:00 2001 From: dltkd1395 Date: Fri, 29 Mar 2024 18:54:38 +0900 Subject: [PATCH 45/47] =?UTF-8?q?refactor(#328):=20traverseMovedNode=20?= =?UTF-8?q?=EB=A9=94=EC=84=9C=EB=93=9C=EC=97=90=20=EC=9E=88=EB=8A=94=20arr?= =?UTF-8?q?ageNode=EB=A5=BC=20moveNode=20=EB=A9=94=EC=84=9C=EB=93=9C?= =?UTF-8?q?=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/boostcamp/and07/mindsync/ui/view/NodeView.kt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/view/NodeView.kt b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/view/NodeView.kt index 23bc221f..2b65ed86 100644 --- a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/view/NodeView.kt +++ b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/view/NodeView.kt @@ -142,6 +142,7 @@ class NodeView( traverseMovedNode(tree.getRootNode(), selectedNode, dx, dy) mindMapContainer.update(tree) + rightLayoutManager.arrangeNode(tree, selectedNode as RectangleNode) } lineView.updateTree(tree) invalidate() @@ -158,8 +159,6 @@ class NodeView( val centerY = Dp(Px(dy).toDp(context)) tree.updateNode(target.id, target.description, target.children, centerX, centerY) } - rightLayoutManager.arrangeNode(tree, target as RectangleNode) - node.children.forEach { nodeId -> traverseMovedNode(tree.getNode(nodeId), target, dx, dy) } From 75a356c70c29d6015944a2f86897287923f9208e Mon Sep 17 00:00:00 2001 From: dltkd1395 Date: Sat, 6 Apr 2024 22:37:35 +0900 Subject: [PATCH 46/47] =?UTF-8?q?refactor:=20ktlint=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../and07/mindsync/data/model/Node.kt | 15 +- .../and07/mindsync/data/model/NodePath.kt | 21 ++- .../mindsync/ui/base/BaseComposeActivity.kt | 1 - .../and07/mindsync/ui/components/MSButton.kt | 20 +-- .../ui/components/MSFloatingButton.kt | 2 +- .../mindsync/ui/components/MSIconButton.kt | 2 +- .../and07/mindsync/ui/components/MSPreview.kt | 5 +- .../mindsync/ui/dialog/NickNameDialog.kt | 59 ++++--- .../mindsync/ui/profile/ProfileFragment.kt | 13 +- .../mindsync/ui/profile/ProfileScreen.kt | 77 +++++---- .../and07/mindsync/ui/theme/Theme.kt | 28 ++-- .../boostcamp/and07/mindsync/ui/theme/Type.kt | 152 ++++++++++-------- .../and07/mindsync/ui/view/NodeView.kt | 2 +- .../view/layout/MindMapRightLayoutManager.kt | 5 +- 14 files changed, 236 insertions(+), 166 deletions(-) diff --git a/AOS/app/src/main/java/boostcamp/and07/mindsync/data/model/Node.kt b/AOS/app/src/main/java/boostcamp/and07/mindsync/data/model/Node.kt index 47c78fe6..9976500b 100644 --- a/AOS/app/src/main/java/boostcamp/and07/mindsync/data/model/Node.kt +++ b/AOS/app/src/main/java/boostcamp/and07/mindsync/data/model/Node.kt @@ -11,7 +11,10 @@ sealed class Node( open val description: String, open val children: List, ) : java.io.Serializable { - abstract fun adjustPosition(horizontalSpacing: Dp, totalHeight: Dp): Node + abstract fun adjustPosition( + horizontalSpacing: Dp, + totalHeight: Dp, + ): Node } data class CircleNode( @@ -21,7 +24,10 @@ data class CircleNode( override val description: String, override val children: List, ) : Node(id, parentId, path, description, children) { - override fun adjustPosition(horizontalSpacing: Dp, totalHeight: Dp): Node { + override fun adjustPosition( + horizontalSpacing: Dp, + totalHeight: Dp, + ): Node { return this.copy(path = path.adjustPath(horizontalSpacing, totalHeight)) } } @@ -33,7 +39,10 @@ data class RectangleNode( override val description: String, override val children: List, ) : Node(id, parentId, path, description, children) { - override fun adjustPosition(horizontalSpacing: Dp, totalHeight: Dp): Node { + override fun adjustPosition( + horizontalSpacing: Dp, + totalHeight: Dp, + ): Node { return this.copy(path = path.adjustPath(horizontalSpacing, totalHeight)) } } diff --git a/AOS/app/src/main/java/boostcamp/and07/mindsync/data/model/NodePath.kt b/AOS/app/src/main/java/boostcamp/and07/mindsync/data/model/NodePath.kt index 04895c49..0e654c5d 100644 --- a/AOS/app/src/main/java/boostcamp/and07/mindsync/data/model/NodePath.kt +++ b/AOS/app/src/main/java/boostcamp/and07/mindsync/data/model/NodePath.kt @@ -5,8 +5,15 @@ import kotlinx.serialization.Serializable @Serializable sealed class NodePath(open val centerX: Dp, open val centerY: Dp) { - abstract fun adjustPath(horizontalSpacing: Dp, totalHeight: Dp): NodePath - protected fun calculateNewCenterY(horizontalSpacing: Dp, totalHeight: Dp): Dp { + abstract fun adjustPath( + horizontalSpacing: Dp, + totalHeight: Dp, + ): NodePath + + protected fun calculateNewCenterY( + horizontalSpacing: Dp, + totalHeight: Dp, + ): Dp { return centerY + totalHeight / 2 + horizontalSpacing } } @@ -25,7 +32,10 @@ data class RectanglePath( fun bottomY() = centerY + (height / (Dp(2f))) - override fun adjustPath(horizontalSpacing: Dp, totalHeight: Dp): RectanglePath { + override fun adjustPath( + horizontalSpacing: Dp, + totalHeight: Dp, + ): RectanglePath { return this.copy(centerY = calculateNewCenterY(horizontalSpacing, totalHeight)) } } @@ -35,7 +45,10 @@ data class CirclePath( override val centerY: Dp, val radius: Dp, ) : NodePath(centerX, centerY) { - override fun adjustPath(horizontalSpacing: Dp, totalHeight: Dp): CirclePath { + override fun adjustPath( + horizontalSpacing: Dp, + totalHeight: Dp, + ): CirclePath { return this.copy(centerY = calculateNewCenterY(horizontalSpacing, totalHeight)) } } diff --git a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/base/BaseComposeActivity.kt b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/base/BaseComposeActivity.kt index 469ec561..575a08f7 100644 --- a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/base/BaseComposeActivity.kt +++ b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/base/BaseComposeActivity.kt @@ -6,7 +6,6 @@ import androidx.activity.compose.setContent import androidx.compose.runtime.Composable abstract class BaseComposeActivity : ComponentActivity() { - @Composable abstract fun Content() diff --git a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/components/MSButton.kt b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/components/MSButton.kt index 8ffc1f5d..2527ff3e 100644 --- a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/components/MSButton.kt +++ b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/components/MSButton.kt @@ -29,10 +29,11 @@ fun MSButton( modifier = modifier, onClick = onClick, shape = shape, - colors = ButtonDefaults.buttonColors( - containerColor = backgroundColor, - disabledContainerColor = disableColor, - ), + colors = + ButtonDefaults.buttonColors( + containerColor = backgroundColor, + disabledContainerColor = disableColor, + ), enabled = isEnabled, ) { Text( @@ -45,8 +46,9 @@ fun MSButton( @Preview @Composable -fun ButtonPreview() = MSPreview { - MSButton( - onClick = { }, - ) -} +fun ButtonPreview() = + MSPreview { + MSButton( + onClick = { }, + ) + } diff --git a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/components/MSFloatingButton.kt b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/components/MSFloatingButton.kt index ae20a565..88169f19 100644 --- a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/components/MSFloatingButton.kt +++ b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/components/MSFloatingButton.kt @@ -42,4 +42,4 @@ fun RefreshFloatingButton( contentDescription = null, ) } -} \ No newline at end of file +} diff --git a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/components/MSIconButton.kt b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/components/MSIconButton.kt index e80b6636..d3b8031b 100644 --- a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/components/MSIconButton.kt +++ b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/components/MSIconButton.kt @@ -168,4 +168,4 @@ fun RestoreIconButton( tint = iconColor, ) } -} \ No newline at end of file +} diff --git a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/components/MSPreview.kt b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/components/MSPreview.kt index 1fb64bc7..e45eede7 100644 --- a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/components/MSPreview.kt +++ b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/components/MSPreview.kt @@ -4,6 +4,9 @@ import androidx.compose.runtime.Composable import boostcamp.and07.mindsync.ui.theme.MindSyncTheme @Composable -fun MSPreview(isDarkTheme: Boolean = false, content: @Composable () -> Unit) { +fun MSPreview( + isDarkTheme: Boolean = false, + content: @Composable () -> Unit, +) { MindSyncTheme(darkTheme = isDarkTheme, content = content) } diff --git a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/dialog/NickNameDialog.kt b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/dialog/NickNameDialog.kt index e129ebf4..c02c60aa 100644 --- a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/dialog/NickNameDialog.kt +++ b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/dialog/NickNameDialog.kt @@ -46,17 +46,19 @@ fun NickNameDialog( ) { val screenWidth = LocalConfiguration.current.screenWidthDp.dp val dialogWidth = screenWidth * 0.8f - var textFieldValue = remember { - mutableStateOf( - TextFieldValue( - text = uiState.nickname, - selection = TextRange(uiState.nickname.length), - ), - ) - } - val focusRequester = remember { - FocusRequester() - } + var textFieldValue = + remember { + mutableStateOf( + TextFieldValue( + text = uiState.nickname, + selection = TextRange(uiState.nickname.length), + ), + ) + } + val focusRequester = + remember { + FocusRequester() + } LaunchedEffect(Unit) { focusRequester.requestFocus() @@ -67,10 +69,11 @@ fun NickNameDialog( }, ) { Column( - modifier = Modifier - .background(Color.White, RoundedCornerShape(20.dp)) - .width(dialogWidth) - .padding(start = 10.dp, top = 20.dp, end = 10.dp), + modifier = + Modifier + .background(Color.White, RoundedCornerShape(20.dp)) + .width(dialogWidth) + .padding(start = 10.dp, top = 20.dp, end = 10.dp), ) { Text( text = stringResource(id = R.string.profile_nickname_modify), @@ -80,10 +83,14 @@ fun NickNameDialog( OutlinedTextField( value = textFieldValue.value, - onValueChange = { textFieldValue.value = it; editNickname(it.text) }, - modifier = Modifier - .padding(5.dp) - .focusRequester(focusRequester), + onValueChange = { + textFieldValue.value = it + editNickname(it.text) + }, + modifier = + Modifier + .padding(5.dp) + .focusRequester(focusRequester), placeholder = { Text(text = stringResource(id = R.string.profile_name_limit)) }, @@ -109,12 +116,16 @@ fun NickNameDialog( } TextButton( - onClick = { updateNickname(uiState.editingNickname); closeDialog() }, - modifier = Modifier, - enabled = when (uiState.editingNickname.length) { - in 1..20 -> true - else -> false + onClick = { + updateNickname(uiState.editingNickname) + closeDialog() }, + modifier = Modifier, + enabled = + when (uiState.editingNickname.length) { + in 1..20 -> true + else -> false + }, ) { Text( text = stringResource(id = R.string.profile_modify), diff --git a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/profile/ProfileFragment.kt b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/profile/ProfileFragment.kt index 6a2f82bc..e104409d 100644 --- a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/profile/ProfileFragment.kt +++ b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/profile/ProfileFragment.kt @@ -6,7 +6,6 @@ import android.os.Bundle import android.view.View import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue -import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.navigation.navGraphViewModels import boostcamp.and07.mindsync.R import boostcamp.and07.mindsync.data.repository.login.LogoutEventRepository @@ -33,11 +32,15 @@ class ProfileFragment : BaseComposeFragment() { private lateinit var imagePickerHandler: ImagePickerHandler - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + override fun onViewCreated( + view: View, + savedInstanceState: Bundle?, + ) { super.onViewCreated(view, savedInstanceState) - imagePickerHandler = ImagePickerHandler(requireActivity()) { uri -> - createImage(uri) - } + imagePickerHandler = + ImagePickerHandler(requireActivity()) { uri -> + createImage(uri) + } } @Composable diff --git a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/profile/ProfileScreen.kt b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/profile/ProfileScreen.kt index 4ca50b98..e9300492 100644 --- a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/profile/ProfileScreen.kt +++ b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/profile/ProfileScreen.kt @@ -134,28 +134,32 @@ private fun ProfileContent( }, ) { innerPadding -> BoxWithConstraints( - modifier = Modifier - .padding(innerPadding) - .fillMaxWidth(), + modifier = + Modifier + .padding(innerPadding) + .fillMaxWidth(), ) { val guidelineTop = maxHeight * 0.15f val guidelineStart = maxWidth * 0.1f val guidelineEnd = maxWidth * 0.1f Column( - modifier = Modifier - .fillMaxSize() - .padding(top = guidelineTop), + modifier = + Modifier + .fillMaxSize() + .padding(top = guidelineTop), ) { ProfileImage( - modifier = Modifier - .align(Alignment.CenterHorizontally), + modifier = + Modifier + .align(Alignment.CenterHorizontally), imageUri = uiState.imageUri, showImagePicker = showImagePicker, ) Row( - modifier = Modifier - .padding(top = 16.dp), + modifier = + Modifier + .padding(top = 16.dp), verticalAlignment = Alignment.CenterVertically, ) { Spacer(modifier = Modifier.weight(1f)) @@ -172,13 +176,14 @@ private fun ProfileContent( } ModifyButton( - modifier = Modifier - .padding( - top = 30.dp, - start = guidelineStart, - end = guidelineEnd, - ) - .fillMaxWidth(), + modifier = + Modifier + .padding( + top = 30.dp, + start = guidelineStart, + end = guidelineEnd, + ) + .fillMaxWidth(), profileImageName = stringResource(id = R.string.profile_image_name), updateProfile = updateProfile, isModify = uiState.isModify, @@ -198,9 +203,7 @@ private fun ProfileContent( } @Composable -private fun ProfileTopAppBar( - onBack: () -> Unit, -) { +private fun ProfileTopAppBar(onBack: () -> Unit) { Row( verticalAlignment = Alignment.CenterVertically, ) { @@ -210,8 +213,9 @@ private fun ProfileTopAppBar( Text( text = stringResource(id = R.string.profile_my_page), style = MaterialTheme.typography.displayMedium, - modifier = Modifier - .padding(start = 14.dp), + modifier = + Modifier + .padding(start = 14.dp), ) } } @@ -223,28 +227,31 @@ private fun ProfileImage( showImagePicker: () -> Unit, ) { Box( - modifier = modifier - .size(120.dp), + modifier = + modifier + .size(120.dp), ) { AsyncImage( model = imageUri, contentDescription = null, - modifier = Modifier - .clip(CircleShape) - .clickable { - showImagePicker() - }, + modifier = + Modifier + .clip(CircleShape) + .clickable { + showImagePicker() + }, contentScale = ContentScale.Crop, ) Box( contentAlignment = Alignment.Center, - modifier = Modifier - .size(30.dp) - .offset(y = 10.dp) - .clip(shape = RoundedCornerShape(5.dp)) - .background(color = Blue1) - .align(Alignment.TopEnd), + modifier = + Modifier + .size(30.dp) + .offset(y = 10.dp) + .clip(shape = RoundedCornerShape(5.dp)) + .background(color = Blue1) + .align(Alignment.TopEnd), ) { Image( painter = painterResource(id = R.drawable.ic_add_board), diff --git a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/theme/Theme.kt b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/theme/Theme.kt index 251292dc..550aa638 100644 --- a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/theme/Theme.kt +++ b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/theme/Theme.kt @@ -18,11 +18,12 @@ import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalView import androidx.core.view.WindowCompat -private val DarkColorScheme = darkColorScheme( - primary = Gray6, - secondary = Gray4, - tertiary = Gray5, -) +private val DarkColorScheme = + darkColorScheme( + primary = Gray6, + secondary = Gray4, + tertiary = Gray5, + ) private val LightColorScheme = lightColorScheme() @@ -32,15 +33,16 @@ fun MindSyncTheme( dynamicColor: Boolean = true, content: @Composable () -> Unit, ) { - val colorScheme = when { - dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> { - val context = LocalContext.current - if (darkTheme) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context) - } + val colorScheme = + when { + dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> { + val context = LocalContext.current + if (darkTheme) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context) + } - darkTheme -> DarkColorScheme - else -> LightColorScheme - } + darkTheme -> DarkColorScheme + else -> LightColorScheme + } MaterialTheme( colorScheme = colorScheme, diff --git a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/theme/Type.kt b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/theme/Type.kt index 4548eea7..b9ec3847 100644 --- a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/theme/Type.kt +++ b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/theme/Type.kt @@ -13,71 +13,89 @@ val PretendardMedium = FontFamily(Font(R.font.pretendard_medium)) val PretendardRegular = FontFamily(Font(R.font.pretendard_regular)) val PretendardLight = FontFamily(Font(R.font.pretendard_light)) -val defaultTextStyle = TextStyle( - platformStyle = PlatformTextStyle( - includeFontPadding = false, - ), -) +val defaultTextStyle = + TextStyle( + platformStyle = + PlatformTextStyle( + includeFontPadding = false, + ), + ) -val Typography = Typography( - displayLarge = defaultTextStyle.copy( - fontFamily = PretendardSemiBold, - fontSize = 24.sp, - ), - displayMedium = defaultTextStyle.copy( - fontFamily = PretendardSemiBold, - fontSize = 20.sp, - ), - displaySmall = defaultTextStyle.copy( - fontFamily = PretendardSemiBold, - fontSize = 18.sp, - ), - headlineLarge = defaultTextStyle.copy( - fontFamily = PretendardMedium, - fontSize = 16.sp, - ), - headlineMedium = defaultTextStyle.copy( - fontFamily = PretendardRegular, - fontSize = 16.sp, - ), - headlineSmall = defaultTextStyle.copy( - fontFamily = PretendardMedium, - fontSize = 14.sp, - ), - titleLarge = defaultTextStyle.copy( - fontFamily = PretendardSemiBold, - fontSize = 18.sp, - ), - titleMedium = defaultTextStyle.copy( - fontFamily = PretendardSemiBold, - fontSize = 16.sp, - ), - titleSmall = defaultTextStyle.copy( - fontFamily = PretendardSemiBold, - fontSize = 14.sp, - ), - bodyLarge = defaultTextStyle.copy( - fontFamily = PretendardMedium, - fontSize = 12.sp, - ), - bodyMedium = defaultTextStyle.copy( - fontFamily = PretendardRegular, - fontSize = 12.sp, - ), - bodySmall = defaultTextStyle.copy( - fontFamily = PretendardLight, - fontSize = 12.sp, - ), - labelLarge = defaultTextStyle.copy( - fontFamily = PretendardSemiBold, - fontSize = 18.sp, - ), - labelMedium = defaultTextStyle.copy( - fontFamily = PretendardSemiBold, - fontSize = 16.sp, - ), - labelSmall = defaultTextStyle.copy( - fontFamily = PretendardSemiBold, - fontSize = 14.sp, - ), -) +val Typography = + Typography( + displayLarge = + defaultTextStyle.copy( + fontFamily = PretendardSemiBold, + fontSize = 24.sp, + ), + displayMedium = + defaultTextStyle.copy( + fontFamily = PretendardSemiBold, + fontSize = 20.sp, + ), + displaySmall = + defaultTextStyle.copy( + fontFamily = PretendardSemiBold, + fontSize = 18.sp, + ), + headlineLarge = + defaultTextStyle.copy( + fontFamily = PretendardMedium, + fontSize = 16.sp, + ), + headlineMedium = + defaultTextStyle.copy( + fontFamily = PretendardRegular, + fontSize = 16.sp, + ), + headlineSmall = + defaultTextStyle.copy( + fontFamily = PretendardMedium, + fontSize = 14.sp, + ), + titleLarge = + defaultTextStyle.copy( + fontFamily = PretendardSemiBold, + fontSize = 18.sp, + ), + titleMedium = + defaultTextStyle.copy( + fontFamily = PretendardSemiBold, + fontSize = 16.sp, + ), + titleSmall = + defaultTextStyle.copy( + fontFamily = PretendardSemiBold, + fontSize = 14.sp, + ), + bodyLarge = + defaultTextStyle.copy( + fontFamily = PretendardMedium, + fontSize = 12.sp, + ), + bodyMedium = + defaultTextStyle.copy( + fontFamily = PretendardRegular, + fontSize = 12.sp, + ), + bodySmall = + defaultTextStyle.copy( + fontFamily = PretendardLight, + fontSize = 12.sp, + ), + labelLarge = + defaultTextStyle.copy( + fontFamily = PretendardSemiBold, + fontSize = 18.sp, + ), + labelMedium = + defaultTextStyle.copy( + fontFamily = PretendardSemiBold, + fontSize = 16.sp, + ), + labelSmall = + defaultTextStyle.copy( + fontFamily = PretendardSemiBold, + fontSize = 14.sp, + ), + ) diff --git a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/view/NodeView.kt b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/view/NodeView.kt index 2b65ed86..5b0ffbb2 100644 --- a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/view/NodeView.kt +++ b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/view/NodeView.kt @@ -89,7 +89,7 @@ class NodeView( } } } - + private fun resetStateAndRefreshTree() { attachedNode = null lineView.updateTree(tree) diff --git a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/view/layout/MindMapRightLayoutManager.kt b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/view/layout/MindMapRightLayoutManager.kt index b3d4b4bd..ccbefd6a 100644 --- a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/view/layout/MindMapRightLayoutManager.kt +++ b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/view/layout/MindMapRightLayoutManager.kt @@ -10,7 +10,10 @@ class MindMapRightLayoutManager { private val horizontalSpacing = Dp(50f) private val verticalSpacing = Dp(50f) - fun arrangeNode(tree: Tree, rootNode: Node? = null) { + fun arrangeNode( + tree: Tree, + rootNode: Node? = null, + ) { val root = rootNode ?: tree.getRootNode() val totalHeight = measureChildHeight(root, tree) val newHead = From a1b3e3705963488ef898d928100d2bd355578c79 Mon Sep 17 00:00:00 2001 From: dltkd1395 Date: Sat, 6 Apr 2024 22:42:49 +0900 Subject: [PATCH 47/47] =?UTF-8?q?refactor:=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20local.properties=20inputStream=20=EC=BD=94=EB=93=9C?= =?UTF-8?q?=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AOS/app/build.gradle.kts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/AOS/app/build.gradle.kts b/AOS/app/build.gradle.kts index c8aadabb..a37e2013 100644 --- a/AOS/app/build.gradle.kts +++ b/AOS/app/build.gradle.kts @@ -1,5 +1,3 @@ -import java.util.Properties - plugins { id("com.android.application") id("org.jetbrains.kotlin.android") @@ -14,8 +12,6 @@ android { namespace = "boostcamp.and07.mindsync" compileSdk = 34 - val properties = Properties() - properties.load(project.rootProject.file("local.properties").inputStream()) val url = properties["BASE_URL"] ?: "" val googleServerClientId = properties["GOOGLE_SERVER_CLIENT_ID"] ?: "" val kakaoClientId = properties["KAKAO_CLIENT_ID"] ?: ""