From 862a4def07b616138ce772d9ae4e104faae1f5c4 Mon Sep 17 00:00:00 2001 From: 40food <40food@naver.com> Date: Tue, 6 Feb 2024 13:12:08 +0900 Subject: [PATCH] =?UTF-8?q?chore:=20=EC=9D=B8=ED=8A=B8=EB=A1=9C,=20?= =?UTF-8?q?=EB=A1=9C=EA=B7=B8=EC=9D=B8,=20=ED=9A=8C=EC=9B=90=EA=B0=80?= =?UTF-8?q?=EC=9E=85=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 3 +- app/src/main/AndroidManifest.xml | 18 +- .../java/com/umc/ttoklip/data/api/KakaoApi.kt | 16 + .../umc/ttoklip/data/model/KakaoResponse.kt | 15 + .../main/java/com/umc/ttoklip/di/appModul.kt | 30 ++ .../presentation/intro/IntroActivity.kt | 18 +- .../presentation/intro/IntroFragment.kt | 19 +- .../presentation/login/LoginActivity.kt | 42 +-- .../signup/DirectLocationActivity.kt | 45 +++ .../signup/DirectLocationRVAdapter.kt | 27 ++ .../presentation/signup/LocationActivity.kt | 179 +++++++++++ .../presentation/signup/SignupActivity.kt | 22 +- .../signup/fragments/Signup1Fragment.kt | 57 +++- .../signup/fragments/Signup2Fragment.kt | 95 +++++- .../signup/fragments/Signup3Fragment.kt | 109 ++++++- .../signup/fragments/Signup4Fragment.kt | 92 +++++- .../signup/fragments/Signup5Fragment.kt | 101 +++++++ .../signup/fragments/SignupTermFragment.kt | 25 ++ .../main/res/drawable/ic_checkpre_off_16.xml | 2 +- .../main/res/drawable/ic_checkpre_on_16.xml | 2 +- app/src/main/res/drawable/ic_kakaotalk_18.xml | 10 + app/src/main/res/drawable/ic_kakaotalk_46.xml | 24 -- app/src/main/res/drawable/ic_naver_16.xml | 9 + app/src/main/res/drawable/ic_naver_46.xml | 12 - app/src/main/res/drawable/ic_ttoklip1_78.xml | 10 + app/src/main/res/drawable/ic_ttoklip1_81.xml | 10 - app/src/main/res/drawable/ic_ttoklip2_63.xml | 19 ++ app/src/main/res/drawable/ic_ttoklip2_64.xml | 10 - app/src/main/res/drawable/item_camera.xml | 14 + .../main/res/drawable/item_pwcheck_off.xml | 9 + app/src/main/res/drawable/item_pwcheck_on.xml | 9 + app/src/main/res/drawable/oval_double.xml | 28 ++ ...val_fill_strok_1.xml => oval_stroke_1.xml} | 4 +- .../drawable/rectangle_corner_100_black.xml | 6 + .../drawable/rectangle_corner_10_yellow.xml | 6 + .../rectangle_corner_20_stroke_1_gray20.xml | 6 + .../res/layout/activity_direct_location.xml | 70 +++++ app/src/main/res/layout/activity_intro.xml | 22 +- app/src/main/res/layout/activity_location.xml | 282 ++++++++++-------- app/src/main/res/layout/activity_login.xml | 243 ++++----------- app/src/main/res/layout/activity_signup.xml | 36 ++- app/src/main/res/layout/activity_splash.xml | 4 +- app/src/main/res/layout/fragment_intro.xml | 26 +- app/src/main/res/layout/fragment_signup1.xml | 159 +++++----- app/src/main/res/layout/fragment_signup2.xml | 231 +++++++------- app/src/main/res/layout/fragment_signup3.xml | 167 ++++++----- app/src/main/res/layout/fragment_signup4.xml | 249 +++++++++------- app/src/main/res/layout/fragment_signup5.xml | 201 +++++++++++++ .../main/res/layout/fragment_signup_term.xml | 54 ++++ app/src/main/res/layout/item_address.xml | 31 ++ app/src/main/res/navigation/signup_graph.xml | 54 ++-- app/src/main/res/values/colors.xml | 3 + app/src/main/res/values/strings.xml | 8 + app/src/main/res/values/style.xml | 20 ++ 54 files changed, 2076 insertions(+), 887 deletions(-) create mode 100644 app/src/main/java/com/umc/ttoklip/data/api/KakaoApi.kt create mode 100644 app/src/main/java/com/umc/ttoklip/data/model/KakaoResponse.kt create mode 100644 app/src/main/java/com/umc/ttoklip/presentation/signup/DirectLocationActivity.kt create mode 100644 app/src/main/java/com/umc/ttoklip/presentation/signup/DirectLocationRVAdapter.kt create mode 100644 app/src/main/java/com/umc/ttoklip/presentation/signup/LocationActivity.kt create mode 100644 app/src/main/java/com/umc/ttoklip/presentation/signup/fragments/Signup5Fragment.kt create mode 100644 app/src/main/java/com/umc/ttoklip/presentation/signup/fragments/SignupTermFragment.kt create mode 100644 app/src/main/res/drawable/ic_kakaotalk_18.xml delete mode 100644 app/src/main/res/drawable/ic_kakaotalk_46.xml create mode 100644 app/src/main/res/drawable/ic_naver_16.xml delete mode 100644 app/src/main/res/drawable/ic_naver_46.xml create mode 100644 app/src/main/res/drawable/ic_ttoklip1_78.xml delete mode 100644 app/src/main/res/drawable/ic_ttoklip1_81.xml create mode 100644 app/src/main/res/drawable/ic_ttoklip2_63.xml delete mode 100644 app/src/main/res/drawable/ic_ttoklip2_64.xml create mode 100644 app/src/main/res/drawable/item_camera.xml create mode 100644 app/src/main/res/drawable/item_pwcheck_off.xml create mode 100644 app/src/main/res/drawable/item_pwcheck_on.xml create mode 100644 app/src/main/res/drawable/oval_double.xml rename app/src/main/res/drawable/{oval_fill_strok_1.xml => oval_stroke_1.xml} (66%) create mode 100644 app/src/main/res/drawable/rectangle_corner_100_black.xml create mode 100644 app/src/main/res/drawable/rectangle_corner_10_yellow.xml create mode 100644 app/src/main/res/drawable/rectangle_corner_20_stroke_1_gray20.xml create mode 100644 app/src/main/res/layout/activity_direct_location.xml create mode 100644 app/src/main/res/layout/fragment_signup5.xml create mode 100644 app/src/main/res/layout/fragment_signup_term.xml create mode 100644 app/src/main/res/layout/item_address.xml diff --git a/app/build.gradle b/app/build.gradle index be10f12a..73b3aed4 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -107,7 +107,8 @@ dependencies { implementation 'com.google.android.flexbox:flexbox:3.0.0' //naver map - //implementation "com.naver.maps:map-sdk:3.16.2" + implementation "com.naver.maps:map-sdk:3.17.0" + implementation "com.google.android.gms:play-services-location:21.1.0" } kapt { correctErrorTypes true diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 54c12998..b812a4a0 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -7,6 +7,7 @@ + + + + + - - - - - - - - - +} \ No newline at end of file diff --git a/app/src/main/java/com/umc/ttoklip/data/model/KakaoResponse.kt b/app/src/main/java/com/umc/ttoklip/data/model/KakaoResponse.kt new file mode 100644 index 00000000..3974d967 --- /dev/null +++ b/app/src/main/java/com/umc/ttoklip/data/model/KakaoResponse.kt @@ -0,0 +1,15 @@ +package com.umc.ttoklip.data.model + +class KakaoResponse{ + data class ResultSearchKeyword( + var documents: List // 검색 결과 + ) + data class Place( + var id: String, // 장소 ID + var place_name: String, // 장소명, 업체명 + var address_name: String, // 전체 지번 주소 + var road_address_name: String, // 전체 도로명 주소 + var x: String, // X 좌표값 혹은 longitude + var y: String // Y 좌표값 혹은 latitude + ) +} diff --git a/app/src/main/java/com/umc/ttoklip/di/appModul.kt b/app/src/main/java/com/umc/ttoklip/di/appModul.kt index 9739ad39..034f2d17 100644 --- a/app/src/main/java/com/umc/ttoklip/di/appModul.kt +++ b/app/src/main/java/com/umc/ttoklip/di/appModul.kt @@ -1,2 +1,32 @@ package com.umc.ttoklip.di +import com.umc.ttoklip.R +import com.umc.ttoklip.data.api.KakaoApi +import dagger.Module +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import retrofit2.Retrofit +import retrofit2.converter.gson.GsonConverterFactory +import retrofit2.create + +@Module +@InstallIn(SingletonComponent::class) +object appModul { + class kakaoAddress { + companion object { + var BASE_URL = R.string.kakao.toString() + var API_KEY = R.string.kakao_api_key.toString() + } + + object kakaoApiRetrofitClient { + private val retrofit: Retrofit.Builder by lazy { + Retrofit.Builder() + .baseUrl(BASE_URL) + .addConverterFactory(GsonConverterFactory.create()) + } + val apiService: KakaoApi by lazy { + retrofit.build().create(KakaoApi::class.java) + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/umc/ttoklip/presentation/intro/IntroActivity.kt b/app/src/main/java/com/umc/ttoklip/presentation/intro/IntroActivity.kt index 1e0a190a..47226c05 100644 --- a/app/src/main/java/com/umc/ttoklip/presentation/intro/IntroActivity.kt +++ b/app/src/main/java/com/umc/ttoklip/presentation/intro/IntroActivity.kt @@ -11,15 +11,15 @@ class IntroActivity:BaseActivity(R.layout.activity_intro){ override fun initView() { binding.introIntroVp.apply { adapter=IntroVPAdapter(this@IntroActivity,3) - registerOnPageChangeCallback(object:ViewPager2.OnPageChangeCallback(){ - override fun onPageSelected(position: Int) { - super.onPageSelected(position) - when(position){ - 2->binding.introNextBtn.text="똑립 시작하기" - else->binding.introNextBtn.text="다음" - } - } - }) +// registerOnPageChangeCallback(object:ViewPager2.OnPageChangeCallback(){ +// override fun onPageSelected(position: Int) { +// super.onPageSelected(position) +// when(position){ +// 2->binding.introNextBtn.text="똑립 시작하기" +// else->binding.introNextBtn.text="다음" +// } +// } +// }) } binding.introIndicator.attachTo(binding.introIntroVp) diff --git a/app/src/main/java/com/umc/ttoklip/presentation/intro/IntroFragment.kt b/app/src/main/java/com/umc/ttoklip/presentation/intro/IntroFragment.kt index 99c44ca2..5dde2a69 100644 --- a/app/src/main/java/com/umc/ttoklip/presentation/intro/IntroFragment.kt +++ b/app/src/main/java/com/umc/ttoklip/presentation/intro/IntroFragment.kt @@ -1,6 +1,10 @@ package com.umc.ttoklip.presentation.intro +import android.graphics.Typeface import android.os.Bundle +import android.text.Spannable +import android.text.SpannableStringBuilder +import android.text.style.StyleSpan import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -17,13 +21,16 @@ class IntroFragment(val position:Int): Fragment() { binding=FragmentIntroBinding.inflate(inflater,container,false) when (position){ - 0->{binding.itemIntroTitleTv.text="우리, 꿀팁 공유해요!" - binding.itemIntroDescTv.text="독립생활을 하는데 어려운 점을 공유하고\n도움을 주며 해결해봐요" + 0->{val spannable=SpannableStringBuilder("어려움과 도움을 함께\n독립생활의 꿀팁공유") + spannable.setSpan(StyleSpan(Typeface.BOLD),11,22, Spannable.SPAN_EXCLUSIVE_INCLUSIVE) + binding.itemIntroTitleTv.text=spannable /**인앱화면 연결 필요**/} - 1->{binding.itemIntroTitleTv.text="오늘은 또 어떤 정보가?" - binding.itemIntroDescTv.text="독립생활을 하는데 필요한 유용한\n정보들을 받아봐요"} - else->{binding.itemIntroTitleTv.text="우리 동네 안에서 서로서로" - binding.itemIntroDescTv.text="우리 동네 똑립이들과 친해지고, 공구하고,\n음식 배달비도 아껴봐요"} + 1->{val spannable=SpannableStringBuilder("자취에 도움되는\n최신뉴스를 한눈에") + spannable.setSpan(StyleSpan(Typeface.BOLD),8,13, Spannable.SPAN_EXCLUSIVE_INCLUSIVE) + binding.itemIntroTitleTv.text=spannable} + else->{val spannable=SpannableStringBuilder("혼자서는 비싸,\n동네친구들과 함께") + spannable.setSpan(StyleSpan(Typeface.BOLD),15,18, Spannable.SPAN_EXCLUSIVE_INCLUSIVE) + binding.itemIntroTitleTv.text=spannable} } return binding.root diff --git a/app/src/main/java/com/umc/ttoklip/presentation/login/LoginActivity.kt b/app/src/main/java/com/umc/ttoklip/presentation/login/LoginActivity.kt index 3c95448b..68ee4e9f 100644 --- a/app/src/main/java/com/umc/ttoklip/presentation/login/LoginActivity.kt +++ b/app/src/main/java/com/umc/ttoklip/presentation/login/LoginActivity.kt @@ -2,6 +2,8 @@ package com.umc.ttoklip.presentation.login import android.content.Intent import android.content.SharedPreferences +import android.text.InputType +import android.view.View import com.umc.ttoklip.R import com.umc.ttoklip.databinding.ActivityLoginBinding import com.umc.ttoklip.presentation.MainActivity @@ -11,48 +13,16 @@ import com.umc.ttoklip.presentation.signup.SignupActivity class LoginActivity:BaseActivity(R.layout.activity_login) { private var isSaveId:Boolean=false + private var isShowPw:Boolean=false override fun initView() { - val spf=getSharedPreferences("id", MODE_PRIVATE) - loadSaveId(spf) - binding.loginLoginBtn.setOnClickListener { - setSaveId(isSaveId,spf) + binding.loginNaverBtn.setOnClickListener { + //임시로 연결 startActivity(Intent(this, MainActivity::class.java)) } - binding.loginSignupBtn.setOnClickListener { + binding.loginKakaoBtn.setOnClickListener { startActivity(Intent(this, SignupActivity::class.java)) } - binding.loginSaveIdIv.setOnClickListener { - setSaveIdStatus(!isSaveId) - } - } - - private fun loadSaveId(spf: SharedPreferences) { - isSaveId=spf.getBoolean("saveIdCheck",false) - setSaveIdStatus(isSaveId) - binding.loginIdEt.setText(spf.getString("idString","")) - } - private fun setSaveId(isSaveId: Boolean, spf: SharedPreferences){ - val editor=spf.edit() - if (isSaveId){//나중에 로그인 ok도 조건으로 달기 - editor.putBoolean("saveIdCheck",true) - editor.putString("idString",binding.loginIdEt.text.toString().trim()) - editor.apply() - }else{ - editor.putBoolean("saveIdCheck",false) - editor.remove("idString") - editor.apply() - } - } - - private fun setSaveIdStatus(isSaveId: Boolean) { - if(isSaveId){ - this.isSaveId=true - binding.loginSaveIdIv.setImageResource(R.drawable.ic_check_on_20) - }else{ - this.isSaveId=false - binding.loginSaveIdIv.setImageResource(R.drawable.ic_check_off_20) - } } override fun onBackPressed() { diff --git a/app/src/main/java/com/umc/ttoklip/presentation/signup/DirectLocationActivity.kt b/app/src/main/java/com/umc/ttoklip/presentation/signup/DirectLocationActivity.kt new file mode 100644 index 00000000..642b157a --- /dev/null +++ b/app/src/main/java/com/umc/ttoklip/presentation/signup/DirectLocationActivity.kt @@ -0,0 +1,45 @@ +package com.umc.ttoklip.presentation.signup + +import android.util.Log +import androidx.lifecycle.MutableLiveData +import com.umc.ttoklip.R +import com.umc.ttoklip.data.model.KakaoResponse +import com.umc.ttoklip.databinding.ActivityDirectLocationBinding +import com.umc.ttoklip.di.appModul +import com.umc.ttoklip.presentation.base.BaseActivity +import retrofit2.Call +import retrofit2.Response + +class DirectLocationActivity : + BaseActivity(R.layout.activity_direct_location) { + private val kakaoInfo = appModul.kakaoAddress.Companion + private val kakaoApi = appModul.kakaoAddress.kakaoApiRetrofitClient.apiService + + override fun initView() { + callKakaoSearch("서울시 관악구 조원로12길 28") + } + + fun callKakaoSearch(address: String) { + val kakao = MutableLiveData() + kakaoApi.getSearchKeyword(kakaoInfo.API_KEY, query = address) + .enqueue(object : retrofit2.Callback { + override fun onResponse( + call: Call, + response: Response + ) { + kakao.value = response.body() + Log.i("kakao", "${kakao.value!!.documents[0].address_name}") + } + + override fun onFailure( + call: Call, + t: Throwable + ) { + t.printStackTrace() + } + }) + } + + override fun initObserver() { + } +} \ No newline at end of file diff --git a/app/src/main/java/com/umc/ttoklip/presentation/signup/DirectLocationRVAdapter.kt b/app/src/main/java/com/umc/ttoklip/presentation/signup/DirectLocationRVAdapter.kt new file mode 100644 index 00000000..83913cd2 --- /dev/null +++ b/app/src/main/java/com/umc/ttoklip/presentation/signup/DirectLocationRVAdapter.kt @@ -0,0 +1,27 @@ +package com.umc.ttoklip.presentation.signup + +import android.view.LayoutInflater +import android.view.ViewGroup +import androidx.recyclerview.widget.RecyclerView +import com.umc.ttoklip.data.model.KakaoResponse +import com.umc.ttoklip.databinding.ItemAddressBinding + +class DirectLocationRVAdapter(private val addressList:List):RecyclerView.Adapter() { + inner class ViewHolder(val binding:ItemAddressBinding):RecyclerView.ViewHolder(binding.root){ + fun bind(place:KakaoResponse.Place){ + binding.itemAddressTitleTv.text=place.place_name + binding.itemAddressDetailTv.text=place.address_name + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { + val binding:ItemAddressBinding=ItemAddressBinding.inflate(LayoutInflater.from(parent.context),parent,false) + return ViewHolder(binding) + } + + override fun getItemCount(): Int=addressList.size + + override fun onBindViewHolder(holder: ViewHolder, position: Int) { + holder.bind(addressList[position]) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/umc/ttoklip/presentation/signup/LocationActivity.kt b/app/src/main/java/com/umc/ttoklip/presentation/signup/LocationActivity.kt new file mode 100644 index 00000000..c3c81e16 --- /dev/null +++ b/app/src/main/java/com/umc/ttoklip/presentation/signup/LocationActivity.kt @@ -0,0 +1,179 @@ +package com.umc.ttoklip.presentation.signup + +import android.Manifest +import android.content.pm.PackageManager +import android.location.Address +import android.location.Geocoder +import android.os.Build +import android.widget.SeekBar +import androidx.core.app.ActivityCompat +import androidx.core.content.ContextCompat +import com.naver.maps.map.LocationTrackingMode +import com.naver.maps.map.MapFragment +import com.naver.maps.map.NaverMap +import com.naver.maps.map.OnMapReadyCallback +import com.naver.maps.map.UiSettings +import com.naver.maps.map.overlay.OverlayImage +import com.naver.maps.map.util.FusedLocationSource +import com.umc.ttoklip.R +import com.umc.ttoklip.databinding.ActivityLocationBinding +import com.umc.ttoklip.presentation.base.BaseActivity +import java.util.Locale + +class LocationActivity : + BaseActivity(R.layout.activity_location), + OnMapReadyCallback { + + private lateinit var naverMap: NaverMap + private lateinit var locationSource: FusedLocationSource + private lateinit var uiSetting: UiSettings + private lateinit var address: String + private val LOCATION_PERMISSION_REQUEST_CODE: Int = 5000 + private val PERMISSIONS = arrayOf( + Manifest.permission.ACCESS_FINE_LOCATION, + Manifest.permission.ACCESS_COARSE_LOCATION + ) + + private lateinit var range: String + + + override fun initView() { + if (!hasPermission()) { + ActivityCompat.requestPermissions(this, PERMISSIONS, LOCATION_PERMISSION_REQUEST_CODE) + } + initMapView() + + range = getString(R.string.range_500m) + binding.locationRangeDescTv.text = + getString(R.string.range_setting_format, range) + + binding.locationRange1Tv.setOnClickListener { setRange500m() } + binding.locationRange2Tv.setOnClickListener { setRange1km() } + binding.locationRange3Tv.setOnClickListener { setRange15km() } + + binding.locationRangeBar.setOnSeekBarChangeListener(object : + SeekBar.OnSeekBarChangeListener { + override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) { + if (progress <= RANGE_500M_PROGRESS) { + setRange500m() + } else if (progress <= RANGE_1KM_PROGRESS) { + setRange1km() + } else { + setRange15km() + } + } + + override fun onStartTrackingTouch(seekBar: SeekBar?) = Unit + override fun onStopTrackingTouch(seekBar: SeekBar?) { + seekBar?.let { + if (it.progress <= RANGE_500M_PROGRESS) { + it.progress = RANGE_500M_PROGRESS + setRange500m() + } else if (it.progress <= RANGE_1KM_PROGRESS) { + it.progress = RANGE_1KM_PROGRESS + setRange1km() + } else { + it.progress = RANGE_15kM_PROGRESS + setRange15km() + } + } + } + }) + } + + override fun onMapReady(p0: NaverMap) { + this.naverMap = p0 + uiSetting = naverMap.uiSettings + uiSetting.isLocationButtonEnabled = false + binding.locationNowLocation.map = naverMap + + naverMap.locationSource = locationSource + naverMap.uiSettings.isLocationButtonEnabled = true + naverMap.locationTrackingMode = LocationTrackingMode.Follow + naverMap.locationOverlay.subIcon = + OverlayImage.fromResource(com.naver.maps.map.R.drawable.navermap_location_overlay_icon) + + naverMap.addOnLocationChangeListener { + getAddress( + it.latitude, + it.longitude + ) + } + } + + private fun hasPermission(): Boolean { + for (permission in PERMISSIONS) { + if (ContextCompat.checkSelfPermission(this, permission) + != PackageManager.PERMISSION_GRANTED + ) { + return false + } + } + return true + } + + private fun initMapView() { + val fm = supportFragmentManager + val mapFragment = fm.findFragmentById(R.id.location_map) as MapFragment? + ?: MapFragment.newInstance().also { + fm.beginTransaction().add(R.id.location_map, it).commit() + } + mapFragment.getMapAsync(this) + locationSource = FusedLocationSource(this, LOCATION_PERMISSION_REQUEST_CODE) + } + + private fun getAddress(latitude: Double, longitude: Double) { + val geocoder = Geocoder(applicationContext, Locale.KOREAN) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + val addressList: List
? = geocoder.getFromLocation(latitude, longitude, 1) + if (addressList != null && addressList.isNotEmpty()) { + val address: Address = addressList[0] + val spliteAddr = address.getAddressLine(0).split(" ") + this.address = spliteAddr[1] + " " + spliteAddr[2] + " " + spliteAddr[3] + } + } else { + val addresses = geocoder.getFromLocation(latitude, longitude, 1) + if (addresses != null) { + val spliteAddr = addresses[0].getAddressLine(0).split(" ") + this.address = spliteAddr[1] + " " + spliteAddr[2] + " " + spliteAddr[3] + } + } + binding.locationMytownDetailTv.text = address + } + + override fun initObserver() { + } + + private fun setRange15km() { + range = getString(R.string.range_1_5km) + binding.locationRangeBar.progress = RANGE_15kM_PROGRESS + binding.locationRange1Tv.setTextColor(ContextCompat.getColor(this, R.color.gray40)) + binding.locationRange2Tv.setTextColor(ContextCompat.getColor(this, R.color.gray40)) + binding.locationRange3Tv.setTextColor(ContextCompat.getColor(this, R.color.black)) + binding.locationRangeDescTv.text = getString(R.string.range_setting_format, range) + } + + private fun setRange1km() { + range = getString(R.string.range_1km) + binding.locationRangeBar.progress = RANGE_1KM_PROGRESS + binding.locationRange1Tv.setTextColor(ContextCompat.getColor(this, R.color.gray40)) + binding.locationRange2Tv.setTextColor(ContextCompat.getColor(this, R.color.black)) + binding.locationRange3Tv.setTextColor(ContextCompat.getColor(this, R.color.gray40)) + binding.locationRangeDescTv.text = getString(R.string.range_setting_format, range) + } + + private fun setRange500m() { + range = getString(R.string.range_500m) + binding.locationRangeBar.progress = RANGE_500M_PROGRESS + binding.locationRange1Tv.setTextColor(ContextCompat.getColor(this, R.color.black)) + binding.locationRange2Tv.setTextColor(ContextCompat.getColor(this, R.color.gray40)) + binding.locationRange3Tv.setTextColor(ContextCompat.getColor(this, R.color.gray40)) + binding.locationRangeDescTv.text = getString(R.string.range_setting_format, range) + } + + companion object { + private const val RANGE_500M_PROGRESS = 33 + private const val RANGE_1KM_PROGRESS = 67 + private const val RANGE_15kM_PROGRESS = 100 + } +} \ No newline at end of file diff --git a/app/src/main/java/com/umc/ttoklip/presentation/signup/SignupActivity.kt b/app/src/main/java/com/umc/ttoklip/presentation/signup/SignupActivity.kt index ca657d08..01cab99f 100644 --- a/app/src/main/java/com/umc/ttoklip/presentation/signup/SignupActivity.kt +++ b/app/src/main/java/com/umc/ttoklip/presentation/signup/SignupActivity.kt @@ -1,5 +1,6 @@ package com.umc.ttoklip.presentation.signup +import android.view.View import androidx.fragment.app.Fragment import androidx.navigation.NavController import androidx.navigation.Navigation @@ -8,21 +9,32 @@ import androidx.navigation.fragment.findNavController import com.umc.ttoklip.R import com.umc.ttoklip.databinding.ActivitySignupBinding import com.umc.ttoklip.presentation.base.BaseActivity +import com.umc.ttoklip.presentation.mypage.InputIndependentCareerDialogFragment +import dagger.hilt.EntryPoint +import dagger.hilt.android.AndroidEntryPoint +@AndroidEntryPoint class SignupActivity:BaseActivity(R.layout.activity_signup) { override fun initView() { val navHostFragment = supportFragmentManager.findFragmentById(R.id.signup_frm)as NavHostFragment var navController=navHostFragment.findNavController() - binding.loginBackIb.setOnClickListener { + binding.signupBackIb.setOnClickListener { + navController.popBackStack() + } + binding.signupCancelIb.setOnClickListener { + binding.signupBackIb.visibility= View.VISIBLE + binding.signupBackIb.visibility= View.GONE navController.popBackStack() } } - override fun initObserver() { - } + override fun initObserver()=Unit - fun setTitle(title:String,step:Int){ - binding.loginTitleTv.text=title + fun setProg(step:Int){ binding.signupProgressbar.progress=step } + fun updateButtonForTerm(){ + binding.signupBackIb.visibility= View.GONE + binding.signupBackIb.visibility= View.VISIBLE + } } diff --git a/app/src/main/java/com/umc/ttoklip/presentation/signup/fragments/Signup1Fragment.kt b/app/src/main/java/com/umc/ttoklip/presentation/signup/fragments/Signup1Fragment.kt index 9278c056..2011c5ec 100644 --- a/app/src/main/java/com/umc/ttoklip/presentation/signup/fragments/Signup1Fragment.kt +++ b/app/src/main/java/com/umc/ttoklip/presentation/signup/fragments/Signup1Fragment.kt @@ -1,23 +1,72 @@ package com.umc.ttoklip.presentation.signup.fragments -import android.content.Context -import androidx.activity.OnBackPressedCallback +import android.graphics.Color +import android.os.Bundle +import android.view.View +import androidx.core.content.ContextCompat +import androidx.core.widget.addTextChangedListener +import androidx.fragment.app.viewModels import androidx.navigation.fragment.findNavController import com.umc.ttoklip.R import com.umc.ttoklip.databinding.FragmentSignup1Binding +import com.umc.ttoklip.generated.callback.OnClickListener import com.umc.ttoklip.presentation.base.BaseFragment import com.umc.ttoklip.presentation.signup.SignupActivity class Signup1Fragment: BaseFragment(R.layout.fragment_signup1) { + var sendbutton:Boolean=false + var nextbutton:Boolean=false + override fun initObserver() { } override fun initView() { val activity=activity as SignupActivity - activity?.setTitle("1단계 - 개인정보 입력",1) + activity?.setProg(1) + binding.signup1EmailEt.addTextChangedListener { + val pattern=android.util.Patterns.EMAIL_ADDRESS; + if(pattern.matcher(it).matches()){ + sendbutton=true + binding.signup1CertSendButton.setBackgroundResource(R.drawable.rectangle_corner_10_yellow) + binding.signup1CertSendButton.setTextAppearance(R.style.TextAppearance_App_14sp_500) + }else{ + sendbutton=false + binding.signup1CertSendButton.setBackgroundResource(R.drawable.rectangle_corner_10_strok_1_black) + binding.signup1CertSendButton.setTextAppearance(R.style.TextAppearance_App_14sp_400) + } + } + binding.signup1CertSendButton.setOnClickListener { + //인증 보내는 로직 + if(sendbutton){ + binding.signup1CertsendTv.visibility=View.VISIBLE + binding.signup1CertSendButton.text="인증번호 재발송" + } + } + binding.signup1CertEt.addTextChangedListener { + if(it.toString().equals("111")){ + //인증 확인 로직 + binding.signup1CertnotokTv.visibility=View.GONE + binding.signup1CertokTv.visibility= View.VISIBLE + nextbutton=true + binding.signup1NextBtn.setBackgroundResource(R.drawable.rectangle_corner_10_yellow) + binding.signup1NextBtn.setTextAppearance(R.style.TextAppearance_App_16sp_700) + }else{ + binding.signup1CertokTv.visibility= View.GONE + binding.signup1CertnotokTv.visibility=View.VISIBLE + nextbutton=false + binding.signup1NextBtn.setBackgroundResource(R.drawable.rectangle_corner_10_strok_1_black) + binding.signup1NextBtn.setTextAppearance(R.style.TextAppearance_App_16sp_500) + } + } binding.signup1NextBtn.setOnClickListener { - findNavController().navigate(R.id.action_signup1_fragment_to_signup2_fragment) + if(nextbutton){ + val bundle= Bundle() + bundle.putString("userName",binding.signup1NameEt.text.toString()) + bundle.putString("userBirth",binding.signup1BirthEt.text.toString()) + bundle.putString("userEmail",binding.signup1EmailEt.text.toString()) +// findNavController().navigate(R.id.action_signup1_fragment_to_signup2_fragment,bundle) + } } } } \ No newline at end of file diff --git a/app/src/main/java/com/umc/ttoklip/presentation/signup/fragments/Signup2Fragment.kt b/app/src/main/java/com/umc/ttoklip/presentation/signup/fragments/Signup2Fragment.kt index f2ecf49c..838d813e 100644 --- a/app/src/main/java/com/umc/ttoklip/presentation/signup/fragments/Signup2Fragment.kt +++ b/app/src/main/java/com/umc/ttoklip/presentation/signup/fragments/Signup2Fragment.kt @@ -1,26 +1,115 @@ package com.umc.ttoklip.presentation.signup.fragments import android.content.Context +import android.os.Bundle +import android.view.View import androidx.activity.OnBackPressedCallback +import androidx.appcompat.app.AppCompatActivity +import androidx.core.content.ContextCompat +import androidx.core.widget.addTextChangedListener import androidx.navigation.fragment.findNavController import com.umc.ttoklip.R import com.umc.ttoklip.databinding.FragmentSignup1Binding import com.umc.ttoklip.databinding.FragmentSignup2Binding import com.umc.ttoklip.presentation.base.BaseFragment import com.umc.ttoklip.presentation.signup.SignupActivity +import java.util.regex.Pattern class Signup2Fragment: BaseFragment(R.layout.fragment_signup2) { - private lateinit var callback:OnBackPressedCallback + var idok:Boolean=false + var pwok:Boolean=false + + val num="([0-9].*)" + val symbol="([-_.;!?@#,$%^&*].*)" + val eng="([a-z].*)" + val pattern_num= Pattern.compile(num) + val pattern_symbol= Pattern.compile(symbol) + val pattern_eng= Pattern.compile(eng) override fun initObserver() { } override fun initView() { val activity=activity as SignupActivity - activity?.setTitle("2단계 - 계정 설정",2) + activity?.setProg(2) + binding.signup2IdEt.addTextChangedListener { + if(it.toString().isNotEmpty()){ + binding.signup2IdcheckButton.setBackgroundResource(R.drawable.rectangle_corner_10_yellow) + binding.signup2IdcheckButton.setTextAppearance(R.style.TextAppearance_App_14sp_700) + }else{ + binding.signup2IdcheckButton.setBackgroundResource(R.drawable.rectangle_corner_10_strok_1_black) + binding.signup2IdcheckButton.setTextAppearance(R.style.TextAppearance_App_14sp_500) + } + } + binding.signup2IdcheckButton.setOnClickListener { + if(binding.signup2IdEt.text.toString().equals("aa")){ + //아이디 중복 확인 체크 로직 + idok=true + binding.signup2IdnotokTv.visibility=View.GONE + binding.signup2IdokTv.visibility= View.VISIBLE + }else{ + idok=false + binding.signup2IdnotokTv.visibility=View.VISIBLE + binding.signup2IdokTv.visibility= View.GONE + } + nextOk() + } + binding.signup2PwEt.addTextChangedListener { + val matcher_num=pattern_num.matcher(it.toString()) + val matcher_symbol=pattern_symbol.matcher(it.toString()) + val matcher_eng=pattern_eng.matcher(it.toString()) + if(matcher_eng.find()){ + binding.signup2PwengIv.setImageResource(R.drawable.item_pwcheck_on) + binding.signup2PwengTv.setTextColor(ContextCompat.getColor(activity,R.color.black)) + }else{ + binding.signup2PwengIv.setImageResource(R.drawable.item_pwcheck_off) + binding.signup2PwengTv.setTextColor(ContextCompat.getColor(activity,R.color.gray60)) + } + if(matcher_symbol.find()){ + binding.signup2PwspeIv.setImageResource(R.drawable.item_pwcheck_on) + binding.signup2PwspeTv.setTextColor(ContextCompat.getColor(activity,R.color.black)) + }else{ + binding.signup2PwspeIv.setImageResource(R.drawable.item_pwcheck_off) + binding.signup2PwspeTv.setTextColor(ContextCompat.getColor(activity,R.color.gray60)) + } + if(matcher_num.find()){ + binding.signup2PwnumIv.setImageResource(R.drawable.item_pwcheck_on) + binding.signup2PwnumTv.setTextColor(ContextCompat.getColor(activity,R.color.black)) + }else{ + binding.signup2PwnumIv.setImageResource(R.drawable.item_pwcheck_off) + binding.signup2PwnumTv.setTextColor(ContextCompat.getColor(activity,R.color.gray60)) + } + } + binding.signup2PwcheckEt.addTextChangedListener { + if(it.toString().equals(binding.signup2PwEt.text.toString())){ + pwok=true + binding.signupPwokTv.visibility=View.VISIBLE + binding.signupPwnotokTv.visibility=View.GONE + }else{ + pwok=false + binding.signupPwokTv.visibility=View.GONE + binding.signupPwnotokTv.visibility=View.VISIBLE + } + nextOk() + } binding.signup2NextBtn.setOnClickListener { - findNavController().navigate(R.id.action_signup2_fragment_to_signup3_fragment) + if(idok&&pwok){ + val bundle=Bundle() +// findNavController().navigate(R.id.action_signup2_fragment_to_signup3_fragment) + } + } + } + + private fun nextOk(){ + if(idok&&pwok){ + binding.signup2NextBtn.isClickable=true + binding.signup2NextBtn.setBackgroundResource(R.drawable.rectangle_corner_10_yellow) + binding.signup2NextBtn.setTextAppearance(R.style.TextAppearance_App_16sp_700) + }else{ + binding.signup2NextBtn.isClickable=false + binding.signup2NextBtn.setBackgroundResource(R.drawable.rectangle_corner_10_strok_1_black) + binding.signup2NextBtn.setTextAppearance(R.style.TextAppearance_App_16sp_500) } } } \ No newline at end of file diff --git a/app/src/main/java/com/umc/ttoklip/presentation/signup/fragments/Signup3Fragment.kt b/app/src/main/java/com/umc/ttoklip/presentation/signup/fragments/Signup3Fragment.kt index 0131d4ff..f9b0fd32 100644 --- a/app/src/main/java/com/umc/ttoklip/presentation/signup/fragments/Signup3Fragment.kt +++ b/app/src/main/java/com/umc/ttoklip/presentation/signup/fragments/Signup3Fragment.kt @@ -1,20 +1,121 @@ package com.umc.ttoklip.presentation.signup.fragments +import androidx.core.os.bundleOf import androidx.navigation.fragment.findNavController import com.umc.ttoklip.R import com.umc.ttoklip.databinding.FragmentSignup3Binding import com.umc.ttoklip.presentation.base.BaseFragment import com.umc.ttoklip.presentation.signup.SignupActivity -class Signup3Fragment: BaseFragment(R.layout.fragment_signup3) { +class Signup3Fragment : BaseFragment(R.layout.fragment_signup3) { + + var allAgree: Boolean = false + var serviceAgree: Boolean = false + var privacyAgree: Boolean = false + var locationAgree: Boolean = false + override fun initObserver() { } override fun initView() { - val activity=activity as SignupActivity - activity?.setTitle("3단계 - 약관 동의",3) + val activity = activity as SignupActivity + activity?.setProg(1) + + binding.signup3AgreeAllIv.setOnClickListener { + if (allAgree) { + binding.signup3AgreeServiceIv.setImageResource(R.drawable.oval_stroke_1) + binding.signup3AgreePrivacyIv.setImageResource(R.drawable.oval_stroke_1) + binding.signup3AgreeLocationIv.setImageResource(R.drawable.oval_stroke_1) + serviceAgree = false + privacyAgree = false + locationAgree = false + } else { + binding.signup3AgreeServiceIv.setImageResource(R.drawable.oval_double) + binding.signup3AgreePrivacyIv.setImageResource(R.drawable.oval_double) + binding.signup3AgreeLocationIv.setImageResource(R.drawable.oval_double) + serviceAgree = true + privacyAgree = true + locationAgree = true + } + allAgreeCheck() + nextok() + } + + binding.signup3AgreeServiceIv.setOnClickListener { + if(serviceAgree){ + serviceAgree=false + binding.signup3AgreeServiceIv.setImageResource(R.drawable.oval_stroke_1) + }else{ + serviceAgree=true + binding.signup3AgreeServiceIv.setImageResource(R.drawable.oval_double) + } + allAgreeCheck() + nextok() + } + binding.signup3AgreeServiceBtn.setOnClickListener { + activity.updateButtonForTerm() + findNavController().navigate(R.id.action_signup3_fragment_to_signupTerm_fragment, + bundleOf("termType" to "service")) + } + + binding.signup3AgreePrivacyIv.setOnClickListener { + if(privacyAgree){ + privacyAgree=false + binding.signup3AgreePrivacyIv.setImageResource(R.drawable.oval_stroke_1) + }else{ + privacyAgree=true + binding.signup3AgreePrivacyIv.setImageResource(R.drawable.oval_double) + } + allAgreeCheck() + nextok() + } + binding.signup3AgreePrivacyBtn.setOnClickListener { + activity.updateButtonForTerm() + findNavController().navigate(R.id.action_signup3_fragment_to_signupTerm_fragment, + bundleOf("termType" to "privacy")) + } + + binding.signup3AgreeLocationIv.setOnClickListener { + if(locationAgree){ + locationAgree=false + binding.signup3AgreeLocationIv.setImageResource(R.drawable.oval_stroke_1) + }else{ + locationAgree=true + binding.signup3AgreeLocationIv.setImageResource(R.drawable.oval_double) + } + allAgreeCheck() + } + + binding.signup3AgreeLocationBtn.setOnClickListener { + activity.updateButtonForTerm() + findNavController().navigate(R.id.action_signup3_fragment_to_signupTerm_fragment, + bundleOf("termType" to "location")) + } + binding.signup3NextBtn.setOnClickListener { - findNavController().navigate(R.id.action_signup3_fragment_to_signup4_fragment) + if (serviceAgree && privacyAgree) { + findNavController().navigate(R.id.action_signup3_fragment_to_signup4_fragment) + } + } + } + private fun allAgreeCheck() { + if (serviceAgree && privacyAgree && locationAgree) { + allAgree = true + binding.signup3AgreeAllIv.setImageResource(R.drawable.oval_double) + } else { + allAgree = false + binding.signup3AgreeAllIv.setImageResource(R.drawable.oval_stroke_1) + } + } + private fun nextok(){ + if(serviceAgree&&privacyAgree){ + binding.signup3NextBtn.isClickable=true + binding.signup3NextBtn.setBackgroundResource(R.drawable.rectangle_corner_10_yellow) + binding.signup3NextBtn.setTextAppearance(R.style.TextAppearance_App_16sp_700) + }else{ + binding.signup3NextBtn.isClickable=false + binding.signup3NextBtn.setBackgroundResource(R.drawable.rectangle_corner_10_strok_1_black) + binding.signup3NextBtn.setTextAppearance(R.style.TextAppearance_App_16sp_500) } } } \ No newline at end of file diff --git a/app/src/main/java/com/umc/ttoklip/presentation/signup/fragments/Signup4Fragment.kt b/app/src/main/java/com/umc/ttoklip/presentation/signup/fragments/Signup4Fragment.kt index e1eca17b..9b679303 100644 --- a/app/src/main/java/com/umc/ttoklip/presentation/signup/fragments/Signup4Fragment.kt +++ b/app/src/main/java/com/umc/ttoklip/presentation/signup/fragments/Signup4Fragment.kt @@ -1,22 +1,102 @@ package com.umc.ttoklip.presentation.signup.fragments -import android.content.Intent +import android.view.View +import androidx.core.content.ContextCompat import androidx.navigation.fragment.findNavController +import com.google.android.material.chip.Chip import com.umc.ttoklip.R import com.umc.ttoklip.databinding.FragmentSignup4Binding -import com.umc.ttoklip.presentation.MainActivity import com.umc.ttoklip.presentation.base.BaseFragment +import com.umc.ttoklip.presentation.mypage.ChooseMainInterestDialogFragment +import com.umc.ttoklip.presentation.mypage.InputIndependentCareerDialogFragment import com.umc.ttoklip.presentation.signup.SignupActivity -class Signup4Fragment: BaseFragment(R.layout.fragment_signup4) { +class Signup4Fragment : BaseFragment(R.layout.fragment_signup4) { + private var independentCareerYear:Int? =null + private var independentCareerMonth: Int? =null + override fun initObserver() { } override fun initView() { - val activity=activity as SignupActivity - activity?.setTitle("4단계 - 프로필 설정",4) + val activity = activity as SignupActivity + activity?.setProg(2) + + if(independentCareerYear!=null||independentCareerMonth!=null){ + if (independentCareerYear != ZERO_CAREER && independentCareerMonth != ZERO_CAREER) { + binding.signup4IndependenceEt.text = + getString(R.string.my_independent_career_base_format, independentCareerYear, independentCareerMonth) + } else if (independentCareerYear != ZERO_CAREER) { + binding.signup4IndependenceEt.text = + getString(R.string.my_independent_career_year_format, independentCareerYear) + } else if (independentCareerMonth != ZERO_CAREER) { + binding.signup4IndependenceEt.text = + getString(R.string.my_independent_career_month_format, independentCareerMonth) + } else { + binding.signup4IndependenceEt.text = + getString(R.string.my_independent_career_month_format, ZERO_CAREER) + } + binding.signup4IndependenceEt.setTextColor(ContextCompat.getColor(activity,R.color.black)) + } + + binding.signup4NickcheckButton.setOnClickListener { + //닉네임 확인 로직 + if (binding.signup4NicknameEt.text.toString().equals("aa")) { + binding.signup4NickokTv.visibility = View.VISIBLE + binding.signup4NicknotokTv.visibility = View.GONE + } else { + binding.signup4NickokTv.visibility = View.GONE + binding.signup4NicknotokTv.visibility = View.VISIBLE + } + } + + binding.signup4IndependenceEt.setOnClickListener { + val bottomSheet = InputIndependentCareerDialogFragment { year, month -> + if (year != ZERO_CAREER && month != ZERO_CAREER) { + binding.signup4IndependenceEt.text = + getString(R.string.my_independent_career_base_format, year, month) + } else if (year != ZERO_CAREER) { + binding.signup4IndependenceEt.text = + getString(R.string.my_independent_career_year_format, year) + } else if (month != ZERO_CAREER) { + binding.signup4IndependenceEt.text = + getString(R.string.my_independent_career_month_format, month) + } else { + binding.signup4IndependenceEt.text = + getString(R.string.my_independent_career_month_format, ZERO_CAREER) + } + independentCareerYear=year + independentCareerMonth=month + } + bottomSheet.show(activity.supportFragmentManager, bottomSheet.tag) + binding.signup4IndependenceEt.setTextColor(ContextCompat.getColor(activity,R.color.black) + ) + } + + binding.signup4InterestGroup.setOnClickListener { + binding.signup4InterestDescTv.visibility = View.GONE + binding.signup4InterestIconIv.visibility = View.GONE + val bottomSheet = ChooseMainInterestDialogFragment { interests -> + binding.signup4InterestGroup.removeAllViews() + interests.forEach { interest -> + val chip = Chip(activity) + chip.text = interest + chip.setTextAppearance(R.style.TextAppearance_App_12sp_700) + chip.setTextColor(ContextCompat.getColor(activity, R.color.black)) + chip.setChipBackgroundColorResource(R.color.yellow) + chip.setChipStrokeColorResource(R.color.yellow) + binding.signup4InterestGroup.addView(chip) + } + } + bottomSheet.show(activity.supportFragmentManager, bottomSheet.tag) + } + binding.signup4NextBtn.setOnClickListener { - startActivity(Intent(activity, MainActivity::class.java)) + findNavController().navigate(R.id.action_signup4_fragment_to_signup5_fragment) } } + + companion object { + private const val ZERO_CAREER = 0 + } } \ No newline at end of file diff --git a/app/src/main/java/com/umc/ttoklip/presentation/signup/fragments/Signup5Fragment.kt b/app/src/main/java/com/umc/ttoklip/presentation/signup/fragments/Signup5Fragment.kt new file mode 100644 index 00000000..cf2d6bdb --- /dev/null +++ b/app/src/main/java/com/umc/ttoklip/presentation/signup/fragments/Signup5Fragment.kt @@ -0,0 +1,101 @@ +package com.umc.ttoklip.presentation.signup.fragments + +import android.content.Intent +import android.widget.SeekBar +import androidx.core.content.ContextCompat +import com.umc.ttoklip.R +import com.umc.ttoklip.databinding.FragmentSignup5Binding +import com.umc.ttoklip.presentation.MainActivity +import com.umc.ttoklip.presentation.base.BaseFragment +import com.umc.ttoklip.presentation.signup.DirectLocationActivity +import com.umc.ttoklip.presentation.signup.LocationActivity +import com.umc.ttoklip.presentation.signup.SignupActivity + +class Signup5Fragment: BaseFragment(R.layout.fragment_signup5) { + private lateinit var range: String + + override fun initObserver() { + } + + override fun initView() { + val activity=activity as SignupActivity + activity.setProg(3) + + range = getString(R.string.range_500m) + binding.rangeSettingExplainTv.text = + getString(R.string.range_setting_format, range) + + binding.range500mTv.setOnClickListener { setRange500m(activity) } + binding.range1kmTv.setOnClickListener { setRange1km(activity) } + binding.range15kmTv.setOnClickListener { setRange15km(activity) } + + binding.rangeBar.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener { + override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) { + if (progress <= RANGE_500M_PROGRESS) { setRange500m(activity) + } else if (progress <= RANGE_1KM_PROGRESS) { setRange1km(activity) + } else { setRange15km(activity) + } + } + + override fun onStartTrackingTouch(seekBar: SeekBar?) = Unit + override fun onStopTrackingTouch(seekBar: SeekBar?) { + seekBar?.let { + if (it.progress <= RANGE_500M_PROGRESS) { + it.progress = RANGE_500M_PROGRESS + setRange500m(activity) + } else if (it.progress <= RANGE_1KM_PROGRESS) { + it.progress = RANGE_1KM_PROGRESS + setRange1km(activity) + } else { + it.progress = RANGE_15kM_PROGRESS + setRange15km(activity) + } + } + } + + }) + + binding.signup5LocationBtn.setOnClickListener { + startActivity(Intent(activity, LocationActivity::class.java)) + } + binding.signup5LocationDirectEt.setOnClickListener { + startActivity(Intent(activity, DirectLocationActivity::class.java)) + } + binding.signup5NextBtn.setOnClickListener { + startActivity(Intent(activity, MainActivity::class.java)) + } + } + + private fun setRange15km(activity: SignupActivity) { + range = getString(R.string.range_1_5km) + binding.rangeBar.progress = RANGE_15kM_PROGRESS + binding.range500mTv.setTextColor(ContextCompat.getColor(activity,R.color.gray40)) + binding.range1kmTv.setTextColor(ContextCompat.getColor(activity,R.color.gray40)) + binding.range15kmTv.setTextColor(ContextCompat.getColor(activity,R.color.black)) + binding.rangeSettingExplainTv.text = getString(R.string.range_setting_format, range) + } + + private fun setRange1km(activity: SignupActivity) { + range = getString(R.string.range_1km) + binding.rangeBar.progress = RANGE_1KM_PROGRESS + binding.range500mTv.setTextColor(ContextCompat.getColor(activity,R.color.gray40)) + binding.range1kmTv.setTextColor(ContextCompat.getColor(activity,R.color.black)) + binding.range15kmTv.setTextColor(ContextCompat.getColor(activity,R.color.gray40)) + binding.rangeSettingExplainTv.text = getString(R.string.range_setting_format, range) + } + + private fun setRange500m(activity: SignupActivity) { + range = getString(R.string.range_500m) + binding.rangeBar.progress = RANGE_500M_PROGRESS + binding.range500mTv.setTextColor(ContextCompat.getColor(activity,R.color.black)) + binding.range1kmTv.setTextColor(ContextCompat.getColor(activity,R.color.gray40)) + binding.range15kmTv.setTextColor(ContextCompat.getColor(activity,R.color.gray40)) + binding.rangeSettingExplainTv.text = getString(R.string.range_setting_format, range) + } + + companion object { + private const val RANGE_500M_PROGRESS = 33 + private const val RANGE_1KM_PROGRESS = 67 + private const val RANGE_15kM_PROGRESS = 100 + } +} \ No newline at end of file diff --git a/app/src/main/java/com/umc/ttoklip/presentation/signup/fragments/SignupTermFragment.kt b/app/src/main/java/com/umc/ttoklip/presentation/signup/fragments/SignupTermFragment.kt new file mode 100644 index 00000000..6896f33f --- /dev/null +++ b/app/src/main/java/com/umc/ttoklip/presentation/signup/fragments/SignupTermFragment.kt @@ -0,0 +1,25 @@ +package com.umc.ttoklip.presentation.signup.fragments + +import com.umc.ttoklip.R +import com.umc.ttoklip.databinding.FragmentSignup5Binding +import com.umc.ttoklip.databinding.FragmentSignupTermBinding +import com.umc.ttoklip.presentation.base.BaseFragment + +class SignupTermFragment : BaseFragment(R.layout.fragment_signup_term) { + override fun initObserver() { + } + + override fun initView() { + var termType = requireArguments().getString("termType") + if (termType.toString().equals("service")) { + binding.signupTermTitleTv.text = getString(R.string.service_term) + binding.signupTermDetailTv.text = getString(R.string.service_term_detail) + } else if (termType.toString().equals("privacy")) { + binding.signupTermTitleTv.text = getString(R.string.privacy_term) + binding.signupTermDetailTv.text = getString(R.string.privacy_term_detail) + } else { + binding.signupTermTitleTv.text = getString(R.string.location_term) + binding.signupTermDetailTv.text = getString(R.string.location_term_detail) + } + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_checkpre_off_16.xml b/app/src/main/res/drawable/ic_checkpre_off_16.xml index 97a09f8f..531b982a 100644 --- a/app/src/main/res/drawable/ic_checkpre_off_16.xml +++ b/app/src/main/res/drawable/ic_checkpre_off_16.xml @@ -8,6 +8,6 @@ android:pathData="M0,0h16v16h-16z"/> + android:fillColor="@color/gray40"/> diff --git a/app/src/main/res/drawable/ic_checkpre_on_16.xml b/app/src/main/res/drawable/ic_checkpre_on_16.xml index 5acc1030..0d4108cd 100644 --- a/app/src/main/res/drawable/ic_checkpre_on_16.xml +++ b/app/src/main/res/drawable/ic_checkpre_on_16.xml @@ -8,6 +8,6 @@ android:pathData="M0,0h16v16h-16z"/> + android:fillColor="@color/black"/> diff --git a/app/src/main/res/drawable/ic_kakaotalk_18.xml b/app/src/main/res/drawable/ic_kakaotalk_18.xml new file mode 100644 index 00000000..68acb6c0 --- /dev/null +++ b/app/src/main/res/drawable/ic_kakaotalk_18.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_kakaotalk_46.xml b/app/src/main/res/drawable/ic_kakaotalk_46.xml deleted file mode 100644 index dd4746d9..00000000 --- a/app/src/main/res/drawable/ic_kakaotalk_46.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - diff --git a/app/src/main/res/drawable/ic_naver_16.xml b/app/src/main/res/drawable/ic_naver_16.xml new file mode 100644 index 00000000..43566362 --- /dev/null +++ b/app/src/main/res/drawable/ic_naver_16.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_naver_46.xml b/app/src/main/res/drawable/ic_naver_46.xml deleted file mode 100644 index 214e5d45..00000000 --- a/app/src/main/res/drawable/ic_naver_46.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - diff --git a/app/src/main/res/drawable/ic_ttoklip1_78.xml b/app/src/main/res/drawable/ic_ttoklip1_78.xml new file mode 100644 index 00000000..06e1047f --- /dev/null +++ b/app/src/main/res/drawable/ic_ttoklip1_78.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_ttoklip1_81.xml b/app/src/main/res/drawable/ic_ttoklip1_81.xml deleted file mode 100644 index 16b17ed1..00000000 --- a/app/src/main/res/drawable/ic_ttoklip1_81.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_ttoklip2_63.xml b/app/src/main/res/drawable/ic_ttoklip2_63.xml new file mode 100644 index 00000000..4b43c0c6 --- /dev/null +++ b/app/src/main/res/drawable/ic_ttoklip2_63.xml @@ -0,0 +1,19 @@ + + + + + + diff --git a/app/src/main/res/drawable/ic_ttoklip2_64.xml b/app/src/main/res/drawable/ic_ttoklip2_64.xml deleted file mode 100644 index 8ea07f7c..00000000 --- a/app/src/main/res/drawable/ic_ttoklip2_64.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/item_camera.xml b/app/src/main/res/drawable/item_camera.xml new file mode 100644 index 00000000..43efcf63 --- /dev/null +++ b/app/src/main/res/drawable/item_camera.xml @@ -0,0 +1,14 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/item_pwcheck_off.xml b/app/src/main/res/drawable/item_pwcheck_off.xml new file mode 100644 index 00000000..00bf5985 --- /dev/null +++ b/app/src/main/res/drawable/item_pwcheck_off.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/item_pwcheck_on.xml b/app/src/main/res/drawable/item_pwcheck_on.xml new file mode 100644 index 00000000..a92eae24 --- /dev/null +++ b/app/src/main/res/drawable/item_pwcheck_on.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/oval_double.xml b/app/src/main/res/drawable/oval_double.xml new file mode 100644 index 00000000..fa5fd424 --- /dev/null +++ b/app/src/main/res/drawable/oval_double.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/oval_fill_strok_1.xml b/app/src/main/res/drawable/oval_stroke_1.xml similarity index 66% rename from app/src/main/res/drawable/oval_fill_strok_1.xml rename to app/src/main/res/drawable/oval_stroke_1.xml index 69b65967..25afd6b1 100644 --- a/app/src/main/res/drawable/oval_fill_strok_1.xml +++ b/app/src/main/res/drawable/oval_stroke_1.xml @@ -1,9 +1,7 @@ - + android:color="@color/black"/> \ No newline at end of file diff --git a/app/src/main/res/drawable/rectangle_corner_100_black.xml b/app/src/main/res/drawable/rectangle_corner_100_black.xml new file mode 100644 index 00000000..adbeb96c --- /dev/null +++ b/app/src/main/res/drawable/rectangle_corner_100_black.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/rectangle_corner_10_yellow.xml b/app/src/main/res/drawable/rectangle_corner_10_yellow.xml new file mode 100644 index 00000000..83252ed6 --- /dev/null +++ b/app/src/main/res/drawable/rectangle_corner_10_yellow.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/rectangle_corner_20_stroke_1_gray20.xml b/app/src/main/res/drawable/rectangle_corner_20_stroke_1_gray20.xml new file mode 100644 index 00000000..4bf4e014 --- /dev/null +++ b/app/src/main/res/drawable/rectangle_corner_20_stroke_1_gray20.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_direct_location.xml b/app/src/main/res/layout/activity_direct_location.xml new file mode 100644 index 00000000..f0441c87 --- /dev/null +++ b/app/src/main/res/layout/activity_direct_location.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_intro.xml b/app/src/main/res/layout/activity_intro.xml index 74937332..11e592c2 100644 --- a/app/src/main/res/layout/activity_intro.xml +++ b/app/src/main/res/layout/activity_intro.xml @@ -10,38 +10,38 @@ android:id="@+id/intro_intro_vp" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginTop="60dp" + android:layout_marginTop="20dp" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toTopOf="parent" /> + app:layout_constraintTop_toBottomOf="@id/intro_indicator" /> + app:selectedDotColor="@color/yellow" + app:dotsWidthFactor="1"/> - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_location.xml b/app/src/main/res/layout/activity_location.xml index 40d14d4a..6f515ca8 100644 --- a/app/src/main/res/layout/activity_location.xml +++ b/app/src/main/res/layout/activity_location.xml @@ -1,134 +1,180 @@ - - - - - - - + + - - + android:background="#00000000" + android:scaleType="centerCrop" + android:src="@drawable/ic_arrow_back_24" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> + + + - - + + - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml index 0c02841d..4fa31b16 100644 --- a/app/src/main/res/layout/activity_login.xml +++ b/app/src/main/res/layout/activity_login.xml @@ -7,199 +7,82 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - - - - - + app:layout_constraintTop_toTopOf="parent"> - + - - - - - - - - - - - - - - - - - - - - - - + android:layout_marginTop="20dp" + android:gravity="center" + android:text="지금 가입하고,\n다양한 독립 정보를 나눠봐요" + android:textAppearance="@style/TextAppearance.App.16sp_700" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@id/login_logo_iv" /> - - + - + + + - - - - - + app:layout_constraintStart_toStartOf="parent" /> + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_signup.xml b/app/src/main/res/layout/activity_signup.xml index ad357886..a2e41c41 100644 --- a/app/src/main/res/layout/activity_signup.xml +++ b/app/src/main/res/layout/activity_signup.xml @@ -7,35 +7,39 @@ android:layout_height="match_parent"> + app:layout_constraintTop_toTopOf="parent" + android:visibility="visible"/> - + app:layout_constraintTop_toTopOf="parent" + android:visibility="gone"/> + app:layout_constraintTop_toBottomOf="@id/signup_back_ib" /> + android:src="@drawable/ic_ttoklip1_78"/> + android:src="@drawable/ic_ttoklip2_63"/> - - + app:layout_constraintTop_toTopOf="parent" /> + app:layout_constraintTop_toBottomOf="@id/item_intro_title_tv" /> \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_signup1.xml b/app/src/main/res/layout/fragment_signup1.xml index 1c272d1c..fcfccd72 100644 --- a/app/src/main/res/layout/fragment_signup1.xml +++ b/app/src/main/res/layout/fragment_signup1.xml @@ -7,42 +7,59 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - - + + + + + + + android:textAppearance="@style/TextAppearance.App.14sp_700" + android:layout_marginTop="15dp"/> @@ -55,13 +72,12 @@ android:layout_marginTop="15dp"/> @@ -72,74 +88,80 @@ android:text="이메일" android:textAppearance="@style/TextAppearance.App.14sp_700" android:layout_marginTop="15dp"/> + + - - + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintStart_toStartOf="parent"/> + + + android:layout_marginTop="5dp" + app:layout_constraintTop_toBottomOf="@id/signup1_certSend_button" + app:layout_constraintEnd_toEndOf="parent"/> + + + + + - + android:textAppearance="@style/TextAppearance.App.12sp_400" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintEnd_toEndOf="parent"/> + - + app:layout_constraintBottom_toBottomOf="parent"/> \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_signup2.xml b/app/src/main/res/layout/fragment_signup2.xml index 4b785fab..f653555e 100644 --- a/app/src/main/res/layout/fragment_signup2.xml +++ b/app/src/main/res/layout/fragment_signup2.xml @@ -6,31 +6,49 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - - + app:layout_constraintTop_toTopOf="parent"> + + + + + + @@ -41,33 +59,31 @@ + android:textAppearance="@style/TextAppearance.App.14sp_500" + android:textColor="@color/black" + android:layout_marginStart="10dp" + app:layout_constraintStart_toEndOf="@id/signup2_id_et" + app:layout_constraintTop_toTopOf="@id/signup2_id_et" + app:layout_constraintBottom_toBottomOf="@id/signup2_id_et"/> - + app:layout_constraintTop_toTopOf="parent" + app:passwordToggleEnabled="true"> - + + + app:layout_constraintTop_toBottomOf="@id/signup2_pw_tl" /> @@ -171,6 +188,7 @@ android:layout_height="wrap_content" android:layout_marginStart="5dp" android:text="숫자" + android:textAppearance="@style/TextAppearance.App.10sp_400" android:textColor="@color/gray60" android:textSize="10sp" app:layout_constraintBottom_toBottomOf="@id/signup2_pweng_iv" @@ -182,7 +200,7 @@ android:layout_width="13dp" android:layout_height="13dp" android:layout_marginStart="10dp" - android:src="@drawable/ic_checkpre_off_16" + android:src="@drawable/item_pwcheck_off" app:layout_constraintBottom_toBottomOf="@id/signup2_pweng_iv" app:layout_constraintStart_toEndOf="@id/signup2_pwnum_tv" app:layout_constraintTop_toTopOf="@id/signup2_pweng_iv" /> @@ -193,6 +211,7 @@ android:layout_height="wrap_content" android:layout_marginStart="5dp" android:text="특수문자" + android:textAppearance="@style/TextAppearance.App.10sp_400" android:textColor="@color/gray60" android:textSize="10sp" app:layout_constraintBottom_toBottomOf="@id/signup2_pweng_iv" @@ -207,63 +226,71 @@ android:layout_marginTop="15dp" android:text="비밀번호 확인" android:textAppearance="@style/TextAppearance.App.14sp_700" /> + + + + - - - - - - + + + - + app:layout_constraintBottom_toBottomOf="parent" /> \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_signup3.xml b/app/src/main/res/layout/fragment_signup3.xml index c49b300e..3f9f6d0d 100644 --- a/app/src/main/res/layout/fragment_signup3.xml +++ b/app/src/main/res/layout/fragment_signup3.xml @@ -6,39 +6,57 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - - + app:layout_constraintTop_toTopOf="parent"> + + + + + + + android:layout_marginTop="20dp"> + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintBottom_toBottomOf="parent"/> + app:layout_constraintTop_toTopOf="parent" /> + + android:layout_marginTop="20dp" + android:background="@color/gray20" /> @@ -79,48 +106,19 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="10dp" - android:text="서비스 이용약관 동의 (필수)" - android:textAppearance="@style/TextAppearance.App.14sp_600" - android:textSize="13dp" + android:text="서비스 이용약관 (필수)" + android:textAppearance="@style/TextAppearance.App.14sp_400" app:layout_constraintBottom_toBottomOf="@id/signup3_agreeService_iv" app:layout_constraintStart_toEndOf="@id/signup3_agreeService_iv" app:layout_constraintTop_toTopOf="@id/signup3_agreeService_iv" /> - - - - - - - + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintBottom_toBottomOf="parent"/> @@ -142,23 +140,19 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="10dp" - android:text="개인정보 처리 방침 (필수)" - android:textAppearance="@style/TextAppearance.App.14sp_600" - android:textSize="13dp" + android:text="개인정보 처리방침 (필수)" + android:textAppearance="@style/TextAppearance.App.14sp_400" app:layout_constraintBottom_toBottomOf="@id/signup3_agreePrivacy_iv" app:layout_constraintStart_toEndOf="@id/signup3_agreePrivacy_iv" app:layout_constraintTop_toTopOf="@id/signup3_agreePrivacy_iv" /> - - + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintBottom_toBottomOf="parent"/> @@ -179,28 +173,33 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="10dp" - android:text="위치서비스 이용 동의 (선택)" - android:textAppearance="@style/TextAppearance.App.14sp_600" - android:textSize="13dp" + android:text="위치서비스 이용약관 (선택)" + android:textAppearance="@style/TextAppearance.App.14sp_400" app:layout_constraintBottom_toBottomOf="@id/signup3_agreeLocation_iv" app:layout_constraintStart_toEndOf="@id/signup3_agreeLocation_iv" app:layout_constraintTop_toTopOf="@id/signup3_agreeLocation_iv" /> + + app:layout_constraintBottom_toBottomOf="parent" /> \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_signup4.xml b/app/src/main/res/layout/fragment_signup4.xml index 6a944bbf..233a39b2 100644 --- a/app/src/main/res/layout/fragment_signup4.xml +++ b/app/src/main/res/layout/fragment_signup4.xml @@ -15,78 +15,111 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - - - - + app:layout_constraintTop_toTopOf="parent"> + + + + + + + + + + + + + + + + + - - - - - - - - - @@ -191,42 +182,68 @@ android:text="고민거리 선택" android:textAppearance="@style/TextAppearance.App.14sp_700" /> - + android:paddingHorizontal="16dp" + app:layout_constraintTop_toBottomOf="@id/main_interest_title_tv"> - + + + + + + + + + + + app:layout_constraintStart_toStartOf="parent" /> diff --git a/app/src/main/res/layout/fragment_signup5.xml b/app/src/main/res/layout/fragment_signup5.xml new file mode 100644 index 00000000..ceed83a5 --- /dev/null +++ b/app/src/main/res/layout/fragment_signup5.xml @@ -0,0 +1,201 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_signup_term.xml b/app/src/main/res/layout/fragment_signup_term.xml new file mode 100644 index 00000000..f67c2fd8 --- /dev/null +++ b/app/src/main/res/layout/fragment_signup_term.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_address.xml b/app/src/main/res/layout/item_address.xml new file mode 100644 index 00000000..3e310ce5 --- /dev/null +++ b/app/src/main/res/layout/item_address.xml @@ -0,0 +1,31 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/navigation/signup_graph.xml b/app/src/main/res/navigation/signup_graph.xml index 750f2fda..578ecc58 100644 --- a/app/src/main/res/navigation/signup_graph.xml +++ b/app/src/main/res/navigation/signup_graph.xml @@ -3,30 +3,8 @@ xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/signup_graph" - app:startDestination="@id/signup1_fragment"> + app:startDestination="@id/signup3_fragment"> - - - - - - - + android:id="@+id/action_signup3_fragment_to_signupTerm_fragment" + app:destination="@id/signupTerm_fragment" /> + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 3408ab7a..b17077fe 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -7,9 +7,12 @@ #FFCACACA #FFAEAEAE #FF7A7A7A + #030303 #FFFFE600 #FFFFF8B4 #FF0075FF #FFFE5E00 #EFEFEF + #03C75A + #FEE500 \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 458eb585..e0b58228 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -97,4 +97,12 @@ 전체삭제 + + 서비스 이용약관 + 서비스 이용약관 상세 내용 + 개인정보 수집 • 이용 동의 + 개인정보 수집 및 이용 동의 상세 내용 + 위치서비스 이용약관 + 위치서비스 이용약관 상세 내용 + \ No newline at end of file diff --git a/app/src/main/res/values/style.xml b/app/src/main/res/values/style.xml index 6851f943..f7918797 100644 --- a/app/src/main/res/values/style.xml +++ b/app/src/main/res/values/style.xml @@ -31,6 +31,11 @@ @font/pretendard_bold + + + + + + + +