From a78a6638da96d15176f39332d47a690cd0f92784 Mon Sep 17 00:00:00 2001 From: klaus Date: Mon, 23 Feb 2026 11:16:30 +0900 Subject: [PATCH] =?UTF-8?q?=ED=81=AC=EB=A6=AC=EC=97=90=EC=9D=B4=ED=84=B0?= =?UTF-8?q?=20=ED=94=84=EB=A1=9C=ED=95=84=20=EC=88=98=EC=A0=95=20=EC=8B=9C?= =?UTF-8?q?=20=ED=8C=AC=EC=8B=ACM=20=EB=B0=8F=20X=20URL=20=EB=93=B1?= =?UTF-8?q?=EB=A1=9D=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 크리에이터 프로필 수정 화면에서 팬심M과 X(구 트위터)의 URL을 입력하고 저장할 수 있도록 기능을 개선했습니다. - ProfileUpdateRequest 및 ProfileResponse에 관련 필드 추가 - ProfileUpdateViewModel에 URL 관리 및 업데이트 로직 추가 - UI 레이아웃에 팬심M, X 입력 필드 추가 및 다국어 리소스 반영 - ProfileUpdateActivity에서 입력 필드 연동 및 초기값 설정 --- .editorconfig | 2 +- .../mypage/profile/ProfileResponse.kt | 2 + .../mypage/profile/ProfileUpdateActivity.kt | 22 +++++++ .../mypage/profile/ProfileUpdateRequest.kt | 2 + .../mypage/profile/ProfileUpdateViewModel.kt | 21 ++++++ .../res/layout/activity_profile_update.xml | 66 +++++++++++++++++++ app/src/main/res/values-en/strings.xml | 4 ++ app/src/main/res/values-ja/strings.xml | 4 ++ app/src/main/res/values/strings.xml | 4 ++ 9 files changed, 126 insertions(+), 1 deletion(-) diff --git a/.editorconfig b/.editorconfig index 5a61cd6f..9342e56a 100644 --- a/.editorconfig +++ b/.editorconfig @@ -7,7 +7,7 @@ indent_size = 4 indent_style = space trim_trailing_whitespace = true insert_final_newline = true -max_line_length = 100 +max_line_length = 130 tab_width = 4 [*.{kt,kts}] diff --git a/app/src/main/java/kr/co/vividnext/sodalive/mypage/profile/ProfileResponse.kt b/app/src/main/java/kr/co/vividnext/sodalive/mypage/profile/ProfileResponse.kt index a76e8402..ddcf9cc5 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/mypage/profile/ProfileResponse.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/mypage/profile/ProfileResponse.kt @@ -17,6 +17,8 @@ data class ProfileResponse( @SerializedName("instagramUrl") val instagramUrl: String?, @SerializedName("blogUrl") val blogUrl: String?, @SerializedName("websiteUrl") val websiteUrl: String?, + @SerializedName("fancimmUrl") val fancimmUrl: String?, + @SerializedName("xUrl") val xUrl: String?, @SerializedName("introduce") val introduce: String, @SerializedName("tags") val tags: List ) diff --git a/app/src/main/java/kr/co/vividnext/sodalive/mypage/profile/ProfileUpdateActivity.kt b/app/src/main/java/kr/co/vividnext/sodalive/mypage/profile/ProfileUpdateActivity.kt index c44e8c86..d854b651 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/mypage/profile/ProfileUpdateActivity.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/mypage/profile/ProfileUpdateActivity.kt @@ -85,6 +85,26 @@ class ProfileUpdateActivity : BaseActivity( } ) + compositeDisposable.add( + binding.etFancimm.textChanges().skip(1) + .debounce(500, TimeUnit.MILLISECONDS) + .observeOn(AndroidSchedulers.mainThread()) + .subscribeOn(Schedulers.io()) + .subscribe { + viewModel.fancimmUrl = it.toString() + } + ) + + compositeDisposable.add( + binding.etX.textChanges().skip(1) + .debounce(500, TimeUnit.MILLISECONDS) + .observeOn(AndroidSchedulers.mainThread()) + .subscribeOn(Schedulers.io()) + .subscribe { + viewModel.xUrl = it.toString() + } + ) + compositeDisposable.add( binding.etWebsite.textChanges().skip(1) .debounce(500, TimeUnit.MILLISECONDS) @@ -142,6 +162,8 @@ class ProfileUpdateActivity : BaseActivity( it.instagramUrl?.let { url -> binding.etInstagram.setText(url) } it.websiteUrl?.let { url -> binding.etWebsite.setText(url) } it.blogUrl?.let { url -> binding.etBlog.setText(url) } + it.fancimmUrl?.let { url -> binding.etFancimm.setText(url) } + it.xUrl?.let { url -> binding.etX.setText(url) } binding.etIntroduce.setText(it.introduce) SharedPreferenceManager.nickname = it.nickname diff --git a/app/src/main/java/kr/co/vividnext/sodalive/mypage/profile/ProfileUpdateRequest.kt b/app/src/main/java/kr/co/vividnext/sodalive/mypage/profile/ProfileUpdateRequest.kt index 19247e7a..0232e1a7 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/mypage/profile/ProfileUpdateRequest.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/mypage/profile/ProfileUpdateRequest.kt @@ -19,6 +19,8 @@ data class ProfileUpdateRequest( @SerializedName("instagramUrl") val instagramUrl: String? = null, @SerializedName("websiteUrl") val websiteUrl: String? = null, @SerializedName("blogUrl") val blogUrl: String? = null, + @SerializedName("fancimmUrl") val fancimmUrl: String? = null, + @SerializedName("xUrl") val xUrl: String? = null, @SerializedName("isVisibleDonationRank") val isVisibleDonationRank: Boolean? = null, @SerializedName("donationRankingPeriod") val donationRankingPeriod: DonationRankingPeriod? = null, @SerializedName("container") val container: String = "aos" diff --git a/app/src/main/java/kr/co/vividnext/sodalive/mypage/profile/ProfileUpdateViewModel.kt b/app/src/main/java/kr/co/vividnext/sodalive/mypage/profile/ProfileUpdateViewModel.kt index cb067fc0..81f38659 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/mypage/profile/ProfileUpdateViewModel.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/mypage/profile/ProfileUpdateViewModel.kt @@ -22,6 +22,8 @@ class ProfileUpdateViewModel(private val repository: UserRepository) : BaseViewM var instagramUrl = "" var websiteUrl = "" var blogUrl = "" + var fancimmUrl = "" + var xUrl = "" var introduce = "" var currentPassword = "" @@ -63,6 +65,13 @@ class ProfileUpdateViewModel(private val repository: UserRepository) : BaseViewM { if (it.success && it.data != null) { profileResponse = it.data + youtubeUrl = profileResponse.youtubeUrl ?: "" + instagramUrl = profileResponse.instagramUrl ?: "" + websiteUrl = profileResponse.websiteUrl ?: "" + blogUrl = profileResponse.blogUrl ?: "" + fancimmUrl = profileResponse.fancimmUrl ?: "" + xUrl = profileResponse.xUrl ?: "" + introduce = profileResponse.introduce tags.addAll(profileResponse.tags) _selectedTagLiveData.postValue(profileResponse.tags) _genderLiveData.postValue(profileResponse.gender) @@ -127,6 +136,8 @@ class ProfileUpdateViewModel(private val repository: UserRepository) : BaseViewM profileResponse.instagramUrl != instagramUrl || profileResponse.blogUrl != blogUrl || profileResponse.websiteUrl != websiteUrl || + profileResponse.fancimmUrl != fancimmUrl || + profileResponse.xUrl != xUrl || profileResponse.gender != _genderLiveData.value || insertTags.isNotEmpty() || removeTags.isNotEmpty() || @@ -155,6 +166,16 @@ class ProfileUpdateViewModel(private val repository: UserRepository) : BaseViewM } else { null }, + fancimmUrl = if (profileResponse.fancimmUrl != fancimmUrl) { + fancimmUrl + } else { + null + }, + xUrl = if (profileResponse.xUrl != xUrl) { + xUrl + } else { + null + }, gender = if (profileResponse.gender != _genderLiveData.value) { _genderLiveData.value } else { diff --git a/app/src/main/res/layout/activity_profile_update.xml b/app/src/main/res/layout/activity_profile_update.xml index 5bd174ab..6df6b1f2 100644 --- a/app/src/main/res/layout/activity_profile_update.xml +++ b/app/src/main/res/layout/activity_profile_update.xml @@ -421,6 +421,72 @@ android:theme="@style/EditTextStyle" tools:ignore="LabelFor" /> + + + + + + + + + + + + + + Website URL Blog Blog URL + FancimM + FancimM URL + X + X URL Interests Select interests Bio diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index eb02e006..7dd28630 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -663,6 +663,10 @@ ウェブサイト URL ブログ ブログ URL + FancimM + FancimM URL + X + X URL 興味・関心 関心タグ選択 紹介文 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 583db0a9..81d125f3 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -662,6 +662,10 @@ 웹사이트 URL 블로그 블로그 URL + 팬심M + 팬심M URL + X + X URL 관심사 관심사 선택 소개글