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

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")
     fun deleteAll()
 
+    @Query("DELETE FROM home_apps")
+    fun clearHomeApps()
+
     @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)
     }
 
+    fun clearHomeApps(){
+        ClearHomeAppsAsyncTask(appDao).execute()
+    }
+
     fun updateApps(list: List<HomeApp>) {
         for (app in list) {
             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>() {
 
         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
         }
     }
@@ -101,6 +113,7 @@ class DataRepository(application: Application) {
             val launchables = pm.queryIntentActivities(main, 0)
             Collections.sort(launchables,
                     ResolveInfo.DisplayNameComparator(pm))
+            mAsyncTaskDao.deleteAll() // Need to find a less expensive way of doing this
             for (i in launchables.indices) {
                 val item = launchables[i]
                 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)
     }
 
+    fun clearHomeApps(){
+        _repository.clearHomeApps()
+    }
+
     fun addToHomeScreen(apps: List<App>) {
         for (i in apps.indices){
             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
 
 
-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.util.Log
 import android.view.LayoutInflater
 import android.view.View
 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.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.data.App
-import com.sduduzog.slimlauncher.data.HomeApp
-import com.sduduzog.slimlauncher.ui.main.MainViewModel
 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?,
                               savedInstanceState: Bundle?): View? {
         // Inflate the layout for this fragment
@@ -39,202 +24,79 @@ class SetupFragment : Fragment(), DialogInteractionListener {
 
     override fun onActivityCreated(savedInstanceState: Bundle?) {
         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_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>
     <color name="colorAccent">#37474F</color>
 
-    <color name="colorWhite">#FFFFFF</color>
+    <color name="colorWhite">#ffffff</color>
     <color name="colorWhiteDark">#BDBDBD</color>
 
     <color name="primaryColor">#212121</color>
     <color name="primaryDarkColor">#000000</color>
 
-    <color name="colorBlueGrey">#37474F</color>
+    <color name="colorBlueGrey">#37474f</color>
     <color name="colorBlueGreyDark">#263238</color>
 
-    <color name="colorPink">#FCE4EC</color>
+    <color name="colorPink">#fce4ec</color>
     <color name="colorPinkDark">#F8BBD0</color>
 
-    <color name="colorTeal">#E0F2F1</color>
+    <color name="colorTeal">#e0f2f1</color>
     <color name="colorTealDark">#B2DFDB</color>
 
-    <color name="inverseTextColor">#E0E0E0</color>
+    <color name="inverseTextColor">#e0e0e0</color>
     <color name="inverseAccentColor">#607d8b</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="about_title">Slim launcher</string>
     <string name="about_text">
+        "Slim v2.0.3 \u00a9 2018\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
         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="setup_button_start">start</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">
         Choose apps that will appear on your home screen. You can change them later in \'Preferences\'
     </string>
@@ -105,4 +108,26 @@
     <string name="dialer_chevron">deleter</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>