diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index b1f79f2..e28246d 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -89,6 +89,7 @@ + ( + ActivityOnboardingBinding::inflate +) { + + private lateinit var adapter: OnBoardingViewPagerAdapter + + override fun setupView() { + setupViewPager() + setupTabLayout() + setupButtonEvent() + } + + private fun setupViewPager() { + binding.viewPager.offscreenPageLimit = 9 + + adapter = OnBoardingViewPagerAdapter(this) + adapter.addFragment(OnBoardingFragment(R.drawable.img_guide_0)) + adapter.addFragment(OnBoardingFragment(R.drawable.img_guide_1)) + adapter.addFragment(OnBoardingFragment(R.drawable.img_guide_2)) + adapter.addFragment(OnBoardingFragment(R.drawable.img_guide_3)) + adapter.addFragment(OnBoardingFragment(R.drawable.img_guide_4)) + adapter.addFragment(OnBoardingFragment(R.drawable.img_guide_5)) + adapter.addFragment(OnBoardingFragment(R.drawable.img_guide_6)) + binding.viewPager.adapter = adapter + } + + private fun setupTabLayout() { + TabLayoutMediator(binding.tabs, binding.viewPager) { _, _ -> }.attach() + } + + private fun setupButtonEvent() { + binding.tvStart.setOnClickListener { moveNextActivity() } + } + + private fun moveNextActivity() { + SharedPreferenceManager.isViewedOnboardingTutorial = true + + if (SharedPreferenceManager.token.isBlank()) { + val nextIntent = Intent(applicationContext, LoginActivity::class.java) + val extras = intent.getBundleExtra(Constants.EXTRA_DATA) + ?: if (intent.extras != null) { + intent.extras + } else { + null + } + if (extras != null) { + nextIntent.putExtra(Constants.EXTRA_DATA, extras) + } + startActivity(nextIntent) + } else { + val nextIntent = Intent(applicationContext, MainActivity::class.java) + val extras = intent.getBundleExtra(Constants.EXTRA_DATA) + ?: if (intent.extras != null) { + intent.extras + } else { + null + } + if (extras != null) { + nextIntent.putExtra(Constants.EXTRA_DATA, extras) + } + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) + intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP) + startActivity(nextIntent) + } + + finish() + } +} diff --git a/app/src/main/java/kr/co/vividnext/sodalive/onboarding/OnBoardingFragment.kt b/app/src/main/java/kr/co/vividnext/sodalive/onboarding/OnBoardingFragment.kt new file mode 100644 index 0000000..ad1cdc3 --- /dev/null +++ b/app/src/main/java/kr/co/vividnext/sodalive/onboarding/OnBoardingFragment.kt @@ -0,0 +1,15 @@ +package kr.co.vividnext.sodalive.onboarding + +import android.os.Bundle +import android.view.View +import kr.co.vividnext.sodalive.base.BaseFragment +import kr.co.vividnext.sodalive.databinding.FragmentOnboardingBinding + +class OnBoardingFragment(private val imageSrc: Int) : BaseFragment( + FragmentOnboardingBinding::inflate +) { + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + binding.imageView.setImageResource(imageSrc) + } +} diff --git a/app/src/main/java/kr/co/vividnext/sodalive/onboarding/OnBoardingViewPagerAdapter.kt b/app/src/main/java/kr/co/vividnext/sodalive/onboarding/OnBoardingViewPagerAdapter.kt new file mode 100644 index 0000000..e8d5efb --- /dev/null +++ b/app/src/main/java/kr/co/vividnext/sodalive/onboarding/OnBoardingViewPagerAdapter.kt @@ -0,0 +1,16 @@ +package kr.co.vividnext.sodalive.onboarding + +import androidx.fragment.app.Fragment +import androidx.fragment.app.FragmentActivity +import androidx.viewpager2.adapter.FragmentStateAdapter + +class OnBoardingViewPagerAdapter(activity: FragmentActivity) : FragmentStateAdapter(activity) { + private val fragmentList = ArrayList() + + override fun getItemCount() = fragmentList.size + override fun createFragment(position: Int) = fragmentList[position] + + fun addFragment(fragment: Fragment) { + fragmentList.add(fragment) + } +} diff --git a/app/src/main/java/kr/co/vividnext/sodalive/splash/SplashActivity.kt b/app/src/main/java/kr/co/vividnext/sodalive/splash/SplashActivity.kt index 6b1c84e..5cea1c9 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/splash/SplashActivity.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/splash/SplashActivity.kt @@ -20,6 +20,7 @@ import kr.co.vividnext.sodalive.common.Constants import kr.co.vividnext.sodalive.common.SharedPreferenceManager import kr.co.vividnext.sodalive.databinding.ActivitySplashBinding import kr.co.vividnext.sodalive.main.MainActivity +import kr.co.vividnext.sodalive.onboarding.OnBoardingActivity import kr.co.vividnext.sodalive.user.login.LoginActivity @SuppressLint("CustomSplashScreen") @@ -171,13 +172,30 @@ class SplashActivity : BaseActivity(ActivitySplashBinding } private fun startNextActivity(extras: Bundle? = null) { - if (SharedPreferenceManager.token.isBlank()) { - showLoginActivity(extras) + if (SharedPreferenceManager.isViewedOnboardingTutorial) { + if (SharedPreferenceManager.token.isBlank()) { + showLoginActivity(extras) + } else { + showMainActivity(extras) + } } else { - showMainActivity(extras) + showOnBoardingTutorialActivity(extras) } } + private fun showOnBoardingTutorialActivity(extras: Bundle?) { + handler.postDelayed({ + startActivity( + Intent(applicationContext, OnBoardingActivity::class.java).apply { + putExtra(Constants.EXTRA_DATA, extras) + addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) + addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP) + } + ) + finish() + }, 500) + } + private fun showMainActivity(extras: Bundle?) { handler.postDelayed({ startActivity( diff --git a/app/src/main/res/drawable-xxhdpi/img_guide_0.png b/app/src/main/res/drawable-xxhdpi/img_guide_0.png new file mode 100644 index 0000000..898e89e Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/img_guide_0.png differ diff --git a/app/src/main/res/drawable-xxhdpi/img_guide_1.png b/app/src/main/res/drawable-xxhdpi/img_guide_1.png new file mode 100644 index 0000000..9f63ef3 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/img_guide_1.png differ diff --git a/app/src/main/res/drawable-xxhdpi/img_guide_2.png b/app/src/main/res/drawable-xxhdpi/img_guide_2.png new file mode 100644 index 0000000..890377e Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/img_guide_2.png differ diff --git a/app/src/main/res/drawable-xxhdpi/img_guide_3.png b/app/src/main/res/drawable-xxhdpi/img_guide_3.png new file mode 100644 index 0000000..4ab600d Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/img_guide_3.png differ diff --git a/app/src/main/res/drawable-xxhdpi/img_guide_4.png b/app/src/main/res/drawable-xxhdpi/img_guide_4.png new file mode 100644 index 0000000..ccdf05e Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/img_guide_4.png differ diff --git a/app/src/main/res/drawable-xxhdpi/img_guide_5.png b/app/src/main/res/drawable-xxhdpi/img_guide_5.png new file mode 100644 index 0000000..949b78f Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/img_guide_5.png differ diff --git a/app/src/main/res/drawable-xxhdpi/img_guide_6.png b/app/src/main/res/drawable-xxhdpi/img_guide_6.png new file mode 100644 index 0000000..e1fd23d Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/img_guide_6.png differ diff --git a/app/src/main/res/drawable/dot_default.xml b/app/src/main/res/drawable/dot_default.xml new file mode 100644 index 0000000..a8ae5e5 --- /dev/null +++ b/app/src/main/res/drawable/dot_default.xml @@ -0,0 +1,8 @@ + + + + diff --git a/app/src/main/res/drawable/dot_selected.xml b/app/src/main/res/drawable/dot_selected.xml new file mode 100644 index 0000000..291b4a9 --- /dev/null +++ b/app/src/main/res/drawable/dot_selected.xml @@ -0,0 +1,8 @@ + + + + diff --git a/app/src/main/res/drawable/tab_dot_selector.xml b/app/src/main/res/drawable/tab_dot_selector.xml new file mode 100644 index 0000000..c5b8312 --- /dev/null +++ b/app/src/main/res/drawable/tab_dot_selector.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/layout/activity_onboarding.xml b/app/src/main/res/layout/activity_onboarding.xml new file mode 100644 index 0000000..a53b932 --- /dev/null +++ b/app/src/main/res/layout/activity_onboarding.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/fragment_onboarding.xml b/app/src/main/res/layout/fragment_onboarding.xml new file mode 100644 index 0000000..f6463d5 --- /dev/null +++ b/app/src/main/res/layout/fragment_onboarding.xml @@ -0,0 +1,16 @@ + + + + + + diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 2dd14c7..795330e 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -3,7 +3,7 @@ #FF000000 #FFFFFFFF - #80DFFF + #80D8FF #1313BC #9970FF #EEEEEE @@ -97,4 +97,5 @@ #2F90B7 #A94400 #FFE368 + #CCF0FF