From d0201f02a0307cefe0e80c859fdc9682c7c46e46 Mon Sep 17 00:00:00 2001 From: Finn M Glas Date: Sun, 21 Jun 2020 14:33:49 +0200 Subject: [PATCH] Make tutorial swipeable But this still needs lots of improvement ^^ Closes #30 --- .../launcher/tutorial/TutorialActivity.kt | 85 +++++++------------ .../tutorial/tab/TutorialFragmentTab.kt | 67 +++++++++++++++ app/src/main/res/layout/tutorial.xml | 63 ++------------ app/src/main/res/layout/tutorial_tab.xml | 42 +++++++++ 4 files changed, 148 insertions(+), 109 deletions(-) create mode 100644 app/src/main/java/com/finnmglas/launcher/tutorial/tab/TutorialFragmentTab.kt create mode 100644 app/src/main/res/layout/tutorial_tab.xml diff --git a/app/src/main/java/com/finnmglas/launcher/tutorial/TutorialActivity.kt b/app/src/main/java/com/finnmglas/launcher/tutorial/TutorialActivity.kt index 0c4175d..6c9ad74 100644 --- a/app/src/main/java/com/finnmglas/launcher/tutorial/TutorialActivity.kt +++ b/app/src/main/java/com/finnmglas/launcher/tutorial/TutorialActivity.kt @@ -2,10 +2,14 @@ package com.finnmglas.launcher.tutorial import android.content.Context import android.os.Bundle -import android.util.TypedValue import android.view.* import androidx.appcompat.app.AppCompatActivity +import androidx.fragment.app.Fragment +import androidx.fragment.app.FragmentManager +import androidx.fragment.app.FragmentPagerAdapter +import androidx.viewpager.widget.ViewPager import com.finnmglas.launcher.* +import com.finnmglas.launcher.tutorial.tab.TutorialFragmentTab import kotlinx.android.synthetic.main.tutorial.* /** @@ -17,7 +21,6 @@ import kotlinx.android.synthetic.main.tutorial.* */ class TutorialActivity: AppCompatActivity(), UIObject { - private var menuNumber = 0 private var defaultApps = mutableListOf() private var isFirstTime = false @@ -26,13 +29,19 @@ class TutorialActivity: AppCompatActivity(), UIObject { // Initialise layout setContentView(R.layout.tutorial) - loadMenu(this) // Check if it is the first time starting the app isFirstTime = !launcherPreferences.getBoolean("startedBefore", false) if (isFirstTime) defaultApps = resetSettings(this) // UP, DOWN, RIGHT, LEFT, VOLUME_UP, VOLUME_DOWN else tutorial_appbar.visibility = View.VISIBLE + + // set up tabs and swiping in settings + val sectionsPagerAdapter = TutorialSectionsPagerAdapter(this, supportFragmentManager, defaultApps, isFirstTime) + val viewPager: ViewPager = findViewById(R.id.tutorial_viewpager) + viewPager.adapter = sectionsPagerAdapter + //val tabs: TabLayout = findViewById(R.id.tutorial_tabs) + //tabs.setupWithViewPager(viewPager) } override fun onStart() { @@ -40,64 +49,32 @@ class TutorialActivity: AppCompatActivity(), UIObject { super.onStart() } - override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { - if (keyCode == KeyEvent.KEYCODE_VOLUME_UP){ - menuNumber++ - loadMenu(this) - } - else if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN || keyCode == KeyEvent.KEYCODE_BACK){ - menuNumber-- - - // prevent negative indices - if (menuNumber < 0) menuNumber = 0 - - loadMenu(this) - } - return true - } - - fun clickAnywhere(view: View){ - menuNumber++ - loadMenu(this) - } - - private fun loadMenu(context: Context) { // Context needed for packageManager - val intro = resources.getStringArray(R.array.intro) - - if (menuNumber < intro.size){ - val entry = intro[menuNumber].split("|").toTypedArray() //heading|infoText|hintText|size - - tutorial_page_heading.text = entry[0] - if (entry[4] == "1" && isFirstTime) - tutorial_page_text.text = String.format(entry[1], - defaultApps[0], defaultApps[1], defaultApps[2], defaultApps[3], defaultApps[4], defaultApps[5]) - else if (entry[4] == "1" && !isFirstTime) - tutorial_page_text.text = String.format(entry[1], - "-", "-", "-", "-", "-", "-") - else tutorial_page_text.text = entry[1] - tutorial_page_hint.text = entry[2] - tutorial_page_text.setTextSize(TypedValue.COMPLEX_UNIT_SP, entry[3].toFloat()) - - } else { // End intro - if (isFirstTime){ - launcherPreferences.edit() - .putBoolean("startedBefore", true) // never auto run this again - .putLong("firstStartup", System.currentTimeMillis() / 1000L) // record first startup timestamp - .apply() - } - finish() - } - } - override fun applyTheme() { tutorial_appbar.setBackgroundColor(dominantColor) tutorial_container.setBackgroundColor(dominantColor) tutorial_close.setTextColor(vibrantColor) - - tutorial_page_hint.blink() // animate } override fun setOnClicks() { tutorial_close.setOnClickListener() { finish() } } } + +class TutorialSectionsPagerAdapter(private val context: Context, fm: FragmentManager, + val defaultApps: MutableList, val isFirstTime: Boolean) + : FragmentPagerAdapter(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) { + + override fun getItem(position: Int): Fragment { + return when (position){ + 0 -> TutorialFragmentTab(defaultApps, isFirstTime, position) + 1 -> TutorialFragmentTab(defaultApps, isFirstTime, position) + else -> TutorialFragmentTab(defaultApps, isFirstTime, position) + } + } + + override fun getPageTitle(position: Int): CharSequence? { + return position.toString() + } + + override fun getCount(): Int { return 20 } +} \ No newline at end of file diff --git a/app/src/main/java/com/finnmglas/launcher/tutorial/tab/TutorialFragmentTab.kt b/app/src/main/java/com/finnmglas/launcher/tutorial/tab/TutorialFragmentTab.kt new file mode 100644 index 0000000..555941d --- /dev/null +++ b/app/src/main/java/com/finnmglas/launcher/tutorial/tab/TutorialFragmentTab.kt @@ -0,0 +1,67 @@ +package com.finnmglas.launcher.tutorial.tab + +import android.content.Context +import android.os.Bundle +import android.util.TypedValue +import androidx.fragment.app.Fragment +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import com.finnmglas.launcher.* +import kotlinx.android.synthetic.main.tutorial_tab.* + +/** + * The [TutorialFragmentTab] is a used as a tab in the TutorialActivity. + * + * It is used to display info in the tutorial + */ +class TutorialFragmentTab(var defaultApps: MutableList, val isFirstTime: Boolean, val n: Int): Fragment(), UIObject { + + private var menuNumber = 0 + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + return inflater.inflate(R.layout.tutorial_tab, container, false) + } + + override fun onStart(){ + menuNumber = n + loadMenu(context!!) + + super.onStart() + super.onStart() + } + + override fun applyTheme() { + tutorial_tab_container.setBackgroundColor(dominantColor) + } + + private fun loadMenu(context: Context) { // Context needed for packageManager + val intro = resources.getStringArray(R.array.intro) + + if (menuNumber < intro.size){ + val entry = intro[menuNumber].split("|").toTypedArray() //heading|infoText|hintText|size + + tutorial_tab_heading.text = entry[0] + if (entry[4] == "1" && isFirstTime) + tutorial_tab_text.text = String.format(entry[1], + defaultApps[0], defaultApps[1], defaultApps[2], defaultApps[3], defaultApps[4], defaultApps[5]) + else if (entry[4] == "1" && !isFirstTime) + tutorial_tab_text.text = String.format(entry[1], + "-", "-", "-", "-", "-", "-") + else tutorial_tab_text.text = entry[1] + tutorial_tab_text.setTextSize(TypedValue.COMPLEX_UNIT_SP, entry[3].toFloat()) + + } else if (menuNumber > intro.size) { // End intro + if (isFirstTime){ + launcherPreferences.edit() + .putBoolean("startedBefore", true) // never auto run this again + .putLong("firstStartup", System.currentTimeMillis() / 1000L) // record first startup timestamp + .apply() + } + activity!!.finish() + } + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/tutorial.xml b/app/src/main/res/layout/tutorial.xml index e74dbf9..eb3bc62 100644 --- a/app/src/main/res/layout/tutorial.xml +++ b/app/src/main/res/layout/tutorial.xml @@ -8,7 +8,6 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:background="?attr/colorPrimary" - android:onClick="clickAnywhere" tools:context=".tutorial.TutorialActivity"> @@ -56,59 +55,13 @@ custom:layout_constraintTop_toTopOf="parent" custom:type="solid" /> - - - - - - - + \ No newline at end of file diff --git a/app/src/main/res/layout/tutorial_tab.xml b/app/src/main/res/layout/tutorial_tab.xml new file mode 100644 index 0000000..185efe3 --- /dev/null +++ b/app/src/main/res/layout/tutorial_tab.xml @@ -0,0 +1,42 @@ + + + + + + + + \ No newline at end of file