diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..aa724b7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,15 @@ +*.iml +.gradle +/local.properties +/.idea/caches +/.idea/libraries +/.idea/modules.xml +/.idea/workspace.xml +/.idea/navEditor.xml +/.idea/assetWizardSettings.xml +.DS_Store +/build +/captures +.externalNativeBuild +.cxx +local.properties diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/.name b/.idea/.name new file mode 100644 index 0000000..b3405b3 --- /dev/null +++ b/.idea/.name @@ -0,0 +1 @@ +My Application \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..fb7f4a8 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml new file mode 100644 index 0000000..a0aa5bf --- /dev/null +++ b/.idea/deploymentTargetDropDown.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..526b4c2 --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,20 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..61251ca --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/README.md b/README.md deleted file mode 100644 index 3830171..0000000 --- a/README.md +++ /dev/null @@ -1,2 +0,0 @@ -# Android-Hyebin -![github_이혜빈_ver1-25](https://user-images.githubusercontent.com/70698151/135754518-b0b65ab0-5cd6-45e6-8ce9-4b307a36e278.png) diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/app/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle new file mode 100644 index 0000000..97a5f55 --- /dev/null +++ b/app/build.gradle @@ -0,0 +1,53 @@ +plugins { + id 'com.android.application' + id 'kotlin-android' +} + +android { + compileSdk 30 + + defaultConfig { + applicationId "com.example.myapplication" + minSdk 26 + targetSdk 30 + versionCode 1 + versionName "1.0" + + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + + buildFeatures { + viewBinding true + } + } + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + kotlinOptions { + jvmTarget = '1.8' + } +} + +dependencies { + implementation "com.squareup.retrofit2:retrofit:2.9.0" + implementation "com.squareup.retrofit2:converter-gson:2.9.0" + implementation "com.google.code.gson:gson:2.8.6" + + implementation 'androidx.core:core-ktx:1.6.0' + implementation 'androidx.appcompat:appcompat:1.3.1' + implementation 'com.google.android.material:material:1.4.0' + implementation 'androidx.constraintlayout:constraintlayout:2.1.1' + implementation 'androidx.legacy:legacy-support-v4:1.0.0' + implementation 'com.github.bumptech.glide:glide:4.12.0' + testImplementation 'junit:junit:4.+' + androidTestImplementation 'androidx.test.ext:junit:1.1.3' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' + annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0' +} \ No newline at end of file diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100644 index 0000000..481bb43 --- /dev/null +++ b/app/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/app/src/androidTest/java/com/example/myapplication/ExampleInstrumentedTest.kt b/app/src/androidTest/java/com/example/myapplication/ExampleInstrumentedTest.kt new file mode 100644 index 0000000..e9283cf --- /dev/null +++ b/app/src/androidTest/java/com/example/myapplication/ExampleInstrumentedTest.kt @@ -0,0 +1,24 @@ +package com.example.myapplication + +import androidx.test.platform.app.InstrumentationRegistry +import androidx.test.ext.junit.runners.AndroidJUnit4 + +import org.junit.Test +import org.junit.runner.RunWith + +import org.junit.Assert.* + +/** + * Instrumented test, which will execute on an Android device. + * + * See [testing documentation](http://d.android.com/tools/testing). + */ +@RunWith(AndroidJUnit4::class) +class ExampleInstrumentedTest { + @Test + fun useAppContext() { + // Context of the app under test. + val appContext = InstrumentationRegistry.getInstrumentation().targetContext + assertEquals("com.example.myapplication", appContext.packageName) + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..69d0663 --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/example/myapplication/CameraFragment.kt b/app/src/main/java/com/example/myapplication/CameraFragment.kt new file mode 100644 index 0000000..2f5682a --- /dev/null +++ b/app/src/main/java/com/example/myapplication/CameraFragment.kt @@ -0,0 +1,59 @@ +package com.example.myapplication + +import android.os.Bundle +import androidx.fragment.app.Fragment +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup + +// TODO: Rename parameter arguments, choose names that match +// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER +private const val ARG_PARAM1 = "param1" +private const val ARG_PARAM2 = "param2" + +/** + * A simple [Fragment] subclass. + * Use the [CameraFragment.newInstance] factory method to + * create an instance of this fragment. + */ +class CameraFragment : Fragment() { + // TODO: Rename and change types of parameters + private var param1: String? = null + private var param2: String? = null + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + arguments?.let { + param1 = it.getString(ARG_PARAM1) + param2 = it.getString(ARG_PARAM2) + } + } + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_camera, container, false) + } + + companion object { + /** + * Use this factory method to create a new instance of + * this fragment using the provided parameters. + * + * @param param1 Parameter 1. + * @param param2 Parameter 2. + * @return A new instance of fragment CameraFragment. + */ + // TODO: Rename and change types and number of parameters + @JvmStatic + fun newInstance(param1: String, param2: String) = + CameraFragment().apply { + arguments = Bundle().apply { + putString(ARG_PARAM1, param1) + putString(ARG_PARAM2, param2) + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/myapplication/FollowerAdapter.kt b/app/src/main/java/com/example/myapplication/FollowerAdapter.kt new file mode 100644 index 0000000..a433302 --- /dev/null +++ b/app/src/main/java/com/example/myapplication/FollowerAdapter.kt @@ -0,0 +1,37 @@ +package com.example.myapplication + +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions +import com.example.myapplication.databinding.ItemFollowerListBinding + + +class FollowerAdapter : RecyclerView.Adapter() { + val userList = mutableListOf() + + class FollowerViewHolder(private val binding : ItemFollowerListBinding) : RecyclerView.ViewHolder(binding.root){ + fun onBind(data: FollowerData) { + binding.tvName.text = data.name + binding.tvIntroduction.text = data.introduction + Glide.with(itemView.context).load(data.photo) + .apply(RequestOptions.circleCropTransform()) + .into(binding.ivProfile) + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): FollowerViewHolder { + val binding = ItemFollowerListBinding.inflate(LayoutInflater.from(parent.context),parent,false) + + return FollowerViewHolder(binding) + } + + override fun onBindViewHolder(holder: FollowerViewHolder, position: Int) { + holder.onBind(userList[position]) + } + + override fun getItemCount(): Int = userList.size + +} \ No newline at end of file diff --git a/app/src/main/java/com/example/myapplication/FollowerData.kt b/app/src/main/java/com/example/myapplication/FollowerData.kt new file mode 100644 index 0000000..c21244e --- /dev/null +++ b/app/src/main/java/com/example/myapplication/FollowerData.kt @@ -0,0 +1,7 @@ +package com.example.myapplication + +data class FollowerData( + val name: String, + val introduction: String, + val photo : String +) diff --git a/app/src/main/java/com/example/myapplication/FollowerFragment.kt b/app/src/main/java/com/example/myapplication/FollowerFragment.kt new file mode 100644 index 0000000..aa25a7b --- /dev/null +++ b/app/src/main/java/com/example/myapplication/FollowerFragment.kt @@ -0,0 +1,45 @@ +package com.example.myapplication + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.Fragment +import com.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions +import com.example.myapplication.databinding.FollowerFragmentBinding + + +class FollowerFragment : Fragment() { + private lateinit var follwerAdapter: FollowerAdapter + private var _binding: FollowerFragmentBinding? = null + private val binding get() = _binding!! + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + _binding = FollowerFragmentBinding.inflate(layoutInflater, container,false) + + + follwerAdapter = FollowerAdapter() + binding.rvFollower.adapter = follwerAdapter + + follwerAdapter.userList.addAll( + listOf( + FollowerData("스폰지밥", "안녕하세요", "https://ww.namu.la/s/bd52223e4d1f11fcc4c7f6506bf3321b26579bf118db6c1ca20492b9af4228a414edd25f1006baace220e4ca771288e0f38d6cbf253ae4e9d39aaf4b881600b0d65e518e7d94891837ee9a0c6a723aac0f4d2b7bf4a65b36bd1fe636aa49c632"), + FollowerData("뚱이", "안녕하세요", "https://img.insight.co.kr/static/2020/08/12/700/fyzvinle3b068ce501hq.jpg"), + FollowerData("집게사장", "안녕하세요", "https://pbs.twimg.com/media/D8RITHlV4AAb1iG.jpg") + ) + ) + follwerAdapter.notifyDataSetChanged() + return binding.root + } + + override fun onDestroy() { + super.onDestroy() + _binding = null + } + +} + diff --git a/app/src/main/java/com/example/myapplication/HomeActivity.kt b/app/src/main/java/com/example/myapplication/HomeActivity.kt new file mode 100644 index 0000000..9697fff --- /dev/null +++ b/app/src/main/java/com/example/myapplication/HomeActivity.kt @@ -0,0 +1,85 @@ +package com.example.myapplication + +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity +import androidx.viewpager2.widget.ViewPager2 +import com.example.myapplication.databinding.ActivityHomeBinding + + +class HomeActivity : AppCompatActivity() { + //private var postion = FIRST_POSITION + private lateinit var sampleViewPagerAdapter: sampleViewPagerAdapter + private lateinit var binding : ActivityHomeBinding + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + binding = ActivityHomeBinding.inflate(layoutInflater) + + //initTransactionEvent() + initAdapter() + initBottomNavigation() + + setContentView(binding.root) + + } + +// fun initTransactionEvent() { +// val followerFragment = FollowerFragment() +// val repositstoryFragment = RepositoryFragment() +// +// supportFragmentManager.beginTransaction().add(R.id.container_rv, followerFragment).commit() +// +// binding.btnFollower.setOnClickListener { +// supportFragmentManager.beginTransaction().replace(R.id.container_rv, followerFragment) .commit() +// } +// +// binding.btnRepository.setOnClickListener { +// supportFragmentManager.beginTransaction().replace(R.id.container_rv, repositstoryFragment) .commit() +// } +// } + + private fun initAdapter() { + val fragmentList = listOf(ProfileFragment(), HomeFragment(), CameraFragment()) + + sampleViewPagerAdapter = sampleViewPagerAdapter(this) + sampleViewPagerAdapter.fragments.addAll(fragmentList) + + binding.vpSample.adapter = sampleViewPagerAdapter + } + + + private fun initBottomNavigation() { + binding.vpSample.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() { + override fun onPageSelected(position: Int) { + binding.bottomNavigationView.menu.getItem(position).isChecked = true + } + }) + + binding.bottomNavigationView.setOnItemSelectedListener { + when(it.itemId) { + R.id.menu_profile -> { + binding.vpSample.currentItem = FIRST_FRAGMENT + return@setOnItemSelectedListener true + + } + R.id.menu_home -> { + binding.vpSample.currentItem = SECOND_FRAGMENT + return@setOnItemSelectedListener true + } + else -> { + binding.vpSample.currentItem = THIRD_FRAGMENT + return@setOnItemSelectedListener true + } + } + } + } + + companion object { + const val FIRST_FRAGMENT = 0 + const val SECOND_FRAGMENT = 1 + const val THIRD_FRAGMENT = 2 + } + + +} + diff --git a/app/src/main/java/com/example/myapplication/HomeFragment.kt b/app/src/main/java/com/example/myapplication/HomeFragment.kt new file mode 100644 index 0000000..7b5ba5a --- /dev/null +++ b/app/src/main/java/com/example/myapplication/HomeFragment.kt @@ -0,0 +1,49 @@ +package com.example.myapplication + +import android.os.Bundle +import androidx.fragment.app.Fragment +import android.view.LayoutInflater +import android.view.MotionEvent +import android.view.View +import android.view.ViewGroup +import androidx.viewpager2.widget.ViewPager2 +import com.example.myapplication.databinding.FragmentHomeBinding +import com.google.android.material.bottomsheet.BottomSheetBehavior +import com.google.android.material.tabs.TabLayout +import com.google.android.material.tabs.TabLayoutMediator +import androidx.recyclerview.widget.RecyclerView + +class HomeFragment : Fragment() { + private lateinit var homeTabViewPagerAdapter: HomeTabViewPagerAdapter + private lateinit var binding: FragmentHomeBinding + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + binding = FragmentHomeBinding.inflate(layoutInflater) + + + initAdapter() + initTabLayout() + + return binding.root + } + + private fun initAdapter() { + val fragmentList = listOf(home_follower_Fragment(), home_following_Fragment()) + + homeTabViewPagerAdapter = HomeTabViewPagerAdapter(this) + homeTabViewPagerAdapter.fragmentList.addAll(fragmentList) + + binding.vpFollow.adapter = homeTabViewPagerAdapter + } + + private fun initTabLayout() { + val tabLabel = listOf("팔로잉", "팔로워") + + TabLayoutMediator(binding.tlFollow, binding.vpFollow) { tab, position -> + tab.text = tabLabel[position] + }.attach() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/myapplication/HomeTabViewPagerAdapter.kt b/app/src/main/java/com/example/myapplication/HomeTabViewPagerAdapter.kt new file mode 100644 index 0000000..9bef143 --- /dev/null +++ b/app/src/main/java/com/example/myapplication/HomeTabViewPagerAdapter.kt @@ -0,0 +1,11 @@ +package com.example.myapplication + +import androidx.fragment.app.Fragment +import androidx.viewpager2.adapter.FragmentStateAdapter + +class HomeTabViewPagerAdapter(fragment: Fragment) : FragmentStateAdapter(fragment) { + val fragmentList = mutableListOf() + override fun getItemCount(): Int = fragmentList.size + + override fun createFragment(position: Int): Fragment = fragmentList[position] +} \ No newline at end of file diff --git a/app/src/main/java/com/example/myapplication/ProfileFragment.kt b/app/src/main/java/com/example/myapplication/ProfileFragment.kt new file mode 100644 index 0000000..bcc0984 --- /dev/null +++ b/app/src/main/java/com/example/myapplication/ProfileFragment.kt @@ -0,0 +1,60 @@ +package com.example.myapplication + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.Fragment +import com.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions +import com.example.myapplication.databinding.FragmentProfileBinding + + +class ProfileFragment : Fragment() { + private lateinit var ProfileFragment: FragmentProfileBinding + private var _binding: FragmentProfileBinding? = null + private val binding get() = _binding!! + + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + _binding = FragmentProfileBinding.inflate(layoutInflater, container, false) + + initTransactionEvent() + Glide.with(this) + .load("https://mblogthumb-phinf.pstatic.net/MjAxOTA0MjNfMjcy/MDAxNTU2MDIwNjg0ODMw.KwUiIDMhdpKzsuNX83GpdFljS1HjgNhCBNcXv2QXfxkg.ksHQVjDUTn8AMV4XVSfETLX-tZ1LTz9-bOmO0o7AtI8g.JPEG.ndh7782/%EC%B9%98%EC%A6%8801.JPG?type=w800") + .apply(RequestOptions.circleCropTransform()) + .into(binding.ivProfile) + + binding.btnFollower.isSelected = true; + + return binding.root + } + + fun initTransactionEvent() { + val followerFragment = FollowerFragment() + val repositstoryFragment = RepositoryFragment() + + getActivity()?.getSupportFragmentManager() + + getActivity()?.supportFragmentManager?.beginTransaction() + ?.add(R.id.container_rv, followerFragment)?.commit() + + binding.btnFollower.setOnClickListener { + getActivity()?.supportFragmentManager?.beginTransaction() + ?.replace(R.id.container_rv, followerFragment)?.commit() + binding.btnFollower.isSelected = true; + binding.btnRepository.isSelected = false; + } + + binding.btnRepository.setOnClickListener { + getActivity()?.supportFragmentManager?.beginTransaction() + ?.replace(R.id.container_rv, repositstoryFragment)?.commit() + binding.btnRepository.isSelected = true; + binding.btnFollower.isSelected = false; + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/example/myapplication/RepositoryAdapter.kt b/app/src/main/java/com/example/myapplication/RepositoryAdapter.kt new file mode 100644 index 0000000..b8619a4 --- /dev/null +++ b/app/src/main/java/com/example/myapplication/RepositoryAdapter.kt @@ -0,0 +1,30 @@ +package com.example.myapplication + +import android.view.LayoutInflater +import android.view.ViewGroup +import androidx.recyclerview.widget.RecyclerView +import com.example.myapplication.databinding.ItemFollowerListBinding +import com.example.myapplication.databinding.ItemRepositoryListBinding + +class RepositoryAdapter : RecyclerView.Adapter() { + val repositoryList = mutableListOf() + + class RepositoryViewHolder(private val binding : ItemRepositoryListBinding) : RecyclerView.ViewHolder(binding.root){ + fun onBind(data: RepositoryData) { + binding.tvTitle.text = data.title + binding.tvContent.text = data.content + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RepositoryViewHolder { + val binding = ItemRepositoryListBinding.inflate(LayoutInflater.from(parent.context),parent,false) + + return RepositoryViewHolder(binding) + } + + override fun onBindViewHolder(holder: RepositoryViewHolder, position: Int) { + holder.onBind(repositoryList[position]) + } + + override fun getItemCount(): Int = repositoryList.size +} \ No newline at end of file diff --git a/app/src/main/java/com/example/myapplication/RepositoryData.kt b/app/src/main/java/com/example/myapplication/RepositoryData.kt new file mode 100644 index 0000000..8b99d22 --- /dev/null +++ b/app/src/main/java/com/example/myapplication/RepositoryData.kt @@ -0,0 +1,6 @@ +package com.example.myapplication + +data class RepositoryData( + val title: String, + val content: String +) diff --git a/app/src/main/java/com/example/myapplication/RepositoryFragment.kt b/app/src/main/java/com/example/myapplication/RepositoryFragment.kt new file mode 100644 index 0000000..26bddcb --- /dev/null +++ b/app/src/main/java/com/example/myapplication/RepositoryFragment.kt @@ -0,0 +1,44 @@ +package com.example.myapplication + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.Fragment +import androidx.recyclerview.widget.RecyclerView +import com.example.myapplication.databinding.FollowerFragmentBinding +import com.example.myapplication.databinding.RepositoryFragmentBinding + +class RepositoryFragment : Fragment() { + private lateinit var repositoryAdapter: RepositoryAdapter + private var _binding: RepositoryFragmentBinding? = null + private val binding get() = _binding!! + + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + _binding = RepositoryFragmentBinding.inflate(layoutInflater, container,false) + + repositoryAdapter = RepositoryAdapter() + binding.rvRepository.adapter = repositoryAdapter + + repositoryAdapter.repositoryList.addAll( + listOf( + RepositoryData("안드로이드레파지토리", "안녕하세요안녕하세요안녕하세요"), + RepositoryData("안드로이드레파지토리1", "안녕하세요"), + RepositoryData("안드로이드레파지토리2", "안녕하세요"), + RepositoryData("안드로이드레파지토리3", "안녕하세요") + ) + ) + repositoryAdapter.notifyDataSetChanged() + + return binding.root + } + + override fun onDestroy() { + super.onDestroy() + _binding = null + } +} diff --git a/app/src/main/java/com/example/myapplication/SignInActivity.kt b/app/src/main/java/com/example/myapplication/SignInActivity.kt new file mode 100644 index 0000000..c3a9c78 --- /dev/null +++ b/app/src/main/java/com/example/myapplication/SignInActivity.kt @@ -0,0 +1,66 @@ +package com.example.myapplication + +import android.content.Intent +import android.os.Bundle +import android.widget.Toast +import androidx.activity.result.ActivityResult +import androidx.activity.result.ActivityResultLauncher +import androidx.activity.result.contract.ActivityResultContracts +import androidx.appcompat.app.AppCompatActivity +import com.example.myapplication.databinding.ActivityMainBinding +import retrofit2.Call +import retrofit2.Callback + +class SignInActivity : AppCompatActivity() { + private lateinit var binding: ActivityMainBinding + private lateinit var getResultTextView: ActivityResultLauncher + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + binding = ActivityMainBinding.inflate(layoutInflater) + setContentView(binding.root) + + pressLogInBtnEvent() + pressSignUpBtnEvent() + } + + //로그인 버튼 눌렀을 때 이벤트 + fun pressLogInBtnEvent() { + val intentHome = Intent(this, HomeActivity::class.java) + binding.apply { + btnLogin.setOnClickListener { + val userId = etId.text.toString() + val userPw = etPassword.text.toString() + + if (userId.isNotEmpty() && userPw.isNotEmpty()) { + startActivity(intentHome) + Toast.makeText(this@SignInActivity, "$userId 님 환영합니다", Toast.LENGTH_SHORT) + .show() + } else { + Toast.makeText(this@SignInActivity, "로그인 실패", Toast.LENGTH_SHORT).show() + } + } + } + + } + + //회원가입 버튼 눌렀을 때 이벤트 + fun pressSignUpBtnEvent() { + val startForResult = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result: ActivityResult -> } + binding.tvSignin.setOnClickListener { + startForResult.launch(Intent(this, SignUpActivity::class.java)) + } + + //id, pw 값 가지고 있을 경우 각 editText에 setText + if (intent.hasExtra("id") && intent.hasExtra("pw")) { + val id = intent.getStringExtra("id") + val pw = intent.getStringExtra("pw") + + binding.etId.setText(id) + binding.etPassword.setText(pw) + } + } + + + +} \ No newline at end of file diff --git a/app/src/main/java/com/example/myapplication/SignUpActivity.kt b/app/src/main/java/com/example/myapplication/SignUpActivity.kt new file mode 100644 index 0000000..eb0a684 --- /dev/null +++ b/app/src/main/java/com/example/myapplication/SignUpActivity.kt @@ -0,0 +1,45 @@ +package com.example.myapplication + +import android.content.Intent +import android.os.Bundle +import android.widget.Toast +import androidx.appcompat.app.AppCompatActivity +import com.example.myapplication.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) + + pressSingUpBtnEvent() + } + + //회원가입 완료 버튼 눌렀을 때 이벤트 + fun pressSingUpBtnEvent() { + val intent = Intent(this, SignInActivity::class.java) + binding.apply { + btnSingup.setOnClickListener { + val userName = etName.text.toString() + val userId = etId.text.toString() + val userPw = etPassword.text.toString() + + + if (userName.isNotEmpty() && userId.isNotEmpty() && userPw.trim().isNotEmpty()) { + intent + .putExtra("id", userId) + .putExtra("pw", userPw) + startActivity(intent) + finish() + + } else { + Toast.makeText(this@SignUpActivity, "입력되지 않은 정보가 있습니다", Toast.LENGTH_SHORT) + .show() + } + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/myapplication/home_follower_Fragment.kt b/app/src/main/java/com/example/myapplication/home_follower_Fragment.kt new file mode 100644 index 0000000..43a09a3 --- /dev/null +++ b/app/src/main/java/com/example/myapplication/home_follower_Fragment.kt @@ -0,0 +1,59 @@ +package com.example.myapplication + +import android.os.Bundle +import androidx.fragment.app.Fragment +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup + +// TODO: Rename parameter arguments, choose names that match +// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER +private const val ARG_PARAM1 = "param1" +private const val ARG_PARAM2 = "param2" + +/** + * A simple [Fragment] subclass. + * Use the [home_follower_Fragment.newInstance] factory method to + * create an instance of this fragment. + */ +class home_follower_Fragment : Fragment() { + // TODO: Rename and change types of parameters + private var param1: String? = null + private var param2: String? = null + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + arguments?.let { + param1 = it.getString(ARG_PARAM1) + param2 = it.getString(ARG_PARAM2) + } + } + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_home_follower_, container, false) + } + + companion object { + /** + * Use this factory method to create a new instance of + * this fragment using the provided parameters. + * + * @param param1 Parameter 1. + * @param param2 Parameter 2. + * @return A new instance of fragment home_follower_Fragment. + */ + // TODO: Rename and change types and number of parameters + @JvmStatic + fun newInstance(param1: String, param2: String) = + home_follower_Fragment().apply { + arguments = Bundle().apply { + putString(ARG_PARAM1, param1) + putString(ARG_PARAM2, param2) + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/myapplication/home_following_Fragment.kt b/app/src/main/java/com/example/myapplication/home_following_Fragment.kt new file mode 100644 index 0000000..c2db65d --- /dev/null +++ b/app/src/main/java/com/example/myapplication/home_following_Fragment.kt @@ -0,0 +1,59 @@ +package com.example.myapplication + +import android.os.Bundle +import androidx.fragment.app.Fragment +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup + +// TODO: Rename parameter arguments, choose names that match +// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER +private const val ARG_PARAM1 = "param1" +private const val ARG_PARAM2 = "param2" + +/** + * A simple [Fragment] subclass. + * Use the [home_following_Fragment.newInstance] factory method to + * create an instance of this fragment. + */ +class home_following_Fragment : Fragment() { + // TODO: Rename and change types of parameters + private var param1: String? = null + private var param2: String? = null + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + arguments?.let { + param1 = it.getString(ARG_PARAM1) + param2 = it.getString(ARG_PARAM2) + } + } + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_home_following_, container, false) + } + + companion object { + /** + * Use this factory method to create a new instance of + * this fragment using the provided parameters. + * + * @param param1 Parameter 1. + * @param param2 Parameter 2. + * @return A new instance of fragment home_following_Fragment. + */ + // TODO: Rename and change types and number of parameters + @JvmStatic + fun newInstance(param1: String, param2: String) = + home_following_Fragment().apply { + arguments = Bundle().apply { + putString(ARG_PARAM1, param1) + putString(ARG_PARAM2, param2) + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/myapplication/sampleViewPagerAdapter.kt b/app/src/main/java/com/example/myapplication/sampleViewPagerAdapter.kt new file mode 100644 index 0000000..b1f9db5 --- /dev/null +++ b/app/src/main/java/com/example/myapplication/sampleViewPagerAdapter.kt @@ -0,0 +1,13 @@ +package com.example.myapplication + +import androidx.fragment.app.Fragment +import androidx.fragment.app.FragmentActivity +import androidx.viewpager2.adapter.FragmentStateAdapter + +class sampleViewPagerAdapter(fragmentActivity: FragmentActivity) : FragmentStateAdapter(fragmentActivity) { + val fragments = mutableListOf() + + override fun getItemCount(): Int = fragments.size + + override fun createFragment(position: Int): Fragment = fragments[position] +} \ No newline at end of file diff --git a/app/src/main/res/color/selector_text_color.xml b/app/src/main/res/color/selector_text_color.xml new file mode 100644 index 0000000..309157d --- /dev/null +++ b/app/src/main/res/color/selector_text_color.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable-v24/android_logo.png b/app/src/main/res/drawable-v24/android_logo.png new file mode 100644 index 0000000..fa3d262 Binary files /dev/null and b/app/src/main/res/drawable-v24/android_logo.png differ diff --git a/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml new file mode 100644 index 0000000..2b068d1 --- /dev/null +++ b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable-v24/img_github.png b/app/src/main/res/drawable-v24/img_github.png new file mode 100644 index 0000000..6fc89b1 Binary files /dev/null and b/app/src/main/res/drawable-v24/img_github.png differ diff --git a/app/src/main/res/drawable/btn_fill_gray.xml b/app/src/main/res/drawable/btn_fill_gray.xml new file mode 100644 index 0000000..b3efe57 --- /dev/null +++ b/app/src/main/res/drawable/btn_fill_gray.xml @@ -0,0 +1,10 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/btn_fill_orange.xml b/app/src/main/res/drawable/btn_fill_orange.xml new file mode 100644 index 0000000..33d20e5 --- /dev/null +++ b/app/src/main/res/drawable/btn_fill_orange.xml @@ -0,0 +1,10 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/btn_fill_pink.xml b/app/src/main/res/drawable/btn_fill_pink.xml new file mode 100644 index 0000000..f581d98 --- /dev/null +++ b/app/src/main/res/drawable/btn_fill_pink.xml @@ -0,0 +1,10 @@ + + + + + diff --git a/app/src/main/res/drawable/btn_fill_white.xml b/app/src/main/res/drawable/btn_fill_white.xml new file mode 100644 index 0000000..e52533b --- /dev/null +++ b/app/src/main/res/drawable/btn_fill_white.xml @@ -0,0 +1,10 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/et_border_pink.xml b/app/src/main/res/drawable/et_border_pink.xml new file mode 100644 index 0000000..624202d --- /dev/null +++ b/app/src/main/res/drawable/et_border_pink.xml @@ -0,0 +1,13 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/et_fill_gray.xml b/app/src/main/res/drawable/et_fill_gray.xml new file mode 100644 index 0000000..0de0bd2 --- /dev/null +++ b/app/src/main/res/drawable/et_fill_gray.xml @@ -0,0 +1,13 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_camera_gray.xml b/app/src/main/res/drawable/ic_camera_gray.xml new file mode 100644 index 0000000..47303d8 --- /dev/null +++ b/app/src/main/res/drawable/ic_camera_gray.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_camera_pink.xml b/app/src/main/res/drawable/ic_camera_pink.xml new file mode 100644 index 0000000..a3c9e85 --- /dev/null +++ b/app/src/main/res/drawable/ic_camera_pink.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_home_gray.xml b/app/src/main/res/drawable/ic_home_gray.xml new file mode 100644 index 0000000..fd99695 --- /dev/null +++ b/app/src/main/res/drawable/ic_home_gray.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_home_pink.xml b/app/src/main/res/drawable/ic_home_pink.xml new file mode 100644 index 0000000..e0add2b --- /dev/null +++ b/app/src/main/res/drawable/ic_home_pink.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_img_github.xml b/app/src/main/res/drawable/ic_img_github.xml new file mode 100644 index 0000000..94716c1 --- /dev/null +++ b/app/src/main/res/drawable/ic_img_github.xml @@ -0,0 +1,8 @@ + + + diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 0000000..07d5da9 --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_person_gray.xml b/app/src/main/res/drawable/ic_person_gray.xml new file mode 100644 index 0000000..fb785ee --- /dev/null +++ b/app/src/main/res/drawable/ic_person_gray.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_person_pink.xml b/app/src/main/res/drawable/ic_person_pink.xml new file mode 100644 index 0000000..d372549 --- /dev/null +++ b/app/src/main/res/drawable/ic_person_pink.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/line_pink.xml b/app/src/main/res/drawable/line_pink.xml new file mode 100644 index 0000000..381b0dd --- /dev/null +++ b/app/src/main/res/drawable/line_pink.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_btn_orange.xml b/app/src/main/res/drawable/selector_btn_orange.xml new file mode 100644 index 0000000..c9ddf5d --- /dev/null +++ b/app/src/main/res/drawable/selector_btn_orange.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_icon.xml b/app/src/main/res/drawable/selector_icon.xml new file mode 100644 index 0000000..231c5a2 --- /dev/null +++ b/app/src/main/res/drawable/selector_icon.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_tf_gray.xml b/app/src/main/res/drawable/selector_tf_gray.xml new file mode 100644 index 0000000..e6dae88 --- /dev/null +++ b/app/src/main/res/drawable/selector_tf_gray.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/font/noto_sans_kr.xml b/app/src/main/res/font/noto_sans_kr.xml new file mode 100644 index 0000000..2ba8dda --- /dev/null +++ b/app/src/main/res/font/noto_sans_kr.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/font/noto_sans_kr_black.otf b/app/src/main/res/font/noto_sans_kr_black.otf new file mode 100644 index 0000000..0cfa4bb Binary files /dev/null and b/app/src/main/res/font/noto_sans_kr_black.otf differ diff --git a/app/src/main/res/font/noto_sans_kr_bold.otf b/app/src/main/res/font/noto_sans_kr_bold.otf new file mode 100644 index 0000000..7f4131c Binary files /dev/null and b/app/src/main/res/font/noto_sans_kr_bold.otf differ diff --git a/app/src/main/res/font/noto_sans_kr_light.otf b/app/src/main/res/font/noto_sans_kr_light.otf new file mode 100644 index 0000000..03f948c Binary files /dev/null and b/app/src/main/res/font/noto_sans_kr_light.otf differ diff --git a/app/src/main/res/font/noto_sans_kr_medium.otf b/app/src/main/res/font/noto_sans_kr_medium.otf new file mode 100644 index 0000000..d8cacce Binary files /dev/null and b/app/src/main/res/font/noto_sans_kr_medium.otf differ diff --git a/app/src/main/res/font/noto_sans_kr_regular.otf b/app/src/main/res/font/noto_sans_kr_regular.otf new file mode 100644 index 0000000..e26c1cd Binary files /dev/null and b/app/src/main/res/font/noto_sans_kr_regular.otf differ diff --git a/app/src/main/res/font/noto_sans_kr_thin.otf b/app/src/main/res/font/noto_sans_kr_thin.otf new file mode 100644 index 0000000..6bc00c4 Binary files /dev/null and b/app/src/main/res/font/noto_sans_kr_thin.otf differ 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..6cfcfa4 --- /dev/null +++ b/app/src/main/res/layout/activity_home.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml new file mode 100644 index 0000000..df8195a --- /dev/null +++ b/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + +