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