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 44fe597..ac44570 100644 --- a/app/src/main/java/com/finnmglas/launcher/tutorial/TutorialActivity.kt +++ b/app/src/main/java/com/finnmglas/launcher/tutorial/TutorialActivity.kt @@ -9,7 +9,7 @@ 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 com.finnmglas.launcher.tutorial.tab.* import com.google.android.material.tabs.TabLayout import kotlinx.android.synthetic.main.tutorial.* @@ -22,23 +22,18 @@ import kotlinx.android.synthetic.main.tutorial.* */ class TutorialActivity: AppCompatActivity(), UIObject { - private var defaultApps = mutableListOf() - private var isFirstTime = false - override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // Initialise layout setContentView(R.layout.tutorial) - // 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 + // Check if the app was started before + if (launcherPreferences.getBoolean("startedBefore", false)) + tutorial_appbar.visibility = View.VISIBLE // set up tabs and swiping in settings - val sectionsPagerAdapter = TutorialSectionsPagerAdapter(this, supportFragmentManager, defaultApps, isFirstTime) + val sectionsPagerAdapter = TutorialSectionsPagerAdapter(this, supportFragmentManager) val viewPager: ViewPager = findViewById(R.id.tutorial_viewpager) viewPager.adapter = sectionsPagerAdapter val tabs: TabLayout = findViewById(R.id.tutorial_tabs) @@ -61,21 +56,27 @@ class TutorialActivity: AppCompatActivity(), UIObject { } } -class TutorialSectionsPagerAdapter(private val context: Context, fm: FragmentManager, - val defaultApps: MutableList, val isFirstTime: Boolean) +/** + * The [TutorialSectionsPagerAdapter] defines which fragments are shown when, + * in the [TutorialActivity]. + * + * Tabs: (Start | Concept | Usage | Setup | Finish) + */ +class TutorialSectionsPagerAdapter(private val context: Context, fm: FragmentManager) : 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) + 0 -> TutorialFragmentStart() + 1 -> TutorialFragmentConcept() + 2 -> TutorialFragmentUsage() + 3 -> TutorialFragmentSetup() + 4 -> TutorialFragmentFinish() + else -> Fragment() } } - override fun getPageTitle(position: Int): CharSequence? { - return "" - } - - override fun getCount(): Int { return 9 } + /* We don't use titles here, as we have the dots */ + override fun getPageTitle(position: Int): CharSequence? { return "" } + override fun getCount(): Int { return 5 } } \ No newline at end of file diff --git a/app/src/main/java/com/finnmglas/launcher/tutorial/tab/TutorialFragmentConcept.kt b/app/src/main/java/com/finnmglas/launcher/tutorial/tab/TutorialFragmentConcept.kt new file mode 100644 index 0000000..829bfe7 --- /dev/null +++ b/app/src/main/java/com/finnmglas/launcher/tutorial/tab/TutorialFragmentConcept.kt @@ -0,0 +1,33 @@ +package com.finnmglas.launcher.tutorial.tab + +import android.os.Bundle +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_concept.* + +/** + * The [TutorialFragmentConcept] is a used as a tab in the TutorialActivity. + * + * It is used to display info about Launchers concept (open source, efficiency ...) + */ +class TutorialFragmentConcept(): Fragment(), UIObject { + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + return inflater.inflate(R.layout.tutorial_concept, container, false) + } + + override fun onStart(){ + super.onStart() + super.onStart() + } + + override fun applyTheme() { + tutorial_concept_container.setBackgroundColor(dominantColor) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/finnmglas/launcher/tutorial/tab/TutorialFragmentFinish.kt b/app/src/main/java/com/finnmglas/launcher/tutorial/tab/TutorialFragmentFinish.kt new file mode 100644 index 0000000..8d92a5e --- /dev/null +++ b/app/src/main/java/com/finnmglas/launcher/tutorial/tab/TutorialFragmentFinish.kt @@ -0,0 +1,43 @@ +package com.finnmglas.launcher.tutorial.tab + +import android.os.Bundle +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_finish.* + +/** + * The [TutorialFragmentFinish] is a used as a tab in the TutorialActivity. + * + * It is used to display further resources and let the user start Launcher + */ +class TutorialFragmentFinish(): Fragment(), UIObject { + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + return inflater.inflate(R.layout.tutorial_finish, container, false) + } + + override fun onStart() { + super.onStart() + super.onStart() + } + + override fun applyTheme() { + tutorial_finish_container.setBackgroundColor(dominantColor) + } + + fun go() { + if (!launcherPreferences.getBoolean("startedBefore", false)){ + 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/java/com/finnmglas/launcher/tutorial/tab/TutorialFragmentSetup.kt b/app/src/main/java/com/finnmglas/launcher/tutorial/tab/TutorialFragmentSetup.kt new file mode 100644 index 0000000..e5615ae --- /dev/null +++ b/app/src/main/java/com/finnmglas/launcher/tutorial/tab/TutorialFragmentSetup.kt @@ -0,0 +1,36 @@ +package com.finnmglas.launcher.tutorial.tab + +import android.os.Bundle +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_setup.* + +/** + * The [TutorialFragmentSetup] is a used as a tab in the TutorialActivity. + * + * It is used to display info in the tutorial + */ +class TutorialFragmentSetup(): Fragment(), UIObject { + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + return inflater.inflate(R.layout.tutorial_setup, container, false) + } + + override fun onStart(){ + var defaultApps = mutableListOf() + defaultApps = resetSettings(context!!) // UP, DOWN, RIGHT, LEFT, VOLUME_UP, VOLUME_DOWN + + super.onStart() + super.onStart() + } + + override fun applyTheme() { + tutorial_setup_container.setBackgroundColor(dominantColor) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/finnmglas/launcher/tutorial/tab/TutorialFragmentStart.kt b/app/src/main/java/com/finnmglas/launcher/tutorial/tab/TutorialFragmentStart.kt new file mode 100644 index 0000000..beef9f2 --- /dev/null +++ b/app/src/main/java/com/finnmglas/launcher/tutorial/tab/TutorialFragmentStart.kt @@ -0,0 +1,33 @@ +package com.finnmglas.launcher.tutorial.tab + +import android.os.Bundle +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_start.* + +/** + * The [TutorialFragmentStart] is a used as a tab in the TutorialActivity. + * + * It displays info about the app and gets the user into the tutorial + */ +class TutorialFragmentStart(): Fragment(), UIObject { + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + return inflater.inflate(R.layout.tutorial_start, container, false) + } + + override fun onStart(){ + super.onStart() + super.onStart() + } + + override fun applyTheme() { + tutorial_start_container.setBackgroundColor(dominantColor) + } +} \ 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 deleted file mode 100644 index 555941d..0000000 --- a/app/src/main/java/com/finnmglas/launcher/tutorial/tab/TutorialFragmentTab.kt +++ /dev/null @@ -1,67 +0,0 @@ -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/java/com/finnmglas/launcher/tutorial/tab/TutorialFragmentUsage.kt b/app/src/main/java/com/finnmglas/launcher/tutorial/tab/TutorialFragmentUsage.kt new file mode 100644 index 0000000..8718079 --- /dev/null +++ b/app/src/main/java/com/finnmglas/launcher/tutorial/tab/TutorialFragmentUsage.kt @@ -0,0 +1,33 @@ +package com.finnmglas.launcher.tutorial.tab + +import android.os.Bundle +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_usage.* + +/** + * The [TutorialFragmentUsage] is a used as a tab in the TutorialActivity. + * + * Tells the user how his screen will look and how the app can be used + */ +class TutorialFragmentUsage(): Fragment(), UIObject { + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + return inflater.inflate(R.layout.tutorial_usage, container, false) + } + + override fun onStart(){ + super.onStart() + super.onStart() + } + + override fun applyTheme() { + tutorial_usage_container.setBackgroundColor(dominantColor) + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/tutorial_concept.xml b/app/src/main/res/layout/tutorial_concept.xml new file mode 100644 index 0000000..a4a860b --- /dev/null +++ b/app/src/main/res/layout/tutorial_concept.xml @@ -0,0 +1,10 @@ + + \ No newline at end of file diff --git a/app/src/main/res/layout/tutorial_finish.xml b/app/src/main/res/layout/tutorial_finish.xml new file mode 100644 index 0000000..c4e1deb --- /dev/null +++ b/app/src/main/res/layout/tutorial_finish.xml @@ -0,0 +1,10 @@ + + \ No newline at end of file diff --git a/app/src/main/res/layout/tutorial_setup.xml b/app/src/main/res/layout/tutorial_setup.xml new file mode 100644 index 0000000..a47f195 --- /dev/null +++ b/app/src/main/res/layout/tutorial_setup.xml @@ -0,0 +1,10 @@ + + \ No newline at end of file diff --git a/app/src/main/res/layout/tutorial_start.xml b/app/src/main/res/layout/tutorial_start.xml new file mode 100644 index 0000000..e423474 --- /dev/null +++ b/app/src/main/res/layout/tutorial_start.xml @@ -0,0 +1,10 @@ + + \ 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 deleted file mode 100644 index 185efe3..0000000 --- a/app/src/main/res/layout/tutorial_tab.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/tutorial_usage.xml b/app/src/main/res/layout/tutorial_usage.xml new file mode 100644 index 0000000..e7a61e6 --- /dev/null +++ b/app/src/main/res/layout/tutorial_usage.xml @@ -0,0 +1,10 @@ + + \ No newline at end of file