Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[week7] level1 #6

Open
wants to merge 4 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 28 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -134,3 +134,31 @@
)
}
```

### week4

- 필수 과제
-
1. 온보딩 화면

|화면1|화면2|화면3|
|---|---|---|
|<img src="https://user-images.githubusercontent.com/62435316/146689906-c5d17a5d-07a3-4384-8843-ff4e564e29e3.png"/>|<img src="https://user-images.githubusercontent.com/62435316/146689915-f47fc37c-5654-4936-8027-a28b1a7cbf44.png"/>|<img src="https://user-images.githubusercontent.com/62435316/146689924-415e4410-f11f-467b-8699-7295dbb2b2b2.png"/>|


2. 자동로그인

3. 패키징

![image](https://user-images.githubusercontent.com/62435316/146689974-c812a4a1-16b0-4c3e-bdf2-ae423729b09e.png)

패키징 구조

data : 서버 통신의 request, response data 파일들
di : -
ui : ui와 관련된 파일들. 화면에 따라 다른 파일에 넣었다.
- home
- onboard
- signin
- signup
util
10 changes: 10 additions & 0 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,16 @@ android {
}

dependencies {
def fragment_version = '1.2.0-rc04'
def nav_version = "2.2.0-rc04"
Comment on lines +39 to +40

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

rc버전은 아직 출시 전에 마지막 점검차 내놓는 라이브러리여서 사용은 지양하는게 좋습니다.

implementation "androidx.fragment:fragment-ktx:$fragment_version"
implementation "androidx.fragment:fragment-testing:$fragment_version"

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

스크린샷 2021-12-22 오후 11 37 55

테스트 라이브러리는 굳이 안가져오셔도 될 것 같습니다! 만약에 가져오신다면 debug 모드에서만 사용할 수 있게 debugImplementation을 활용하면 더 좋을 것 같아요


implementation "androidx.navigation:navigation-fragment-ktx:$nav_version"
implementation "androidx.navigation:navigation-ui-ktx:$nav_version"
implementation "androidx.navigation:navigation-compose:1.0.0-alpha01"

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Compose라는 안드로이드의 새 UI 프레임워크에서만 사용할 수 있는 라이브러리에요, 굳이 의존성에 추가를 별도로 하시지 않아도됩니다.

implementation "androidx.navigation:navigation-fragment-ktx:2.3.5"
implementation "androidx.navigation:navigation-ui-ktx:2.3.5"
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"
Expand Down
6 changes: 3 additions & 3 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,13 @@
android:supportsRtl="true"
android:theme="@style/Theme.AndroidSemina_week1">
<activity
android:name=".HomeActivity"
android:name=".ui.home.HomeActivity"
android:exported="true" />
<activity
android:name=".SignUpActivity"
android:name=".ui.signup.SignUpActivity"
android:exported="true" />
<activity
android:name=".SignInActivity"
android:name=".ui.signin.SignInActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package org.sopt.androidsemina_week1
package org.sopt.androidsemina_week1.data

data class RepoData(
val name: String,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package org.sopt.androidsemina_week1
package org.sopt.androidsemina_week1.data

import com.google.gson.annotations.SerializedName

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package org.sopt.androidsemina_week1
package org.sopt.androidsemina_week1.data

data class ResponseLoginData(
val status : Int,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package org.sopt.androidsemina_week1
package org.sopt.androidsemina_week1.data

data class UserData(
val name: String,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
package org.sopt.androidsemina_week1
package org.sopt.androidsemina_week1.ui.home

import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import org.sopt.androidsemina_week1.R

class CameraFragment : Fragment() {

Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
package org.sopt.androidsemina_week1
package org.sopt.androidsemina_week1.ui.home

import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import org.sopt.androidsemina_week1.data.UserData
import org.sopt.androidsemina_week1.databinding.FollowerListBinding

class FollowerAdapter : RecyclerView.Adapter<FollowerAdapter.FollowerViewHolder>() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
package org.sopt.androidsemina_week1
package org.sopt.androidsemina_week1.ui.home

import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import org.sopt.androidsemina_week1.R

class FollowerListFragment : Fragment() {

Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
package org.sopt.androidsemina_week1
package org.sopt.androidsemina_week1.ui.home

import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import org.sopt.androidsemina_week1.R

class FollowingListFragment : Fragment() {

Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
package org.sopt.androidsemina_week1
package org.sopt.androidsemina_week1.ui.home

import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Toast
import androidx.viewpager2.widget.ViewPager2
import org.sopt.androidsemina_week1.R
import org.sopt.androidsemina_week1.databinding.ActivitySecondBinding
import org.sopt.androidsemina_week1.databinding.FragmentFollowerBinding

class HomeActivity : AppCompatActivity() {
private lateinit var viewPagerAdapter: ViewPagerAdapter
Expand All @@ -24,7 +22,7 @@ class HomeActivity : AppCompatActivity() {
}

private fun initAdapter(){
val fragmentList = listOf(ProfileFragment(),HomeFragment(),CameraFragment())
val fragmentList = listOf(ProfileFragment(), HomeFragment(), CameraFragment())

viewPagerAdapter = ViewPagerAdapter(this)
viewPagerAdapter.fragments.addAll(fragmentList)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package org.sopt.androidsemina_week1
package org.sopt.androidsemina_week1.ui.home

import android.os.Bundle
import androidx.fragment.app.Fragment
Expand All @@ -7,7 +7,6 @@ import android.view.View
import android.view.ViewGroup
import com.google.android.material.tabs.TabLayoutMediator
import org.sopt.androidsemina_week1.databinding.FragmentHomeBinding
import org.sopt.androidsemina_week1.databinding.FragmentProfileBinding

class HomeFragment : Fragment() {
private lateinit var tabViewPagerAdapter : TabViewPagerAdapter
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
package org.sopt.androidsemina_week1
package org.sopt.androidsemina_week1.ui.home

import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import org.sopt.androidsemina_week1.R
import org.sopt.androidsemina_week1.databinding.FragmentProfileBinding


Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package org.sopt.androidsemina_week1
package org.sopt.androidsemina_week1.ui.home

import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import org.sopt.androidsemina_week1.databinding.FollowerListBinding
import org.sopt.androidsemina_week1.data.RepoData
import org.sopt.androidsemina_week1.databinding.RepositoryListBinding

class RepositoryAdapter : RecyclerView.Adapter<RepositoryAdapter.RepositoryViewHolder>() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
package org.sopt.androidsemina_week1
package org.sopt.androidsemina_week1.ui.home

import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import org.sopt.androidsemina_week1.databinding.FragmentFollowerBinding
import org.sopt.androidsemina_week1.data.RepoData
import org.sopt.androidsemina_week1.databinding.FragmentRepositoryBinding

private const val ARG_PARAM1 = "param1"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package org.sopt.androidsemina_week1
package org.sopt.androidsemina_week1.ui.home

import org.sopt.androidsemina_week1.data.RequestLoginData
import org.sopt.androidsemina_week1.data.ResponseLoginData
import retrofit2.Call
import retrofit2.http.Body
import retrofit2.http.Headers
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package org.sopt.androidsemina_week1
package org.sopt.androidsemina_week1.ui.home

import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package org.sopt.androidsemina_week1
package org.sopt.androidsemina_week1.ui.home

import androidx.fragment.app.Fragment
import androidx.viewpager2.adapter.FragmentStateAdapter
Expand Down
13 changes: 13 additions & 0 deletions app/src/main/java/org/sopt/androidsemina_week1/ui/home/ViewExt.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package org.sopt.androidsemina_week1.ui.home

import android.content.Context
import android.widget.Toast

// cotext 확장
fun Context.shortToast(message : String){
Toast.makeText(this, message, Toast.LENGTH_SHORT).show()
// 이미 상속받아서 this를 쓸 수 있음.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

상속이라기 보다는 Context의 멤버함수를 추가해준다고 생각할 수 있어요. 상속은 부모 클래스의 속성(멤버 변수와 함수)를 가지고 기능을 확장하는 "클래스"를 만든다는 개념이어서 둘이 다른 것이라고 보면 좋을 것 같습니다!


// mainActivity에 가서 어떻게 쓰냐...
// shortToast("텍스트") 쓰면 됨.
Comment on lines +11 to +12

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fragment에서는 context?.shortToast()나 requireContext().shortToast()로 사용해야해서 제가 위와 같은 확장함수를 만들때에는 Context/Fragment 둘 다 만드는 편이긴합니다.

}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package org.sopt.androidsemina_week1
package org.sopt.androidsemina_week1.ui.home

import android.provider.ContactsContract
import androidx.fragment.app.Fragment
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
package org.sopt.androidsemina_week1
package org.sopt.androidsemina_week1.ui.home

import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import org.sopt.androidsemina_week1.databinding.ActivityHomeBinding
import org.sopt.androidsemina_week1.databinding.ActivitySecondBinding
import org.sopt.androidsemina_week1.data.UserData
import org.sopt.androidsemina_week1.databinding.FragmentFollowerBinding

private const val ARG_PARAM1 = "param1"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,17 @@
package org.sopt.androidsemina_week1
package org.sopt.androidsemina_week1.ui.signin

import android.app.Activity
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.widget.Toast
import org.sopt.androidsemina_week1.ui.home.HomeActivity
import org.sopt.androidsemina_week1.ui.home.ServiceCreator
import org.sopt.androidsemina_week1.data.RequestLoginData
import org.sopt.androidsemina_week1.data.ResponseLoginData
import org.sopt.androidsemina_week1.databinding.ActivitySigninBinding
import org.sopt.androidsemina_week1.ui.home.shortToast
import org.sopt.androidsemina_week1.ui.signup.SignUpActivity
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response
Expand All @@ -24,6 +29,8 @@ class SignInActivity : AppCompatActivity() {

binding.longinBtn.setOnClickListener {
initNetwork()
initAutoLogin()
checkAutoLogin()
}

binding.signupBtn.setOnClickListener {
Expand All @@ -34,13 +41,24 @@ class SignInActivity : AppCompatActivity() {
setContentView(binding.root)
}

private fun checkAutoLogin() {
shortToast("자동로그인 되었습니다.")
startActivity(Intent(this, HomeActivity::class.java))
finish()

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이와 같은 방식으로 구현해도 홈액티비티를 종료했을 때 당연히 이 SignInActivity도 종료될텐데 그렇다면 HomeActivity가 떠있는 동안 화면 아래에 계속 남아있겠네요. 이걸 동일하게 화면이 다섯개 정도 겹쳐있으면 핸드폰의 기종에 따라서 메모리 부족 경고가 뜨거나 앱이 강제 종료될 수 있기 때문에 좋은 패턴이 아니라고 생각할 수 있습니다.

관련 아티클: https://stackoverflow.com/questions/18111245/is-it-a-good-idea-to-call-finish-after-starting-a-new-activity-in-android

}

private fun initAutoLogin() {
binding.clAutoLogin.setOnClickListener {
binding.ivCheck.isSelected = !binding.ivCheck.isSelected
}
}

private fun initNetwork() {
val requestLoginData = RequestLoginData(
binding.idEditText.text.toString(),
binding.pwEditText.text.toString()
)
val call : Call<ResponseLoginData> = ServiceCreator.sampleService.postLogin(requestLoginData)

call.enqueue(object : Callback<ResponseLoginData>{
override fun onResponse(
call: Call<ResponseLoginData>,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
package org.sopt.androidsemina_week1
package org.sopt.androidsemina_week1.ui.signup

import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Toast
import org.sopt.androidsemina_week1.ui.home.HomeActivity
import org.sopt.androidsemina_week1.databinding.ActivityHomeBinding

class SignUpActivity : AppCompatActivity() {
Expand Down
15 changes: 15 additions & 0 deletions app/src/main/res/drawable/ic_checkbox_off.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M12,22C17.5,22 22,17.5 22,12C22,6.5 17.5,2 12,2C6.5,2 2,6.5 2,12C2,17.5 6.5,22 12,22Z"
android:fillColor="#C9C9C9"/>
<path
android:strokeWidth="1"
android:pathData="M7,13L10,16L17,9"
android:fillColor="#00000000"
android:strokeColor="#ffffff"
android:strokeLineCap="round"/>
</vector>
15 changes: 15 additions & 0 deletions app/src/main/res/drawable/ic_checkbox_on.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M12,22C17.5,22 22,17.5 22,12C22,6.5 17.5,2 12,2C6.5,2 2,6.5 2,12C2,17.5 6.5,22 12,22Z"
android:fillColor="@color/teal_700"/>
<path
android:strokeWidth="1"
android:pathData="M7,13L10,16L17,9"
android:fillColor="#00000000"
android:strokeColor="#ffffff"
android:strokeLineCap="round"/>
</vector>
Loading