From a1709dac596cff5eafca8eea7f02b076f7579b7b Mon Sep 17 00:00:00 2001 From: jooyyoo Date: Thu, 20 Jul 2023 16:11:15 +0900 Subject: [PATCH 1/8] =?UTF-8?q?[mod]=20#53=20=EB=9E=8C=EB=8B=A4=EC=8B=9D?= =?UTF-8?q?=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/layout/dialog_bottom_signup_email.xml | 4 ++-- app/src/main/res/layout/dialog_bottom_signup_nickname.xml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/res/layout/dialog_bottom_signup_email.xml b/app/src/main/res/layout/dialog_bottom_signup_email.xml index 71731277..07a7be06 100644 --- a/app/src/main/res/layout/dialog_bottom_signup_email.xml +++ b/app/src/main/res/layout/dialog_bottom_signup_email.xml @@ -45,7 +45,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="22dp" - android:src="@{viewModel.isValidEmail() == true? @drawable/ic_smile : @drawable/ic_tears}" + android:src="@{!viewModel.isValidEmail() == true? @drawable/ic_smile : @drawable/ic_tears}" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/view_bottom_sheet_top" @@ -65,7 +65,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" - android:text="@{viewModel.isValidEmail() == true? @string/available_email : @string/unavailable_email}" + android:text="@{!viewModel.isValidEmail() == true? @string/available_email : @string/unavailable_email}" android:textAppearance="@style/TextAppearance.Title2" android:textColor="@color/gray_500" app:layout_constraintEnd_toEndOf="parent" diff --git a/app/src/main/res/layout/dialog_bottom_signup_nickname.xml b/app/src/main/res/layout/dialog_bottom_signup_nickname.xml index 334a95ef..b90b445e 100644 --- a/app/src/main/res/layout/dialog_bottom_signup_nickname.xml +++ b/app/src/main/res/layout/dialog_bottom_signup_nickname.xml @@ -45,7 +45,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="22dp" - android:src="@{viewModel.isValidNickname() == true? @drawable/ic_smile : @drawable/ic_tears}" + android:src="@{!viewModel.isValidNickname() == true? @drawable/ic_smile : @drawable/ic_tears}" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/view_bottom_sheet_top" @@ -65,7 +65,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" - android:text="@{viewModel.isValidNickname() == true? @string/available_nickname : @string/unavailable_nickname}" + android:text="@{!viewModel.isValidNickname() == true? @string/available_nickname : @string/unavailable_nickname}" android:textAppearance="@style/TextAppearance.Title2" android:textColor="@color/gray_500" app:layout_constraintEnd_toEndOf="parent" From 09a1566c26dcf2528abe6d6d6a405a827087b730 Mon Sep 17 00:00:00 2001 From: jooyyoo Date: Thu, 20 Jul 2023 16:11:42 +0900 Subject: [PATCH 2/8] =?UTF-8?q?[mod]=20#53=20ripple=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/layout/activity_signup_email.xml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/layout/activity_signup_email.xml b/app/src/main/res/layout/activity_signup_email.xml index e439766f..e9bdb76d 100644 --- a/app/src/main/res/layout/activity_signup_email.xml +++ b/app/src/main/res/layout/activity_signup_email.xml @@ -94,7 +94,7 @@ android:layout_marginBottom="16dp" android:background="@null" android:hint="@string/email_hint" - android:inputType="text" + android:inputType="textEmailAddress" android:paddingVertical="5dp" android:text="@={viewModel.email}" android:textAppearance="@style/TextAppearance.Headline" @@ -129,6 +129,7 @@ app:layout_constraintEnd_toEndOf="@id/gl_end" app:layout_constraintStart_toStartOf="@id/gl_start" app:layout_constraintTop_toBottomOf="@id/linear_email" + app:rippleColor="@color/white" app:strokeColor="@{viewModel.isValidEmail() == true ? @color/main_2 : @color/gray_300}" /> + app:layout_constraintStart_toStartOf="@id/gl_start" + app:rippleColor="@color/main_3 " /> From c1fa85272a4e199bd33aca356bdbfaebc7571f48 Mon Sep 17 00:00:00 2001 From: jooyyoo Date: Thu, 20 Jul 2023 16:12:25 +0900 Subject: [PATCH 3/8] =?UTF-8?q?[mod]=20#53=20AndroidEntryPoint=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 --- .../presentation/signup/SignUpEmailBottomSheetDialog.kt | 3 +++ .../presentation/signup/SignUpNicknameBottomSheetDialog.kt | 2 ++ 2 files changed, 5 insertions(+) diff --git a/app/src/main/java/com/sopt/geonppang/presentation/signup/SignUpEmailBottomSheetDialog.kt b/app/src/main/java/com/sopt/geonppang/presentation/signup/SignUpEmailBottomSheetDialog.kt index 783a50a0..b57192f9 100644 --- a/app/src/main/java/com/sopt/geonppang/presentation/signup/SignUpEmailBottomSheetDialog.kt +++ b/app/src/main/java/com/sopt/geonppang/presentation/signup/SignUpEmailBottomSheetDialog.kt @@ -1,12 +1,15 @@ package com.sopt.geonppang.presentation.signup import android.os.Bundle +import android.util.Log import android.view.View import androidx.fragment.app.viewModels import com.sopt.geonppang.R import com.sopt.geonppang.databinding.DialogBottomSignupEmailBinding import com.sopt.geonppang.util.binding.BindingBottomSheetDialogFragment +import dagger.hilt.android.AndroidEntryPoint +@AndroidEntryPoint class SignUpEmailBottomSheetDialog : BindingBottomSheetDialogFragment( R.layout.dialog_bottom_signup_email diff --git a/app/src/main/java/com/sopt/geonppang/presentation/signup/SignUpNicknameBottomSheetDialog.kt b/app/src/main/java/com/sopt/geonppang/presentation/signup/SignUpNicknameBottomSheetDialog.kt index 848f46aa..2cfb2fed 100644 --- a/app/src/main/java/com/sopt/geonppang/presentation/signup/SignUpNicknameBottomSheetDialog.kt +++ b/app/src/main/java/com/sopt/geonppang/presentation/signup/SignUpNicknameBottomSheetDialog.kt @@ -6,7 +6,9 @@ import androidx.fragment.app.viewModels import com.sopt.geonppang.R import com.sopt.geonppang.databinding.DialogBottomSignupNicknameBinding import com.sopt.geonppang.util.binding.BindingBottomSheetDialogFragment +import dagger.hilt.android.AndroidEntryPoint +@AndroidEntryPoint class SignUpNicknameBottomSheetDialog : BindingBottomSheetDialogFragment( R.layout.dialog_bottom_signup_nickname From d7e3529851b883012610b70f5bb78d379a470468 Mon Sep 17 00:00:00 2001 From: jooyyoo Date: Thu, 20 Jul 2023 22:21:41 +0900 Subject: [PATCH 4/8] =?UTF-8?q?[feat]=20#53=20DataStore=20=ED=8C=8C?= =?UTF-8?q?=EC=9D=BC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/datasource/local/GPDataStore.kt | 44 +++++++++++++++++++ .../presentation/signup/SignUpViewModel.kt | 20 ++++++++- 2 files changed, 62 insertions(+), 2 deletions(-) create mode 100644 app/src/main/java/com/sopt/geonppang/data/datasource/local/GPDataStore.kt diff --git a/app/src/main/java/com/sopt/geonppang/data/datasource/local/GPDataStore.kt b/app/src/main/java/com/sopt/geonppang/data/datasource/local/GPDataStore.kt new file mode 100644 index 00000000..ff640131 --- /dev/null +++ b/app/src/main/java/com/sopt/geonppang/data/datasource/local/GPDataStore.kt @@ -0,0 +1,44 @@ +package com.sopt.geonppang.data.datasource.local + +import android.content.Context +import android.content.SharedPreferences +import androidx.core.content.edit +import androidx.security.crypto.EncryptedSharedPreferences +import androidx.security.crypto.MasterKey +import com.sopt.geonppang.BuildConfig +import dagger.hilt.android.qualifiers.ApplicationContext +import javax.inject.Inject +import javax.inject.Singleton + +@Singleton +class GPDataStore @Inject constructor(@ApplicationContext context: Context) { + private val masterKey = MasterKey.Builder(context, MasterKey.DEFAULT_MASTER_KEY_ALIAS) + .setKeyScheme(MasterKey.KeyScheme.AES256_GCM) + .build() + + private val dataStore: SharedPreferences = + if (BuildConfig.DEBUG) context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE) + else EncryptedSharedPreferences.create( + context, + FILE_NAME, + masterKey, + EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV, + EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM + ) + + var userNickname: String + set(value) = dataStore.edit { putString(NICKNAME, value) } + get() = dataStore.getString(NICKNAME, "") ?: "" + + fun clear(){ + dataStore.edit{ + clear() + commit() + } + } + + companion object { + const val FILE_NAME = "GunppangSharedPreferences" + const val NICKNAME = "nickname" + } +} \ No newline at end of file diff --git a/app/src/main/java/com/sopt/geonppang/presentation/signup/SignUpViewModel.kt b/app/src/main/java/com/sopt/geonppang/presentation/signup/SignUpViewModel.kt index d840ac18..b9d11700 100644 --- a/app/src/main/java/com/sopt/geonppang/presentation/signup/SignUpViewModel.kt +++ b/app/src/main/java/com/sopt/geonppang/presentation/signup/SignUpViewModel.kt @@ -5,16 +5,20 @@ import androidx.lifecycle.MediatorLiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.map +import com.sopt.geonppang.data.datasource.local.GPDataStore +import com.sopt.geonppang.domain.model.Profile +import com.sopt.geonppang.domain.model.UserInfo import dagger.hilt.android.lifecycle.HiltViewModel import javax.inject.Inject @HiltViewModel -class SignUpViewModel @Inject constructor() : ViewModel() { +class SignUpViewModel @Inject constructor(private val gpDataStore: GPDataStore) : ViewModel() { val email = MutableLiveData("") val password = MutableLiveData("") val password_check = MutableLiveData("") val nickname = MutableLiveData("") + var userNickname: UserInfo? = null val isValidEmail: LiveData = email.map { email -> email.matches(Regex(EMAIL_PATTERN)) /*조건에 만족하는 이메일인지 확인*/ @@ -66,9 +70,21 @@ class SignUpViewModel @Inject constructor() : ViewModel() { return isValidNickname.value == true } + fun saveUserNickname() { + gpDataStore.userNickname = nickname.value.toString() + } + fun setUserNickname(userNickname : UserInfo){ + this.userNickname = userNickname + } + fun getUserNickname(): UserInfo { + return UserInfo( + nickname = nickname.value.toString(), + ) + } + companion object { const val EMAIL_PATTERN = "^[a-zA-Z0-9+-\\_.]+@[a-zA-Z0-9-]+\\.[a-zA-Z0-9-.]+\$" - const val NICKNAME_PATTERN = "^[ㄱ-ㅎ가-힣0-9a-zA-Z]{1,10}$" + const val NICKNAME_PATTERN = "^[\\sㄱ-ㅎ가-힣0-9a-zA-Z]{1,10}\$" const val PASSWORD_PATTERN = "^[A-Za-z0-9]{8,25}$" } } From ca534568d3d7096de02b60aa594786da7365120b Mon Sep 17 00:00:00 2001 From: jooyyoo Date: Thu, 20 Jul 2023 22:22:34 +0900 Subject: [PATCH 5/8] =?UTF-8?q?[feat]=20#53=20UserInfo=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 --- .../main/java/com/sopt/geonppang/domain/model/UserInfo.kt | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 app/src/main/java/com/sopt/geonppang/domain/model/UserInfo.kt diff --git a/app/src/main/java/com/sopt/geonppang/domain/model/UserInfo.kt b/app/src/main/java/com/sopt/geonppang/domain/model/UserInfo.kt new file mode 100644 index 00000000..b27f7de6 --- /dev/null +++ b/app/src/main/java/com/sopt/geonppang/domain/model/UserInfo.kt @@ -0,0 +1,5 @@ +package com.sopt.geonppang.domain.model + +data class UserInfo( + val nickname: String +) From a55356b60b341a1c19e9d5f134daa8fdf5cb1ea8 Mon Sep 17 00:00:00 2001 From: jooyyoo Date: Fri, 21 Jul 2023 00:18:37 +0900 Subject: [PATCH 6/8] =?UTF-8?q?[feat]=20#53=20=EB=8B=89=EB=84=A4=EC=9E=84?= =?UTF-8?q?=20=EC=A0=80=EC=9E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/datasource/local/GPDataStore.kt | 7 ------- .../com/sopt/geonppang/domain/model/UserInfo.kt | 5 ----- .../presentation/filter/FilterActivity.kt | 11 ++++++++++- .../presentation/filter/FilterViewModel.kt | 11 ++++++++++- .../presentation/filter/WelcomeActivity.kt | 10 ++++++++++ .../geonppang/presentation/home/HomeFragment.kt | 4 ++++ .../geonppang/presentation/home/HomeViewModel.kt | 11 +++++++++++ .../presentation/mypage/MyPageFragment.kt | 1 + .../presentation/mypage/MyPageViewModel.kt | 9 +++++++++ .../presentation/signup/SignUpNicknameActivity.kt | 1 + .../presentation/signup/SignUpViewModel.kt | 15 +++------------ app/src/main/res/layout/activity_welcome.xml | 4 ++-- app/src/main/res/layout/fragment_home.xml | 9 ++++++--- .../res/layout/fragment_main_purpose_filter.xml | 2 +- app/src/main/res/layout/fragment_my_page.xml | 2 +- app/src/main/res/values/strings.xml | 6 +++++- 16 files changed, 74 insertions(+), 34 deletions(-) delete mode 100644 app/src/main/java/com/sopt/geonppang/domain/model/UserInfo.kt diff --git a/app/src/main/java/com/sopt/geonppang/data/datasource/local/GPDataStore.kt b/app/src/main/java/com/sopt/geonppang/data/datasource/local/GPDataStore.kt index ff640131..0bcf741d 100644 --- a/app/src/main/java/com/sopt/geonppang/data/datasource/local/GPDataStore.kt +++ b/app/src/main/java/com/sopt/geonppang/data/datasource/local/GPDataStore.kt @@ -30,13 +30,6 @@ class GPDataStore @Inject constructor(@ApplicationContext context: Context) { set(value) = dataStore.edit { putString(NICKNAME, value) } get() = dataStore.getString(NICKNAME, "") ?: "" - fun clear(){ - dataStore.edit{ - clear() - commit() - } - } - companion object { const val FILE_NAME = "GunppangSharedPreferences" const val NICKNAME = "nickname" diff --git a/app/src/main/java/com/sopt/geonppang/domain/model/UserInfo.kt b/app/src/main/java/com/sopt/geonppang/domain/model/UserInfo.kt deleted file mode 100644 index b27f7de6..00000000 --- a/app/src/main/java/com/sopt/geonppang/domain/model/UserInfo.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.sopt.geonppang.domain.model - -data class UserInfo( - val nickname: String -) diff --git a/app/src/main/java/com/sopt/geonppang/presentation/filter/FilterActivity.kt b/app/src/main/java/com/sopt/geonppang/presentation/filter/FilterActivity.kt index 8fc537c5..1a38a8b3 100644 --- a/app/src/main/java/com/sopt/geonppang/presentation/filter/FilterActivity.kt +++ b/app/src/main/java/com/sopt/geonppang/presentation/filter/FilterActivity.kt @@ -34,6 +34,8 @@ class FilterActivity : BindingActivity(R.layout.activity_ maxPage = intent.getIntExtra(MAX_PAGE, -1) binding.tvFilterPageNumber.text = setPageText(maxPage - 2, maxPage) + + viewModel.setUserNickName() } private fun addListeners() { @@ -57,7 +59,7 @@ class FilterActivity : BindingActivity(R.layout.activity_ if (viewModel.previousActivityName.value == FilterInfoType.HOME.activityName) { startActivity(Intent(this, MainActivity::class.java)) } else if (viewModel.previousActivityName.value == FilterInfoType.ONBOARDING.activityName) { - startActivity(Intent(this, WelcomeActivity::class.java)) + moveToWelcomActivity() } else { val intent = Intent(this, MainActivity::class.java) intent.putExtra(MYPAGE_FRAGMENT, MYPAGE_FRAGMENT) @@ -89,6 +91,12 @@ class FilterActivity : BindingActivity(R.layout.activity_ } } + private fun moveToWelcomActivity() { + val intent = Intent(this, WelcomeActivity::class.java) + intent.putExtra(NICKNAME, viewModel.nickName.value) + startActivity(intent) + } + private fun setPreviousActivity() { val filterInfoType = intent.getStringExtra(FILTER_INFO) filterInfoType?.let { filterInfoType -> @@ -103,6 +111,7 @@ class FilterActivity : BindingActivity(R.layout.activity_ companion object { const val FILTER_INFO = "filterInfo" const val MYPAGE_FRAGMENT = "MyPageFragment" + const val NICKNAME = "nickName" const val MAX_PAGE = "maxPage" const val PAGE_FORMAT = "%d/%d" } diff --git a/app/src/main/java/com/sopt/geonppang/presentation/filter/FilterViewModel.kt b/app/src/main/java/com/sopt/geonppang/presentation/filter/FilterViewModel.kt index 2c3d1ec5..455c1402 100644 --- a/app/src/main/java/com/sopt/geonppang/presentation/filter/FilterViewModel.kt +++ b/app/src/main/java/com/sopt/geonppang/presentation/filter/FilterViewModel.kt @@ -5,6 +5,7 @@ import androidx.lifecycle.MediatorLiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope +import com.sopt.geonppang.data.datasource.local.GPDataStore import com.sopt.geonppang.data.model.request.RequestFilter import com.sopt.geonppang.domain.model.SelectedFilter import com.sopt.geonppang.domain.repository.FilterRepository @@ -20,7 +21,8 @@ import javax.inject.Inject @HiltViewModel class FilterViewModel @Inject constructor( - private val filterRepository: FilterRepository + private val filterRepository: FilterRepository, + private val gpDataStore: GPDataStore ) : ViewModel() { private val _selectedFilterState = MutableStateFlow>(UiState.Loading) val selectedFilterState get() = _selectedFilterState.asStateFlow() @@ -31,6 +33,9 @@ class FilterViewModel @Inject constructor( private val _mainPurpose: MutableLiveData = MutableLiveData() val mainPurpose: LiveData = _mainPurpose + private val _nickName: MutableLiveData = MutableLiveData() + val nickName: LiveData = _nickName + fun setMainPurpose(mainPurposeType: MainPurposeType) { _mainPurpose.value = mainPurposeType } @@ -82,6 +87,10 @@ class FilterViewModel @Inject constructor( _previousActivityName.value = filterInfoTypeName } + fun setUserNickName(){ + _nickName.value = gpDataStore.userNickname + } + fun setUserFilter() { viewModelScope.launch { _mainPurpose.value?.let { diff --git a/app/src/main/java/com/sopt/geonppang/presentation/filter/WelcomeActivity.kt b/app/src/main/java/com/sopt/geonppang/presentation/filter/WelcomeActivity.kt index 014f655a..383214e8 100644 --- a/app/src/main/java/com/sopt/geonppang/presentation/filter/WelcomeActivity.kt +++ b/app/src/main/java/com/sopt/geonppang/presentation/filter/WelcomeActivity.kt @@ -11,9 +11,15 @@ class WelcomeActivity : BindingActivity(R.layout.activit override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + initLayout() addListeners() } + private fun initLayout() { + val nickName = intent.getStringExtra(NICKNAME) + binding.tvStartWelcomeTitle.text = this.getString(R.string.welcome_to_geonppang, nickName) + } + private fun addListeners() { binding.btnWelcome.setOnClickListener { val intent = Intent(this, MainActivity::class.java) @@ -21,4 +27,8 @@ class WelcomeActivity : BindingActivity(R.layout.activit finish() } } + + companion object { + const val NICKNAME = "nickName" + } } diff --git a/app/src/main/java/com/sopt/geonppang/presentation/home/HomeFragment.kt b/app/src/main/java/com/sopt/geonppang/presentation/home/HomeFragment.kt index 5765b86b..c9630d41 100644 --- a/app/src/main/java/com/sopt/geonppang/presentation/home/HomeFragment.kt +++ b/app/src/main/java/com/sopt/geonppang/presentation/home/HomeFragment.kt @@ -27,6 +27,8 @@ class HomeFragment : BindingFragment(R.layout.fragment_home override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + binding.viewModel = viewModel + binding.lifecycleOwner = this initLayout() addListeners() @@ -39,6 +41,8 @@ class HomeFragment : BindingFragment(R.layout.fragment_home bestReviewAdapter = BestReviewAdapter(::moveToDetail) binding.rvHomeBestReviewList.adapter = bestReviewAdapter + + viewModel.setUserNickName() } private fun addListeners() { diff --git a/app/src/main/java/com/sopt/geonppang/presentation/home/HomeViewModel.kt b/app/src/main/java/com/sopt/geonppang/presentation/home/HomeViewModel.kt index 36723df9..c2274dab 100644 --- a/app/src/main/java/com/sopt/geonppang/presentation/home/HomeViewModel.kt +++ b/app/src/main/java/com/sopt/geonppang/presentation/home/HomeViewModel.kt @@ -1,7 +1,10 @@ package com.sopt.geonppang.presentation.home +import androidx.lifecycle.LiveData +import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope +import com.sopt.geonppang.data.datasource.local.GPDataStore import com.sopt.geonppang.domain.model.BestBakery import com.sopt.geonppang.domain.model.BestReview import com.sopt.geonppang.domain.repository.HomeRepository @@ -14,6 +17,7 @@ import javax.inject.Inject @HiltViewModel class HomeViewModel @Inject constructor( + private val gpDataStore: GPDataStore, private val homeRepository: HomeRepository, ) : ViewModel() { private var _bestBakeryListState = MutableStateFlow>>(UiState.Loading) @@ -22,11 +26,18 @@ class HomeViewModel @Inject constructor( private var _bestReviewListState = MutableStateFlow>>(UiState.Loading) val bestReviewListState get() = _bestReviewListState.asStateFlow() + private val _nickName = MutableStateFlow(null) + val nickName get() = _nickName.asStateFlow() + init { fetchBestBakeryList() fetchBestReviewList() } + fun setUserNickName() { + _nickName.value = gpDataStore.userNickname + } + private fun fetchBestBakeryList() { viewModelScope.launch { homeRepository.fetchBestBakery() diff --git a/app/src/main/java/com/sopt/geonppang/presentation/mypage/MyPageFragment.kt b/app/src/main/java/com/sopt/geonppang/presentation/mypage/MyPageFragment.kt index 485d1e23..d8083a75 100644 --- a/app/src/main/java/com/sopt/geonppang/presentation/mypage/MyPageFragment.kt +++ b/app/src/main/java/com/sopt/geonppang/presentation/mypage/MyPageFragment.kt @@ -27,6 +27,7 @@ class MyPageFragment : BindingFragment(R.layout.fragment_ private fun initLayout() { viewModel.fetchMypageInfo() + viewModel.setUserNickName() } private fun addListeners() { diff --git a/app/src/main/java/com/sopt/geonppang/presentation/mypage/MyPageViewModel.kt b/app/src/main/java/com/sopt/geonppang/presentation/mypage/MyPageViewModel.kt index d470c6b3..06cafe69 100644 --- a/app/src/main/java/com/sopt/geonppang/presentation/mypage/MyPageViewModel.kt +++ b/app/src/main/java/com/sopt/geonppang/presentation/mypage/MyPageViewModel.kt @@ -2,6 +2,7 @@ package com.sopt.geonppang.presentation.mypage import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope +import com.sopt.geonppang.data.datasource.local.GPDataStore import com.sopt.geonppang.domain.model.Bakery import com.sopt.geonppang.domain.model.MyReview import com.sopt.geonppang.domain.model.Profile @@ -16,6 +17,7 @@ import javax.inject.Inject @HiltViewModel class MyPageViewModel @Inject constructor( + private val gpDataStore: GPDataStore, private val mypageRepository: MypageRepository, ) : ViewModel() { private var _mypageInfoState = MutableStateFlow(null) @@ -35,11 +37,18 @@ class MyPageViewModel @Inject constructor( private var _myBookmarkCount = MutableStateFlow(null) val myBookmarkCount get() = _myBookmarkCount.asStateFlow() + private val _nickName = MutableStateFlow(null) + val nickName get() = _nickName.asStateFlow() + init { fetchMypageReviewList() fetchMypageBookmarkList() } + fun setUserNickName() { + _nickName.value = gpDataStore.userNickname + } + fun fetchMypageInfo() { viewModelScope.launch { mypageRepository.fetchMypageInfo() diff --git a/app/src/main/java/com/sopt/geonppang/presentation/signup/SignUpNicknameActivity.kt b/app/src/main/java/com/sopt/geonppang/presentation/signup/SignUpNicknameActivity.kt index 8cd5e5f7..a0d42507 100644 --- a/app/src/main/java/com/sopt/geonppang/presentation/signup/SignUpNicknameActivity.kt +++ b/app/src/main/java/com/sopt/geonppang/presentation/signup/SignUpNicknameActivity.kt @@ -43,6 +43,7 @@ class SignUpNicknameActivity : intent.putExtra(FILTER_INFO, FilterInfoType.ONBOARDING.activityName) intent.putExtra(MAX_PAGE, FilterInfoType.ONBOARDING.maxPage) startActivity(intent) + viewModel.saveUserNickname() } } diff --git a/app/src/main/java/com/sopt/geonppang/presentation/signup/SignUpViewModel.kt b/app/src/main/java/com/sopt/geonppang/presentation/signup/SignUpViewModel.kt index b9d11700..b6a63584 100644 --- a/app/src/main/java/com/sopt/geonppang/presentation/signup/SignUpViewModel.kt +++ b/app/src/main/java/com/sopt/geonppang/presentation/signup/SignUpViewModel.kt @@ -6,8 +6,6 @@ import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.map import com.sopt.geonppang.data.datasource.local.GPDataStore -import com.sopt.geonppang.domain.model.Profile -import com.sopt.geonppang.domain.model.UserInfo import dagger.hilt.android.lifecycle.HiltViewModel import javax.inject.Inject @@ -18,7 +16,6 @@ class SignUpViewModel @Inject constructor(private val gpDataStore: GPDataStore) val password_check = MutableLiveData("") val nickname = MutableLiveData("") - var userNickname: UserInfo? = null val isValidEmail: LiveData = email.map { email -> email.matches(Regex(EMAIL_PATTERN)) /*조건에 만족하는 이메일인지 확인*/ @@ -71,15 +68,9 @@ class SignUpViewModel @Inject constructor(private val gpDataStore: GPDataStore) } fun saveUserNickname() { - gpDataStore.userNickname = nickname.value.toString() - } - fun setUserNickname(userNickname : UserInfo){ - this.userNickname = userNickname - } - fun getUserNickname(): UserInfo { - return UserInfo( - nickname = nickname.value.toString(), - ) + nickname.value?.let { nickName -> + gpDataStore.userNickname = nickName + } } companion object { diff --git a/app/src/main/res/layout/activity_welcome.xml b/app/src/main/res/layout/activity_welcome.xml index c240e078..fc1581b3 100644 --- a/app/src/main/res/layout/activity_welcome.xml +++ b/app/src/main/res/layout/activity_welcome.xml @@ -34,11 +34,11 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="112dp" - android:text="건빵화이팅님\n건빵에 오신 걸 환영해요!" android:textAppearance="@style/TextAppearance.Title1" android:textColor="@color/gray_700" app:layout_constraintStart_toStartOf="@id/gl_start" - app:layout_constraintTop_toTopOf="parent" /> + app:layout_constraintTop_toTopOf="parent" + tools:text="건빵화이팅님\n건빵에 오신 걸 환영해요!" /> + 이미 존재하는 닉네임입니다 - 바이블님 맞춤\t + %s님\n건빵에 오신걸 환영해요! + %s님 맞춤\t BEST 건빵집 궁금한 건빵집을 입력해주세요! BEST 리뷰 @@ -110,6 +111,7 @@ 어떤 성분을 원하시나요? 시작하기 + 반가워요 %s님 :)\n건빵을 찾은 이유를 알려주세요! 건강 · 체질 아토피 , 알레르기 , 암 , 당뇨 , 소화문제 맛 · 다이어트 @@ -130,6 +132,8 @@ 원재료 공개 비공개 + %s님\n건빵에 오신 걸 환영해요! + 건빵집은 어떠셨나요? 좋아요 From 02eef9f2e584c79d95476a0bfc3211cb936ade86 Mon Sep 17 00:00:00 2001 From: jooyyoo Date: Fri, 21 Jul 2023 00:25:10 +0900 Subject: [PATCH 7/8] =?UTF-8?q?[mod]=20#53=20=EB=B2=A0=EC=8A=A4=ED=8A=B8?= =?UTF-8?q?=20=EB=A6=AC=EB=B7=B0=20DTO=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sopt/geonppang/data/model/response/ResponseBestReview.kt | 2 +- app/src/main/java/com/sopt/geonppang/domain/model/BestReview.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/sopt/geonppang/data/model/response/ResponseBestReview.kt b/app/src/main/java/com/sopt/geonppang/data/model/response/ResponseBestReview.kt index e6d2d9a6..b9a2f018 100644 --- a/app/src/main/java/com/sopt/geonppang/data/model/response/ResponseBestReview.kt +++ b/app/src/main/java/com/sopt/geonppang/data/model/response/ResponseBestReview.kt @@ -23,7 +23,7 @@ data class ResponseBestReview( val isVegan: Boolean, val reviewCount: Int, val reviewText: String, - val secondMaxRecommendKeyword: String, + val secondMaxRecommendKeyword: String?, val secondNearStation: String, ) diff --git a/app/src/main/java/com/sopt/geonppang/domain/model/BestReview.kt b/app/src/main/java/com/sopt/geonppang/domain/model/BestReview.kt index 73d3f10d..22bd94ed 100644 --- a/app/src/main/java/com/sopt/geonppang/domain/model/BestReview.kt +++ b/app/src/main/java/com/sopt/geonppang/domain/model/BestReview.kt @@ -5,7 +5,7 @@ data class BestReview( val bakeryName: String, val reviewText: String, val firstReviewChip: String, - val secondReviewChip: String, + val secondReviewChip: String?, val bookmarkCount: Int, val bakeryImage: String, val reviewCount: Int, From 0dab5330be93b93a219d0f8f84f4da9d52a13ea1 Mon Sep 17 00:00:00 2001 From: jooyyoo Date: Fri, 21 Jul 2023 00:30:34 +0900 Subject: [PATCH 8/8] =?UTF-8?q?[chore]=20#53=20klint=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/sopt/geonppang/data/datasource/local/GPDataStore.kt | 2 +- .../com/sopt/geonppang/presentation/filter/FilterViewModel.kt | 2 +- .../java/com/sopt/geonppang/presentation/home/HomeViewModel.kt | 2 -- .../presentation/signup/SignUpEmailBottomSheetDialog.kt | 1 - 4 files changed, 2 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/sopt/geonppang/data/datasource/local/GPDataStore.kt b/app/src/main/java/com/sopt/geonppang/data/datasource/local/GPDataStore.kt index 0bcf741d..5150f5d6 100644 --- a/app/src/main/java/com/sopt/geonppang/data/datasource/local/GPDataStore.kt +++ b/app/src/main/java/com/sopt/geonppang/data/datasource/local/GPDataStore.kt @@ -34,4 +34,4 @@ class GPDataStore @Inject constructor(@ApplicationContext context: Context) { const val FILE_NAME = "GunppangSharedPreferences" const val NICKNAME = "nickname" } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/sopt/geonppang/presentation/filter/FilterViewModel.kt b/app/src/main/java/com/sopt/geonppang/presentation/filter/FilterViewModel.kt index 455c1402..8c12677a 100644 --- a/app/src/main/java/com/sopt/geonppang/presentation/filter/FilterViewModel.kt +++ b/app/src/main/java/com/sopt/geonppang/presentation/filter/FilterViewModel.kt @@ -87,7 +87,7 @@ class FilterViewModel @Inject constructor( _previousActivityName.value = filterInfoTypeName } - fun setUserNickName(){ + fun setUserNickName() { _nickName.value = gpDataStore.userNickname } diff --git a/app/src/main/java/com/sopt/geonppang/presentation/home/HomeViewModel.kt b/app/src/main/java/com/sopt/geonppang/presentation/home/HomeViewModel.kt index c2274dab..287ea1cb 100644 --- a/app/src/main/java/com/sopt/geonppang/presentation/home/HomeViewModel.kt +++ b/app/src/main/java/com/sopt/geonppang/presentation/home/HomeViewModel.kt @@ -1,7 +1,5 @@ package com.sopt.geonppang.presentation.home -import androidx.lifecycle.LiveData -import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.sopt.geonppang.data.datasource.local.GPDataStore diff --git a/app/src/main/java/com/sopt/geonppang/presentation/signup/SignUpEmailBottomSheetDialog.kt b/app/src/main/java/com/sopt/geonppang/presentation/signup/SignUpEmailBottomSheetDialog.kt index b57192f9..204f2193 100644 --- a/app/src/main/java/com/sopt/geonppang/presentation/signup/SignUpEmailBottomSheetDialog.kt +++ b/app/src/main/java/com/sopt/geonppang/presentation/signup/SignUpEmailBottomSheetDialog.kt @@ -1,7 +1,6 @@ package com.sopt.geonppang.presentation.signup import android.os.Bundle -import android.util.Log import android.view.View import androidx.fragment.app.viewModels import com.sopt.geonppang.R