diff --git a/app/build.gradle b/app/build.gradle
index 248a2f6..2244d7e 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -30,10 +30,16 @@ android {
kotlinOptions {
jvmTarget = '11'
}
+ buildFeatures {
+ viewBinding true
+ }
}
dependencies {
-
+ implementation 'com.github.bumptech.glide:glide:4.12.0'
+ annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0'
+ implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.2"
+ implementation "androidx.fragment:fragment-ktx:1.6.1"
implementation 'androidx.core:core-ktx:1.8.0'
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.5.0'
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 22397d5..c2dcd01 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -2,6 +2,9 @@
+
+
+
+ android:exported="false">
+
+
-
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/org/sopt/dosopttemplate/DoAndroidFragment.kt b/app/src/main/java/org/sopt/dosopttemplate/DoAndroidFragment.kt
new file mode 100644
index 0000000..34cc61f
--- /dev/null
+++ b/app/src/main/java/org/sopt/dosopttemplate/DoAndroidFragment.kt
@@ -0,0 +1,35 @@
+package org.sopt.dosopttemplate
+
+import android.os.Bundle
+import androidx.fragment.app.Fragment
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import org.sopt.dosopttemplate.databinding.FragmentDoAndroidBinding
+
+
+class DoAndroidFragment : Fragment() {
+ private var _binding : FragmentDoAndroidBinding ? = null
+ private val binding: FragmentDoAndroidBinding
+ get() = requireNotNull(_binding){"바인딩 에러"}
+
+ override fun onCreateView(
+ inflater: LayoutInflater,
+ container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View {
+ _binding = FragmentDoAndroidBinding.inflate(inflater, container, false)
+ return binding.root
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ }
+
+ override fun onDestroyView() {
+ _binding = null
+ super.onDestroyView()
+ }
+}
+
+
diff --git a/app/src/main/java/org/sopt/dosopttemplate/FriendViewHolder.kt b/app/src/main/java/org/sopt/dosopttemplate/FriendViewHolder.kt
new file mode 100644
index 0000000..8253012
--- /dev/null
+++ b/app/src/main/java/org/sopt/dosopttemplate/FriendViewHolder.kt
@@ -0,0 +1,19 @@
+package org.sopt.dosopttemplate
+
+import androidx.recyclerview.widget.RecyclerView
+import com.bumptech.glide.Glide
+import org.sopt.dosopttemplate.databinding.ItemFriendBinding
+
+class FriendViewHolder(private val binding: ItemFriendBinding) :
+ RecyclerView.ViewHolder(binding.root) {
+
+ fun onBind(userUserProfileData: UserProfile.User) {
+ with(binding) {
+ Glide.with(ivProfile)
+ .load(userUserProfileData.profileImage)
+ .into(ivProfile)
+ tvName.text = userUserProfileData.name
+ tvSelfMessage.text = userUserProfileData.message
+ }
+ }
+ }
diff --git a/app/src/main/java/org/sopt/dosopttemplate/HomeActivity.kt b/app/src/main/java/org/sopt/dosopttemplate/HomeActivity.kt
new file mode 100644
index 0000000..a852260
--- /dev/null
+++ b/app/src/main/java/org/sopt/dosopttemplate/HomeActivity.kt
@@ -0,0 +1,174 @@
+package org.sopt.dosopttemplate
+
+import android.animation.ObjectAnimator
+import android.content.pm.PackageManager
+import android.graphics.Bitmap
+import android.graphics.Canvas
+import android.os.Bundle
+import android.os.Environment
+import android.provider.MediaStore
+import android.util.Log
+import android.view.View
+import android.widget.Toast
+import androidx.appcompat.app.AppCompatActivity
+import androidx.core.app.ActivityCompat
+import androidx.core.content.ContextCompat
+import androidx.fragment.app.Fragment
+import org.sopt.dosopttemplate.databinding.ActivityHomeBinding
+import java.io.File
+import java.io.FileOutputStream
+import java.io.IOException
+import android.Manifest
+
+
+class HomeActivity : AppCompatActivity() {
+ private lateinit var binding: ActivityHomeBinding
+ private var openFAB = false
+ private val WRITE_EXTERNAL_STORAGE_REQUEST_CODE = 1
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ binding = ActivityHomeBinding.inflate(layoutInflater)
+ setContentView(binding.root)
+
+ val currentFragment = supportFragmentManager.findFragmentById(R.id.fcv_home)
+ if (currentFragment == null) {
+ supportFragmentManager.beginTransaction()
+ .add(R.id.fcv_home, HomeFragment())
+ .commit()
+ }
+ clickBottomNavigation()
+ setCLICKFAB()
+ checkManageExternalStoragePermission()
+ }
+
+ companion object {
+ fun createMyPageFragment(user_id: String?, user_major: String?): MyPageFragment {
+ return if (user_id != null && user_major != null) {
+ MyPageFragment.newInstance(user_id, user_major)
+ } else {
+ throw IllegalArgumentException("데이터가 없어요!")
+ }
+ }
+ }
+
+ private fun clickBottomNavigation() {
+ binding.bnvHome.setOnItemSelectedListener {
+ when (it.itemId) {
+ R.id.menu_home -> {
+ replaceFragment(HomeFragment())
+ true
+ }
+
+ R.id.menu_do_android -> {
+ replaceFragment(DoAndroidFragment())
+ true
+ }
+
+ R.id.menu_mypage -> {
+ try {
+ val user_id = intent?.getStringExtra("user_id")
+ val user_major = intent?.getStringExtra("user_major")
+ val myPageFragment = createMyPageFragment(user_id, user_major)
+ replaceFragment(myPageFragment)
+ } catch (e: IllegalArgumentException) {
+ Toast.makeText(this, e.message, Toast.LENGTH_SHORT).show()
+ }
+ true
+ }
+
+ else -> false
+ }
+ }
+ }
+
+ private fun replaceFragment(fragment: Fragment) {
+ supportFragmentManager.beginTransaction()
+ .replace(R.id.fcv_home, fragment)
+ .commit()
+
+ }
+
+ private fun setCLICKFAB() {
+ binding.fabMain.setOnClickListener {
+ eventFAB()
+ }
+ binding.fabCapture.setOnClickListener {
+ takeScreenshot()
+ }
+
+ binding.fabShare.setOnClickListener {
+ Toast.makeText(this, "공유하는 중", Toast.LENGTH_SHORT).show()
+ }
+ }
+
+ private fun eventFAB() {
+ if (openFAB) {
+ ObjectAnimator.ofFloat(binding.fabShare, "translationY", 0f).apply { start() }
+ ObjectAnimator.ofFloat(binding.fabCapture, "translationY", 0f).apply { start() }
+ } else {
+ ObjectAnimator.ofFloat(binding.fabShare, "translationY", -400f).apply { start() }
+ ObjectAnimator.ofFloat(binding.fabCapture, "translationY", -200f).apply { start() }
+ }
+ openFAB = !openFAB
+ }
+
+ private fun checkManageExternalStoragePermission() {
+ val managePermission = ContextCompat.checkSelfPermission(
+ this,
+ Manifest.permission.WRITE_EXTERNAL_STORAGE
+ )
+
+ if (managePermission != PackageManager.PERMISSION_GRANTED) {
+ ActivityCompat.requestPermissions(
+ this,
+ arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE),
+ WRITE_EXTERNAL_STORAGE_REQUEST_CODE
+ )
+ }
+ }
+ override fun onRequestPermissionsResult(
+ requestCode: Int,
+ permissions: Array,
+ grantResults: IntArray
+ ) {
+ super.onRequestPermissionsResult(requestCode, permissions, grantResults)
+
+ if (requestCode == WRITE_EXTERNAL_STORAGE_REQUEST_CODE) {
+ if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
+ Toast.makeText(this, "권한이 허용되었습니다.", Toast.LENGTH_SHORT).show()
+ } else {
+ Toast.makeText(this, "권한이 거부되었습니다.", Toast.LENGTH_SHORT).show()
+ }
+ }
+ }
+
+ private fun takeScreenshot() {
+ val rootView = window.decorView.rootView
+ val screenShot: File? = captureScreen(rootView)
+ }
+ private fun captureScreen(view: View): File? {
+ val screenBitmap = Bitmap.createBitmap(view.width, view.height, Bitmap.Config.ARGB_8888)
+ val canvas = Canvas(screenBitmap)
+ view.draw(canvas)
+
+ if (screenBitmap.byteCount == 0) {
+ return null
+ }
+
+ val filename = "Profilescreenshot.png"
+ val file = File(getExternalFilesDir(Environment.DIRECTORY_PICTURES), filename)
+
+ try {
+ val output = FileOutputStream(file)
+ screenBitmap.compress(Bitmap.CompressFormat.PNG, 100, output)
+ output.close()
+
+ } catch (e: IOException) {
+ e.printStackTrace()
+ return null
+ }
+
+ return file
+ }
+}
+
diff --git a/app/src/main/java/org/sopt/dosopttemplate/HomeFragment.kt b/app/src/main/java/org/sopt/dosopttemplate/HomeFragment.kt
new file mode 100644
index 0000000..12b292a
--- /dev/null
+++ b/app/src/main/java/org/sopt/dosopttemplate/HomeFragment.kt
@@ -0,0 +1,41 @@
+package org.sopt.dosopttemplate
+
+import MainAdapter
+import android.os.Bundle
+import androidx.fragment.app.Fragment
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.fragment.app.viewModels
+import org.sopt.dosopttemplate.databinding.FragmentHomeBinding
+
+class HomeFragment : Fragment() {
+ private var _binding: FragmentHomeBinding? = null
+ private val binding: FragmentHomeBinding
+ get() = requireNotNull(_binding) { "바인딩 에러" }
+
+ private val viewModel by viewModels()
+
+ override fun onCreateView(
+ inflater: LayoutInflater,
+ container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View {
+ _binding = FragmentHomeBinding.inflate(inflater, container, false)
+ return binding.root
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ val MainAdapter = MainAdapter(requireContext())
+ binding.rvFriends.adapter = MainAdapter
+ MainAdapter.profileList = viewModel.mockUserProfileLists
+ }
+
+ override fun onDestroyView() {
+ _binding = null
+ super.onDestroyView()
+ }
+}
+
+
diff --git a/app/src/main/java/org/sopt/dosopttemplate/HomeViewModel.kt b/app/src/main/java/org/sopt/dosopttemplate/HomeViewModel.kt
new file mode 100644
index 0000000..61402a6
--- /dev/null
+++ b/app/src/main/java/org/sopt/dosopttemplate/HomeViewModel.kt
@@ -0,0 +1,68 @@
+package org.sopt.dosopttemplate
+
+import androidx.lifecycle.ViewModel
+
+class HomeViewModel : ViewModel() {
+ val mockUserProfileLists = mutableListOf(
+ UserProfile.My (
+ profileImage = R.drawable.boong1,
+ name = "조세연",
+ message = "붕어의 계절티비",
+ ),
+ UserProfile.User(
+ profileImage = R.drawable.myimage,
+ name = "경지현",
+ message = "비티비타오백"
+ ),
+ UserProfile.User(
+ profileImage = R.drawable.myimage,
+ name = "박강희",
+ message = "오늘 생일티비!"
+ ),
+ UserProfile.User(
+ profileImage = R.drawable.myimage,
+ name = "이삭",
+ message = "안드짱티비"
+ ),
+ UserProfile.User(
+ profileImage = R.drawable.myimage,
+ name = "박동민",
+ message = "일본티비"
+ ),
+ UserProfile.User(
+ profileImage = R.drawable.myimage,
+ name = "붕어빵",
+ message = "슈크림근본"
+ ),
+ UserProfile.User(
+ profileImage = R.drawable.myimage,
+ name = "붕어",
+ message = "예?"
+ ),
+ UserProfile.User(
+ profileImage = R.drawable.myimage,
+ name = "붕",
+ message = "붕붕아"
+ ),
+ UserProfile.User(
+ profileImage = R.drawable.myimage,
+ name = "시험",
+ message = "멈춰티비"
+ ),
+ UserProfile.User(
+ profileImage = R.drawable.myimage,
+ name = "숙대",
+ message = "눈송티비"
+ ),
+ UserProfile.User(
+ profileImage = R.drawable.myimage,
+ name = "새벽",
+ message = "배고픔티비"
+ ),
+ UserProfile.User(
+ profileImage = R.drawable.myimage,
+ name = "솝트",
+ message = "안드티비"
+ )
+ )
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/sopt/dosopttemplate/LoginActivity.kt b/app/src/main/java/org/sopt/dosopttemplate/LoginActivity.kt
new file mode 100644
index 0000000..23b3608
--- /dev/null
+++ b/app/src/main/java/org/sopt/dosopttemplate/LoginActivity.kt
@@ -0,0 +1,64 @@
+package org.sopt.dosopttemplate
+import android.content.Intent
+import android.os.Bundle
+import android.util.Log
+import android.widget.Toast
+import androidx.activity.result.ActivityResultLauncher
+import androidx.activity.result.contract.ActivityResultContracts
+import androidx.appcompat.app.AppCompatActivity
+import org.sopt.dosopttemplate.databinding.ActivityLoginBinding
+
+class LoginActivity : AppCompatActivity() {
+ private lateinit var binding: ActivityLoginBinding
+ lateinit var enteredId: String
+ lateinit var enteredPassword: String
+ lateinit var enteredMajor: String
+ lateinit var enteredName: String
+ lateinit var resultLauncher: ActivityResultLauncher
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ binding = ActivityLoginBinding.inflate(layoutInflater)
+ setContentView(binding.root)
+
+ val signButton = binding.signupButton
+ val loginButton = binding.loginButton
+
+ resultLauncher = registerForActivityResult(
+ ActivityResultContracts.StartActivityForResult()
+ ) { result ->
+ if (result.resultCode == RESULT_OK) {
+ val data: Intent? = result.data
+ enteredId = data?.getStringExtra("entered_id") ?: ""
+ enteredPassword = data?.getStringExtra("entered_password") ?: ""
+ enteredMajor = data?.getStringExtra("entered_Major") ?: ""
+ enteredName = data?.getStringExtra("entered_Name") ?: ""
+ }
+ }
+
+ signButton.setOnClickListener {
+ val intent = Intent(this, SignUpActivity::class.java)
+ resultLauncher.launch(intent)
+ }
+
+ loginButton.setOnClickListener {
+
+ val inputId = binding.inputTextId
+ val inputPw = binding.inputTextPw
+
+ val isLoginSuccessful =
+ enteredId == inputId.text.toString() && enteredPassword == inputPw.text.toString()
+ if (isLoginSuccessful) {
+ Toast.makeText(this, "로그인에 성공했습니다 :)", Toast.LENGTH_LONG).show()
+
+ val mainIntent = Intent(this, HomeActivity::class.java)
+ mainIntent.putExtra("user_id", enteredId)
+ mainIntent.putExtra("user_major", enteredMajor)
+ startActivity(mainIntent)
+ } else {
+ Toast.makeText(this, "로그인에 실패했습니다 :(", Toast.LENGTH_LONG).show()
+ }
+ }
+ }
+ }
+
diff --git a/app/src/main/java/org/sopt/dosopttemplate/MainActivity.kt b/app/src/main/java/org/sopt/dosopttemplate/MainActivity.kt
index 6d11107..c863255 100644
--- a/app/src/main/java/org/sopt/dosopttemplate/MainActivity.kt
+++ b/app/src/main/java/org/sopt/dosopttemplate/MainActivity.kt
@@ -2,10 +2,28 @@ package org.sopt.dosopttemplate
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
+import org.sopt.dosopttemplate.databinding.ActivityMainBinding
class MainActivity : AppCompatActivity() {
+ private lateinit var binding: ActivityMainBinding
+
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
- setContentView(R.layout.activity_main)
- }
-}
\ No newline at end of file
+ binding = ActivityMainBinding.inflate(layoutInflater)
+ setContentView(binding.root)
+ val inputTextId = intent.getStringExtra("user_id")
+ val inputTextMajor = intent.getStringExtra("user_major")
+ val inputTextName = intent.getStringExtra("user_name")
+
+ val idTextView = binding.mypageTextId
+ val majorTextView = binding.mypageTextMajor
+ val nameTextView = binding.mypageTextName
+
+ idTextView.text = "$inputTextId"
+ majorTextView.text = "$inputTextMajor"
+ nameTextView.text = "$inputTextName"
+ }
+
+}
+
+
diff --git a/app/src/main/java/org/sopt/dosopttemplate/MainAdapter.kt b/app/src/main/java/org/sopt/dosopttemplate/MainAdapter.kt
new file mode 100644
index 0000000..d64dfd9
--- /dev/null
+++ b/app/src/main/java/org/sopt/dosopttemplate/MainAdapter.kt
@@ -0,0 +1,55 @@
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.ViewGroup
+import androidx.recyclerview.widget.RecyclerView
+import org.sopt.dosopttemplate.FriendViewHolder
+import org.sopt.dosopttemplate.MyProfileViewHolder
+import org.sopt.dosopttemplate.UserProfile
+import org.sopt.dosopttemplate.databinding.ItemFriendBinding
+import org.sopt.dosopttemplate.databinding.ItemMyprofileBinding
+
+class MainAdapter(requireContext: Context) :
+ RecyclerView.Adapter() {
+
+ lateinit var profileList: MutableList
+
+ private val View_Myprofile = 0
+ private val View_Friend = 1
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
+ return when (viewType) {
+ View_Myprofile -> {
+ val binding = ItemMyprofileBinding.inflate(LayoutInflater.from(parent.context), parent, false)
+ MyProfileViewHolder(binding)
+ }
+ View_Friend -> {
+ val binding = ItemFriendBinding.inflate(LayoutInflater.from(parent.context), parent, false)
+ FriendViewHolder(binding)
+ }
+ else -> throw IllegalArgumentException("유효하지 않소")
+ }
+ }
+
+ override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
+ val item = profileList[position]
+ when (holder) {
+ is MyProfileViewHolder -> {
+ holder.onBind(item as UserProfile.My )
+ }
+ is FriendViewHolder -> {
+ holder.onBind(item as UserProfile.User)
+ }
+ }
+ }
+
+ override fun getItemCount(): Int {
+ return profileList.size
+ }
+
+ override fun getItemViewType(position: Int): Int = when(profileList[position]){
+ is UserProfile.My -> View_Myprofile
+ is UserProfile.User -> View_Friend
+ }
+}
+
+
diff --git a/app/src/main/java/org/sopt/dosopttemplate/MyPageFragment.kt b/app/src/main/java/org/sopt/dosopttemplate/MyPageFragment.kt
new file mode 100644
index 0000000..85f6a4a
--- /dev/null
+++ b/app/src/main/java/org/sopt/dosopttemplate/MyPageFragment.kt
@@ -0,0 +1,50 @@
+package org.sopt.dosopttemplate
+
+import android.os.Bundle
+import android.util.Log
+import androidx.fragment.app.Fragment
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import org.sopt.dosopttemplate.databinding.FragmentMyPageBinding
+
+class MyPageFragment : Fragment() {
+ private var _binding: FragmentMyPageBinding? = null
+ private val binding: FragmentMyPageBinding
+ get() = requireNotNull(_binding) { "바인딩 에러" }
+
+ override fun onCreateView(
+ inflater: LayoutInflater,
+ container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View {
+ _binding = FragmentMyPageBinding.inflate(inflater, container, false)
+ return binding.root
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+
+ with(binding) {
+ mypageTextId.text = arguments?.getString("user_id")
+ mypageTextMajor.text = arguments?.getString("user_major")
+ }
+ }
+
+ override fun onDestroyView() {
+ super.onDestroyView()
+ _binding = null
+ }
+
+ companion object {
+ @JvmStatic
+ fun newInstance(id: String, major: String): MyPageFragment {
+ val fragment = MyPageFragment()
+ val args = Bundle()
+ args.putString("user_id", id)
+ args.putString("user_major", major)
+ fragment.arguments = args
+ return fragment
+ }
+ }
+}
diff --git a/app/src/main/java/org/sopt/dosopttemplate/MyProfileViewHolder.kt b/app/src/main/java/org/sopt/dosopttemplate/MyProfileViewHolder.kt
new file mode 100644
index 0000000..ae45e34
--- /dev/null
+++ b/app/src/main/java/org/sopt/dosopttemplate/MyProfileViewHolder.kt
@@ -0,0 +1,20 @@
+package org.sopt.dosopttemplate
+
+import androidx.recyclerview.widget.RecyclerView
+import com.bumptech.glide.Glide
+import org.sopt.dosopttemplate.databinding.ItemFriendBinding
+import org.sopt.dosopttemplate.databinding.ItemMyprofileBinding
+
+class MyProfileViewHolder(private val binding: ItemMyprofileBinding) :
+ RecyclerView.ViewHolder(binding.root) {
+
+ fun onBind(userUserProfileData: UserProfile.My) {
+ with(binding) {
+ Glide.with(ivProfile)
+ .load(userUserProfileData.profileImage)
+ .into(ivProfile)
+ tvName.text = userUserProfileData.name
+ tvSelfMessage.text = userUserProfileData.message
+ }
+ }
+}
diff --git a/app/src/main/java/org/sopt/dosopttemplate/SignUpActivity.kt b/app/src/main/java/org/sopt/dosopttemplate/SignUpActivity.kt
new file mode 100644
index 0000000..53272c7
--- /dev/null
+++ b/app/src/main/java/org/sopt/dosopttemplate/SignUpActivity.kt
@@ -0,0 +1,59 @@
+package org.sopt.dosopttemplate
+
+import android.app.Activity
+import android.content.Intent
+import android.os.Bundle
+import android.widget.Toast
+import androidx.appcompat.app.AppCompatActivity
+import org.sopt.dosopttemplate.databinding.ActivitySignupBinding
+
+class SignUpActivity : AppCompatActivity() {
+ private lateinit var binding: ActivitySignupBinding
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+
+ binding = ActivitySignupBinding.inflate(layoutInflater)
+ setContentView(binding.root)
+
+ val signupButton = binding.signupButton
+ val editTextId = binding.editTextId
+ val editTextPassword = binding.editTextPassword
+ val editTextMajor = binding.editTextMajor
+ val editTextName = binding.editTextName
+
+ signupButton.setOnClickListener {
+ val enteredId = editTextId.text.toString()
+ val enteredPassword = editTextPassword.text.toString()
+ val enteredMajor = editTextMajor.text.toString()
+ val enteredName = editTextName.text.toString()
+
+ if (isValidSignUp(enteredId, enteredPassword, enteredMajor, enteredName)) {
+ val loginIntent = Intent()
+ loginIntent.putExtra("entered_id", enteredId)
+ loginIntent.putExtra("entered_password", enteredPassword)
+ loginIntent.putExtra("entered_Major", enteredMajor)
+ loginIntent.putExtra("entered_Name", enteredName)
+ setResult(RESULT_OK, loginIntent)
+ finish()
+ } else {
+ Toast.makeText(this, "회원가입 조건을 다시 확인하세요 !", Toast.LENGTH_SHORT).show()
+ }
+ }
+ }
+
+ private fun isValidSignUp(
+ enteredId: String,
+ enteredPassword: String,
+ enteredMajor: String,
+ enteredName: String
+ ): Boolean {
+
+ val isIdValid = enteredId.length >= 6 && enteredId.length <= 10
+ val isPasswordValid = enteredPassword.length >= 8 && enteredPassword.length <= 12
+ val isNicknameValid = enteredName.length >= 1 && !enteredName.isBlank()
+ val isMajorValid = enteredMajor.length >= 1 && !enteredMajor.isBlank()
+
+ return isIdValid && isPasswordValid && isNicknameValid && isMajorValid
+ }
+}
diff --git a/app/src/main/java/org/sopt/dosopttemplate/UserProfile.kt b/app/src/main/java/org/sopt/dosopttemplate/UserProfile.kt
new file mode 100644
index 0000000..243ad2d
--- /dev/null
+++ b/app/src/main/java/org/sopt/dosopttemplate/UserProfile.kt
@@ -0,0 +1,16 @@
+package org.sopt.dosopttemplate
+import androidx.annotation.DrawableRes
+
+sealed class UserProfile {
+ data class My(
+ @DrawableRes val profileImage: Int,
+ val name: String,
+ val message: String
+ ) : UserProfile()
+
+ data class User(
+ @DrawableRes val profileImage: Int,
+ val name: String,
+ val message: String
+ ) : UserProfile()
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/boong1.jpeg b/app/src/main/res/drawable/boong1.jpeg
new file mode 100644
index 0000000..cb25ff8
Binary files /dev/null and b/app/src/main/res/drawable/boong1.jpeg differ
diff --git a/app/src/main/res/drawable/ic_do_android_pink_24.xml b/app/src/main/res/drawable/ic_do_android_pink_24.xml
new file mode 100644
index 0000000..d2b0ff2
--- /dev/null
+++ b/app/src/main/res/drawable/ic_do_android_pink_24.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_fab_capture_pink_24.xml b/app/src/main/res/drawable/ic_fab_capture_pink_24.xml
new file mode 100644
index 0000000..c3517f1
--- /dev/null
+++ b/app/src/main/res/drawable/ic_fab_capture_pink_24.xml
@@ -0,0 +1,6 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_fab_main_pink_24.xml b/app/src/main/res/drawable/ic_fab_main_pink_24.xml
new file mode 100644
index 0000000..afef92e
--- /dev/null
+++ b/app/src/main/res/drawable/ic_fab_main_pink_24.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_fab_share_pink_24.xml b/app/src/main/res/drawable/ic_fab_share_pink_24.xml
new file mode 100644
index 0000000..071b829
--- /dev/null
+++ b/app/src/main/res/drawable/ic_fab_share_pink_24.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_home_pink_24.xml b/app/src/main/res/drawable/ic_home_pink_24.xml
new file mode 100644
index 0000000..037a420
--- /dev/null
+++ b/app/src/main/res/drawable/ic_home_pink_24.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_person_pink_24.xml b/app/src/main/res/drawable/ic_person_pink_24.xml
new file mode 100644
index 0000000..52934be
--- /dev/null
+++ b/app/src/main/res/drawable/ic_person_pink_24.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/app/src/main/res/drawable/menu_selector_color.xml b/app/src/main/res/drawable/menu_selector_color.xml
new file mode 100644
index 0000000..bef68a6
--- /dev/null
+++ b/app/src/main/res/drawable/menu_selector_color.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/myimage.jpg b/app/src/main/res/drawable/myimage.jpg
new file mode 100644
index 0000000..e9db6b3
Binary files /dev/null and b/app/src/main/res/drawable/myimage.jpg differ
diff --git a/app/src/main/res/font/do_sopt_font.xml b/app/src/main/res/font/do_sopt_font.xml
new file mode 100644
index 0000000..891a76f
--- /dev/null
+++ b/app/src/main/res/font/do_sopt_font.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_home.xml b/app/src/main/res/layout/activity_home.xml
new file mode 100644
index 0000000..2c1cc8e
--- /dev/null
+++ b/app/src/main/res/layout/activity_home.xml
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ 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
new file mode 100644
index 0000000..6c65fc2
--- /dev/null
+++ b/app/src/main/res/layout/activity_login.xml
@@ -0,0 +1,84 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 73537b6..5934347 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -4,15 +4,76 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
+ android:paddingHorizontal="60dp"
+ android:paddingVertical="60dp"
tools:context=".MainActivity">
+
+
+
+
+
+
+
+
+
+
+ app:layout_constraintTop_toTopOf="@+id/mypageTextMajor" />
+
+
\ 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
new file mode 100644
index 0000000..d7f42f8
--- /dev/null
+++ b/app/src/main/res/layout/activity_signup.xml
@@ -0,0 +1,112 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_do_android.xml b/app/src/main/res/layout/fragment_do_android.xml
new file mode 100644
index 0000000..6ed2cf3
--- /dev/null
+++ b/app/src/main/res/layout/fragment_do_android.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml
new file mode 100644
index 0000000..ed9857a
--- /dev/null
+++ b/app/src/main/res/layout/fragment_home.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/fragment_my_page.xml b/app/src/main/res/layout/fragment_my_page.xml
new file mode 100644
index 0000000..3cccef4
--- /dev/null
+++ b/app/src/main/res/layout/fragment_my_page.xml
@@ -0,0 +1,58 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_friend.xml b/app/src/main/res/layout/item_friend.xml
new file mode 100644
index 0000000..dc55dea
--- /dev/null
+++ b/app/src/main/res/layout/item_friend.xml
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_myprofile.xml b/app/src/main/res/layout/item_myprofile.xml
new file mode 100644
index 0000000..60730fb
--- /dev/null
+++ b/app/src/main/res/layout/item_myprofile.xml
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/menu/menu_home.xml b/app/src/main/res/menu/menu_home.xml
new file mode 100644
index 0000000..9d34a05
--- /dev/null
+++ b/app/src/main/res/menu/menu_home.xml
@@ -0,0 +1,22 @@
+
+
\ 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 8660a1a..f41629b 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1,3 +1,18 @@
DoSoptTemplate
+ Welcome to SOPT
+ ID
+ 비밀번호
+ 전공
+ 닉네임
+ DO ANDROID
+ SIGN UP
+ 회원가입 하기
+ 로그인 하기
+
+
+
+
+
+ Hello blank fragment
\ No newline at end of file