diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 098b551..11b032f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,5 +1,6 @@ @@ -10,9 +11,9 @@ android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" - android:theme="@style/AppTheme.Light"> + android:theme="@style/AppTheme.Dark"> @@ -22,20 +23,28 @@ + + + android:theme="@style/PlayerTheme" + tools:targetApi="n" /> \ No newline at end of file diff --git a/app/src/main/java/org/mosad/teapod/SplashActivity.kt b/app/src/main/java/org/mosad/teapod/activity/SplashActivity.kt similarity index 81% rename from app/src/main/java/org/mosad/teapod/SplashActivity.kt rename to app/src/main/java/org/mosad/teapod/activity/SplashActivity.kt index 54515b2..39b6744 100644 --- a/app/src/main/java/org/mosad/teapod/SplashActivity.kt +++ b/app/src/main/java/org/mosad/teapod/activity/SplashActivity.kt @@ -1,8 +1,9 @@ -package org.mosad.teapod +package org.mosad.teapod.activity import android.content.Intent import android.os.Bundle import androidx.appcompat.app.AppCompatActivity +import org.mosad.teapod.activity.main.MainActivity class SplashActivity : AppCompatActivity() { diff --git a/app/src/main/java/org/mosad/teapod/MainActivity.kt b/app/src/main/java/org/mosad/teapod/activity/main/MainActivity.kt similarity index 79% rename from app/src/main/java/org/mosad/teapod/MainActivity.kt rename to app/src/main/java/org/mosad/teapod/activity/main/MainActivity.kt index 880f5d1..dc8d1ad 100644 --- a/app/src/main/java/org/mosad/teapod/MainActivity.kt +++ b/app/src/main/java/org/mosad/teapod/activity/main/MainActivity.kt @@ -20,7 +20,7 @@ * */ -package org.mosad.teapod +package org.mosad.teapod.activity.main import android.content.Intent import android.os.Bundle @@ -34,16 +34,18 @@ import com.afollestad.materialdialogs.callbacks.onDismiss import com.google.android.material.bottomnavigation.BottomNavigationView import kotlinx.coroutines.joinAll import kotlinx.coroutines.runBlocking +import org.mosad.teapod.R import org.mosad.teapod.databinding.ActivityMainBinding import org.mosad.teapod.parser.AoDParser -import org.mosad.teapod.player.PlayerActivity +import org.mosad.teapod.activity.player.PlayerActivity import org.mosad.teapod.preferences.EncryptedPreferences import org.mosad.teapod.preferences.Preferences import org.mosad.teapod.ui.components.LoginDialog -import org.mosad.teapod.ui.fragments.AccountFragment -import org.mosad.teapod.ui.fragments.HomeFragment -import org.mosad.teapod.ui.fragments.LibraryFragment -import org.mosad.teapod.ui.fragments.SearchFragment +import org.mosad.teapod.activity.main.fragments.AccountFragment +import org.mosad.teapod.activity.main.fragments.HomeFragment +import org.mosad.teapod.activity.main.fragments.LibraryFragment +import org.mosad.teapod.activity.main.fragments.SearchFragment +import org.mosad.teapod.activity.onboarding.OnboardingActivity import org.mosad.teapod.util.DataTypes import org.mosad.teapod.util.StorageController import java.net.SocketTimeoutException @@ -120,8 +122,8 @@ class MainActivity : AppCompatActivity(), BottomNavigationView.OnNavigationItemS private fun getThemeResource(): Int { return when (Preferences.theme) { - DataTypes.Theme.DARK -> R.style.AppTheme_Dark - else -> R.style.AppTheme_Light + DataTypes.Theme.LIGHT -> R.style.AppTheme_Light + else -> R.style.AppTheme_Dark } } @@ -138,22 +140,23 @@ class MainActivity : AppCompatActivity(), BottomNavigationView.OnNavigationItemS EncryptedPreferences.readCredentials(this) StorageController.load(this) - try { - // make sure credentials are set, run's async - if (EncryptedPreferences.password.isEmpty()) { - showLoginDialog(true) - } else { - // try to login in, as most sites can only bee loaded once loged in - if (!AoDParser.login()) showLoginDialog(false) - } - } catch (ex: SocketTimeoutException) { - Log.w(javaClass.name, "Timeout during login!") + // show onbaording + if (EncryptedPreferences.password.isEmpty()) { + showOnboarding() + } else { + try { + if (!AoDParser.login()) { + showLoginDialog() + } + } catch (ex: SocketTimeoutException) { + Log.w(javaClass.name, "Timeout during login!") - // show waring dialog before finishing - MaterialDialog(this).show { - title(R.string.dialog_timeout_head) - message(R.string.dialog_timeout_desc) - onDismiss { exitAndRemoveTask() } + // show waring dialog before finishing + MaterialDialog(this).show { + title(R.string.dialog_timeout_head) + message(R.string.dialog_timeout_desc) + onDismiss { exitAndRemoveTask() } + } } } @@ -164,12 +167,12 @@ class MainActivity : AppCompatActivity(), BottomNavigationView.OnNavigationItemS wasInitialized = true } - private fun showLoginDialog(firstTry: Boolean) { - LoginDialog(this, firstTry).positiveButton { + private fun showLoginDialog() { + LoginDialog(this, false).positiveButton { EncryptedPreferences.saveCredentials(login, password, context) if (!AoDParser.login()) { - showLoginDialog(false) + showLoginDialog() Log.w(javaClass.name, "Login failed, please try again.") } }.negativeButton { @@ -178,6 +181,14 @@ class MainActivity : AppCompatActivity(), BottomNavigationView.OnNavigationItemS }.show() } + /** + * start the onboarding activity and finish the main activity + */ + private fun showOnboarding() { + startActivity(Intent(this, OnboardingActivity::class.java)) + finish() + } + /** * Show a fragment on top of the current fragment. * The current fragment is replaced and the new one is added diff --git a/app/src/main/java/org/mosad/teapod/ui/fragments/AboutFragment.kt b/app/src/main/java/org/mosad/teapod/activity/main/fragments/AboutFragment.kt similarity index 98% rename from app/src/main/java/org/mosad/teapod/ui/fragments/AboutFragment.kt rename to app/src/main/java/org/mosad/teapod/activity/main/fragments/AboutFragment.kt index b1c7fb2..6ab9714 100644 --- a/app/src/main/java/org/mosad/teapod/ui/fragments/AboutFragment.kt +++ b/app/src/main/java/org/mosad/teapod/activity/main/fragments/AboutFragment.kt @@ -1,4 +1,4 @@ -package org.mosad.teapod.ui.fragments +package org.mosad.teapod.activity.main.fragments import android.os.Bundle import android.view.LayoutInflater diff --git a/app/src/main/java/org/mosad/teapod/ui/fragments/AccountFragment.kt b/app/src/main/java/org/mosad/teapod/activity/main/fragments/AccountFragment.kt similarity index 97% rename from app/src/main/java/org/mosad/teapod/ui/fragments/AccountFragment.kt rename to app/src/main/java/org/mosad/teapod/activity/main/fragments/AccountFragment.kt index b87a753..04c55f2 100644 --- a/app/src/main/java/org/mosad/teapod/ui/fragments/AccountFragment.kt +++ b/app/src/main/java/org/mosad/teapod/activity/main/fragments/AccountFragment.kt @@ -1,4 +1,4 @@ -package org.mosad.teapod.ui.fragments +package org.mosad.teapod.activity.main.fragments import android.os.Bundle import android.util.Log @@ -9,7 +9,7 @@ import androidx.fragment.app.Fragment import com.afollestad.materialdialogs.MaterialDialog import com.afollestad.materialdialogs.list.listItemsSingleChoice import org.mosad.teapod.BuildConfig -import org.mosad.teapod.MainActivity +import org.mosad.teapod.activity.main.MainActivity import org.mosad.teapod.R import org.mosad.teapod.databinding.FragmentAccountBinding import org.mosad.teapod.parser.AoDParser diff --git a/app/src/main/java/org/mosad/teapod/ui/fragments/HomeFragment.kt b/app/src/main/java/org/mosad/teapod/activity/main/fragments/HomeFragment.kt similarity index 98% rename from app/src/main/java/org/mosad/teapod/ui/fragments/HomeFragment.kt rename to app/src/main/java/org/mosad/teapod/activity/main/fragments/HomeFragment.kt index c63ed15..7120b82 100644 --- a/app/src/main/java/org/mosad/teapod/ui/fragments/HomeFragment.kt +++ b/app/src/main/java/org/mosad/teapod/activity/main/fragments/HomeFragment.kt @@ -1,4 +1,4 @@ -package org.mosad.teapod.ui.fragments +package org.mosad.teapod.activity.main.fragments import android.graphics.drawable.Drawable import android.os.Bundle @@ -14,7 +14,7 @@ import com.bumptech.glide.request.transition.Transition import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch -import org.mosad.teapod.MainActivity +import org.mosad.teapod.activity.main.MainActivity import org.mosad.teapod.R import org.mosad.teapod.databinding.FragmentHomeBinding import org.mosad.teapod.parser.AoDParser diff --git a/app/src/main/java/org/mosad/teapod/ui/fragments/LibraryFragment.kt b/app/src/main/java/org/mosad/teapod/activity/main/fragments/LibraryFragment.kt similarity index 94% rename from app/src/main/java/org/mosad/teapod/ui/fragments/LibraryFragment.kt rename to app/src/main/java/org/mosad/teapod/activity/main/fragments/LibraryFragment.kt index 4429e6a..036f3f6 100644 --- a/app/src/main/java/org/mosad/teapod/ui/fragments/LibraryFragment.kt +++ b/app/src/main/java/org/mosad/teapod/activity/main/fragments/LibraryFragment.kt @@ -1,4 +1,4 @@ -package org.mosad.teapod.ui.fragments +package org.mosad.teapod.activity.main.fragments import android.os.Bundle import android.view.LayoutInflater @@ -9,7 +9,7 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch import kotlinx.coroutines.withContext -import org.mosad.teapod.MainActivity +import org.mosad.teapod.activity.main.MainActivity import org.mosad.teapod.databinding.FragmentLibraryBinding import org.mosad.teapod.parser.AoDParser import org.mosad.teapod.util.adapter.MediaItemAdapter diff --git a/app/src/main/java/org/mosad/teapod/ui/fragments/MediaFragment.kt b/app/src/main/java/org/mosad/teapod/activity/main/fragments/MediaFragment.kt similarity index 98% rename from app/src/main/java/org/mosad/teapod/ui/fragments/MediaFragment.kt rename to app/src/main/java/org/mosad/teapod/activity/main/fragments/MediaFragment.kt index ca9373d..6d781e9 100644 --- a/app/src/main/java/org/mosad/teapod/ui/fragments/MediaFragment.kt +++ b/app/src/main/java/org/mosad/teapod/activity/main/fragments/MediaFragment.kt @@ -1,4 +1,4 @@ -package org.mosad.teapod.ui.fragments +package org.mosad.teapod.activity.main.fragments import android.graphics.Color import android.graphics.drawable.ColorDrawable @@ -12,8 +12,8 @@ import com.bumptech.glide.Glide import com.bumptech.glide.request.RequestOptions import jp.wasabeef.glide.transformations.BlurTransformation import kotlinx.coroutines.* -import org.mosad.teapod.MainActivity import org.mosad.teapod.R +import org.mosad.teapod.activity.main.MainActivity import org.mosad.teapod.databinding.FragmentMediaBinding import org.mosad.teapod.parser.AoDParser import org.mosad.teapod.util.* diff --git a/app/src/main/java/org/mosad/teapod/ui/fragments/SearchFragment.kt b/app/src/main/java/org/mosad/teapod/activity/main/fragments/SearchFragment.kt similarity index 95% rename from app/src/main/java/org/mosad/teapod/ui/fragments/SearchFragment.kt rename to app/src/main/java/org/mosad/teapod/activity/main/fragments/SearchFragment.kt index 6810030..c7581a3 100644 --- a/app/src/main/java/org/mosad/teapod/ui/fragments/SearchFragment.kt +++ b/app/src/main/java/org/mosad/teapod/activity/main/fragments/SearchFragment.kt @@ -1,4 +1,4 @@ -package org.mosad.teapod.ui.fragments +package org.mosad.teapod.activity.main.fragments import android.os.Bundle import android.view.LayoutInflater @@ -7,7 +7,7 @@ import android.view.ViewGroup import android.widget.SearchView import androidx.fragment.app.Fragment import kotlinx.coroutines.* -import org.mosad.teapod.MainActivity +import org.mosad.teapod.activity.main.MainActivity import org.mosad.teapod.databinding.FragmentSearchBinding import org.mosad.teapod.parser.AoDParser import org.mosad.teapod.util.decoration.MediaItemDecoration diff --git a/app/src/main/java/org/mosad/teapod/activity/onboarding/OnLoginFragment.kt b/app/src/main/java/org/mosad/teapod/activity/onboarding/OnLoginFragment.kt new file mode 100644 index 0000000..b60646e --- /dev/null +++ b/app/src/main/java/org/mosad/teapod/activity/onboarding/OnLoginFragment.kt @@ -0,0 +1,54 @@ +package org.mosad.teapod.activity.onboarding + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.Fragment +import kotlinx.coroutines.* +import org.mosad.teapod.R +import org.mosad.teapod.databinding.FragmentOnLoginBinding +import org.mosad.teapod.parser.AoDParser +import org.mosad.teapod.preferences.EncryptedPreferences + +class OnLoginFragment: Fragment() { + + private lateinit var binding: FragmentOnLoginBinding + private var loginJob: Job? = null + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { + binding = FragmentOnLoginBinding.inflate(inflater, container, false) + return binding.root + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + initActions() + } + + private fun initActions() { + binding.buttonLogin.setOnClickListener { + // get login credentials from gui + val email = binding.editTextLogin.text.toString() + val password = binding.editTextPassword.text.toString() + + EncryptedPreferences.saveCredentials(email, password, requireContext()) // save the credentials + + binding.buttonLogin.isClickable = false + loginJob = GlobalScope.launch { + if (AoDParser.login()) { + // if login was successful, switch to main + if (activity is OnboardingActivity) { + (activity as OnboardingActivity).launchMainActivity() + } + } else { + withContext(Dispatchers.Main) { + binding.textLoginDesc.text = getString(R.string.on_login_failed) + binding.buttonLogin.isClickable = true + } + } + } + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/org/mosad/teapod/activity/onboarding/OnWelcomeFragment.kt b/app/src/main/java/org/mosad/teapod/activity/onboarding/OnWelcomeFragment.kt new file mode 100644 index 0000000..28e221c --- /dev/null +++ b/app/src/main/java/org/mosad/teapod/activity/onboarding/OnWelcomeFragment.kt @@ -0,0 +1,31 @@ +package org.mosad.teapod.activity.onboarding + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.Fragment +import org.mosad.teapod.databinding.FragmentOnWelcomeBinding + +class OnWelcomeFragment: Fragment() { + + private lateinit var binding: FragmentOnWelcomeBinding + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { + binding = FragmentOnWelcomeBinding.inflate(inflater, container, false) + return binding.root + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + initActions() + } + + private fun initActions() { + binding.buttonGetStarted.setOnClickListener { + if (activity is OnboardingActivity) { + (activity as OnboardingActivity).nextFragment() + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/org/mosad/teapod/activity/onboarding/OnboardingActivity.kt b/app/src/main/java/org/mosad/teapod/activity/onboarding/OnboardingActivity.kt new file mode 100644 index 0000000..a5a11bd --- /dev/null +++ b/app/src/main/java/org/mosad/teapod/activity/onboarding/OnboardingActivity.kt @@ -0,0 +1,78 @@ +package org.mosad.teapod.activity.onboarding + +import android.content.Intent +import android.os.Bundle +import android.view.View +import androidx.appcompat.app.AppCompatActivity +import androidx.fragment.app.Fragment +import androidx.fragment.app.FragmentActivity +import androidx.viewpager2.adapter.FragmentStateAdapter +import com.google.android.material.tabs.TabLayoutMediator +import org.mosad.teapod.activity.main.MainActivity +import org.mosad.teapod.databinding.ActivityOnboardingBinding + +class OnboardingActivity : AppCompatActivity() { + + private lateinit var binding: ActivityOnboardingBinding + private lateinit var pagerAdapter: FragmentStateAdapter + + private val fragments = arrayOf(OnLoginFragment()) + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + binding = ActivityOnboardingBinding.inflate(layoutInflater) + setContentView(binding.root) + + pagerAdapter = ScreenSlidePagerAdapter(this) + binding.viewPager.adapter = pagerAdapter + TabLayoutMediator(binding.tabLayout, binding.viewPager) { tab, position -> + + }.attach() + + // we don't use the skip button, instead we use the start button to skip the last fragment + binding.buttonSkip.visibility = View.GONE + + // hide tab layout if only one tab is displayed + if (fragments.size <= 1) { + binding.tabLayout.visibility = View.GONE + } + } + + override fun onBackPressed() { + if (binding.viewPager.currentItem == 0) { + super.onBackPressed() + } else { + binding.viewPager.currentItem = binding.viewPager.currentItem - 1 + } + } + + fun nextFragment() { + if (binding.viewPager.currentItem < fragments.size - 1) { + binding.viewPager.currentItem++ + } else { + launchMainActivity() + } + } + + fun btnSkipClick(@Suppress("UNUSED_PARAMETER")v: View) { + //launchMainActivity() // currently not used in Teapod + } + + fun launchMainActivity() { + startActivity(Intent(this, MainActivity::class.java)) + finish() + } + + /** + * A simple pager adapter that represents 5 ScreenSlidePageFragment objects, in + * sequence. + */ + private inner class ScreenSlidePagerAdapter(fa: FragmentActivity) : FragmentStateAdapter(fa) { + override fun getItemCount(): Int = fragments.size + + override fun createFragment(position: Int): Fragment = fragments[position] + } + + +} \ No newline at end of file diff --git a/app/src/main/java/org/mosad/teapod/player/PlayerActivity.kt b/app/src/main/java/org/mosad/teapod/activity/player/PlayerActivity.kt similarity index 99% rename from app/src/main/java/org/mosad/teapod/player/PlayerActivity.kt rename to app/src/main/java/org/mosad/teapod/activity/player/PlayerActivity.kt index 0b82c0d..d3e66ec 100644 --- a/app/src/main/java/org/mosad/teapod/player/PlayerActivity.kt +++ b/app/src/main/java/org/mosad/teapod/activity/player/PlayerActivity.kt @@ -1,4 +1,4 @@ -package org.mosad.teapod.player +package org.mosad.teapod.activity.player import android.animation.Animator import android.animation.AnimatorListenerAdapter diff --git a/app/src/main/java/org/mosad/teapod/player/PlayerViewModel.kt b/app/src/main/java/org/mosad/teapod/activity/player/PlayerViewModel.kt similarity index 98% rename from app/src/main/java/org/mosad/teapod/player/PlayerViewModel.kt rename to app/src/main/java/org/mosad/teapod/activity/player/PlayerViewModel.kt index 35117f4..8a1eb89 100644 --- a/app/src/main/java/org/mosad/teapod/player/PlayerViewModel.kt +++ b/app/src/main/java/org/mosad/teapod/activity/player/PlayerViewModel.kt @@ -1,4 +1,4 @@ -package org.mosad.teapod.player +package org.mosad.teapod.activity.player import android.app.Application import android.net.Uri @@ -15,7 +15,6 @@ import kotlinx.coroutines.runBlocking import org.mosad.teapod.R import org.mosad.teapod.parser.AoDParser import org.mosad.teapod.preferences.Preferences -import org.mosad.teapod.ui.fragments.MediaFragment import org.mosad.teapod.util.DataTypes import org.mosad.teapod.util.Episode import org.mosad.teapod.util.Media diff --git a/app/src/main/java/org/mosad/teapod/parser/AoDParser.kt b/app/src/main/java/org/mosad/teapod/parser/AoDParser.kt index 6905a19..a8a5716 100644 --- a/app/src/main/java/org/mosad/teapod/parser/AoDParser.kt +++ b/app/src/main/java/org/mosad/teapod/parser/AoDParser.kt @@ -56,7 +56,7 @@ object AoDParser { fun login(): Boolean = runBlocking { - withContext(Dispatchers.Default) { + withContext(Dispatchers.IO) { // get the authenticity token val resAuth = Jsoup.connect(baseUrl + loginPath) .header("User-Agent", userAgent) diff --git a/app/src/main/java/org/mosad/teapod/preferences/Preferences.kt b/app/src/main/java/org/mosad/teapod/preferences/Preferences.kt index 172fb92..0c8b0c2 100644 --- a/app/src/main/java/org/mosad/teapod/preferences/Preferences.kt +++ b/app/src/main/java/org/mosad/teapod/preferences/Preferences.kt @@ -11,7 +11,7 @@ object Preferences { internal set var autoplay = true internal set - var theme = DataTypes.Theme.LIGHT + var theme = DataTypes.Theme.DARK internal set private fun getSharedPref(context: Context): SharedPreferences { @@ -62,8 +62,8 @@ object Preferences { ) theme = DataTypes.Theme.valueOf( sharedPref.getString( - context.getString(R.string.save_key_theme), DataTypes.Theme.LIGHT.toString() - ) ?: DataTypes.Theme.LIGHT.toString() + context.getString(R.string.save_key_theme), DataTypes.Theme.DARK.toString() + ) ?: DataTypes.Theme.DARK.toString() ) } diff --git a/app/src/main/java/org/mosad/teapod/ui/components/EpisodesListPlayer.kt b/app/src/main/java/org/mosad/teapod/ui/components/EpisodesListPlayer.kt index 9f41056..259305f 100644 --- a/app/src/main/java/org/mosad/teapod/ui/components/EpisodesListPlayer.kt +++ b/app/src/main/java/org/mosad/teapod/ui/components/EpisodesListPlayer.kt @@ -6,7 +6,7 @@ import android.view.LayoutInflater import android.view.ViewGroup import android.widget.LinearLayout import org.mosad.teapod.databinding.PlayerEpisodesListBinding -import org.mosad.teapod.player.PlayerViewModel +import org.mosad.teapod.activity.player.PlayerViewModel import org.mosad.teapod.util.adapter.PlayerEpisodeItemAdapter class EpisodesListPlayer @JvmOverloads constructor( diff --git a/app/src/main/java/org/mosad/teapod/ui/components/LanguageSettingsPlayer.kt b/app/src/main/java/org/mosad/teapod/ui/components/LanguageSettingsPlayer.kt index ff4510a..a1b1d92 100644 --- a/app/src/main/java/org/mosad/teapod/ui/components/LanguageSettingsPlayer.kt +++ b/app/src/main/java/org/mosad/teapod/ui/components/LanguageSettingsPlayer.kt @@ -13,7 +13,7 @@ import android.widget.TextView import androidx.core.view.children import org.mosad.teapod.R import org.mosad.teapod.databinding.PlayerLanguageSettingsBinding -import org.mosad.teapod.player.PlayerViewModel +import org.mosad.teapod.activity.player.PlayerViewModel import java.util.* class LanguageSettingsPlayer @JvmOverloads constructor( 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..cb7aef7 --- /dev/null +++ b/app/src/main/res/drawable/dot_default.xml @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file 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..078fd8f --- /dev/null +++ b/app/src/main/res/drawable/dot_selected.xml @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/dot_tab_selector.xml b/app/src/main/res/drawable/dot_tab_selector.xml new file mode 100644 index 0000000..b32d447 --- /dev/null +++ b/app/src/main/res/drawable/dot_tab_selector.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file 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..1bdea86 --- /dev/null +++ b/app/src/main/res/layout/activity_onboarding.xml @@ -0,0 +1,50 @@ + + + + + + + + +