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

Develop #7

Merged
merged 7 commits into from
Sep 5, 2023
Merged
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
14 changes: 14 additions & 0 deletions .github/ISSUE_TEMPLATE/owori-isuue-template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
---
name: Owori-Isuue-Template
about: Owori-Android 이슈 공통 템플릿
title: "[Android] 이슈제목"
labels: ''
assignees: ''

---

# 목적

# 상세 내용

# 참고
11 changes: 11 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
## 🧨이슈
<!-- 해당이슈와 관련있는 이슈를 적어주세요.-->

## 🔍 상세 내용 (해결 내용)
<!-- 상세 내용을 적어주세요. -->

## 💡 참고자료 및 공유할만한 자료 (선택)
<!-- 참고자료를 첨부해주세요. -->

## ❕후속 진행 이슈
<!-- 후속 진행 이슈 -->
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
# Owori-Android
- 오월이 안드로이드 Repository입니다.
9 changes: 2 additions & 7 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@ plugins {
}

android {
namespace = "com.owrori.android"
namespace = "com.owori.android"
compileSdk = 33

defaultConfig {
applicationId = "com.owrori.android"
applicationId = "com.owori.android"
minSdk = 24
targetSdk = 33
versionCode = 1
Expand Down Expand Up @@ -46,11 +46,6 @@ android {
viewBinding = true
dataBinding = true
}
packaging {
resources {
excludes += "/META-INF/{AL2.0,LGPL2.1}"
}
}
}

dependencies {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.owrori.android
package com.owori.android

import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.ext.junit.runners.AndroidJUnit4
Expand All @@ -19,6 +19,6 @@ class ExampleInstrumentedTest {
fun useAppContext() {
// Context of the app under test.
val appContext = InstrumentationRegistry.getInstrumentation().targetContext
assertEquals("com.owrori.android", appContext.packageName)
assertEquals("com.owori.android", appContext.packageName)
}
}
3 changes: 2 additions & 1 deletion app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,9 @@
android:theme="@style/Theme.Owori"
tools:targetApi="31">
<activity
android:name=".ui.auth.view.AuthActivity"
android:name=".auth.ui.view.AuthActivity"
android:exported="true"
android:screenOrientation="portrait"
android:label="@string/app_name"
android:theme="@style/Theme.Owori">
<intent-filter>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.owrori.android
package com.owori.android

import android.app.Application
import org.koin.android.ext.koin.androidContext
Expand Down
19 changes: 19 additions & 0 deletions app/src/main/java/com/owori/android/OworiModule.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.owori.android

import com.owori.android.auth.ui.viewmodel.AuthViewModel
import com.owori.android.auth.ui.viewmodel.LoginViewModel
import com.owori.android.auth.ui.viewmodel.OnBoardingViewModel
import com.owori.android.auth.ui.viewmodel.PolicyViewModel
import com.owori.android.auth.ui.viewmodel.SplashViewModel
import org.koin.androidx.viewmodel.dsl.viewModel
import org.koin.dsl.module

val viewModelModule = module {
viewModel { AuthViewModel() }
viewModel { SplashViewModel() }
viewModel { LoginViewModel() }
viewModel { OnBoardingViewModel() }
viewModel { PolicyViewModel() }
}

val appModules = listOf(viewModelModule)
28 changes: 28 additions & 0 deletions app/src/main/java/com/owori/android/auth/ui/TextViewExt.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package com.owori.android.auth.ui

import android.widget.TextView
import androidx.databinding.BindingAdapter
import com.owori.android.R

@BindingAdapter("setTitleText")
fun TextView.setTitleText(currentItemIndex: Int) {
setText(
when (currentItemIndex) {
0 -> R.string.onboarding_first_title
1 -> R.string.onboarding_second_title
else -> R.string.onboarding_last_title
}
)
}

@BindingAdapter("setSubTitleText")
fun TextView.setSubTitleText(currentItemIndex: Int) {
setText(
when (currentItemIndex) {
0 -> R.string.onboarding_first_subtitle
1 -> R.string.onboarding_second_subtitle
else -> R.string.onboarding_last_subtitle
}
)
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.owori.android.auth.ui.adapter

import androidx.fragment.app.Fragment
import androidx.viewpager2.adapter.FragmentStateAdapter
import com.owori.android.auth.ui.view.OnBoardingItemFragment

class OnBoardingViewPagerAdapter(fragment: Fragment, fragmentIdList: List<OnBoardingItemFragment>): FragmentStateAdapter(fragment) {
private val fragmentList = fragmentIdList;
override fun getItemCount(): Int {
return fragmentList.size
}

override fun createFragment(position: Int): Fragment {
return fragmentList[position]
}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
package com.owrori.android.ui.auth.view
package com.owori.android.auth.ui.view

import androidx.navigation.fragment.NavHostFragment
import androidx.navigation.fragment.findNavController
import com.owrori.android.ui.common.presentation.view.BaseActivity
import com.owrori.android.R
import com.owrori.android.databinding.ActivityAuthBinding
import com.owrori.android.ui.auth.viewmodel.AuthViewModel
import com.owori.android.common.ui.view.BaseActivity
import com.owori.android.R
import com.owori.android.databinding.ActivityAuthBinding
import com.owori.android.auth.ui.viewmodel.AuthViewModel
import org.koin.android.ext.android.inject

class AuthActivity : BaseActivity<ActivityAuthBinding, AuthViewModel>(R.layout.activity_auth) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
package com.owrori.android.ui.auth.view
package com.owori.android.auth.ui.view

import androidx.activity.addCallback
import com.owrori.android.ui.auth.viewmodel.LoginViewModel
import com.owrori.android.ui.common.navigateTo
import com.owrori.android.ui.common.presentation.view.BaseFragment
import com.owrori.android.R
import com.owrori.android.databinding.FragmentLoginBinding
import com.owori.android.auth.ui.viewmodel.LoginViewModel
import com.owori.android.common.ui.view.BaseFragment
import com.owori.android.R
import com.owori.android.databinding.FragmentLoginBinding
import com.owori.android.common.navigateTo
import org.koin.android.ext.android.inject

class LoginFragment : BaseFragment<FragmentLoginBinding, LoginViewModel>(R.layout.fragment_login) {
Expand All @@ -22,7 +22,14 @@ class LoginFragment : BaseFragment<FragmentLoginBinding, LoginViewModel>(R.layou

override fun initObserver() {
with(viewModel) {
// TODO : PolicyFragment를 위해 작성한 부분이라 수정 필요.
callKakaoLogin.observe(viewLifecycleOwner) {
navigateTo(R.id.action_loginFragment_to_PolicyFragment)
}

callGoogleLogin.observe(viewLifecycleOwner) {
navigateTo(R.id.action_loginFragment_to_PolicyFragment)
}
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
package com.owori.android.auth.ui.view

import androidx.activity.addCallback
import androidx.viewpager2.widget.ViewPager2
import com.owori.android.common.ui.view.BaseFragment
import com.owori.android.R
import com.owori.android.databinding.FragmentOnboardingBinding
import com.owori.android.auth.ui.adapter.OnBoardingViewPagerAdapter
import com.owori.android.auth.ui.viewmodel.OnBoardingViewModel
import com.owori.android.common.navigateTo
import org.koin.android.ext.android.inject

class OnBoardingFragment :
BaseFragment<FragmentOnboardingBinding, OnBoardingViewModel>(R.layout.fragment_onboarding) {
override val viewModel: OnBoardingViewModel by inject()
override fun setBindingVariables() {
with(binding) {
vm = viewModel
}
}

override fun initView() {
initViewPager()
initCustomOnBackPressed()
}

override fun initObserver() {
with(viewModel) {
finishOnBoarding.observe(viewLifecycleOwner) {
navigateTo(R.id.action_onboardingFragment_to_loginFragment)
}

currentItemIndex.observe(viewLifecycleOwner) {
binding.onboardingViewpager.setCurrentItem(it, true)
}
}
}

private fun initCustomOnBackPressed() {
requireActivity().onBackPressedDispatcher.addCallback(this) {
requireActivity().finish()
}
}

private fun initViewPager() {
with(binding) {
val viewpagerFragmentAdapter =
OnBoardingViewPagerAdapter(this@OnBoardingFragment, setOnBoardingList())
onboardingViewpager.adapter = viewpagerFragmentAdapter
registerOnPageChangeCallback()
}
}

private fun setOnBoardingList() = listOf(
OnBoardingItemFragment(R.layout.fragment_onboarding_first),
OnBoardingItemFragment(R.layout.fragment_onboarding_second),
OnBoardingItemFragment(R.layout.fragment_onboarding_third),
)

private fun registerOnPageChangeCallback() {
binding.onboardingViewpager.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
override fun onPageSelected(position: Int) {
viewModel.setCurrentItemIndex(position)
}
})
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.owori.android.auth.ui.view

import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment

class OnBoardingItemFragment(private val fragmentId: Int) : Fragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(fragmentId, container, false)
}
}
17 changes: 17 additions & 0 deletions app/src/main/java/com/owori/android/auth/ui/view/PolicyFragment.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.owori.android.auth.ui.view

import com.owori.android.R
import com.owori.android.databinding.FragmentPolicyBinding
import com.owori.android.auth.ui.viewmodel.PolicyViewModel
import com.owori.android.common.ui.view.BaseFragment
import org.koin.android.ext.android.inject

class PolicyFragment :
BaseFragment<FragmentPolicyBinding, PolicyViewModel>(R.layout.fragment_policy) {
override val viewModel: PolicyViewModel by inject()
override fun setBindingVariables() {}

override fun initView() {}

override fun initObserver() {}
}
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package com.owrori.android.ui.auth.view
package com.owori.android.auth.ui.view

import android.os.Handler
import android.os.Looper
import com.owrori.android.ui.common.presentation.view.BaseFragment
import com.owrori.android.R
import com.owrori.android.databinding.FragmentSplashBinding
import com.owrori.android.ui.auth.viewmodel.SplashViewModel
import com.owrori.android.ui.common.navigateTo
import com.owori.android.common.ui.view.BaseFragment
import com.owori.android.R
import com.owori.android.databinding.FragmentSplashBinding
import com.owori.android.auth.ui.viewmodel.SplashViewModel
import com.owori.android.common.navigateTo
import org.koin.android.ext.android.inject

class SplashFragment :
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.owori.android.auth.ui.viewmodel

import com.owori.android.common.ui.viewmodel.BaseViewModel

class AuthViewModel : BaseViewModel() {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.owori.android.auth.ui.viewmodel

import androidx.lifecycle.LiveData
import com.owori.android.common.SingleLiveEvent
import com.owori.android.common.ui.viewmodel.BaseViewModel

class LoginViewModel : BaseViewModel() {
private val _callKakaoLogin: SingleLiveEvent<Unit> = SingleLiveEvent()
val callKakaoLogin: LiveData<Unit> = _callKakaoLogin
private val _callGoogleLogin: SingleLiveEvent<Unit> = SingleLiveEvent()
val callGoogleLogin: LiveData<Unit> = _callGoogleLogin

fun onClickKakaoLogin() {
_callKakaoLogin.call()
}

fun onClickGoogleLogin() {
_callGoogleLogin.call()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package com.owori.android.auth.ui.viewmodel

import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import com.owori.android.common.SingleLiveEvent
import com.owori.android.common.ui.viewmodel.BaseViewModel

class OnBoardingViewModel : BaseViewModel() {
private val _currentItemIndex: MutableLiveData<Int> = MutableLiveData(0)
val currentItemIndex: LiveData<Int> = _currentItemIndex
private val _finishOnBoarding: SingleLiveEvent<Unit> = SingleLiveEvent();
val finishOnBoarding: LiveData<Unit> = _finishOnBoarding;

fun setCurrentItemIndex(index: Int) {
_currentItemIndex.value = index
}

fun onClickNextButton() {
_currentItemIndex.value?.let { _index ->
if (_index == LAST_PAGE) _finishOnBoarding.call()
else _currentItemIndex.value = _currentItemIndex.value?.plus(1)
}
}

companion object {
private const val LAST_PAGE = 2
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.owori.android.auth.ui.viewmodel

import com.owori.android.common.ui.viewmodel.BaseViewModel

class PolicyViewModel : BaseViewModel() {}
Loading