From b01ddf2ae6d8f46955460dcc8664cd89474c620d Mon Sep 17 00:00:00 2001 From: Finn M Glas Date: Sun, 21 Jun 2020 13:18:51 +0200 Subject: [PATCH 01/11] Fix: White display When newly installing the app, it would have an all white screen because the vibrant and dominant color would only be set when changing themes. This problem emerged within the `fix/code` branch and was not published anywhere yet. --- .../main/java/com/finnmglas/launcher/Functions.kt | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/finnmglas/launcher/Functions.kt b/app/src/main/java/com/finnmglas/launcher/Functions.kt index 454b5c4..4e934c4 100644 --- a/app/src/main/java/com/finnmglas/launcher/Functions.kt +++ b/app/src/main/java/com/finnmglas/launcher/Functions.kt @@ -253,13 +253,22 @@ fun loadSettings(){ fun resetSettings(context: Context) : MutableList{ - // set default theme - saveTheme("finn") - val defaultList :MutableList = mutableListOf() val editor = launcherPreferences.edit() + // set default theme + dominantColor = context.resources.getColor(R.color.finnmglasTheme_background_color) + vibrantColor = context.resources.getColor(R.color.finnmglasTheme_accent_color) + + launcherPreferences.edit() + .putString("background_uri", "") + .putInt("custom_dominant", dominantColor) + .putInt("custom_vibrant", vibrantColor) + .apply() + + saveTheme("finn") + val (chosenUpName, chosenUpPackage) = pickDefaultApp( "action_upApp", context From d0201f02a0307cefe0e80c859fdc9682c7c46e46 Mon Sep 17 00:00:00 2001 From: Finn M Glas Date: Sun, 21 Jun 2020 14:33:49 +0200 Subject: [PATCH 02/11] 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 From 3703c5e34480ffed72c20cef4bf9061227a38370 Mon Sep 17 00:00:00 2001 From: Finn M Glas Date: Tue, 23 Jun 2020 07:54:15 +0200 Subject: [PATCH 03/11] Add dotted bottom progress to swipeable tutorial Closes #10 Now one can't exit the tutorial, this will be fixed before merging --- .../finnmglas/launcher/tutorial/TutorialActivity.kt | 9 +++++---- app/src/main/res/drawable/tutorial_default_dot.xml | 12 ++++++++++++ app/src/main/res/drawable/tutorial_selected_dot.xml | 12 ++++++++++++ app/src/main/res/drawable/tutorial_tab_selector.xml | 8 ++++++++ app/src/main/res/layout/tutorial.xml | 12 ++++++++++++ 5 files changed, 49 insertions(+), 4 deletions(-) create mode 100644 app/src/main/res/drawable/tutorial_default_dot.xml create mode 100644 app/src/main/res/drawable/tutorial_selected_dot.xml create mode 100644 app/src/main/res/drawable/tutorial_tab_selector.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 6c9ad74..44fe597 100644 --- a/app/src/main/java/com/finnmglas/launcher/tutorial/TutorialActivity.kt +++ b/app/src/main/java/com/finnmglas/launcher/tutorial/TutorialActivity.kt @@ -10,6 +10,7 @@ import androidx.fragment.app.FragmentPagerAdapter import androidx.viewpager.widget.ViewPager import com.finnmglas.launcher.* import com.finnmglas.launcher.tutorial.tab.TutorialFragmentTab +import com.google.android.material.tabs.TabLayout import kotlinx.android.synthetic.main.tutorial.* /** @@ -40,8 +41,8 @@ class TutorialActivity: AppCompatActivity(), UIObject { 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) + val tabs: TabLayout = findViewById(R.id.tutorial_tabs) + tabs.setupWithViewPager(viewPager) } override fun onStart() { @@ -73,8 +74,8 @@ class TutorialSectionsPagerAdapter(private val context: Context, fm: FragmentMan } override fun getPageTitle(position: Int): CharSequence? { - return position.toString() + return "" } - override fun getCount(): Int { return 20 } + override fun getCount(): Int { return 9 } } \ No newline at end of file diff --git a/app/src/main/res/drawable/tutorial_default_dot.xml b/app/src/main/res/drawable/tutorial_default_dot.xml new file mode 100644 index 0000000..29ebcd3 --- /dev/null +++ b/app/src/main/res/drawable/tutorial_default_dot.xml @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/tutorial_selected_dot.xml b/app/src/main/res/drawable/tutorial_selected_dot.xml new file mode 100644 index 0000000..1adc83c --- /dev/null +++ b/app/src/main/res/drawable/tutorial_selected_dot.xml @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/tutorial_tab_selector.xml b/app/src/main/res/drawable/tutorial_tab_selector.xml new file mode 100644 index 0000000..67dbf34 --- /dev/null +++ b/app/src/main/res/drawable/tutorial_tab_selector.xml @@ -0,0 +1,8 @@ + + + + + + + \ 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 eb3bc62..e0efbee 100644 --- a/app/src/main/res/layout/tutorial.xml +++ b/app/src/main/res/layout/tutorial.xml @@ -64,4 +64,16 @@ android:layout_marginTop="64dp" app:layout_behavior="@string/appbar_scrolling_view_behavior" app:layout_constraintTop_toBottomOf="@id/tutorial_appbar" /> + + + \ No newline at end of file From e1f88e546df35b0edccc96004e8aad5071dcf388 Mon Sep 17 00:00:00 2001 From: Finn M Glas Date: Tue, 23 Jun 2020 08:58:16 +0200 Subject: [PATCH 04/11] Create 5 empty tabs / fragments for the tutorial (Start, Concept, Usage, Setup, Finish) --- .../launcher/tutorial/TutorialActivity.kt | 41 ++++++------ .../tutorial/tab/TutorialFragmentConcept.kt | 33 +++++++++ .../tutorial/tab/TutorialFragmentFinish.kt | 43 ++++++++++++ .../tutorial/tab/TutorialFragmentSetup.kt | 36 ++++++++++ .../tutorial/tab/TutorialFragmentStart.kt | 33 +++++++++ .../tutorial/tab/TutorialFragmentTab.kt | 67 ------------------- .../tutorial/tab/TutorialFragmentUsage.kt | 33 +++++++++ app/src/main/res/layout/tutorial_concept.xml | 10 +++ app/src/main/res/layout/tutorial_finish.xml | 10 +++ app/src/main/res/layout/tutorial_setup.xml | 10 +++ app/src/main/res/layout/tutorial_start.xml | 10 +++ app/src/main/res/layout/tutorial_tab.xml | 42 ------------ app/src/main/res/layout/tutorial_usage.xml | 10 +++ 13 files changed, 249 insertions(+), 129 deletions(-) create mode 100644 app/src/main/java/com/finnmglas/launcher/tutorial/tab/TutorialFragmentConcept.kt create mode 100644 app/src/main/java/com/finnmglas/launcher/tutorial/tab/TutorialFragmentFinish.kt create mode 100644 app/src/main/java/com/finnmglas/launcher/tutorial/tab/TutorialFragmentSetup.kt create mode 100644 app/src/main/java/com/finnmglas/launcher/tutorial/tab/TutorialFragmentStart.kt delete mode 100644 app/src/main/java/com/finnmglas/launcher/tutorial/tab/TutorialFragmentTab.kt create mode 100644 app/src/main/java/com/finnmglas/launcher/tutorial/tab/TutorialFragmentUsage.kt create mode 100644 app/src/main/res/layout/tutorial_concept.xml create mode 100644 app/src/main/res/layout/tutorial_finish.xml create mode 100644 app/src/main/res/layout/tutorial_setup.xml create mode 100644 app/src/main/res/layout/tutorial_start.xml delete mode 100644 app/src/main/res/layout/tutorial_tab.xml create mode 100644 app/src/main/res/layout/tutorial_usage.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 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 From 9213d8241e84fedc5e8692af286a03bba38e169c Mon Sep 17 00:00:00 2001 From: Finn M Glas Date: Tue, 23 Jun 2020 09:54:22 +0200 Subject: [PATCH 05/11] Fill the `Finish` tab (5) of the tutorial --- .../tutorial/tab/TutorialFragmentFinish.kt | 16 +++++++++- app/src/main/res/layout/tutorial_finish.xml | 30 ++++++++++++++++++- 2 files changed, 44 insertions(+), 2 deletions(-) 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 index 8d92a5e..49eca17 100644 --- a/app/src/main/java/com/finnmglas/launcher/tutorial/tab/TutorialFragmentFinish.kt +++ b/app/src/main/java/com/finnmglas/launcher/tutorial/tab/TutorialFragmentFinish.kt @@ -29,9 +29,23 @@ class TutorialFragmentFinish(): Fragment(), UIObject { override fun applyTheme() { tutorial_finish_container.setBackgroundColor(dominantColor) + setButtonColor(tutorial_finish_button_start, vibrantColor) } - fun go() { + override fun setOnClicks() { + super.setOnClicks() + tutorial_finish_button_start.setOnClickListener{ finishTutorial() } + } + + override fun adjustLayout() { + super.adjustLayout() + + // Different text if opened again later (from settings) + if (launcherPreferences.getBoolean("startedBefore", false)) + tutorial_finish_button_start.text = "Back to Settings" + } + + private fun finishTutorial() { if (!launcherPreferences.getBoolean("startedBefore", false)){ launcherPreferences.edit() .putBoolean("startedBefore", true) // never auto run this again diff --git a/app/src/main/res/layout/tutorial_finish.xml b/app/src/main/res/layout/tutorial_finish.xml index c4e1deb..f457dc9 100644 --- a/app/src/main/res/layout/tutorial_finish.xml +++ b/app/src/main/res/layout/tutorial_finish.xml @@ -2,9 +2,37 @@ \ No newline at end of file + tools:context=".tutorial.tab.TutorialFragmentFinish"> + + + +