diff --git a/app/build.gradle b/app/build.gradle
index 36c7a443..afaa1e48 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -50,6 +50,13 @@ android {
viewBinding {
enabled = true
}
+ sourceSets {
+ main {
+ assets {
+ srcDirs 'src\\main\\assets'
+ }
+ }
+ }
}
dependencies {
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 0a19083a..bfb1a6fe 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -8,8 +8,6 @@
-
-
+ tools:targetApi="31"
+ android:requestLegacyExternalStorage="true">
,
@PartMap params:MutableMap
)
:Response>
+
+ @GET("/api/v1/term")
+ suspend fun getTerm(
+ @Query("page")page:Int
+ ):Response>
+
+// @POST("/api/v1/privacy/insert")
+// suspend fun savePrivacy(
+// @Body userInfo:SignupRequest
+// ):Response>
}
\ No newline at end of file
diff --git a/app/src/main/java/com/umc/ttoklip/data/model/signup/TermDetailResponse.kt b/app/src/main/java/com/umc/ttoklip/data/model/signup/TermDetailResponse.kt
new file mode 100644
index 00000000..18b60fb1
--- /dev/null
+++ b/app/src/main/java/com/umc/ttoklip/data/model/signup/TermDetailResponse.kt
@@ -0,0 +1,7 @@
+package com.umc.ttoklip.data.model.signup
+
+data class TermDetailResponse (
+ val termId:Int,
+ val title:String,
+ val content:String
+)
\ No newline at end of file
diff --git a/app/src/main/java/com/umc/ttoklip/data/model/signup/TermResponse.kt b/app/src/main/java/com/umc/ttoklip/data/model/signup/TermResponse.kt
new file mode 100644
index 00000000..8904b8e6
--- /dev/null
+++ b/app/src/main/java/com/umc/ttoklip/data/model/signup/TermResponse.kt
@@ -0,0 +1,9 @@
+package com.umc.ttoklip.data.model.signup
+
+data class TermResponse (
+ val terms:ArrayList,
+ val totalPage:Int,
+ val totalElements:Int,
+ val isFirst:Boolean,
+ val isLast:Boolean
+)
\ No newline at end of file
diff --git a/app/src/main/java/com/umc/ttoklip/data/repository/signup/SignupRepository.kt b/app/src/main/java/com/umc/ttoklip/data/repository/signup/SignupRepository.kt
index 24502b07..443385e3 100644
--- a/app/src/main/java/com/umc/ttoklip/data/repository/signup/SignupRepository.kt
+++ b/app/src/main/java/com/umc/ttoklip/data/repository/signup/SignupRepository.kt
@@ -12,4 +12,6 @@ interface SignupRepository {
info:MutableMap
,cate:List)
: NetworkResult
+// suspend fun savePrivacy(userInfo:SignupRequest)
+// : NetworkResult
}
\ No newline at end of file
diff --git a/app/src/main/java/com/umc/ttoklip/data/repository/signup/SignupRepositoryImpl.kt b/app/src/main/java/com/umc/ttoklip/data/repository/signup/SignupRepositoryImpl.kt
index c140793a..61739076 100644
--- a/app/src/main/java/com/umc/ttoklip/data/repository/signup/SignupRepositoryImpl.kt
+++ b/app/src/main/java/com/umc/ttoklip/data/repository/signup/SignupRepositoryImpl.kt
@@ -21,4 +21,8 @@ class SignupRepositoryImpl @Inject constructor(
override suspend fun savePrivacy(photo:MultipartBody.Part,info:MutableMap,cate:List): NetworkResult {
return handleApi({api.savePrivacy(photo,cate,info)}) {response: ResponseBody ->response.result}
}
+
+// override suspend fun savePrivacy(userInfo:SignupRequest): NetworkResult {
+// return handleApi({api.savePrivacy(userInfo)}) {response: ResponseBody ->response.result}
+// }
}
\ No newline at end of file
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 5dde2a69..a06650f4 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,5 +1,6 @@
package com.umc.ttoklip.presentation.intro
+import android.graphics.BitmapFactory
import android.graphics.Typeface
import android.os.Bundle
import android.text.Spannable
@@ -9,6 +10,7 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
+import com.umc.ttoklip.R
import com.umc.ttoklip.databinding.FragmentIntroBinding
class IntroFragment(val position:Int): Fragment() {
@@ -24,13 +26,18 @@ class IntroFragment(val position:Int): Fragment() {
0->{val spannable=SpannableStringBuilder("어려움과 도움을 함께\n독립생활의 꿀팁공유")
spannable.setSpan(StyleSpan(Typeface.BOLD),11,22, Spannable.SPAN_EXCLUSIVE_INCLUSIVE)
binding.itemIntroTitleTv.text=spannable
- /**인앱화면 연결 필요**/}
+ binding.itemIntroAppimageIv.setImageBitmap(
+ BitmapFactory.decodeStream(resources.openRawResource(R.raw.intro_image_1st)))}
1->{val spannable=SpannableStringBuilder("자취에 도움되는\n최신뉴스를 한눈에")
spannable.setSpan(StyleSpan(Typeface.BOLD),8,13, Spannable.SPAN_EXCLUSIVE_INCLUSIVE)
- binding.itemIntroTitleTv.text=spannable}
+ binding.itemIntroTitleTv.text=spannable
+ binding.itemIntroAppimageIv.setImageBitmap(
+ BitmapFactory.decodeStream(resources.openRawResource(R.raw.intro_image_2nd)))}
else->{val spannable=SpannableStringBuilder("혼자서는 비싸,\n동네친구들과 함께")
spannable.setSpan(StyleSpan(Typeface.BOLD),15,18, Spannable.SPAN_EXCLUSIVE_INCLUSIVE)
- binding.itemIntroTitleTv.text=spannable}
+ binding.itemIntroTitleTv.text=spannable
+ binding.itemIntroAppimageIv.setImageBitmap(
+ BitmapFactory.decodeStream(resources.openRawResource(R.raw.intro_image_3rd)))}
}
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 56efe850..34420281 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
@@ -83,7 +83,7 @@ class LoginActivity : BaseActivity(R.layout.activity_login
Log.i("카카오로그인", "카카오톡으로 로그인 성공")
val loginRequest = LoginRequest("${token.accessToken}", "kakao")
//임시 토큰확인용
-// Log.i("KAKAO-LOGIN","${token.accessToken}")
+ Log.i("KAKAO-LOGIN","${token.accessToken}")
viewModel.postLogin(loginRequest)
}
}
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
index 512d4909..0048314c 100644
--- a/app/src/main/java/com/umc/ttoklip/presentation/signup/DirectLocationActivity.kt
+++ b/app/src/main/java/com/umc/ttoklip/presentation/signup/DirectLocationActivity.kt
@@ -28,7 +28,7 @@ class DirectLocationActivity :
response: Response
) {
kakao.value = response.body()
- Log.i("kakao", "${kakao.value!!.documents[0].address_name}")
+ Log.i("KAKAO SEARCH", "${kakao.value!!.documents[0].address_name}")
}
override fun onFailure(
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
index 83913cd2..c526ab51 100644
--- a/app/src/main/java/com/umc/ttoklip/presentation/signup/DirectLocationRVAdapter.kt
+++ b/app/src/main/java/com/umc/ttoklip/presentation/signup/DirectLocationRVAdapter.kt
@@ -7,12 +7,6 @@ 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)
@@ -24,4 +18,11 @@ class DirectLocationRVAdapter(private val addressList:List)
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.bind(addressList[position])
}
+
+ 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
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/umc/ttoklip/presentation/signup/SignupViewModel.kt b/app/src/main/java/com/umc/ttoklip/presentation/signup/SignupViewModel.kt
index 80e68394..84f3783e 100644
--- a/app/src/main/java/com/umc/ttoklip/presentation/signup/SignupViewModel.kt
+++ b/app/src/main/java/com/umc/ttoklip/presentation/signup/SignupViewModel.kt
@@ -1,9 +1,14 @@
package com.umc.ttoklip.presentation.signup
+import android.app.Application
+import android.content.res.AssetManager
import android.net.Uri
+import android.provider.MediaStore
import android.util.Log
+import androidx.lifecycle.AndroidViewModel
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
+import com.umc.ttoklip.R
import com.umc.ttoklip.TtoklipApplication
import com.umc.ttoklip.data.model.signup.SignupRequest
import com.umc.ttoklip.data.repository.signup.SignupRepositoryImpl
@@ -11,8 +16,10 @@ import com.umc.ttoklip.module.onError
import com.umc.ttoklip.module.onFail
import com.umc.ttoklip.module.onSuccess
import dagger.hilt.android.lifecycle.HiltViewModel
+import kotlinx.coroutines.InternalCoroutinesApi
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
+import kotlinx.coroutines.job
import kotlinx.coroutines.launch
import okhttp3.MediaType
import okhttp3.MediaType.Companion.toMediaTypeOrNull
@@ -22,13 +29,14 @@ import okhttp3.RequestBody.Companion.asRequestBody
import okhttp3.RequestBody.Companion.toRequestBody
import okhttp3.ResponseBody
import java.io.File
+import java.io.InputStream
import javax.inject.Inject
import javax.inject.Singleton
@HiltViewModel
class SignupViewModel @Inject constructor(
- private val signupRepository: SignupRepositoryImpl
-) : ViewModel() {
+ private val signupRepository: SignupRepositoryImpl, application: Application
+) : AndroidViewModel(application) {
private val _nickcheckbtn=MutableStateFlow(false)
val nickcheckbtn:StateFlow
@@ -111,10 +119,18 @@ class SignupViewModel @Inject constructor(
fun savePrivacy() {
viewModelScope.launch {
- val file = File(profileImage.value)
- val requestBody = file.asRequestBody("image/jpeg".toMediaTypeOrNull())
- val fileToUpload =
- MultipartBody.Part.createFormData("profileImage", file.name+".jpg", requestBody)
+ var fileToUpload:MultipartBody.Part
+ if(profileImage.value.isEmpty()){
+ fileToUpload=MultipartBody.Part.createFormData("profileImage","defaultImage",
+ RequestBody.create(
+ "image/*".toMediaTypeOrNull(),
+ getApplication().resources.openRawResource(
+ R.raw.profile_image_default).readBytes()))
+ }else{
+ val file = File(profileImage.value)
+ val requestBody = file.asRequestBody("image/*".toMediaTypeOrNull())
+ fileToUpload = MultipartBody.Part.createFormData("profileImage", file.name, requestBody)
+ }
val cate=ArrayList()
for (c in categories.value) {
@@ -127,6 +143,10 @@ class SignupViewModel @Inject constructor(
requestMap["independentYear"] = independenctYear.value.toString().toRequestBody("text/plain".toMediaTypeOrNull())
requestMap["independentMonth"] = independenctMonth.value.toString().toRequestBody("text/plain".toMediaTypeOrNull())
signupRepository.savePrivacy(fileToUpload, requestMap,cate)
+
+// signupRepository.savePrivacy(SignupRequest(
+// street,nickname.value,categories.value,profileImage.value,independenctYear.value,independenctMonth.value
+// ))
.onSuccess {
Log.i("USERSAVE", "성공")
}.onFail {
@@ -134,6 +154,8 @@ class SignupViewModel @Inject constructor(
}.onError {
Log.d("USERSAVE ERROR", it.toString())
}
+
}
}
-}
\ No newline at end of file
+}
+
diff --git a/app/src/main/java/com/umc/ttoklip/presentation/signup/fragments/DirectLocationViewModel.kt b/app/src/main/java/com/umc/ttoklip/presentation/signup/fragments/DirectLocationViewModel.kt
new file mode 100644
index 00000000..bf92007e
--- /dev/null
+++ b/app/src/main/java/com/umc/ttoklip/presentation/signup/fragments/DirectLocationViewModel.kt
@@ -0,0 +1,4 @@
+package com.umc.ttoklip.presentation.signup.fragments
+
+class DirectLocationViewModel {
+}
\ 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 d1424fa2..56f233fc 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
@@ -17,6 +17,7 @@ class Signup3Fragment : BaseFragment(R.layout.fragment_s
var locationAgree: Boolean = false
override fun initObserver() {
+
}
override fun initView() {
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 accce65f..dd367f62 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,9 +1,15 @@
package com.umc.ttoklip.presentation.signup.fragments
+import android.app.Application
import android.content.Context
+import android.content.Intent
import android.database.Cursor
+import android.graphics.Bitmap
import android.net.Uri
+import android.os.Build
import android.os.Bundle
+import android.os.Environment
+import android.provider.DocumentsContract
import android.provider.MediaStore
import android.util.Log
import android.view.View
@@ -11,6 +17,7 @@ import androidx.activity.result.PickVisualMediaRequest
import androidx.activity.result.contract.ActivityResultContracts
import androidx.core.content.ContextCompat
import androidx.fragment.app.viewModels
+import androidx.lifecycle.AndroidViewModel
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle
@@ -28,7 +35,14 @@ import com.umc.ttoklip.presentation.signup.SignupViewModel
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
+import java.io.BufferedReader
+import java.io.ByteArrayOutputStream
import java.io.File
+import java.io.FileOutputStream
+import java.io.InputStream
+import java.io.InputStreamReader
+import java.net.URI
+
@AndroidEntryPoint
class Signup4Fragment : BaseFragment(R.layout.fragment_signup4) {
@@ -39,14 +53,12 @@ class Signup4Fragment : BaseFragment(R.layout.fragment_s
private var independentCareerYear: Int? = null
private var independentCareerMonth: Int? = null
- private var nickcheckbtn: Boolean = false
-
override fun initObserver() {
lifecycleScope.launch {
repeatOnLifecycle(Lifecycle.State.STARTED) {
launch {
- viewModel.nickcheckbtn.collect{
- if(it){
+ viewModel.nickcheckbtn.collect {
+ if (it) {
delay(100)
viewModel.nickok.collect {
if (it) {
@@ -150,12 +162,11 @@ class Signup4Fragment : BaseFragment(R.layout.fragment_s
chip.setChipStrokeColorResource(R.color.yellow)
binding.signup4InterestGroup.addView(chip)
- val interestType=
- if (interest.equals("집안일"))"HOUSEWORK"
- else if(interest.equals("요리"))"RECIPE"
- else if(interest.equals("안전한 생활"))"SAFE_LIVING"
- else if(interest.equals("사기"))"FRAUD"
- else "WELFARE_POLICY"
+ val interestType =
+ if (interest.equals("집안일")) "HOUSEWORK"
+ else if (interest.equals("요리")) "RECIPE"
+ else if (interest.equals("안전한 생활")) "SAFE_LIVING"
+ else "WELFARE_POLICY"
interestArray.add(interestType)
}
if (interests.isNotEmpty()) viewModel.interestCheck(true)
@@ -177,29 +188,56 @@ class Signup4Fragment : BaseFragment(R.layout.fragment_s
viewModel.interestok.value &&
viewModel.nickok.value
) {
- val bundle= Bundle()
- bundle.putString("nickname",binding.signup4NicknameEt.text.toString())
- bundle.putStringArrayList("interest",interestArray)
- bundle.putString("imageUri",imageSource)
- bundle.putInt("independentCareerYear",independentCareerYear!!)
- bundle.putInt("independentCareerMonth",independentCareerMonth!!)
-
- findNavController().navigate(R.id.action_signup4_fragment_to_signup5_fragment,bundle)
+ val bundle = Bundle()
+ bundle.putString("nickname", binding.signup4NicknameEt.text.toString())
+ bundle.putStringArrayList("interest", interestArray)
+ bundle.putString(
+ "imageUri",
+ if (imageSource.isNotEmpty()) imageSource
+ else ""
+// Uri.fromFile(File("//android_asset/profile_image_default.png")).toString()
+ )
+ bundle.putInt("independentCareerYear", independentCareerYear!!)
+ bundle.putInt("independentCareerMonth", independentCareerMonth!!)
+
+ findNavController().navigate(
+ R.id.action_signup4_fragment_to_signup5_fragment,
+ bundle
+ )
}
}
}
- private lateinit var imageSource:String
- private val pickMedia= registerForActivityResult(ActivityResultContracts.PickVisualMedia()){ uri ->
- if (uri!=null) {
- Glide.with(this).load(uri)
- .circleCrop()
- .into(binding.signup4ProfileImageIv)
- imageSource=getRealPathFromUri(uri,requireContext())
- } else {
- Log.d("PhotoPicker", "No media selected")
- }
+ override fun onAttach(context: Context) {
+ super.onAttach(context)
+ this.context = context
}
+
+ private var imageSource: String = ""
+ private lateinit var context: Context
+ private val pickMedia =
+ registerForActivityResult(ActivityResultContracts.PickVisualMedia()) { uri ->
+ if (uri != null) {
+ Glide.with(this).load(uri)
+ .circleCrop()
+ .into(binding.signup4ProfileImageIv)
+ imageSource = getRealPathFromUri(uri, context)
+// val bitmap=MediaStore.Images.Media.getBitmap(context.contentResolver,uri)
+// val resizeBitmap= Bitmap.createScaledBitmap(bitmap,bitmap.width/2,bitmap.height/2,true)
+// val byteArrayOutputStream=ByteArrayOutputStream()
+// resizeBitmap.compress(Bitmap.CompressFormat.JPEG,90,byteArrayOutputStream)
+// val tempFile=File.createTempFile("resized_image",".jpg",context.cacheDir)
+// val fileOutputStream=FileOutputStream(tempFile)
+// fileOutputStream.write(byteArrayOutputStream.toByteArray())
+// fileOutputStream.close()
+// imageSource=Uri.fromFile(tempFile).toString()
+// Log.i("PhotoPicker", imageSource)
+// imageSource=uri.toString()
+ } else {
+ Log.d("PhotoPicker", "No media selected")
+ }
+ }
+
private fun setProfileImage(activity: SignupActivity) {
val imageDialog = ImageDialogFragment()
imageDialog.setDialogClickListener(object : ImageDialogFragment.DialogClickListener {
@@ -209,12 +247,16 @@ class Signup4Fragment : BaseFragment(R.layout.fragment_s
})
imageDialog.show(activity.supportFragmentManager, imageDialog.toString())
}
+
fun getRealPathFromUri(contentUri: Uri, context: Context): String {
+ val flag = Intent.FLAG_GRANT_READ_URI_PERMISSION
+ context.contentResolver.takePersistableUriPermission(contentUri, flag)
var cursor: Cursor? = null
try {
- val proj = arrayOf(MediaStore.Video.Media.DATA)
+ val proj = arrayOf(MediaStore.Images.Media.DATA)
cursor = context.contentResolver.query(contentUri, proj, null, null, null)
- val columnIndex = cursor?.getColumnIndexOrThrow(MediaStore.Video.Media.DATA)
+ val columnIndex = cursor?.getColumnIndexOrThrow(MediaStore.Images.Media.DATA)
+ Log.i("ColumnIndex", columnIndex.toString())
if (cursor != null && cursor.moveToFirst()) {
return cursor.getString(columnIndex!!)
}
@@ -223,6 +265,62 @@ class Signup4Fragment : BaseFragment(R.layout.fragment_s
}
return ""
}
+// fun getPath(context: Context, uri: Uri): String? {
+// val isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT
+// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
+// if (isKitKat && DocumentsContract.isDocumentUri(context, uri)) {
+// if (isExternalStorageDocument(uri)) {
+// val docId = DocumentsContract.getDocumentId(uri)
+// val split = docId.split(":".toRegex()).dropLastWhile { it.isEmpty() }
+// .toTypedArray()
+// val type = split[0]
+// if ("primary".equals(type, ignoreCase = true)) {
+// return Environment.getExternalStorageDirectory().toString() + "/" + split[1]
+// }
+// } else if (isMediaDocument(uri)) {
+// val docId = DocumentsContract.getDocumentId(uri)
+// val split = docId.split(":".toRegex()).dropLastWhile { it.isEmpty() }
+// .toTypedArray()
+// val type = split[0]
+// var contentUri: Uri? = null
+// contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI
+// val selection = "_id=?"
+// val selectionArgs = arrayOf(
+// split[1]
+// )
+// return getDataColumn(context, contentUri, selection, selectionArgs)
+// }
+// }
+// }
+// return null
+// }
+// fun isExternalStorageDocument(uri: Uri): Boolean {
+// return "com.android.externalstorage.documents" == uri.authority
+// }
+// fun getDataColumn(
+// context: Context,
+// uri: Uri?,
+// selection: String?,
+// selectionArgs: Array?
+// ): String? {
+// var cursor: Cursor? = null
+// val column = "_data"
+// val projection = arrayOf(column)
+// try {
+// cursor =
+// context.contentResolver.query(uri!!, projection, selection, selectionArgs, null)
+// if (cursor != null && cursor.moveToFirst()) {
+// val column_index = cursor.getColumnIndexOrThrow(column)
+// return cursor.getString(column_index)
+// }
+// } finally {
+// cursor?.close()
+// }
+// return null
+// }
+// fun isMediaDocument(uri: Uri): Boolean {
+// return "com.android.providers.media.documents" == uri.authority
+// }
private fun nextok() {
if (viewModel.nickok.value &&
diff --git a/app/src/main/java/com/umc/ttoklip/presentation/signup/fragments/TermViewModel.kt b/app/src/main/java/com/umc/ttoklip/presentation/signup/fragments/TermViewModel.kt
new file mode 100644
index 00000000..378e9a1d
--- /dev/null
+++ b/app/src/main/java/com/umc/ttoklip/presentation/signup/fragments/TermViewModel.kt
@@ -0,0 +1,10 @@
+package com.umc.ttoklip.presentation.signup.fragments
+
+import androidx.lifecycle.ViewModel
+import com.umc.ttoklip.data.repository.signup.SignupRepositoryImpl
+import javax.inject.Inject
+
+class TermViewModel @Inject constructor(
+ private val signupRepository: SignupRepositoryImpl
+) : ViewModel() {
+}
\ 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 11e592c2..9fe4fa4d 100644
--- a/app/src/main/res/layout/activity_intro.xml
+++ b/app/src/main/res/layout/activity_intro.xml
@@ -4,7 +4,8 @@
+ android:layout_height="match_parent"
+ android:background="@color/white">
+ android:layout_height="match_parent"
+ android:background="@color/white">
diff --git a/app/src/main/res/layout/fragment_signup3.xml b/app/src/main/res/layout/fragment_signup3.xml
index 68ba6acc..97c7bfbe 100644
--- a/app/src/main/res/layout/fragment_signup3.xml
+++ b/app/src/main/res/layout/fragment_signup3.xml
@@ -188,6 +188,12 @@
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"/>
+
+
+
+
+
+
+ android:layout_height="wrap_content"
+ android:background="@color/white">
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/raw/intro_image_1st.png b/app/src/main/res/raw/intro_image_1st.png
new file mode 100644
index 00000000..814ad079
Binary files /dev/null and b/app/src/main/res/raw/intro_image_1st.png differ
diff --git a/app/src/main/res/raw/intro_image_2nd.png b/app/src/main/res/raw/intro_image_2nd.png
new file mode 100644
index 00000000..b8f767de
Binary files /dev/null and b/app/src/main/res/raw/intro_image_2nd.png differ
diff --git a/app/src/main/res/raw/intro_image_3rd.png b/app/src/main/res/raw/intro_image_3rd.png
new file mode 100644
index 00000000..1cda4fdc
Binary files /dev/null and b/app/src/main/res/raw/intro_image_3rd.png differ
diff --git a/app/src/main/res/raw/profile_image_default.png b/app/src/main/res/raw/profile_image_default.png
new file mode 100644
index 00000000..4c2a1cdd
Binary files /dev/null and b/app/src/main/res/raw/profile_image_default.png differ