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

[feat/onboarding_view]: 온보딩 UI 작업, 뷰 연결 #56

Merged
merged 112 commits into from
Jan 9, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
112 commits
Select commit Hold shift + click to select a range
20c3656
Merge remote-tracking branch 'origin/develop' into develop
kangyuri1114 Jan 3, 2024
ed3bb03
[delete]: 넘버피커 include 삭제
kangyuri1114 Jan 3, 2024
38aaef6
[delete]: 넘버피커 관련 코드 삭제
kangyuri1114 Jan 3, 2024
3d1362d
[feat]: 온보딩 다음 버튼 파일 추가
kangyuri1114 Jan 3, 2024
1bdac42
[feat]: 온보딩 다음 버튼 추가
kangyuri1114 Jan 3, 2024
cc33f20
[feat]: 활성화 시 버튼 파일 추가
kangyuri1114 Jan 3, 2024
0f26462
[feat]: 기본 비활성화 버튼으로 코드 추가
kangyuri1114 Jan 3, 2024
adf244e
[feat]: 온보딩 유저 데이터 수집 프래그먼트 파일 추가
kangyuri1114 Jan 3, 2024
c10023b
[feat]: 프래그먼트 온보딩 액티비티에 붙이기
kangyuri1114 Jan 3, 2024
65d2f32
[feat]: 온보딩 유저 데이터 선택 뷰 임시 구현
kangyuri1114 Jan 3, 2024
98a0c74
[fix]: 버튼 디자인 반영이 안되는 부분 수정
kangyuri1114 Jan 3, 2024
a4690e3
[feat]: 프래그먼트에서 텍스트 넣기
kangyuri1114 Jan 3, 2024
dfbf1e3
[feat]: 프래그먼트에서 텍스트 넣기
kangyuri1114 Jan 3, 2024
c56bb96
[feat]: 다음 버튼 클릭 시 프래그먼트2로 이동
kangyuri1114 Jan 4, 2024
f02f1fe
[feat]: 첫 프래그먼트 백스택 없이
kangyuri1114 Jan 4, 2024
4e84809
[feat]: 온보딩 질문, 버튼 리스트 객체 생성
kangyuri1114 Jan 4, 2024
d103e3a
[fix]: 코드 수정
kangyuri1114 Jan 4, 2024
37f3312
Update README.md
kez-lab Jan 3, 2024
da8ec2a
[fix]: rebase conflict 해결
kangyuri1114 Dec 31, 2023
691c211
[feat]: 사용 기록에 액세스 허용이 되어있지 않은 경우 사용 정보 허용으로 이동 하는 기능 구현
kangyuri1114 Dec 31, 2023
cc79629
[feat]: 사용 정보 허용 기능 구현
kangyuri1114 Jan 1, 2024
7cd1af0
[feat]: 설치된 앱 목록 가져오기 기능 임시 추가
kangyuri1114 Jan 1, 2024
ee1b9f3
[feat]: 설치된 앱 목록 세부정보 가져오기 기능 임시 추가
kangyuri1114 Jan 1, 2024
e57c87d
[fix]: Request Permission
kez-lab Jan 1, 2024
5894d99
[fix]: Request Permission
kez-lab Jan 1, 2024
2c0cf65
[fix]: Request Permission
kez-lab Jan 1, 2024
1e1cc9d
[delete]: 불필요한 권한 삭제
kangyuri1114 Jan 1, 2024
a6590bf
[fix]: 함수 이름 변경
kangyuri1114 Jan 1, 2024
7c15653
[fix]: Fix Usage Permission
kez-lab Jan 1, 2024
d7d557e
[fix]: Fix Usage Permission
kez-lab Jan 1, 2024
39995ec
[fix]: Fix Usage Permission
kez-lab Jan 1, 2024
1d1c1d8
[feat]: 다른 앱 위에 그리기 권한 허용 구현
kangyuri1114 Jan 1, 2024
0132f08
[setting]: Fix Merge Error
kez-lab Dec 30, 2023
2f6e04a
[feat]: Feat Login Module
kez-lab Dec 30, 2023
780f690
[feat]: Feat SampleClass
kez-lab Dec 30, 2023
02779aa
[setting]: 카카오 sdk 추가
kangyuri1114 Dec 31, 2023
100462c
[feat]: 인터넷 권한 허용
kangyuri1114 Jan 1, 2024
5f46d56
[fix]: Debug KeyStore
kez-lab Jan 1, 2024
fb58b64
[feat]: LoginActivity 생성
kangyuri1114 Jan 1, 2024
e1c9aca
[delete]: sampleClass 삭제
kangyuri1114 Jan 1, 2024
ea7ef2b
[feat]: LoginActivity viewBinding
kangyuri1114 Jan 1, 2024
1f1caad
[feat]: local properties에 KAKAO_NATIVE_APP_KEY 추가
kangyuri1114 Jan 1, 2024
f117dbd
[feat]: 로그인 조합 예제 함수 삽입
kangyuri1114 Jan 1, 2024
5342f60
[feat]: LoginViewModel 생성
kangyuri1114 Jan 1, 2024
c3a11ad
[feat]: 카카오 로그인 기능 구현 (앱, 웹)
kangyuri1114 Jan 2, 2024
d9a660d
[feat]: 로그인 성공 시 유저 정보 반환 액티비티 생성 및 세팅
kangyuri1114 Jan 2, 2024
b41e478
[feat]: 유저 닉네임 반환, 카카오 로그아웃 기능 구현
kangyuri1114 Jan 2, 2024
8e04892
[refact]: 카카오 로그인 코드 리팩토링
kangyuri1114 Jan 2, 2024
488839b
[feat]: viewModel, Livedata 세팅
kangyuri1114 Jan 2, 2024
3e98e21
[fix]: Fix Kakao Api Key
kez-lab Jan 3, 2024
79b2cda
[fix]: Fix properties reference
kez-lab Jan 3, 2024
f5c5cf8
[feat]: 카카오 로그인 버튼 추가
kangyuri1114 Jan 3, 2024
7a33e0b
[feat]: 로그인 컨셉설명 뷰페이저 UI 구현
kangyuri1114 Jan 3, 2024
66123f7
[delete]: 프래그먼트 파일 삭제
kangyuri1114 Jan 3, 2024
b9226b6
[feat]: 로그인 화면 뷰페이저 구현
kangyuri1114 Jan 3, 2024
8a0c8fa
[fix]: indicator 색 변경
kangyuri1114 Jan 3, 2024
4abf01d
[fix]: id 명 변경
kangyuri1114 Jan 3, 2024
d7d39ad
[fix]: id 명 변경
kangyuri1114 Jan 3, 2024
ffaf717
[fix]: 뷰페이저 함수화
kangyuri1114 Jan 3, 2024
250db9b
[fix]: 뷰페이저 함수화
kangyuri1114 Jan 3, 2024
fcb9a44
Merge remote-tracking branch 'origin/develop' into develop
kangyuri1114 Jan 4, 2024
f2608b2
[fix]: 코드 수정
kangyuri1114 Jan 4, 2024
1c8b77d
[fix]: 유저 온보딩 과정 액티비티 생성 및 권한 설정과 분리
kangyuri1114 Jan 4, 2024
d3d3d2f
Merge branch 'develop' into feat/Onboarding_view
kez-lab Jan 4, 2024
f051d92
[fix]: 파일 리네임
kangyuri1114 Jan 4, 2024
58d7820
[fix]: 파일 리네임
kangyuri1114 Jan 4, 2024
5353711
[fix]: hilt 적용, 관심사 분리 위한 리팩터링
kangyuri1114 Jan 4, 2024
6dd178a
[fix]: 함수화
kangyuri1114 Jan 4, 2024
f60eb29
[fix]: binding 코드 수정
kangyuri1114 Jan 5, 2024
55a1dd9
[delete]: binding null 처리 코드 삭제
kangyuri1114 Jan 5, 2024
716f514
[fix]: 확장 함수 내 replaceFragment 코드 주석 처리
kangyuri1114 Jan 5, 2024
1eb209c
[feat]: 확장 함수 내 addFragment 함수 추가
kangyuri1114 Jan 5, 2024
732b2e1
[fix]: 확장 함수 내 addFragment 함수로 변경
kangyuri1114 Jan 5, 2024
bc5af4e
[delete]: 필요없는 파라미터 삭제
kangyuri1114 Jan 5, 2024
65be92b
[feat]: 온보딩 시 필요한 프래그먼트 파일 모두 추가
kangyuri1114 Jan 5, 2024
106bdca
[feat]: 뷰바인딩 추가
kangyuri1114 Jan 5, 2024
28861f3
[feat]: 추가 설명 텍스트뷰 추가
kangyuri1114 Jan 5, 2024
25335b0
[feat]: RequestPermissionFragment UI 구현
kangyuri1114 Jan 5, 2024
e7dd060
[feat]: SelectAppFragment UI 구현
kangyuri1114 Jan 5, 2024
4f89b64
[feat]: SelectScreentimeGoalFragment UI 구현
kangyuri1114 Jan 5, 2024
369a7fb
[feat]: SelectUseTimeGoalFragment UI 구현
kangyuri1114 Jan 5, 2024
9e3529e
[feat]: DoneSingUpFragment UI 구현
kangyuri1114 Jan 5, 2024
7392fbf
[delete]: 불필요한 파일 삭제
kangyuri1114 Jan 5, 2024
8ead54b
[fix]: 네이밍 변경
kangyuri1114 Jan 5, 2024
1d40b99
[feat]: FragmentStateAdapter, viewPager로 프래그먼트 넘기기 샘플 구현
kangyuri1114 Jan 5, 2024
4abde82
[fix]: 텍스트 tools -> android 변경
kangyuri1114 Jan 6, 2024
394bc3a
[feat]: 뷰페이저 프래그먼트 스크롤 막기 추가
kangyuri1114 Jan 6, 2024
df8282a
[feat]: 넘버 피커 세팅
kangyuri1114 Jan 6, 2024
dc40879
[feat]: UI 뒤로가기 버튼 추가
kangyuri1114 Jan 6, 2024
ae582ce
[feat]: UI 뒤로가기 버튼 추가
kangyuri1114 Jan 6, 2024
e9cd4c4
[fix]: 회원가입 완료 화면 프래그먼트에서 액티비티로 교체
kangyuri1114 Jan 6, 2024
96ed017
[feat]: 버튼 셀렉터 기능 추가
kangyuri1114 Jan 6, 2024
b6134fc
[feat]: 터치영역 constraint 레이아웃 추가
kangyuri1114 Jan 6, 2024
6258470
[feat]: constraint 제약 수정
kangyuri1114 Jan 6, 2024
3f81a68
[feat]: 액티비티 뷰바인딩 초기화
kangyuri1114 Jan 6, 2024
ff3f59f
[feat]: 넘버피커 constraint 레이아웃 추가로 감싸기
kangyuri1114 Jan 6, 2024
c74ba80
[delete]: 넘버피커 xml 파일 삭제
kangyuri1114 Jan 8, 2024
5ef6b36
[feat]: 온보딩 완료 시 회원가입 액티비티로 이동 구현
kangyuri1114 Jan 8, 2024
5293b0e
[feat]: 온보딩 뷰 - 회원가입 뷰 flow 구현
kangyuri1114 Jan 8, 2024
7fc5eed
[feat]: 챌린지 기간 선택 프래그먼트 추가
kangyuri1114 Jan 8, 2024
a631ab2
[refact]: 스코프 함수 적용
kangyuri1114 Jan 8, 2024
1ec87a3
[fix]: 넘버피커 분 min, max 수정
kangyuri1114 Jan 8, 2024
122b785
[refact]: 각 프래그먼트 Enum 상수 지정
kangyuri1114 Jan 8, 2024
f8bdfe5
[refact]: 각 프래그먼트 Enum 상수 지정
kangyuri1114 Jan 8, 2024
fe00fbf
[fix]: 파일명 통일
kangyuri1114 Jan 8, 2024
7f8f187
Merge branch 'develop' into feat/onboarding_view
kez-lab Jan 8, 2024
51fbf46
[fix]: fix OnBoardingActivity
kez-lab Jan 8, 2024
d905266
[fix]: fix OnBoardingActivity
kez-lab Jan 8, 2024
bcfd76e
Merge branch 'develop' into feat/onboarding_view
kangyuri1114 Jan 9, 2024
4463c99
[refact]: 함수명 변경
kangyuri1114 Jan 9, 2024
d245302
[feat]: set 넘버 피커 확장 함수 생성
kangyuri1114 Jan 9, 2024
a477ffc
[feat]: set 넘버 피커 확장 함수 생성
kangyuri1114 Jan 9, 2024
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
3 changes: 2 additions & 1 deletion app/src/main/java/com/hmh/hamyeonham/SampleActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
import com.hmh.hamyeonham.common.view.viewBinding
import com.hmh.hamyeonham.databinding.ActivitySampleBinding
import com.hmh.hamyeonham.feature.main.MainActivity
import com.hmh.hamyeonham.feature.onboarding.OnBoardingActivity
import dagger.hilt.android.AndroidEntryPoint

@AndroidEntryPoint
Expand All @@ -21,7 +22,7 @@ class SampleActivity : AppCompatActivity() {
val splashScreen = installSplashScreen()
initSplashAnimation(splashScreen)
setContentView(binding.root)
startActivity(Intent(this, MainActivity::class.java))
startActivity(Intent(this, OnBoardingActivity::class.java))
finish()
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,9 @@ fun AppCompatActivity.replaceFragment(containerViewId: Int, fragment: Fragment)
replace(containerViewId, fragment)
}
}

fun AppCompatActivity.addFragment(containerViewId: Int, fragment: Fragment) {
supportFragmentManager.commit {
add(containerViewId, fragment)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.hmh.hamyeonham.common.view

import android.widget.NumberPicker

fun NumberPicker.setupScreentimeGoalRange(minValue: Int, maxValue: Int) {
this.minValue = minValue
this.maxValue = maxValue
}
1 change: 1 addition & 0 deletions data/onboarding/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/build
10 changes: 10 additions & 0 deletions data/onboarding/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
@Suppress("DSL_SCOPE_VIOLATION") // TODO: Remove once KTIJ-19369 is fixed
plugins {
hmh("feature")
}

android {
namespace = "com.hmh.hamyeonham.onboarding"
}

dependencies {}
Empty file.
21 changes: 21 additions & 0 deletions data/onboarding/proguard-rules.pro
Original file line number Diff line number Diff line change
@@ -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
4 changes: 4 additions & 0 deletions data/onboarding/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">

</manifest>
8 changes: 7 additions & 1 deletion feature/onboarding/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,12 @@
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

<application>
<activity
android:name=".OnBoardingDoneSingUpActivity"
android:exported="false" />
<activity
android:name=".OnBoardingActivity"
android:exported="false" />
<activity
android:name=".OnBoardingActivity"
android:exported="false" />
Expand All @@ -26,9 +32,9 @@
android:name="android.accessibilityservice"
android:resource="@xml/accessibility_service_config" />
</service>

<activity
android:name=".LockActivity"
android:exported="true" />
</application>

</manifest>
Original file line number Diff line number Diff line change
@@ -1,19 +1,15 @@
package com.hmh.hamyeonham.feature.onboarding

import android.accessibilityservice.AccessibilityService
import android.content.Intent
import android.util.Log
import android.view.accessibility.AccessibilityEvent
import com.hmh.hamyeonham.common.context.toast

class OnBoardingAccessibilityService : AccessibilityService() {
override fun onAccessibilityEvent(event: AccessibilityEvent) {
if (event.eventType == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) {
val packageName = event.packageName ?: return
Log.d("OnBoardingAccessibilityService", "onAccessibilityEvent: $packageName")
if (packageName != "com.google.android.youtube") return
val intent = Intent(this, LockActivity::class.java)
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
startActivity(intent)
Log.d("AccessibilityService", "현재 실행 중인 앱 패키지: $packageName")
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,122 +1,57 @@
package com.hmh.hamyeonham.feature.onboarding

import android.app.usage.UsageStatsManager
import android.content.Context
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.provider.Settings
import androidx.activity.result.ActivityResultLauncher
import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.app.AppCompatActivity
import com.hmh.hamyeonham.common.context.toast
import com.hmh.hamyeonham.common.navigation.NavigationProvider
import com.hmh.hamyeonham.common.view.viewBinding
import com.hmh.hamyeonham.feature.onboarding.databinding.ActivityOnBoardingBinding
import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject

@AndroidEntryPoint
class OnBoardingActivity : AppCompatActivity() {

private lateinit var binding: ActivityOnBoardingBinding

@Inject
lateinit var navigationProvider: NavigationProvider

private val accessibilitySettingsLauncher: ActivityResultLauncher<Intent> =
registerForActivityResult(
ActivityResultContracts.StartActivityForResult(),
) {
if (isAccessibilityServiceEnabled()) {
toast("접근성 서비스가 활성화되었습니다.")
} else {
toast("접근성 서비스가 활성화되지 않았습니다.")
}
}
private val binding by viewBinding(ActivityOnBoardingBinding::inflate)

override fun onCreate(savedInstanceState: Bundle?) {
binding = ActivityOnBoardingBinding.inflate(layoutInflater)
super.onCreate(savedInstanceState)
setContentView(binding.root)
clickRequireAccessibilityBtn()
initViewPager()
}

private fun clickRequireAccessibilityBtn() {
binding.btnAccessibility.setOnClickListener {
openAccessibilitySettingsIfNeeded()
}
binding.btnUsage.setOnClickListener {
requestUsageAccessPermission()
}
binding.btnDrawOnOthers.setOnClickListener {
if (!hasOverlayPermission()) {
requestOverlayPermission()
} else {
toast("다른 앱 위에 그리기 권한이 이미 허용되어 있습니다.")
}
}
binding.btnLogin.setOnClickListener {
if (isAccessibilityServiceEnabled() && hasUsageStatsPermission() && hasOverlayPermission()) {
toast("모든 권한이 허용되었습니다.")
startActivity(navigationProvider.toLogin())
finish()
} else {
toast("모든 권한을 허용해주세요.")
}
private fun initViewPager() {
val pagerAdapter = setOnboardingPageAdapter()
binding.btnOnboardingNext.setOnClickListener {
navigateToNextOnboardingStep(pagerAdapter)
}
}

private fun requestUsageAccessPermission() {
if (!hasUsageStatsPermission()) {
try {
val packageUri = Uri.parse("package:$packageName")
val intent = Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS, packageUri)
startActivity(intent)
} catch (e: Exception) {
val intent = Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS)
startActivity(intent)
private fun navigateToNextOnboardingStep(pagerAdapter: OnBoardingFragmentStateAdapter) {
binding.vpOnboardingContainer.let { viewPager ->
val currentItem = viewPager.currentItem
val lastItem = pagerAdapter.itemCount - 1
when {
currentItem < lastItem -> viewPager.currentItem = currentItem + 1
currentItem == lastItem -> startOnBoardingDoneSignUpActivity()
}
} else {
toast("사용 정보 접근 권한이 이미 허용되어 있습니다.")
}
}

private fun requestOverlayPermission() {
val packageUri = Uri.parse("package:$packageName")
val intent = Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, packageUri)
private fun startOnBoardingDoneSignUpActivity() {
val intent = Intent(this, OnBoardingDoneSingUpActivity::class.java).apply {
addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION)
addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
}
startActivity(intent)
finish()
}

private fun hasOverlayPermission(): Boolean {
return Settings.canDrawOverlays(this)
}

private fun isAccessibilityServiceEnabled(): Boolean {
val service = packageName + "/" + OnBoardingAccessibilityService::class.java.canonicalName
val enabledServicesSetting = Settings.Secure.getString(
contentResolver,
Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES,
)
return enabledServicesSetting?.contains(service) == true
}

private fun openAccessibilitySettingsIfNeeded() {
if (!isAccessibilityServiceEnabled()) {
val intent = Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS)
accessibilitySettingsLauncher.launch(intent)
} else {
toast("접근성 권한이 이미 허용되어 있습니다.")
private fun setOnboardingPageAdapter(): OnBoardingFragmentStateAdapter {
val pagerAdapter = OnBoardingFragmentStateAdapter(this)
binding.vpOnboardingContainer.run {
adapter = pagerAdapter
isUserInputEnabled = false
}
}

private fun hasUsageStatsPermission(): Boolean {
val usageStatsManager = getSystemService(Context.USAGE_STATS_SERVICE) as UsageStatsManager
val time = System.currentTimeMillis()
val stats = usageStatsManager.queryUsageStats(
UsageStatsManager.INTERVAL_DAILY,
time - 1000 * 60,
time,
)
return stats != null && stats.isNotEmpty()
return pagerAdapter
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.hmh.hamyeonham.feature.onboarding

import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.hmh.hamyeonham.common.view.viewBinding
import com.hmh.hamyeonham.feature.onboarding.databinding.ActivityOnBoardingDoneSingUpBinding

class OnBoardingDoneSingUpActivity : AppCompatActivity() {
private val binding by viewBinding(ActivityOnBoardingDoneSingUpBinding::inflate)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(binding.root)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package com.hmh.hamyeonham.feature.onboarding

import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentActivity
import androidx.viewpager2.adapter.FragmentStateAdapter
import com.hmh.hamyeonham.feature.onboarding.fragment.OnBoardingRequestPermissionFragment
import com.hmh.hamyeonham.feature.onboarding.fragment.OnBoardingSelectAppFragment
import com.hmh.hamyeonham.feature.onboarding.fragment.OnBoardingSelectDataFragment
import com.hmh.hamyeonham.feature.onboarding.fragment.OnBoardingSelectScreenTimeFragment

enum class OnBoardingFragmentType {
REQUEST_PERMISSION,
SELECT_APP,
SELECT_SCREEN_TIME_GOAL,
SELECT_DATA_TIME,
SELECT_DATA_PROBLEM,
SELECT_DATA_PERIOD,
SELECT_USE_TIME_GOAL,
}

class OnBoardingFragmentStateAdapter(fragmentActivity: FragmentActivity) :
FragmentStateAdapter(fragmentActivity) {
override fun getItemCount(): Int {
return OnBoardingFragmentType.entries.size
}

override fun createFragment(position: Int): Fragment {
return when (val fragmentType = position.toOnBoardingFragmentType()) {
OnBoardingFragmentType.SELECT_DATA_TIME -> OnBoardingSelectDataFragment.newInstance(fragmentType)
OnBoardingFragmentType.SELECT_DATA_PROBLEM -> OnBoardingSelectDataFragment.newInstance(fragmentType)
OnBoardingFragmentType.SELECT_DATA_PERIOD -> OnBoardingSelectDataFragment.newInstance(fragmentType)
OnBoardingFragmentType.SELECT_SCREEN_TIME_GOAL -> OnBoardingSelectScreenTimeFragment()
OnBoardingFragmentType.REQUEST_PERMISSION -> OnBoardingRequestPermissionFragment()
OnBoardingFragmentType.SELECT_APP -> OnBoardingSelectAppFragment()
OnBoardingFragmentType.SELECT_USE_TIME_GOAL -> OnBoardingSelectScreenTimeFragment()
}
}

private fun Int.toOnBoardingFragmentType(): OnBoardingFragmentType {
return OnBoardingFragmentType.entries.getOrNull(this)
?: OnBoardingFragmentType.SELECT_DATA_TIME
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.hmh.hamyeonham.feature.onboarding.fragment

import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import com.hmh.hamyeonham.common.view.viewBinding
import com.hmh.hamyeonham.feature.onboarding.databinding.FragmentOnBoardingRequestPermissionBinding

class OnBoardingRequestPermissionFragment : Fragment() {
private val binding by viewBinding(FragmentOnBoardingRequestPermissionBinding::bind)

override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?,
): View? {
return FragmentOnBoardingRequestPermissionBinding.inflate(inflater, container, false).root
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.hmh.hamyeonham.feature.onboarding.fragment

import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import com.hmh.hamyeonham.common.view.viewBinding
import com.hmh.hamyeonham.feature.onboarding.databinding.FragmentOnBoardingSelectAppBinding

class OnBoardingSelectAppFragment : Fragment() {
private val binding by viewBinding(FragmentOnBoardingSelectAppBinding::bind)

override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?,
): View? {
return FragmentOnBoardingSelectAppBinding.inflate(inflater, container, false).root
}
}
Loading