온보딩 튜토리얼 추가
|
@ -89,6 +89,7 @@
|
|||
<activity android:name=".live.now.all.LiveNowAllActivity" />
|
||||
<activity android:name=".live.reservation.all.LiveReservationAllActivity" />
|
||||
<activity android:name=".mypage.service_center.ServiceCenterActivity" />
|
||||
<activity android:name=".onboarding.OnBoardingActivity" />
|
||||
|
||||
<activity
|
||||
android:name="com.google.android.gms.oss.licenses.OssLicensesMenuActivity"
|
||||
|
|
|
@ -13,6 +13,7 @@ object Constants {
|
|||
const val PREF_IS_CONTENT_PLAY_LOOP = "pref_is_content_play_loop"
|
||||
const val PREF_IS_FOLLOWED_CREATOR_LIVE = "pref_is_followed_creator_live"
|
||||
const val PREF_NOT_SHOWING_EVENT_POPUP_ID = "pref_not_showing_event_popup_id"
|
||||
const val PREF_IS_VIEWED_ON_BOARDING_TUTORIAL = "pref_is_viewed_on_boarding_tutorial"
|
||||
|
||||
const val EXTRA_CAN = "extra_can"
|
||||
const val EXTRA_DATA = "extra_data"
|
||||
|
|
|
@ -116,4 +116,10 @@ object SharedPreferenceManager {
|
|||
set(value) {
|
||||
sharedPreferences[Constants.PREF_NOT_SHOWING_EVENT_POPUP_ID] = value
|
||||
}
|
||||
|
||||
var isViewedOnboardingTutorial: Boolean
|
||||
get() = sharedPreferences[Constants.PREF_IS_VIEWED_ON_BOARDING_TUTORIAL, false]
|
||||
set(value) {
|
||||
sharedPreferences[Constants.PREF_IS_VIEWED_ON_BOARDING_TUTORIAL] = value
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,80 @@
|
|||
package kr.co.vividnext.sodalive.onboarding
|
||||
|
||||
import android.content.Intent
|
||||
import com.google.android.material.tabs.TabLayoutMediator
|
||||
import kr.co.vividnext.sodalive.R
|
||||
import kr.co.vividnext.sodalive.base.BaseActivity
|
||||
import kr.co.vividnext.sodalive.common.Constants
|
||||
import kr.co.vividnext.sodalive.common.SharedPreferenceManager
|
||||
import kr.co.vividnext.sodalive.databinding.ActivityOnboardingBinding
|
||||
import kr.co.vividnext.sodalive.main.MainActivity
|
||||
import kr.co.vividnext.sodalive.user.login.LoginActivity
|
||||
|
||||
class OnBoardingActivity : BaseActivity<ActivityOnboardingBinding>(
|
||||
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()
|
||||
}
|
||||
}
|
|
@ -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>(
|
||||
FragmentOnboardingBinding::inflate
|
||||
) {
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
binding.imageView.setImageResource(imageSrc)
|
||||
}
|
||||
}
|
|
@ -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<Fragment>()
|
||||
|
||||
override fun getItemCount() = fragmentList.size
|
||||
override fun createFragment(position: Int) = fragmentList[position]
|
||||
|
||||
fun addFragment(fragment: Fragment) {
|
||||
fragmentList.add(fragment)
|
||||
}
|
||||
}
|
|
@ -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>(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(
|
||||
|
|
After Width: | Height: | Size: 775 KiB |
After Width: | Height: | Size: 560 KiB |
After Width: | Height: | Size: 320 KiB |
After Width: | Height: | Size: 652 KiB |
After Width: | Height: | Size: 699 KiB |
After Width: | Height: | Size: 554 KiB |
After Width: | Height: | Size: 252 KiB |
|
@ -0,0 +1,8 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:innerRadius="0dp"
|
||||
android:shape="ring"
|
||||
android:thickness="3.5dp"
|
||||
android:useLevel="false">
|
||||
<solid android:color="@color/color_555555" />
|
||||
</shape>
|
|
@ -0,0 +1,8 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:innerRadius="0dp"
|
||||
android:shape="ring"
|
||||
android:thickness="3.5dp"
|
||||
android:useLevel="false">
|
||||
<solid android:color="@color/color_1313bc" />
|
||||
</shape>
|
|
@ -0,0 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:drawable="@drawable/dot_selected" android:state_selected="true" />
|
||||
<item android:drawable="@drawable/dot_default" />
|
||||
</selector>
|
|
@ -0,0 +1,43 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<RelativeLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_above="@+id/tv_start"
|
||||
android:layout_alignParentTop="true"
|
||||
android:gravity="center">
|
||||
|
||||
<androidx.viewpager2.widget.ViewPager2
|
||||
android:id="@+id/view_pager"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent" />
|
||||
|
||||
<com.google.android.material.tabs.TabLayout
|
||||
android:id="@+id/tabs"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentBottom="true"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:background="@android:color/transparent"
|
||||
app:tabBackground="@drawable/tab_dot_selector"
|
||||
app:tabGravity="center"
|
||||
app:tabIndicatorHeight="0dp" />
|
||||
</RelativeLayout>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_start"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="60dp"
|
||||
android:layout_alignParentBottom="true"
|
||||
android:background="@color/color_80d8ff"
|
||||
android:fontFamily="@font/gmarket_sans_bold"
|
||||
android:gravity="center"
|
||||
android:text="시작하기"
|
||||
android:textColor="@color/color_1313bc"
|
||||
android:textSize="18.3sp" />
|
||||
|
||||
</RelativeLayout>
|
|
@ -0,0 +1,16 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/rl_root"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@color/color_ccf0ff">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/image_view"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:contentDescription="@null"
|
||||
tools:src="@drawable/img_guide_1" />
|
||||
|
||||
</RelativeLayout>
|
|
@ -3,7 +3,7 @@
|
|||
<color name="black">#FF000000</color>
|
||||
<color name="white">#FFFFFFFF</color>
|
||||
|
||||
<color name="color_80d8ff">#80DFFF</color>
|
||||
<color name="color_80d8ff">#80D8FF</color>
|
||||
<color name="color_1313bc">#1313BC</color>
|
||||
<color name="color_9970ff">#9970FF</color>
|
||||
<color name="color_eeeeee">#EEEEEE</color>
|
||||
|
@ -97,4 +97,5 @@
|
|||
<color name="color_2f90b7">#2F90B7</color>
|
||||
<color name="color_a94400">#A94400</color>
|
||||
<color name="color_ffe368">#FFE368</color>
|
||||
<color name="color_ccf0ff">#CCF0FF</color>
|
||||
</resources>
|
||||
|
|