Просмотр исходного кода

Setup on fresh install rebuilt

sduduzog 7 лет назад
Родитель
Сommit
cd9b9d74d9
28 измененных файлов с 1029 добавлено и 385 удалено
  1. 4 1
      app/src/main/java/com/sduduzog/slimlauncher/data/AppDao.kt
  2. 14 1
      app/src/main/java/com/sduduzog/slimlauncher/data/DataRepository.kt
  3. 4 0
      app/src/main/java/com/sduduzog/slimlauncher/ui/main/MainViewModel.kt
  4. 82 0
      app/src/main/java/com/sduduzog/slimlauncher/ui/main/setup/ChooseAppsDialog.kt
  5. 47 0
      app/src/main/java/com/sduduzog/slimlauncher/ui/main/setup/ClockSetupFragment.kt
  6. 48 0
      app/src/main/java/com/sduduzog/slimlauncher/ui/main/setup/DialerSetupFragment.kt
  7. 44 0
      app/src/main/java/com/sduduzog/slimlauncher/ui/main/setup/HomeSetupFragment.kt
  8. 5 0
      app/src/main/java/com/sduduzog/slimlauncher/ui/main/setup/OnPagerListener.kt
  9. 7 0
      app/src/main/java/com/sduduzog/slimlauncher/ui/main/setup/PagerHelperFragment.kt
  10. 61 199
      app/src/main/java/com/sduduzog/slimlauncher/ui/main/setup/SetupFragment.kt
  11. 36 0
      app/src/main/java/com/sduduzog/slimlauncher/ui/main/setup/SplashFragment.kt
  12. 63 0
      app/src/main/java/com/sduduzog/slimlauncher/ui/main/setup/ThemeSetupFragment.kt
  13. BIN
      app/src/main/res/drawable/clock_zoomed.jpg
  14. BIN
      app/src/main/res/drawable/clock_zoomed2.jpg
  15. 9 0
      app/src/main/res/drawable/ic_color_lens.xml
  16. 9 0
      app/src/main/res/drawable/ic_text_fields.xml
  17. BIN
      app/src/main/res/drawable/nav_options.jpg
  18. BIN
      app/src/main/res/drawable/nav_options2.jpg
  19. BIN
      app/src/main/res/drawable/nav_options3.jpg
  20. BIN
      app/src/main/res/drawable/screenshot.jpg
  21. 72 0
      app/src/main/res/layout/clock_setup_fragment.xml
  22. 147 0
      app/src/main/res/layout/dialer_setup_fragment.xml
  23. 67 0
      app/src/main/res/layout/home_setup_fragment.xml
  24. 4 178
      app/src/main/res/layout/setup_fragment.xml
  25. 95 0
      app/src/main/res/layout/splash_fragment.xml
  26. 180 0
      app/src/main/res/layout/theme_setup_fragment.xml
  27. 5 5
      app/src/main/res/values/colors.xml
  28. 26 1
      app/src/main/res/values/strings.xml

+ 4 - 1
app/src/main/java/com/sduduzog/slimlauncher/data/AppDao.kt

@@ -25,7 +25,10 @@ interface AppDao {
     @Query("DELETE FROM apps")
     @Query("DELETE FROM apps")
     fun deleteAll()
     fun deleteAll()
 
 
+    @Query("DELETE FROM home_apps")
+    fun clearHomeApps()
+
     @Delete
     @Delete
-    fun delete(app: HomeApp)
+    fun deleteHomeApp(app: HomeApp)
 
 
 }
 }

+ 14 - 1
app/src/main/java/com/sduduzog/slimlauncher/data/DataRepository.kt

@@ -37,6 +37,10 @@ class DataRepository(application: Application) {
         DeleteHomeAppAsyncTask(appDao).execute(app)
         DeleteHomeAppAsyncTask(appDao).execute(app)
     }
     }
 
 
+    fun clearHomeApps(){
+        ClearHomeAppsAsyncTask(appDao).execute()
+    }
+
     fun updateApps(list: List<HomeApp>) {
     fun updateApps(list: List<HomeApp>) {
         for (app in list) {
         for (app in list) {
             UpdateAppsAsyncTask(appDao).execute(app)
             UpdateAppsAsyncTask(appDao).execute(app)
@@ -74,7 +78,15 @@ class DataRepository(application: Application) {
     private class DeleteHomeAppAsyncTask internal constructor(private val mAsyncTaskDao: AppDao) : AsyncTask<HomeApp, Void, Void>() {
     private class DeleteHomeAppAsyncTask internal constructor(private val mAsyncTaskDao: AppDao) : AsyncTask<HomeApp, Void, Void>() {
 
 
         override fun doInBackground(vararg params: HomeApp): Void? {
         override fun doInBackground(vararg params: HomeApp): Void? {
-            mAsyncTaskDao.delete(params[0])
+            mAsyncTaskDao.deleteHomeApp(params[0])
+            return null
+        }
+    }
+
+    private class ClearHomeAppsAsyncTask internal constructor(private val mAsyncTaskDao: AppDao) : AsyncTask<Void, Void, Void>() {
+
+        override fun doInBackground(vararg params: Void): Void? {
+            mAsyncTaskDao.clearHomeApps()
             return null
             return null
         }
         }
     }
     }
@@ -101,6 +113,7 @@ class DataRepository(application: Application) {
             val launchables = pm.queryIntentActivities(main, 0)
             val launchables = pm.queryIntentActivities(main, 0)
             Collections.sort(launchables,
             Collections.sort(launchables,
                     ResolveInfo.DisplayNameComparator(pm))
                     ResolveInfo.DisplayNameComparator(pm))
+            mAsyncTaskDao.deleteAll() // Need to find a less expensive way of doing this
             for (i in launchables.indices) {
             for (i in launchables.indices) {
                 val item = launchables[i]
                 val item = launchables[i]
                 Log.d(_tag, "$item")
                 Log.d(_tag, "$item")

+ 4 - 0
app/src/main/java/com/sduduzog/slimlauncher/ui/main/MainViewModel.kt

@@ -42,6 +42,10 @@ class MainViewModel(application: Application) : AndroidViewModel(application) {
         _repository.renameApp(app)
         _repository.renameApp(app)
     }
     }
 
 
+    fun clearHomeApps(){
+        _repository.clearHomeApps()
+    }
+
     fun addToHomeScreen(apps: List<App>) {
     fun addToHomeScreen(apps: List<App>) {
         for (i in apps.indices){
         for (i in apps.indices){
             val app = apps[i]
             val app = apps[i]

+ 82 - 0
app/src/main/java/com/sduduzog/slimlauncher/ui/main/setup/ChooseAppsDialog.kt

@@ -0,0 +1,82 @@
+package com.sduduzog.slimlauncher.ui.main.setup
+
+import android.app.AlertDialog
+import android.app.Dialog
+import android.content.Intent
+import android.content.pm.ResolveInfo
+import android.os.Bundle
+import android.widget.Toast
+import androidx.fragment.app.DialogFragment
+import com.sduduzog.slimlauncher.R
+import com.sduduzog.slimlauncher.data.App
+import java.util.*
+
+class ChooseAppsDialog : DialogFragment() {
+    private lateinit var listener: OnChooseAppsListener
+    private lateinit var apps: MutableList<App>
+    private lateinit var checkedItems: BooleanArray
+
+    override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
+        val pm = activity!!.packageManager
+        val main = Intent(Intent.ACTION_MAIN, null)
+        main.addCategory(Intent.CATEGORY_LAUNCHER)
+        val launchables = pm.queryIntentActivities(main, 0)
+        Collections.sort(launchables,
+                ResolveInfo.DisplayNameComparator(pm))
+        apps = mutableListOf()
+        for (i in launchables.indices) {
+            val item = launchables[i]
+            val activity = item.activityInfo
+            val app = App(launchables[i].loadLabel(pm).toString(), activity.applicationInfo.packageName, activity.name)
+            apps.add(app)
+        }
+        val appNames = arrayOfNulls<String>(apps.size)
+        checkedItems = BooleanArray(apps.size)
+        for (i in apps.indices) {
+            appNames[i] = apps[i].appName
+        }
+
+        val builder = AlertDialog.Builder(context!!)
+        builder.setMultiChoiceItems(appNames, checkedItems) { _, i, b ->
+            checkedItems[i] = b
+            if (checkedItems.filter { it }.size == 5) {
+                setApps()
+                dismiss()
+            }
+
+        }
+        builder.setPositiveButton("Done") { _, _ ->
+            if (checkedItems.none { it }) {
+                Toast.makeText(context, getString(R.string.no_app_selected_toast_msg), Toast.LENGTH_SHORT).show()
+            } else {
+                setApps()
+            }
+        }
+        builder.setTitle(getString(R.string.choose_apps_title))
+
+        return builder.create()
+    }
+
+    private fun setApps() {
+        val list = mutableListOf<App>()
+        for (i in checkedItems.indices) {
+            if (checkedItems[i]) {
+                list.add(apps[i])
+            }
+        }
+        listener.onChooseApps(list)
+    }
+
+    companion object {
+
+        fun getInstance(listener: OnChooseAppsListener): ChooseAppsDialog {
+            return ChooseAppsDialog().apply {
+                this.listener = listener
+            }
+        }
+
+        interface OnChooseAppsListener {
+            fun onChooseApps(apps: List<App>)
+        }
+    }
+}

+ 47 - 0
app/src/main/java/com/sduduzog/slimlauncher/ui/main/setup/ClockSetupFragment.kt

@@ -0,0 +1,47 @@
+package com.sduduzog.slimlauncher.ui.main.setup
+
+
+import android.content.Context.MODE_PRIVATE
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.core.content.edit
+import com.sduduzog.slimlauncher.R
+import kotlinx.android.synthetic.main.clock_setup_fragment.*
+
+
+class ClockSetupFragment : PagerHelperFragment() {
+
+    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
+                              savedInstanceState: Bundle?): View? {
+        // Inflate the layout for this fragment
+        return inflater.inflate(R.layout.clock_setup_fragment, container, false)
+    }
+
+    override fun onActivityCreated(savedInstanceState: Bundle?) {
+        super.onActivityCreated(savedInstanceState)
+
+        val settings = activity!!.getSharedPreferences(getString(R.string.prefs_settings), MODE_PRIVATE)
+        clock_setup_switch.setOnCheckedChangeListener { _, b ->
+            settings.edit {
+                putBoolean(getString(R.string.prefs_settings_key_clock_type), b)
+            }
+            if (b) {
+                clock_setup_image.setImageResource(R.drawable.clock_zoomed2)
+            } else {
+                clock_setup_image.setImageResource(R.drawable.clock_zoomed)
+            }
+        }
+
+        clock_setup_button.setOnClickListener {
+            listener?.onPage(3) // Move to next section
+        }
+    }
+
+    companion object {
+
+        @JvmStatic
+        fun newInstance() = ClockSetupFragment()
+    }
+}

+ 48 - 0
app/src/main/java/com/sduduzog/slimlauncher/ui/main/setup/DialerSetupFragment.kt

@@ -0,0 +1,48 @@
+package com.sduduzog.slimlauncher.ui.main.setup
+
+
+import android.content.Context.MODE_PRIVATE
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.core.content.edit
+import com.sduduzog.slimlauncher.R
+import kotlinx.android.synthetic.main.dialer_setup_fragment.*
+
+
+class DialerSetupFragment : PagerHelperFragment() {
+
+    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
+                              savedInstanceState: Bundle?): View? {
+        // Inflate the layout for this fragment
+        return inflater.inflate(R.layout.dialer_setup_fragment, container, false)
+    }
+
+    override fun onActivityCreated(savedInstanceState: Bundle?) {
+        super.onActivityCreated(savedInstanceState)
+        setup_dialer_switch.setOnCheckedChangeListener { _, b ->
+            if (b) {
+                setup_dialer_text.text = getString(R.string.setup_dialer_note2)
+            } else {
+                setup_dialer_text.text = getString(R.string.setup_note_dialer)
+            }
+
+            val settings = context!!.getSharedPreferences(getString(R.string.prefs_settings), MODE_PRIVATE)
+
+            settings.edit {
+                putBoolean(getString(R.string.prefs_settings_key_app_dialer), b)
+            }
+        }
+
+        setup_button_next.setOnClickListener {
+            listener?.onPage(4) // Move to next section
+        }
+    }
+
+    companion object {
+
+        @JvmStatic
+        fun newInstance() = DialerSetupFragment()
+    }
+}

+ 44 - 0
app/src/main/java/com/sduduzog/slimlauncher/ui/main/setup/HomeSetupFragment.kt

@@ -0,0 +1,44 @@
+package com.sduduzog.slimlauncher.ui.main.setup
+
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.lifecycle.ViewModelProviders
+import com.sduduzog.slimlauncher.R
+import com.sduduzog.slimlauncher.data.App
+import com.sduduzog.slimlauncher.ui.main.MainViewModel
+import kotlinx.android.synthetic.main.home_setup_fragment.*
+
+
+class HomeSetupFragment : PagerHelperFragment(), ChooseAppsDialog.Companion.OnChooseAppsListener {
+
+    private lateinit var viewModel: MainViewModel
+
+    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
+                              savedInstanceState: Bundle?): View? {
+        // Inflate the layout for this fragment
+        return inflater.inflate(R.layout.home_setup_fragment, container, false)
+    }
+
+    override fun onActivityCreated(savedInstanceState: Bundle?) {
+        super.onActivityCreated(savedInstanceState)
+        viewModel = ViewModelProviders.of(this).get(MainViewModel::class.java)
+        setup_choose_button.setOnClickListener {
+            ChooseAppsDialog.getInstance(this).show(childFragmentManager, "HomeSetupFragment")
+        }
+    }
+
+    override fun onChooseApps(apps: List<App>) {
+        viewModel.clearHomeApps()
+        viewModel.addToHomeScreen(apps)
+        listener?.onPage(2) // Move to next section
+    }
+
+    companion object {
+
+        @JvmStatic
+        fun newInstance() = HomeSetupFragment()
+    }
+}

+ 5 - 0
app/src/main/java/com/sduduzog/slimlauncher/ui/main/setup/OnPagerListener.kt

@@ -0,0 +1,5 @@
+package com.sduduzog.slimlauncher.ui.main.setup
+
+interface OnPagerListener{
+    fun onPage(position: Int)
+}

+ 7 - 0
app/src/main/java/com/sduduzog/slimlauncher/ui/main/setup/PagerHelperFragment.kt

@@ -0,0 +1,7 @@
+package com.sduduzog.slimlauncher.ui.main.setup
+
+import androidx.fragment.app.Fragment
+
+abstract class PagerHelperFragment: Fragment() {
+    var listener: OnPagerListener? = null
+}

+ 61 - 199
app/src/main/java/com/sduduzog/slimlauncher/ui/main/setup/SetupFragment.kt

@@ -1,36 +1,21 @@
 package com.sduduzog.slimlauncher.ui.main.setup
 package com.sduduzog.slimlauncher.ui.main.setup
 
 
 
 
-import android.app.AlertDialog
-import android.app.Dialog
-import android.content.Context.MODE_PRIVATE
-import android.content.Intent
-import android.content.pm.ResolveInfo
 import android.os.Bundle
 import android.os.Bundle
+import android.util.Log
 import android.view.LayoutInflater
 import android.view.LayoutInflater
 import android.view.View
 import android.view.View
 import android.view.ViewGroup
 import android.view.ViewGroup
-import android.widget.Toast
-import androidx.core.content.edit
-import androidx.fragment.app.DialogFragment
 import androidx.fragment.app.Fragment
 import androidx.fragment.app.Fragment
-import androidx.lifecycle.Observer
-import androidx.lifecycle.ViewModelProviders
-import androidx.navigation.Navigation
+import androidx.fragment.app.FragmentManager
+import androidx.fragment.app.FragmentPagerAdapter
 import com.sduduzog.slimlauncher.R
 import com.sduduzog.slimlauncher.R
-import com.sduduzog.slimlauncher.data.App
-import com.sduduzog.slimlauncher.data.HomeApp
-import com.sduduzog.slimlauncher.ui.main.MainViewModel
 import kotlinx.android.synthetic.main.setup_fragment.*
 import kotlinx.android.synthetic.main.setup_fragment.*
-import java.util.*
 
 
 
 
-class SetupFragment : Fragment(), DialogInteractionListener {
-
-    private lateinit var viewModel: MainViewModel
-    private var state = 0
-    private val apps = mutableListOf<App>()
+class SetupFragment : Fragment() {
 
 
+    private lateinit var onPagerListener: OnPagerListener
     override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
     override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                               savedInstanceState: Bundle?): View? {
                               savedInstanceState: Bundle?): View? {
         // Inflate the layout for this fragment
         // Inflate the layout for this fragment
@@ -39,202 +24,79 @@ class SetupFragment : Fragment(), DialogInteractionListener {
 
 
     override fun onActivityCreated(savedInstanceState: Bundle?) {
     override fun onActivityCreated(savedInstanceState: Bundle?) {
         super.onActivityCreated(savedInstanceState)
         super.onActivityCreated(savedInstanceState)
-        viewModel = ViewModelProviders.of(this).get(MainViewModel::class.java)
-        setLoading()
-        viewModel.homeApps.observe(this, ValueObserver())
-        setupButton.setOnClickListener {
-            when (state) {
-                1 -> chooseApps()
-                2 -> chooseClock()
-                else -> {
-                    val settings = activity!!.getSharedPreferences(getString(R.string.prefs_settings), MODE_PRIVATE)
-                    settings.edit {
-                        putBoolean(getString(R.string.prefs_settings_key_fresh_install_setup), false)
-                    }
-                    finishSetup()
-                }
-            }
-        }
-
-    }
 
 
-    private fun checkFreshInstall() {
-        val settings = activity!!.getSharedPreferences(getString(R.string.prefs_settings), MODE_PRIVATE)
-        if (settings.getBoolean(getString(R.string.prefs_settings_key_fresh_install_setup), true)) {
-            val pm = activity!!.packageManager
-            val main = Intent(Intent.ACTION_MAIN, null)
+        setup_view_pager.adapter = SectionsPagerAdapter(childFragmentManager)
 
 
-            main.addCategory(Intent.CATEGORY_LAUNCHER)
-
-            val launchables = pm.queryIntentActivities(main, 0)
-            Collections.sort(launchables,
-                    ResolveInfo.DisplayNameComparator(pm))
-            for (i in launchables.indices) {
-                val item = launchables[i]
-                val activity = item.activityInfo
-                val app = App(launchables[i].loadLabel(pm).toString(), activity.applicationInfo.packageName, activity.name)
-                apps.add(app)
-            }
-            revealUI(state)
-        } else {
-            finishSetup()
-        }
+        setup_view_pager.setOnTouchListener { _, _ -> true }
     }
     }
 
 
-    private fun finishSetup() {
-        val nav = Navigation.findNavController(setupContainer)
-        nav.navigate(R.id.action_setupFragment_to_mainFragment2)
-    }
-
-    private fun setLoading() {
-        progressBar.visibility = View.VISIBLE
-        opt1Number.alpha = 0f
-        opt1Text.alpha = 0f
-        opt2Number.alpha = 0f
-        opt2Text.alpha = 0f
-        textViewLets.alpha = 0f
-        setupButton.alpha = 0f
-        tvWelcome.alpha = 0f
-        cvIcon.alpha = 0f
-    }
-
-    private fun revealUI(level: Int) {
-        progressBar.visibility = View.INVISIBLE
-        when (level) {
-            0 -> {
-                tvWelcome.animate().alpha(1f).duration = 1000
-                cvIcon.animate().alpha(1f).duration = 1500
-                textViewLets.animate().alpha(1f).duration = 1000
-                opt1Text.animate().setStartDelay(1000).alpha(1f).duration = 500
-                opt1Number.animate().setStartDelay(1000).alpha(1f).duration = 500
-                opt2Text.animate().setStartDelay(1500).alpha(1f).duration = 500
-                opt2Number.animate().setStartDelay(1500).alpha(1f).duration = 500
-                setupButton.animate().setStartDelay(2000).alpha(1f).duration = 500
-            }
-            1 -> {
-                setupButton.text = getString(R.string.setup_button_next)
-                ivTick1.visibility = View.VISIBLE
-            }
-            2 -> {
-                ivTick2.visibility = View.VISIBLE
-                setupButton.text = getString(R.string.setup_button_finish)
+    override fun onStart() {
+        super.onStart()
+        onPagerListener = object : OnPagerListener {
+            override fun onPage(position: Int) {
+                setup_view_pager.currentItem = position
             }
             }
         }
         }
-        state++
     }
     }
 
 
-    private fun chooseApps() {
-        ChooseApps.newInstance(this, apps).show(fragmentManager, "APP_CHOOSER")
-    }
-
-    private fun chooseClock() {
-        ChooseClockType.newInstance(this).show(fragmentManager, "CLOCK_CHOOSER")
-    }
-
-    class ChooseApps : DialogFragment() {
-
-        private lateinit var listener: DialogInteractionListener
-        private lateinit var apps: List<App>
-        private lateinit var checkedItems: BooleanArray
-
-        companion object {
-            fun newInstance(listener: DialogInteractionListener, apps: List<App>): ChooseApps {
-                val chooser = ChooseApps()
-                chooser.apps = apps
-                chooser.listener = listener
-                return chooser
-            }
-        }
-
-        override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
-            val appNames = arrayOfNulls<String>(apps.size)
-            checkedItems = BooleanArray(apps.size)
-            for (i in apps.indices) {
-                appNames[i] = apps[i].appName
-            }
-
-            val builder = AlertDialog.Builder(context!!)
-            builder.setMultiChoiceItems(appNames, checkedItems) { _, i, b ->
-                checkedItems[i] = b
-                if (checkedItems.filter { it }.size == 5) {
-                    setApps()
-                    dismiss()
+//    private fun checkFreshInstall() {
+//        val settings = activity!!.getSharedPreferences(getString(R.string.prefs_settings), MODE_PRIVATE)
+//        if (settings.getBoolean(getString(R.string.prefs_settings_key_fresh_install_setup), true)) {
+//            val pm = activity!!.packageManager
+//            val main = Intent(Intent.ACTION_MAIN, null)
+//
+//            main.addCategory(Intent.CATEGORY_LAUNCHER)
+//
+//            val launchables = pm.queryIntentActivities(main, 0)
+//            Collections.sort(launchables,
+//                    ResolveInfo.DisplayNameComparator(pm))
+//            for (i in launchables.indices) {
+//                val item = launchables[i]
+//                val activity = item.activityInfo
+//                val app = App(launchables[i].loadLabel(pm).toString(), activity.applicationInfo.packageName, activity.name)
+//                apps.add(app)
+//            }
+//            revealUI(state)
+//        } else {
+//            finishSetup()
+//        }
+//    }
+
+    inner class SectionsPagerAdapter(fm: FragmentManager) : FragmentPagerAdapter(fm) {
+
+        override fun getItem(position: Int): Fragment {
+            return when (position) {
+                1 -> HomeSetupFragment.newInstance().apply {
+                    this.listener = onPagerListener
                 }
                 }
-
-            }
-            builder.setPositiveButton("Done") { _, _ ->
-                if (checkedItems.none { it }) {
-                    Toast.makeText(context, getString(R.string.no_app_selected_toast_msg), Toast.LENGTH_SHORT).show()
-                } else {
-                    setApps()
+                2 -> ClockSetupFragment.newInstance().apply {
+                    this.listener = onPagerListener
                 }
                 }
-            }
-            builder.setTitle(getString(R.string.choose_apps_title))
-
-            return builder.create()
-        }
-
-        private fun setApps() {
-            val list = mutableListOf<App>()
-            for (i in checkedItems.indices) {
-                if (checkedItems[i]) {
-                    list.add(apps[i])
+                3 -> DialerSetupFragment.newInstance().apply {
+                    this.listener = onPagerListener
+                }
+                4 -> ThemeSetupFragment.newInstance().apply {
+                    this.listener = onPagerListener
+                }
+                else -> SplashFragment.newInstance().apply {
+                    this.listener = onPagerListener
                 }
                 }
-            }
-            listener.onAppsChosen(list)
-        }
-    }
-
-    class ChooseClockType : DialogFragment() {
-
-        private lateinit var listener: DialogInteractionListener
-
-        companion object {
-            fun newInstance(listener: DialogInteractionListener): ChooseClockType {
-                val chooser = ChooseClockType()
-                chooser.listener = listener
-                return chooser
             }
             }
         }
         }
 
 
-        override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
-            val builder = AlertDialog.Builder(context!!)
-            builder.setTitle("Choose clock type")
-            builder.setSingleChoiceItems(R.array.clock_types, 0) { _, i ->
-                val settings = context!!.getSharedPreferences(getString(R.string.prefs_settings), MODE_PRIVATE)
-                if (i == 0)
-                    settings.edit {
-                        putBoolean(getString(R.string.prefs_settings_key_clock_type), false)
-                    }
-                else
-                    settings.edit {
-                        putBoolean(getString(R.string.prefs_settings_key_clock_type), true)
-                    }
-                listener.onClockChosen()
-                dismiss()
-            }
-            return builder.create()
+        override fun getCount(): Int {
+            return 5
         }
         }
-    }
 
 
-    inner class ValueObserver : Observer<List<HomeApp>> {
-        override fun onChanged(it: List<HomeApp>?) {
-            if (it != null && it.isEmpty()) {
-                checkFreshInstall()
-                viewModel.apps.removeObservers(this@SetupFragment)
-            } else {
-                if (state == 0)
-                    finishSetup()
+        override fun getPageTitle(position: Int): CharSequence? {
+            when (position) {
+                0 -> return "Splash screen"
+                1 -> return "Home setup"
+                2 -> return "Clock setup"
+                3 -> return "Theme setup"
+                4 -> return "Dialer setup"
             }
             }
+            return null
         }
         }
     }
     }
-
-    override fun onAppsChosen(apps: List<App>) {
-        viewModel.addToHomeScreen(apps)
-        revealUI(state)
-    }
-
-    override fun onClockChosen() {
-        revealUI(state)
-    }
 }
 }

+ 36 - 0
app/src/main/java/com/sduduzog/slimlauncher/ui/main/setup/SplashFragment.kt

@@ -0,0 +1,36 @@
+package com.sduduzog.slimlauncher.ui.main.setup
+
+
+import android.content.Context.MODE_PRIVATE
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.navigation.Navigation
+import com.sduduzog.slimlauncher.R
+import kotlinx.android.synthetic.main.splash_fragment.*
+
+class SplashFragment : PagerHelperFragment() {
+
+    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
+                              savedInstanceState: Bundle?): View? {
+        // Inflate the layout for this fragment
+        return inflater.inflate(R.layout.splash_fragment, container, false)
+    }
+
+    override fun onActivityCreated(savedInstanceState: Bundle?) {
+        super.onActivityCreated(savedInstanceState)
+        setup_splash_button_start.setOnClickListener {
+            listener?.onPage(1) // Move to next item in pager
+        }
+        val settings = activity!!.getSharedPreferences(getString(R.string.prefs_settings), MODE_PRIVATE)
+        if (!settings.getBoolean(getString(R.string.prefs_settings_key_fresh_install_setup), true)) {
+            Navigation.findNavController(splash_fragment).navigate(R.id.action_setupFragment_to_mainFragment2)
+        }
+    }
+
+    companion object {
+        @JvmStatic
+        fun newInstance() = SplashFragment()
+    }
+}

+ 63 - 0
app/src/main/java/com/sduduzog/slimlauncher/ui/main/setup/ThemeSetupFragment.kt

@@ -0,0 +1,63 @@
+package com.sduduzog.slimlauncher.ui.main.setup
+
+
+import android.content.Context
+import android.content.Context.MODE_PRIVATE
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.core.content.edit
+import androidx.navigation.Navigation
+import com.sduduzog.slimlauncher.R
+import kotlinx.android.synthetic.main.setup_fragment.*
+import kotlinx.android.synthetic.main.theme_setup_fragment.*
+
+
+class ThemeSetupFragment : PagerHelperFragment(), View.OnClickListener {
+
+    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
+                              savedInstanceState: Bundle?): View? {
+        // Inflate the layout for this fragment
+        return inflater.inflate(R.layout.theme_setup_fragment, container, false)
+    }
+
+    override fun onActivityCreated(savedInstanceState: Bundle?) {
+        super.onActivityCreated(savedInstanceState)
+
+        setup_fab_candy.setOnClickListener(this)
+        setup_fab_dark.setOnClickListener(this)
+        setup_fab_default.setOnClickListener(this)
+        setup_fab_jupiter.setOnClickListener(this)
+        setup_fab_pastel.setOnClickListener(this)
+        setup_fab_teal.setOnClickListener(this)
+
+        theme_setup_button.setOnClickListener {
+            val settings = activity!!.getSharedPreferences(getString(R.string.prefs_settings), MODE_PRIVATE)
+            settings.edit {
+                putBoolean(getString(R.string.prefs_settings_key_fresh_install_setup), false)
+            }
+            Navigation.findNavController(theme_setup_fragment).navigate(R.id.action_setupFragment_to_mainFragment2)
+        }
+    }
+
+    override fun onClick(view: View) {
+        val index = when (view.id) {
+            R.id.setup_fab_dark -> 1
+            R.id.setup_fab_jupiter -> 2
+            R.id.setup_fab_teal -> 3
+            R.id.setup_fab_candy -> 4
+            R.id.setup_fab_pastel -> 5
+            else -> 0
+        }
+        val settings = activity!!.getSharedPreferences(getString(R.string.prefs_settings), Context.MODE_PRIVATE)
+        settings.edit {
+            putInt(getString(R.string.prefs_settings_key_theme), index)
+        }
+    }
+
+    companion object {
+        @JvmStatic
+        fun newInstance() = ThemeSetupFragment()
+    }
+}

BIN
app/src/main/res/drawable/clock_zoomed.jpg


BIN
app/src/main/res/drawable/clock_zoomed2.jpg


+ 9 - 0
app/src/main/res/drawable/ic_color_lens.xml

@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M12,3c-4.97,0 -9,4.03 -9,9s4.03,9 9,9c0.83,0 1.5,-0.67 1.5,-1.5 0,-0.39 -0.15,-0.74 -0.39,-1.01 -0.23,-0.26 -0.38,-0.61 -0.38,-0.99 0,-0.83 0.67,-1.5 1.5,-1.5L16,16c2.76,0 5,-2.24 5,-5 0,-4.42 -4.03,-8 -9,-8zM6.5,12c-0.83,0 -1.5,-0.67 -1.5,-1.5S5.67,9 6.5,9 8,9.67 8,10.5 7.33,12 6.5,12zM9.5,8C8.67,8 8,7.33 8,6.5S8.67,5 9.5,5s1.5,0.67 1.5,1.5S10.33,8 9.5,8zM14.5,8c-0.83,0 -1.5,-0.67 -1.5,-1.5S13.67,5 14.5,5s1.5,0.67 1.5,1.5S15.33,8 14.5,8zM17.5,12c-0.83,0 -1.5,-0.67 -1.5,-1.5S16.67,9 17.5,9s1.5,0.67 1.5,1.5 -0.67,1.5 -1.5,1.5z"/>
+</vector>

+ 9 - 0
app/src/main/res/drawable/ic_text_fields.xml

@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M2.5,4v3h5v12h3L10.5,7h5L15.5,4h-13zM21.5,9h-9v3h3v7h3v-7h3L21.5,9z"/>
+</vector>

BIN
app/src/main/res/drawable/nav_options.jpg


BIN
app/src/main/res/drawable/nav_options2.jpg


BIN
app/src/main/res/drawable/nav_options3.jpg


BIN
app/src/main/res/drawable/screenshot.jpg


+ 72 - 0
app/src/main/res/layout/clock_setup_fragment.xml

@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:id="@+id/clock_setup_fragment"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    tools:context=".ui.main.setup.ClockSetupFragment">
+
+    <!-- TODO: Update blank fragment layout -->
+    <TextView
+        android:id="@+id/textView14"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="32dp"
+        android:text="Clock Type"
+        android:textAppearance="@style/TextAppearance.AppCompat.Headline"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <ImageView
+        android:id="@+id/clock_setup_image"
+        android:layout_width="200dp"
+        android:layout_height="120dp"
+        android:layout_marginStart="8dp"
+        android:layout_marginTop="32dp"
+        android:layout_marginEnd="16dp"
+        android:src="@drawable/clock_zoomed"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="@+id/textView14"
+        app:layout_constraintTop_toBottomOf="@+id/textView14" />
+
+    <TextView
+        android:id="@+id/textView17"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="32dp"
+        android:layout_marginTop="32dp"
+        android:layout_marginEnd="32dp"
+        android:gravity="center"
+        android:text="This is also changeable in preferences. Whether you prefer a 12hr clock type or a 24hr clock type"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/clock_setup_image" />
+
+    <Switch
+        android:id="@+id/clock_setup_switch"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="8dp"
+        android:layout_marginTop="32dp"
+        android:layout_marginEnd="8dp"
+        android:padding="8dp"
+        android:switchPadding="32dp"
+        android:text="@string/settings_text_use_24_hour_clock"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/textView17" />
+
+    <Button
+        android:id="@+id/clock_setup_button"
+        style="@style/Widget.AppCompat.Button.Borderless"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginEnd="16dp"
+        android:layout_marginBottom="16dp"
+        android:text="@string/setup_button_next"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent" />
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 147 - 0
app/src/main/res/layout/dialer_setup_fragment.xml

@@ -0,0 +1,147 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:id="@+id/dialer_setup_fragment"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    tools:context=".ui.main.setup.DialerSetupFragment">
+
+    <!-- TODO: Update blank fragment layout -->
+    <TextView
+        android:id="@+id/textView19"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="32dp"
+        android:text="@string/setup_we_re_almost_done"
+        android:textAppearance="@style/TextAppearance.AppCompat.Headline"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <TextView
+        android:id="@+id/textView26"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="16dp"
+        android:layout_marginTop="24dp"
+        android:layout_marginEnd="16dp"
+        android:text="@string/setup_expand_note"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/textView19" />
+
+    <ImageView
+        android:id="@+id/imageView2"
+        android:layout_width="200dp"
+        android:layout_height="69dp"
+        android:layout_marginStart="8dp"
+        android:layout_marginTop="8dp"
+        android:layout_marginEnd="8dp"
+        android:background="?android:attr/statusBarColor"
+        android:contentDescription="@string/screenshot_nav"
+        android:padding="1dp"
+        android:src="@drawable/nav_options"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/textView26" />
+
+    <View
+        android:id="@+id/divider5"
+        android:layout_width="0dp"
+        android:layout_height="1dp"
+        android:layout_marginStart="8dp"
+        android:layout_marginTop="16dp"
+        android:layout_marginEnd="8dp"
+        android:background="?android:attr/listDivider"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/imageView2" />
+
+    <TextView
+        android:id="@+id/setup_dialer_text"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="16dp"
+        android:layout_marginTop="8dp"
+        android:layout_marginEnd="8dp"
+        android:text="@string/setup_note_dialer"
+        app:layout_constraintEnd_toStartOf="@+id/setup_dialer_switch"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/divider5" />
+
+    <Switch
+        android:id="@+id/setup_dialer_switch"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginEnd="24dp"
+        app:layout_constraintBottom_toBottomOf="@+id/setup_dialer_text"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintTop_toTopOf="@+id/setup_dialer_text" />
+
+    <ImageView
+        android:id="@+id/imageView4"
+        android:layout_width="200dp"
+        android:layout_height="69dp"
+        android:layout_marginStart="8dp"
+        android:layout_marginTop="16dp"
+        android:layout_marginEnd="8dp"
+        android:background="?android:attr/statusBarColor"
+        android:contentDescription="@string/screenshot_nav"
+        android:padding="1dp"
+        android:src="@drawable/nav_options2"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/setup_dialer_text" />
+
+    <View
+        android:id="@+id/divider6"
+        android:layout_width="0dp"
+        android:layout_height="1dp"
+        android:layout_marginStart="8dp"
+        android:layout_marginTop="24dp"
+        android:layout_marginEnd="8dp"
+        android:background="?android:attr/listDivider"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/imageView4" />
+
+    <TextView
+        android:id="@+id/textView29"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="16dp"
+        android:layout_marginTop="8dp"
+        android:layout_marginEnd="16dp"
+        android:text="@string/setup_note_camera"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/divider6" />
+
+    <ImageView
+        android:id="@+id/imageView5"
+        android:layout_width="200dp"
+        android:layout_height="69dp"
+        android:layout_marginStart="8dp"
+        android:layout_marginTop="8dp"
+        android:layout_marginEnd="8dp"
+        android:background="?android:attr/statusBarColor"
+        android:contentDescription="@string/screenshot_nav"
+        android:padding="1dp"
+        android:src="@drawable/nav_options3"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/textView29" />
+
+    <Button
+        android:id="@+id/setup_button_next"
+        style="@style/Widget.AppCompat.Button.Borderless"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginEnd="16dp"
+        android:layout_marginBottom="16dp"
+        android:text="@string/setup_button_next"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent" />
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 67 - 0
app/src/main/res/layout/home_setup_fragment.xml

@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:id="@+id/home_setup_fragment"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    tools:context=".ui.main.setup.HomeSetupFragment">
+
+    <!-- TODO: Update blank fragment layout -->
+
+    <TextView
+        android:id="@+id/textView15"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="8dp"
+        android:layout_marginTop="32dp"
+        android:layout_marginEnd="8dp"
+        android:text="@string/setup_your_home_screen"
+        android:textAppearance="@style/TextAppearance.AppCompat.Headline"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <TextView
+        android:id="@+id/textView16"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="16dp"
+        android:layout_marginEnd="8dp"
+        android:gravity="end"
+        android:text="@string/setup_screen_description"
+        android:textSize="18sp"
+        app:layout_constraintBottom_toBottomOf="@+id/imageView"
+        app:layout_constraintEnd_toStartOf="@+id/imageView"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="@+id/imageView" />
+
+    <ImageView
+        android:id="@+id/imageView"
+        android:layout_width="120dp"
+        android:layout_height="211dp"
+        android:layout_marginTop="8dp"
+        android:layout_marginEnd="32dp"
+        android:layout_marginBottom="8dp"
+        android:background="?attr/colorPrimaryDark"
+        android:contentDescription="@string/setup_home_screenshot"
+        android:padding="1dp"
+        android:scaleType="centerInside"
+        android:src="@drawable/screenshot"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/textView15"
+        app:layout_constraintVertical_bias="0.16000003" />
+
+    <Button
+        android:id="@+id/setup_choose_button"
+        style="@style/Widget.AppCompat.Button.Borderless"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginEnd="16dp"
+        android:layout_marginBottom="16dp"
+        android:text="@string/setup_choose_apps"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent" />
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 4 - 178
app/src/main/res/layout/setup_fragment.xml

@@ -1,180 +1,6 @@
-<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    xmlns:tools="http://schemas.android.com/tools"
-    android:id="@+id/setupContainer"
+<androidx.viewpager.widget.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/setup_view_pager"
     android:layout_width="match_parent"
     android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    tools:context="com.sduduzog.slimlauncher.ui.main.setup.SetupFragment">
+    android:layout_height="match_parent">
 
 
-    <androidx.cardview.widget.CardView
-        android:id="@+id/cvIcon"
-        android:layout_width="100dp"
-        android:layout_height="100dp"
-        android:layout_marginStart="32dp"
-        android:layout_marginLeft="32dp"
-        android:layout_marginTop="32dp"
-        android:layout_marginEnd="32dp"
-        android:layout_marginRight="32dp"
-        app:cardBackgroundColor="@android:color/black"
-        app:cardCornerRadius="50dp"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toTopOf="parent">
-
-        <androidx.constraintlayout.widget.ConstraintLayout
-            android:layout_width="match_parent"
-            android:layout_height="match_parent">
-
-            <ImageView
-                android:id="@+id/imageView3"
-                android:layout_width="65dp"
-                android:layout_height="65dp"
-                android:layout_marginStart="8dp"
-                android:layout_marginLeft="8dp"
-                android:layout_marginTop="8dp"
-                android:layout_marginEnd="8dp"
-                android:layout_marginRight="8dp"
-                android:layout_marginBottom="8dp"
-                android:contentDescription="@string/app_name"
-                android:src="@mipmap/ic_launcher"
-                app:layout_constraintBottom_toBottomOf="parent"
-                app:layout_constraintEnd_toEndOf="parent"
-                app:layout_constraintStart_toStartOf="parent"
-                app:layout_constraintTop_toTopOf="parent" />
-        </androidx.constraintlayout.widget.ConstraintLayout>
-    </androidx.cardview.widget.CardView>
-
-    <Button
-        android:id="@+id/setupButton"
-        style="@style/Widget.AppCompat.Button.Borderless"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_marginEnd="8dp"
-        android:layout_marginRight="8dp"
-        android:layout_marginBottom="7dp"
-        android:text="@string/setup_button_start"
-        app:layout_constraintBottom_toBottomOf="parent"
-        app:layout_constraintEnd_toEndOf="parent" />
-
-    <TextView
-        android:id="@+id/tvWelcome"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_marginTop="16dp"
-        android:layout_marginEnd="8dp"
-        android:layout_marginRight="8dp"
-        android:text="@string/setup_text_welcome"
-        android:textAppearance="@style/TextAppearance.AppCompat.Large"
-        android:textSize="32sp"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toBottomOf="@+id/cvIcon" />
-
-    <TextView
-        android:id="@+id/textViewLets"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_marginStart="8dp"
-        android:layout_marginLeft="8dp"
-        android:layout_marginTop="16dp"
-        android:layout_marginEnd="8dp"
-        android:layout_marginRight="8dp"
-        android:text="@string/setup_text_lets_get_you_set_up"
-        android:textAppearance="@style/TextAppearance.AppCompat.Large"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toBottomOf="@+id/tvWelcome" />
-
-    <TextView
-        android:id="@+id/opt1Text"
-        android:layout_width="0dp"
-        android:layout_height="wrap_content"
-        android:layout_marginStart="8dp"
-        android:layout_marginLeft="8dp"
-        android:layout_marginEnd="32dp"
-        android:layout_marginRight="32dp"
-        android:text="@string/setup_text_choose_apps"
-        android:textAppearance="@style/TextAppearance.AppCompat.Medium"
-        app:layout_constraintEnd_toStartOf="@+id/ivTick1"
-        app:layout_constraintStart_toEndOf="@+id/opt1Number"
-        app:layout_constraintTop_toTopOf="@+id/opt1Number" />
-
-    <ImageView
-        android:id="@+id/ivTick1"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_marginTop="16dp"
-        android:layout_marginEnd="16dp"
-        android:layout_marginRight="16dp"
-        android:contentDescription="@string/icon_check"
-        android:visibility="invisible"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintTop_toTopOf="@+id/opt1Text"
-        app:srcCompat="@drawable/ic_check" />
-
-    <TextView
-        android:id="@+id/opt2Text"
-        android:layout_width="0dp"
-        android:layout_height="wrap_content"
-        android:layout_marginStart="8dp"
-        android:layout_marginLeft="8dp"
-        android:layout_marginEnd="32dp"
-        android:layout_marginRight="32dp"
-        android:text="@string/setup_text_choose_your_preferred_clock"
-        android:textAppearance="@style/TextAppearance.AppCompat.Medium"
-        app:layout_constraintEnd_toStartOf="@+id/ivTick2"
-        app:layout_constraintStart_toEndOf="@+id/opt2Number"
-        app:layout_constraintTop_toTopOf="@+id/opt2Number" />
-
-    <ImageView
-        android:id="@+id/ivTick2"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_marginEnd="16dp"
-        android:layout_marginRight="16dp"
-        android:contentDescription="@string/icon_check"
-        android:visibility="invisible"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintTop_toTopOf="@+id/opt2Text"
-        app:srcCompat="@drawable/ic_check" />
-
-    <TextView
-        android:id="@+id/opt1Number"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_marginStart="8dp"
-        android:layout_marginLeft="8dp"
-        android:layout_marginTop="32dp"
-        android:text="@string/setup_text_1"
-        android:textAppearance="@style/TextAppearance.AppCompat.Medium"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toBottomOf="@+id/textViewLets" />
-
-    <TextView
-        android:id="@+id/opt2Number"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_marginStart="8dp"
-        android:layout_marginLeft="8dp"
-        android:layout_marginTop="32dp"
-        android:text="@string/setup_text_2"
-        android:textAppearance="@style/TextAppearance.AppCompat.Medium"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toBottomOf="@+id/opt1Text" />
-
-    <ProgressBar
-        android:id="@+id/progressBar"
-        style="?android:attr/progressBarStyle"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_marginStart="8dp"
-        android:layout_marginLeft="8dp"
-        android:layout_marginTop="8dp"
-        android:layout_marginEnd="8dp"
-        android:layout_marginRight="8dp"
-        android:layout_marginBottom="8dp"
-        app:layout_constraintBottom_toBottomOf="parent"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toTopOf="parent" />
-</androidx.constraintlayout.widget.ConstraintLayout>
+</androidx.viewpager.widget.ViewPager>

+ 95 - 0
app/src/main/res/layout/splash_fragment.xml

@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:id="@+id/splash_fragment"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    tools:context=".ui.main.setup.SplashFragment">
+
+    <!-- TODO: Update blank fragment layout -->
+
+    <androidx.cardview.widget.CardView
+        android:id="@+id/cvIcon"
+        android:layout_width="100dp"
+        android:layout_height="100dp"
+        android:layout_marginStart="32dp"
+        android:layout_marginTop="64dp"
+        android:layout_marginEnd="32dp"
+        app:cardBackgroundColor="@android:color/black"
+        app:cardCornerRadius="50dp"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent">
+
+        <androidx.constraintlayout.widget.ConstraintLayout
+            android:layout_width="match_parent"
+            android:layout_height="match_parent">
+
+            <ImageView
+                android:id="@+id/imageView3"
+                android:layout_width="85dp"
+                android:layout_height="50dp"
+                android:contentDescription="@string/app_name"
+                android:scaleType="centerCrop"
+                android:src="@mipmap/ic_launcher"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toTopOf="parent" />
+        </androidx.constraintlayout.widget.ConstraintLayout>
+    </androidx.cardview.widget.CardView>
+
+    <ProgressBar
+        android:id="@+id/progressBar2"
+        style="?android:attr/progressBarStyle"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="8dp"
+        android:layout_marginTop="8dp"
+        android:layout_marginEnd="8dp"
+        android:layout_marginBottom="8dp"
+        android:visibility="gone"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <TextView
+        android:id="@+id/textView11"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="8dp"
+        android:layout_marginTop="64dp"
+        android:layout_marginEnd="8dp"
+        android:text="@string/setup_text_welcome"
+        android:textSize="36sp"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/cvIcon" />
+
+    <TextView
+        android:id="@+id/textView13"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="32dp"
+        android:layout_marginTop="8dp"
+        android:layout_marginEnd="32dp"
+        android:gravity="center"
+        android:text="@string/setup_text_lets_get_you_set_up"
+        android:textSize="18sp"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/textView11" />
+
+    <Button
+        android:id="@+id/setup_splash_button_start"
+        style="@style/Widget.AppCompat.Button.Borderless"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginEnd="16dp"
+        android:layout_marginBottom="16dp"
+        android:text="@string/setup_button_start"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent" />
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 180 - 0
app/src/main/res/layout/theme_setup_fragment.xml

@@ -0,0 +1,180 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:id="@+id/theme_setup_fragment"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    tools:context=".ui.main.setup.ThemeSetupFragment">
+
+    <!-- TODO: Update blank fragment layout -->
+    <TextView
+        android:id="@+id/textView18"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="32dp"
+        android:text="@string/setup_choose_theme"
+        android:textAppearance="@style/TextAppearance.AppCompat.Headline"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <com.google.android.material.floatingactionbutton.FloatingActionButton
+        android:id="@+id/setup_fab_default"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="8dp"
+        android:layout_marginTop="32dp"
+        android:clickable="true"
+        android:src="@drawable/ic_text_fields"
+        app:backgroundTint="@color/colorWhite"
+        app:fabSize="normal"
+        app:layout_constraintEnd_toStartOf="@+id/setup_fab_dark"
+        app:layout_constraintHorizontal_bias="0.5"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/textView18"
+        android:focusable="true" />
+
+    <com.google.android.material.floatingactionbutton.FloatingActionButton
+        android:id="@+id/setup_fab_dark"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:clickable="true"
+        android:src="@drawable/ic_text_fields"
+        android:tint="@color/inverseTextColor"
+        app:backgroundTint="@color/primaryDarkColor"
+        app:fabSize="normal"
+        app:layout_constraintEnd_toStartOf="@+id/setup_fab_jupiter"
+        app:layout_constraintHorizontal_bias="0.5"
+        app:layout_constraintStart_toEndOf="@+id/setup_fab_default"
+        app:layout_constraintTop_toTopOf="@+id/setup_fab_default"
+        android:focusable="true" />
+
+    <com.google.android.material.floatingactionbutton.FloatingActionButton
+        android:id="@+id/setup_fab_jupiter"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginEnd="8dp"
+        android:clickable="true"
+        android:src="@drawable/ic_text_fields"
+        android:tint="@color/inverseTextColor"
+        app:backgroundTint="@color/colorBlueGrey"
+        app:fabSize="normal"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintHorizontal_bias="0.5"
+        app:layout_constraintStart_toEndOf="@+id/setup_fab_dark"
+        app:layout_constraintTop_toTopOf="@+id/setup_fab_dark"
+        android:focusable="true" />
+
+    <com.google.android.material.floatingactionbutton.FloatingActionButton
+        android:id="@+id/setup_fab_teal"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="32dp"
+        android:clickable="true"
+        android:src="@drawable/ic_text_fields"
+        app:backgroundTint="@color/colorTeal"
+        app:fabSize="normal"
+        app:layout_constraintEnd_toStartOf="@+id/setup_fab_candy"
+        app:layout_constraintHorizontal_bias="0.5"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/textView20"
+        android:focusable="true" />
+
+    <com.google.android.material.floatingactionbutton.FloatingActionButton
+        android:id="@+id/setup_fab_candy"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:clickable="true"
+        android:src="@drawable/ic_text_fields"
+        android:tint="@color/inverseTextColor"
+        app:backgroundTint="@color/colorCandy"
+        app:fabSize="normal"
+        app:layout_constraintEnd_toStartOf="@+id/setup_fab_pastel"
+        app:layout_constraintHorizontal_bias="0.5"
+        app:layout_constraintStart_toEndOf="@+id/setup_fab_teal"
+        app:layout_constraintTop_toTopOf="@+id/setup_fab_teal"
+        android:focusable="true" />
+
+    <com.google.android.material.floatingactionbutton.FloatingActionButton
+        android:id="@+id/setup_fab_pastel"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:clickable="true"
+        android:src="@drawable/ic_text_fields"
+        app:backgroundTint="@color/colorPink"
+        app:fabSize="normal"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintHorizontal_bias="0.5"
+        app:layout_constraintStart_toEndOf="@+id/setup_fab_candy"
+        app:layout_constraintTop_toTopOf="@+id/setup_fab_candy"
+        android:focusable="true" />
+
+    <TextView
+        android:id="@+id/textView20"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="16dp"
+        android:text="@string/setup_text_default"
+        app:layout_constraintEnd_toEndOf="@+id/setup_fab_default"
+        app:layout_constraintStart_toStartOf="@+id/setup_fab_default"
+        app:layout_constraintTop_toBottomOf="@+id/setup_fab_default" />
+
+    <TextView
+        android:id="@+id/textView21"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="@string/setup_text_dark"
+        app:layout_constraintEnd_toEndOf="@+id/setup_fab_dark"
+        app:layout_constraintStart_toStartOf="@+id/setup_fab_dark"
+        app:layout_constraintTop_toTopOf="@+id/textView20" />
+
+    <TextView
+        android:id="@+id/textView22"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="@string/setup_text_jupiter"
+        app:layout_constraintEnd_toEndOf="@+id/setup_fab_jupiter"
+        app:layout_constraintStart_toStartOf="@+id/setup_fab_jupiter"
+        app:layout_constraintTop_toTopOf="@+id/textView21" />
+
+    <TextView
+        android:id="@+id/textView23"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="16dp"
+        android:text="@string/setup_text_teal"
+        app:layout_constraintEnd_toEndOf="@+id/setup_fab_teal"
+        app:layout_constraintStart_toStartOf="@+id/setup_fab_teal"
+        app:layout_constraintTop_toBottomOf="@+id/setup_fab_teal" />
+
+    <TextView
+        android:id="@+id/textView24"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="@string/setup_text_candy"
+        app:layout_constraintEnd_toEndOf="@+id/setup_fab_candy"
+        app:layout_constraintStart_toStartOf="@+id/setup_fab_candy"
+        app:layout_constraintTop_toTopOf="@+id/textView23" />
+
+    <TextView
+        android:id="@+id/textView25"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="@string/setup_text_pastel"
+        app:layout_constraintEnd_toEndOf="@+id/setup_fab_pastel"
+        app:layout_constraintStart_toStartOf="@+id/setup_fab_pastel"
+        app:layout_constraintTop_toTopOf="@+id/textView24" />
+
+    <Button
+        android:id="@+id/theme_setup_button"
+        style="@style/Widget.AppCompat.Button.Borderless"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginEnd="16dp"
+        android:layout_marginBottom="16dp"
+        android:text="@string/setup_button_finish"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent" />
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 5 - 5
app/src/main/res/values/colors.xml

@@ -2,22 +2,22 @@
 <resources>
 <resources>
     <color name="colorAccent">#37474F</color>
     <color name="colorAccent">#37474F</color>
 
 
-    <color name="colorWhite">#FFFFFF</color>
+    <color name="colorWhite">#ffffff</color>
     <color name="colorWhiteDark">#BDBDBD</color>
     <color name="colorWhiteDark">#BDBDBD</color>
 
 
     <color name="primaryColor">#212121</color>
     <color name="primaryColor">#212121</color>
     <color name="primaryDarkColor">#000000</color>
     <color name="primaryDarkColor">#000000</color>
 
 
-    <color name="colorBlueGrey">#37474F</color>
+    <color name="colorBlueGrey">#37474f</color>
     <color name="colorBlueGreyDark">#263238</color>
     <color name="colorBlueGreyDark">#263238</color>
 
 
-    <color name="colorPink">#FCE4EC</color>
+    <color name="colorPink">#fce4ec</color>
     <color name="colorPinkDark">#F8BBD0</color>
     <color name="colorPinkDark">#F8BBD0</color>
 
 
-    <color name="colorTeal">#E0F2F1</color>
+    <color name="colorTeal">#e0f2f1</color>
     <color name="colorTealDark">#B2DFDB</color>
     <color name="colorTealDark">#B2DFDB</color>
 
 
-    <color name="inverseTextColor">#E0E0E0</color>
+    <color name="inverseTextColor">#e0e0e0</color>
     <color name="inverseAccentColor">#607d8b</color>
     <color name="inverseAccentColor">#607d8b</color>
 
 
     <color name="colorCandy">#f06292</color>
     <color name="colorCandy">#f06292</color>

+ 26 - 1
app/src/main/res/values/strings.xml

@@ -50,6 +50,7 @@
     <string name="settings_button_change_theme">Change</string>
     <string name="settings_button_change_theme">Change</string>
     <string name="about_title">Slim launcher</string>
     <string name="about_title">Slim launcher</string>
     <string name="about_text">
     <string name="about_text">
+        "Slim v2.0.3 \u00a9 2018\n"
         Created by : Beautus S Gumede\n
         Created by : Beautus S Gumede\n
         Source : <a href="https://github.com/sduduzog/slim-launcher">https://github.com/sduduzog/slim-launcher</a>\n\n
         Source : <a href="https://github.com/sduduzog/slim-launcher">https://github.com/sduduzog/slim-launcher</a>\n\n
         Slim is an open source application launcher created to be a minimal and simple launcher to
         Slim is an open source application launcher created to be a minimal and simple launcher to
@@ -84,7 +85,9 @@
     <string name="main_photo_camera_icon">photo camera icon</string>
     <string name="main_photo_camera_icon">photo camera icon</string>
     <string name="setup_button_start">start</string>
     <string name="setup_button_start">start</string>
     <string name="setup_text_welcome">Welcome!</string>
     <string name="setup_text_welcome">Welcome!</string>
-    <string name="setup_text_lets_get_you_set_up">Lets get you set up!</string>
+    <string name="setup_text_lets_get_you_set_up">
+    "Lets get you set up!\n Just a few tweaks and your new home screen will be ready for you."
+    </string>
     <string name="setup_text_choose_apps">
     <string name="setup_text_choose_apps">
         Choose apps that will appear on your home screen. You can change them later in \'Preferences\'
         Choose apps that will appear on your home screen. You can change them later in \'Preferences\'
     </string>
     </string>
@@ -105,4 +108,26 @@
     <string name="dialer_chevron">deleter</string>
     <string name="dialer_chevron">deleter</string>
     <string name="settings_itrem_icon_gradder">Dragger</string>
     <string name="settings_itrem_icon_gradder">Dragger</string>
 
 
+    <string name="setup_choose_theme">Choose Theme</string>
+    <string name="setup_text_default">Default</string>
+    <string name="setup_text_dark">Dark</string>
+    <string name="setup_text_jupiter">Jupiter</string>
+    <string name="setup_text_teal">Teal</string>
+    <string name="setup_text_candy">Candy</string>
+    <string name="setup_text_pastel">Pastel</string>
+    <string name="setup_we_re_almost_done">We\'re almost done!</string>
+    <string name="setup_expand_note">1. To open Slim options, click the arrow or swipe upwards from it.</string>
+    <string name="setup_note_camera">3. Press the camera icon to launch the default camera app</string>
+    <string name="setup_note_dialer">2. Press the dialer icon to open the default dialer</string>
+    <string name="screenshot_nav">Nav screenshot</string>
+    <string name="setup_dialer_note2">2. Press the dialer icon to open the built-in dialer. Press and hold, open the default</string>
+    <string name="setup_your_home_screen">Your home screen</string>
+    <string name="setup_screen_description">
+        "This is what your home screen will look like.\n\n"
+        "You should pick five of the apps you use the most.\n\n"
+        "You can later change them in Preferences."
+    </string>
+    <string name="setup_choose_apps">Choose apps</string>
+    <string name="setup_home_screenshot">Screenshot</string>
+
 </resources>
 </resources>