From 58839c37148c8627ee65d3752036ba74e0c96f55 Mon Sep 17 00:00:00 2001 From: Arty Bishop Date: Thu, 19 Nov 2020 15:18:14 +0000 Subject: [PATCH] Added basic onboarding activity --- app/build.gradle | 4 +- app/src/main/AndroidManifest.xml | 25 ++----- .../com/rtbishop/look4sat/SharedViewModel.kt | 5 +- .../look4sat/ui/activities/MainActivity.kt | 10 +-- .../look4sat/ui/splash/FirstFragment.kt | 6 ++ .../look4sat/ui/splash/SecondFragment.kt | 6 ++ .../look4sat/ui/splash/SplashActivity.kt | 71 +++++++++++++++++++ .../look4sat/ui/splash/ThirdFragment.kt | 6 ++ .../rtbishop/look4sat/utility/PrefsManager.kt | 16 ++--- app/src/main/res/drawable/ic_check.xml | 10 +++ app/src/main/res/drawable/ic_next.xml | 10 +++ app/src/main/res/layout/activity_splash.xml | 29 ++++++++ app/src/main/res/layout/fragment_first.xml | 20 ++++++ app/src/main/res/layout/fragment_second.xml | 20 ++++++ app/src/main/res/layout/fragment_third.xml | 20 ++++++ build.gradle | 1 + 16 files changed, 224 insertions(+), 35 deletions(-) create mode 100644 app/src/main/java/com/rtbishop/look4sat/ui/splash/FirstFragment.kt create mode 100644 app/src/main/java/com/rtbishop/look4sat/ui/splash/SecondFragment.kt create mode 100644 app/src/main/java/com/rtbishop/look4sat/ui/splash/SplashActivity.kt create mode 100644 app/src/main/java/com/rtbishop/look4sat/ui/splash/ThirdFragment.kt create mode 100644 app/src/main/res/drawable/ic_check.xml create mode 100644 app/src/main/res/drawable/ic_next.xml create mode 100644 app/src/main/res/layout/activity_splash.xml create mode 100644 app/src/main/res/layout/fragment_first.xml create mode 100644 app/src/main/res/layout/fragment_second.xml create mode 100644 app/src/main/res/layout/fragment_third.xml diff --git a/app/build.gradle b/app/build.gradle index 72f84d85..95e3042e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -72,13 +72,15 @@ dependencies { implementation "androidx.navigation:navigation-fragment-ktx:$navigation_version" implementation "androidx.navigation:navigation-ui-ktx:$navigation_version" implementation "androidx.preference:preference-ktx:$preference_version" + implementation "androidx.viewpager2:viewpager2:$view_pager2_version" implementation "androidx.room:room-runtime:$room_version" implementation "androidx.room:room-ktx:$room_version" kapt "androidx.room:room-compiler:$room_version" - implementation "androidx.hilt:hilt-lifecycle-viewmodel:$hilt_viewmodel_version" implementation "com.google.dagger:hilt-android:$hilt_version" kapt "com.google.dagger:hilt-android-compiler:$hilt_version" + + implementation "androidx.hilt:hilt-lifecycle-viewmodel:$hilt_viewmodel_version" kapt "androidx.hilt:hilt-compiler:$hilt_viewmodel_version" implementation "com.squareup.retrofit2:retrofit:$retrofit_version" diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ce0c970b..bc9bed1a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,22 +1,4 @@ - - + @@ -32,7 +14,7 @@ android:label="@string/app_name" android:theme="@style/AppTheme"> @@ -41,6 +23,9 @@ + \ No newline at end of file diff --git a/app/src/main/java/com/rtbishop/look4sat/SharedViewModel.kt b/app/src/main/java/com/rtbishop/look4sat/SharedViewModel.kt index d371c0b2..406eb01c 100644 --- a/app/src/main/java/com/rtbishop/look4sat/SharedViewModel.kt +++ b/app/src/main/java/com/rtbishop/look4sat/SharedViewModel.kt @@ -50,7 +50,10 @@ class SharedViewModel @ViewModelInject constructor( private var shouldTriggerCalculation = true init { - if (prefsManager.isFirstLaunch()) updateDefaultSourcesAndEntries() + if (prefsManager.isFirstLaunch()) { + updateDefaultSourcesAndEntries() + prefsManager.setFirstLaunchDone() + } startApplicationTimer() } diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/activities/MainActivity.kt b/app/src/main/java/com/rtbishop/look4sat/ui/activities/MainActivity.kt index 3cc05ef3..74c37993 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/activities/MainActivity.kt +++ b/app/src/main/java/com/rtbishop/look4sat/ui/activities/MainActivity.kt @@ -12,11 +12,11 @@ import dagger.hilt.android.AndroidEntryPoint class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { - setTheme(R.style.AppTheme) super.onCreate(savedInstanceState) - val binding = ActivityMainBinding.inflate(layoutInflater) - setContentView(binding.root) - val navHost = supportFragmentManager.findFragmentById(R.id.nav_host) as NavHostFragment - binding.navBottom.setupWithNavController(navHost.navController) + ActivityMainBinding.inflate(layoutInflater).apply { + setContentView(root) + val navHost = supportFragmentManager.findFragmentById(R.id.nav_host) as NavHostFragment + navBottom.setupWithNavController(navHost.navController) + } } } \ No newline at end of file diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/splash/FirstFragment.kt b/app/src/main/java/com/rtbishop/look4sat/ui/splash/FirstFragment.kt new file mode 100644 index 00000000..fbfd0da8 --- /dev/null +++ b/app/src/main/java/com/rtbishop/look4sat/ui/splash/FirstFragment.kt @@ -0,0 +1,6 @@ +package com.rtbishop.look4sat.ui.splash + +import androidx.fragment.app.Fragment +import com.rtbishop.look4sat.R + +class FirstFragment : Fragment(R.layout.fragment_first) \ No newline at end of file diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/splash/SecondFragment.kt b/app/src/main/java/com/rtbishop/look4sat/ui/splash/SecondFragment.kt new file mode 100644 index 00000000..2aef8aa6 --- /dev/null +++ b/app/src/main/java/com/rtbishop/look4sat/ui/splash/SecondFragment.kt @@ -0,0 +1,6 @@ +package com.rtbishop.look4sat.ui.splash + +import androidx.fragment.app.Fragment +import com.rtbishop.look4sat.R + +class SecondFragment: Fragment(R.layout.fragment_second) \ No newline at end of file diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/splash/SplashActivity.kt b/app/src/main/java/com/rtbishop/look4sat/ui/splash/SplashActivity.kt new file mode 100644 index 00000000..269d4e8f --- /dev/null +++ b/app/src/main/java/com/rtbishop/look4sat/ui/splash/SplashActivity.kt @@ -0,0 +1,71 @@ +package com.rtbishop.look4sat.ui.splash + +import android.content.Intent +import android.os.Bundle +import androidx.fragment.app.Fragment +import androidx.fragment.app.FragmentActivity +import androidx.viewpager2.adapter.FragmentStateAdapter +import androidx.viewpager2.widget.ViewPager2 +import com.rtbishop.look4sat.R +import com.rtbishop.look4sat.databinding.ActivitySplashBinding +import com.rtbishop.look4sat.ui.activities.MainActivity +import com.rtbishop.look4sat.utility.PrefsManager +import dagger.hilt.android.AndroidEntryPoint +import javax.inject.Inject + +@AndroidEntryPoint +class SplashActivity : FragmentActivity() { + + private val pagesCount = 3 + + @Inject + lateinit var prefsManager: PrefsManager + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + if (prefsManager.isFirstLaunch()) showOnboarding() + else startMainActivity() + } + + private fun showOnboarding() { + setTheme(R.style.AppTheme) + ActivitySplashBinding.inflate(layoutInflater).apply { + setContentView(root) + splashPager.apply { + adapter = SplashPagerAdapter(this@SplashActivity) + registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() { + override fun onPageSelected(position: Int) { + super.onPageSelected(position) + if (position == pagesCount - 1) { + splashNext.setImageResource(R.drawable.ic_check) + } + } + }) +// isUserInputEnabled = false + } + splashNext.setOnClickListener { + if (splashPager.currentItem < pagesCount - 1) splashPager.currentItem++ + else if (splashPager.currentItem == pagesCount - 1) startMainActivity() + } + } + } + + private fun startMainActivity() { + startActivity(Intent(this, MainActivity::class.java)) + } + + private inner class SplashPagerAdapter(activity: FragmentActivity) : + FragmentStateAdapter(activity) { + + override fun getItemCount(): Int = pagesCount + + override fun createFragment(position: Int): Fragment { + return when (position) { + 0 -> FirstFragment() + 1 -> SecondFragment() + 2 -> ThirdFragment() + else -> FirstFragment() + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/splash/ThirdFragment.kt b/app/src/main/java/com/rtbishop/look4sat/ui/splash/ThirdFragment.kt new file mode 100644 index 00000000..9025a18b --- /dev/null +++ b/app/src/main/java/com/rtbishop/look4sat/ui/splash/ThirdFragment.kt @@ -0,0 +1,6 @@ +package com.rtbishop.look4sat.ui.splash + +import androidx.fragment.app.Fragment +import com.rtbishop.look4sat.R + +class ThirdFragment : Fragment(R.layout.fragment_third) \ No newline at end of file diff --git a/app/src/main/java/com/rtbishop/look4sat/utility/PrefsManager.kt b/app/src/main/java/com/rtbishop/look4sat/utility/PrefsManager.kt index eea7bd13..5450e4a8 100644 --- a/app/src/main/java/com/rtbishop/look4sat/utility/PrefsManager.kt +++ b/app/src/main/java/com/rtbishop/look4sat/utility/PrefsManager.kt @@ -79,13 +79,13 @@ class PrefsManager @Inject constructor(val preferences: SharedPreferences) { } fun isFirstLaunch(): Boolean { - val isFirstLaunch = preferences.getBoolean(keyIsFirstLaunch, true) - return if (isFirstLaunch) { - preferences.edit { - putBoolean(keyIsFirstLaunch, false) - apply() - } - isFirstLaunch - } else isFirstLaunch + return preferences.getBoolean(keyIsFirstLaunch, true) + } + + fun setFirstLaunchDone() { + preferences.edit { + putBoolean(keyIsFirstLaunch, false) + apply() + } } } diff --git a/app/src/main/res/drawable/ic_check.xml b/app/src/main/res/drawable/ic_check.xml new file mode 100644 index 00000000..0432fa69 --- /dev/null +++ b/app/src/main/res/drawable/ic_check.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_next.xml b/app/src/main/res/drawable/ic_next.xml new file mode 100644 index 00000000..702e70c5 --- /dev/null +++ b/app/src/main/res/drawable/ic_next.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/layout/activity_splash.xml b/app/src/main/res/layout/activity_splash.xml new file mode 100644 index 00000000..6f4c5aa9 --- /dev/null +++ b/app/src/main/res/layout/activity_splash.xml @@ -0,0 +1,29 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_first.xml b/app/src/main/res/layout/fragment_first.xml new file mode 100644 index 00000000..9a732ff5 --- /dev/null +++ b/app/src/main/res/layout/fragment_first.xml @@ -0,0 +1,20 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_second.xml b/app/src/main/res/layout/fragment_second.xml new file mode 100644 index 00000000..36bc1528 --- /dev/null +++ b/app/src/main/res/layout/fragment_second.xml @@ -0,0 +1,20 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_third.xml b/app/src/main/res/layout/fragment_third.xml new file mode 100644 index 00000000..a54a46fe --- /dev/null +++ b/app/src/main/res/layout/fragment_third.xml @@ -0,0 +1,20 @@ + + + + + + \ No newline at end of file diff --git a/build.gradle b/build.gradle index 1f22af23..1403ec36 100644 --- a/build.gradle +++ b/build.gradle @@ -25,6 +25,7 @@ buildscript { constraint_layout_version = '2.0.4' navigation_version = '2.3.1' preference_version = '1.1.1' + view_pager2_version = '1.0.0' room_version = '2.2.5' hilt_version = '2.29.1-alpha' hilt_viewmodel_version = '1.0.0-alpha02'