Преглед на файлове

chore: Didn't break anything yet. More functionality added

beautusg преди 7 години
родител
ревизия
53c64cf99d
променени са 37 файла, в които са добавени 733 реда и са изтрити 159 реда
  1. 44 0
      app/src/main/java/com/sduduzog/slimlauncher/adapters/AddAppAdapter.kt
  2. 89 0
      app/src/main/java/com/sduduzog/slimlauncher/adapters/CustomAppsAdapter.kt
  3. 4 1
      app/src/main/java/com/sduduzog/slimlauncher/data/AppDao.kt
  4. 40 0
      app/src/main/java/com/sduduzog/slimlauncher/data/AppRepository.kt
  5. 1 1
      app/src/main/java/com/sduduzog/slimlauncher/data/DataRepository.kt
  6. 7 1
      app/src/main/java/com/sduduzog/slimlauncher/data/HomeApp.kt
  7. 32 0
      app/src/main/java/com/sduduzog/slimlauncher/data/MainViewModel.kt
  8. 4 3
      app/src/main/java/com/sduduzog/slimlauncher/ui/main/HomeAppsAdapter.kt
  9. 1 2
      app/src/main/java/com/sduduzog/slimlauncher/ui/main/notes/NotesListAdapter.kt
  10. 1 2
      app/src/main/java/com/sduduzog/slimlauncher/ui/main/notes/NotesListFragment.kt
  11. 1 3
      app/src/main/java/com/sduduzog/slimlauncher/ui/main/settings/SettingsListAdapter.kt
  12. 1 2
      app/src/main/java/com/sduduzog/slimlauncher/ui/main/setup/SplashFragment.kt
  13. 1 2
      app/src/main/java/com/sduduzog/slimlauncher/ui/main/setup/ThemeSetupFragment.kt
  14. 55 0
      app/src/main/java/com/sduduzog/slimlauncher/ui/options/AddAppFragment.kt
  15. 97 0
      app/src/main/java/com/sduduzog/slimlauncher/ui/options/CustomiseAppsFragment.kt
  16. 7 1
      app/src/main/java/com/sduduzog/slimlauncher/ui/options/OptionsFragment.kt
  17. 31 0
      app/src/main/java/com/sduduzog/slimlauncher/utils/LoadInstalledApps.kt
  18. 7 0
      app/src/main/java/com/sduduzog/slimlauncher/utils/OnAppClickedListener.kt
  19. 7 0
      app/src/main/java/com/sduduzog/slimlauncher/utils/OnAppsUpdatedListener.kt
  20. 7 0
      app/src/main/java/com/sduduzog/slimlauncher/utils/OnItemActionListener.kt
  21. 0 9
      app/src/main/res/drawable-v21/ic_call.xml
  22. 0 9
      app/src/main/res/drawable-v21/ic_drag_handle.xml
  23. 0 9
      app/src/main/res/drawable-v21/ic_expand.xml
  24. 0 12
      app/src/main/res/drawable-v21/ic_photo_camera.xml
  25. 9 0
      app/src/main/res/drawable/ic_more_vert.xml
  26. 58 0
      app/src/main/res/layout/add_app_fragment.xml
  27. 10 0
      app/src/main/res/layout/add_app_fragment_list_item.xml
  28. 52 0
      app/src/main/res/layout/customise_apps_fragment.xml
  29. 46 0
      app/src/main/res/layout/customise_apps_fragment_list_item.xml
  30. 10 1
      app/src/main/res/layout/main_fragment2.xml
  31. 5 4
      app/src/main/res/layout/main_fragment_list_item.xml
  32. 25 8
      app/src/main/res/layout/main_motion_end.xml
  33. 13 3
      app/src/main/res/layout/main_motion_start.xml
  34. 36 36
      app/src/main/res/layout/options_fragment.xml
  35. 10 0
      app/src/main/res/menu/customise_apps_popup_menu.xml
  36. 17 50
      app/src/main/res/navigation/nav_graph.xml
  37. 5 0
      app/src/main/res/values/strings.xml

+ 44 - 0
app/src/main/java/com/sduduzog/slimlauncher/adapters/AddAppAdapter.kt

@@ -0,0 +1,44 @@
+package com.sduduzog.slimlauncher.adapters
+
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.sduduzog.slimlauncher.R
+import com.sduduzog.slimlauncher.data.App
+import com.sduduzog.slimlauncher.utils.OnAppClickedListener
+
+class AddAppAdapter(private val listener: OnAppClickedListener) : RecyclerView.Adapter<AddAppAdapter.ViewHolder>() {
+
+    private var apps: List<App> = listOf()
+
+    override fun getItemCount(): Int = apps.size
+
+    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
+        val item = apps[position]
+        holder.appName.text = item.appName
+        holder.itemView.setOnClickListener {
+            listener.onAppClicked(item)
+        }
+    }
+
+    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
+        val view = LayoutInflater.from(parent.context).inflate(R.layout.add_app_fragment_list_item, parent, false)
+        return ViewHolder(view)
+    }
+
+    fun setItems(apps: List<App>){
+        this.apps = apps
+        notifyDataSetChanged()
+    }
+
+    inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+
+        val appName: TextView = itemView.findViewById(R.id.aa_list_item_app_name)
+
+        override fun toString(): String {
+            return super.toString() + " '${appName.text}'"
+        }
+    }
+}

+ 89 - 0
app/src/main/java/com/sduduzog/slimlauncher/adapters/CustomAppsAdapter.kt

@@ -0,0 +1,89 @@
+package com.sduduzog.slimlauncher.adapters
+
+import android.annotation.SuppressLint
+import android.view.LayoutInflater
+import android.view.MotionEvent
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.recyclerview.widget.ItemTouchHelper
+import androidx.recyclerview.widget.RecyclerView
+import com.sduduzog.slimlauncher.R
+import com.sduduzog.slimlauncher.data.HomeApp
+import com.sduduzog.slimlauncher.utils.OnAppsUpdatedListener
+import com.sduduzog.slimlauncher.utils.OnItemActionListener
+
+class CustomAppsAdapter(private val listener: OnAppsUpdatedListener) : RecyclerView.Adapter<CustomAppsAdapter.ViewHolder>(), OnItemActionListener {
+
+    private var apps: MutableList<HomeApp> = mutableListOf()
+    private lateinit var touchHelper: ItemTouchHelper
+
+    override fun getItemCount(): Int = apps.size
+
+    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
+        val view = LayoutInflater.from(parent.context).inflate(R.layout.customise_apps_fragment_list_item, parent, false)
+        return ViewHolder(view)
+    }
+
+    @SuppressLint("ClickableViewAccessibility")
+    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
+        val item = apps[position]
+        holder.appName.text = item.appName
+        holder.dragHandle.setOnTouchListener { _, motionEvent ->
+            if (motionEvent.actionMasked == MotionEvent.ACTION_DOWN) {
+                touchHelper.startDrag(holder)
+            }
+            false
+        }
+    }
+
+    fun setItems(apps: List<HomeApp>) {
+        this.apps = sanitiseIndexes(apps) as MutableList<HomeApp>
+        notifyDataSetChanged()
+    }
+
+    private fun sanitiseIndexes(apps: List<HomeApp>): List<HomeApp> {
+        for (i in apps.indices) {
+            apps[i].sortingIndex = i
+        }
+        return apps
+    }
+
+    fun setItemTouchHelper(touchHelper: ItemTouchHelper) {
+        this.touchHelper = touchHelper
+    }
+
+    override fun onViewMoved(oldPosition: Int, newPosition: Int): Boolean {
+        if ((oldPosition < apps.size) and (newPosition < apps.size)) {
+            val app1 = apps[oldPosition]
+            val app2 = apps[newPosition]
+            app1.sortingIndex = newPosition
+            app2.sortingIndex = oldPosition
+
+            apps[oldPosition] = app2
+            apps[newPosition] = app1
+            notifyItemMoved(oldPosition, newPosition)
+            return true
+        }
+        return false
+    }
+
+
+    override fun onViewIdle() {
+        listener.onAppsUpdated(apps)
+    }
+
+    override fun onViewSwiped(position: Int) {
+        // Do nothing. We are under attack!
+    }
+
+    inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+        val dragHandle: ImageView = itemView.findViewById(R.id.ca_list_item_drag_handle)
+        val appName: TextView = itemView.findViewById(R.id.ca_list_item_app_name)
+
+        override fun toString(): String {
+            return super.toString() + " '${appName.text}'"
+        }
+    }
+}

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

@@ -16,8 +16,11 @@ interface AppDao {
     @Insert(onConflict = OnConflictStrategy.IGNORE)
     fun insert(app: App)
 
+    @Update(onConflict = OnConflictStrategy.REPLACE)
+    fun update(vararg apps: HomeApp)
+
     @Insert(onConflict = OnConflictStrategy.REPLACE)
-    fun addHomeApp(app: HomeApp)
+    fun add(app: HomeApp)
 
     @Update(onConflict = OnConflictStrategy.REPLACE)
     fun updateHomeApp(app: HomeApp)

+ 40 - 0
app/src/main/java/com/sduduzog/slimlauncher/data/AppRepository.kt

@@ -0,0 +1,40 @@
+package com.sduduzog.slimlauncher.data
+
+import android.app.Application
+import android.os.AsyncTask
+import androidx.lifecycle.LiveData
+
+class AppRepository(application: Application) {
+    private val db: DataRoomDatabase = DataRoomDatabase.getDatabase(application)!!
+    private val appDao: AppDao = db.appDao()
+
+    private val _apps = appDao.homeApps
+
+    val apps: LiveData<List<HomeApp>>
+        get() = _apps
+
+    fun add(app: HomeApp){
+        AddAppAsyncTask(appDao).execute(app)
+    }
+
+    fun update(vararg list: HomeApp) {
+        UpdateAppAsyncTask(appDao).execute(*list)
+    }
+
+
+    private class AddAppAsyncTask(private val mAsyncTaskDao: AppDao) : AsyncTask<HomeApp, Void, Void>() {
+
+        override fun doInBackground(vararg params: HomeApp): Void? {
+            mAsyncTaskDao.add(params[0])
+            return null
+        }
+    }
+
+    private class UpdateAppAsyncTask(private val mAsyncTaskDao: AppDao) : AsyncTask<HomeApp, Void, Void>() {
+
+        override fun doInBackground(vararg params: HomeApp): Void? {
+            mAsyncTaskDao.update(*params)
+            return null
+        }
+    }
+}

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

@@ -69,7 +69,7 @@ class DataRepository(application: Application) {
     private class InsertHomeAppAsyncTask internal constructor(private val mAsyncTaskDao: AppDao) : AsyncTask<HomeApp, Void, Void>() {
 
         override fun doInBackground(vararg params: HomeApp): Void? {
-            mAsyncTaskDao.addHomeApp(params[0])
+            mAsyncTaskDao.add(params[0])
             return null
         }
     }

+ 7 - 1
app/src/main/java/com/sduduzog/slimlauncher/data/HomeApp.kt

@@ -15,4 +15,10 @@ data class HomeApp(
         var activityName: String,
         @field:ColumnInfo(name = "sorting_index")
         var sortingIndex: Int
-)
+) {
+    companion object {
+        fun from(app: App, sortingIndex: Int = 0): HomeApp {
+            return HomeApp(appName = app.appName, activityName = app.activityName, packageName = app.packageName, sortingIndex = sortingIndex)
+        }
+    }
+}

+ 32 - 0
app/src/main/java/com/sduduzog/slimlauncher/data/MainViewModel.kt

@@ -0,0 +1,32 @@
+package com.sduduzog.slimlauncher.data
+
+import android.app.Application
+import androidx.lifecycle.AndroidViewModel
+import androidx.lifecycle.LiveData
+import androidx.lifecycle.MutableLiveData
+
+class MainViewModel(application: Application) : AndroidViewModel(application) {
+
+    private val _appRepository = AppRepository(application)
+
+    private var _apps: LiveData<List<HomeApp>>
+
+    init {
+        _apps = _appRepository.apps
+    }
+
+    val apps: LiveData<List<HomeApp>>
+        get() = _apps
+
+    val installedApps = MutableLiveData<List<App>>()
+
+    fun add(app: App){
+        val index = _apps.value!!.size
+        _appRepository.add(HomeApp.from(app, index))
+    }
+
+    fun update(vararg args: HomeApp){
+
+        _appRepository.update(*args)
+    }
+}

+ 4 - 3
app/src/main/java/com/sduduzog/slimlauncher/ui/main/HomeAppsAdapter.kt

@@ -14,16 +14,17 @@ import androidx.lifecycle.ViewModelProviders
 import androidx.recyclerview.widget.RecyclerView
 import com.sduduzog.slimlauncher.R
 import com.sduduzog.slimlauncher.data.HomeApp
+import com.sduduzog.slimlauncher.data.MainViewModel
 
 
 class HomeAppsAdapter(private var fragment: MainFragment)
     : RecyclerView.Adapter<HomeAppsAdapter.ViewHolder>() {
 
     private var apps: List<HomeApp> = listOf()
-    private var viewModel = ViewModelProviders.of(fragment).get(MainViewModel::class.java)
+    private var viewModel = ViewModelProviders.of(fragment.activity!!).get(MainViewModel::class.java)
 
     init {
-        viewModel.homeApps.observe(fragment, Observer {
+        viewModel.apps.observe(fragment, Observer {
             if (it != null) {
                 apps = it
                 notifyDataSetChanged()
@@ -56,7 +57,7 @@ class HomeAppsAdapter(private var fragment: MainFragment)
                 fragment.startActivity(intent, opts.toBundle())
             } catch (e: ActivityNotFoundException) {
                 Toast.makeText(fragment.context, "${item.appName} seems to be uninstalled, removing from list", Toast.LENGTH_LONG).show()
-                viewModel.deleteApp(item)
+                //viewModel.deleteApp(item)
             }
         }
     }

+ 1 - 2
app/src/main/java/com/sduduzog/slimlauncher/ui/main/notes/NotesListAdapter.kt

@@ -8,7 +8,6 @@ import android.view.ViewGroup
 import android.widget.TextView
 import androidx.lifecycle.Observer
 import androidx.lifecycle.ViewModelProviders
-import androidx.navigation.Navigation
 import androidx.recyclerview.widget.RecyclerView
 import com.google.android.material.snackbar.Snackbar
 import com.sduduzog.slimlauncher.R
@@ -51,7 +50,7 @@ class NotesListAdapter(private val fragment: NotesListFragment) : RecyclerView.A
         holder.edited.text = fragment.getString(R.string.notes_date_placeholder, fWatchDate.format(note.edited))
         val bundle = Bundle()
         bundle.putSerializable("note", note)
-        holder.itemView.setOnClickListener(Navigation.createNavigateOnClickListener(R.id.action_openNoteFragment, bundle))
+//        holder.itemView.setOnClickListener(Navigation.createNavigateOnClickListener(R.id.action_openNoteFragment, bundle))
     }
 
     override fun getItemCount() = notes.size

+ 1 - 2
app/src/main/java/com/sduduzog/slimlauncher/ui/main/notes/NotesListFragment.kt

@@ -7,7 +7,6 @@ import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
 import androidx.fragment.app.Fragment
-import androidx.navigation.Navigation
 import androidx.recyclerview.widget.ItemTouchHelper
 import androidx.recyclerview.widget.RecyclerView
 import com.sduduzog.slimlauncher.R
@@ -25,7 +24,7 @@ class NotesListFragment : Fragment() {
 
     override fun onActivityCreated(savedInstanceState: Bundle?) {
         super.onActivityCreated(savedInstanceState)
-        fab_add_note.setOnClickListener(Navigation.createNavigateOnClickListener(R.id.action_openNoteFragment))
+//        fab_add_note.setOnClickListener(Navigation.createNavigateOnClickListener(R.id.action_openNoteFragment))
         fab_add_note.setOnLongClickListener {
             Log.d("NoteListFragment", "Long press")
             true

+ 1 - 3
app/src/main/java/com/sduduzog/slimlauncher/ui/main/settings/SettingsListAdapter.kt

@@ -12,7 +12,6 @@ import android.widget.TextView
 import androidx.fragment.app.Fragment
 import androidx.lifecycle.Observer
 import androidx.lifecycle.ViewModelProviders
-import androidx.navigation.Navigation
 import androidx.recyclerview.widget.ItemTouchHelper
 import androidx.recyclerview.widget.RecyclerView
 import com.google.android.material.snackbar.Snackbar
@@ -76,8 +75,7 @@ class SettingsListAdapter(private val fragment: Fragment) : RecyclerView.Adapter
             holder.itemDragger.visibility = View.GONE
             val bundle = Bundle()
             bundle.putInt("index", position)
-            holder.itemButton.setOnClickListener(
-                    Navigation.createNavigateOnClickListener(R.id.action_openAppsFragment, bundle))
+//            holder.itemButton.setOnClickListener(Navigation.createNavigateOnClickListener(R.id.action_openAppsFragment, bundle))
         }
     }
 

+ 1 - 2
app/src/main/java/com/sduduzog/slimlauncher/ui/main/setup/SplashFragment.kt

@@ -7,7 +7,6 @@ import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
 import androidx.lifecycle.ViewModelProviders
-import androidx.navigation.Navigation
 import com.sduduzog.slimlauncher.R
 import com.sduduzog.slimlauncher.data.App
 import com.sduduzog.slimlauncher.ui.main.MainViewModel
@@ -31,7 +30,7 @@ class SplashFragment : PagerHelperFragment(), ChooseAppsDialog.Companion.OnChoos
         }
         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)
+//            Navigation.findNavController(splash_fragment).navigate(R.id.action_setupFragment_to_mainFragment2)
         }
     }
 

+ 1 - 2
app/src/main/java/com/sduduzog/slimlauncher/ui/main/setup/ThemeSetupFragment.kt

@@ -8,7 +8,6 @@ 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.theme_setup_fragment.*
 
@@ -36,7 +35,7 @@ class ThemeSetupFragment : PagerHelperFragment(), View.OnClickListener {
             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)
+//            Navigation.findNavController(theme_setup_fragment).navigate(R.id.action_setupFragment_to_mainFragment2)
         }
     }
 

+ 55 - 0
app/src/main/java/com/sduduzog/slimlauncher/ui/options/AddAppFragment.kt

@@ -0,0 +1,55 @@
+package com.sduduzog.slimlauncher.ui.options
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.lifecycle.Observer
+import androidx.lifecycle.ViewModelProviders
+import androidx.navigation.Navigation
+import com.sduduzog.slimlauncher.R
+import com.sduduzog.slimlauncher.adapters.AddAppAdapter
+import com.sduduzog.slimlauncher.data.App
+import com.sduduzog.slimlauncher.data.MainViewModel
+import com.sduduzog.slimlauncher.ui.BaseFragment
+import com.sduduzog.slimlauncher.utils.LoadInstalledApps
+import com.sduduzog.slimlauncher.utils.OnAppClickedListener
+import kotlinx.android.synthetic.main.add_app_fragment.*
+
+class AddAppFragment : BaseFragment(), OnAppClickedListener {
+
+    override fun getFragmentView(): View = add_app_fragment as View
+
+    private lateinit var viewModel: MainViewModel
+
+    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
+        return inflater.inflate(R.layout.add_app_fragment, container, false)
+    }
+
+    override fun onActivityCreated(savedInstanceState: Bundle?) {
+        super.onActivityCreated(savedInstanceState)
+        val adapter = AddAppAdapter(this)
+
+        add_app_fragment_list.adapter = adapter
+
+        activity?.let {
+            viewModel = ViewModelProviders.of(it).get(MainViewModel::class.java)
+        } ?: throw Error("How the fuck is this fragment alive while there's no activity?")
+        viewModel.installedApps.observe(this, Observer {
+            it?.let { apps ->
+                adapter.setItems(apps)
+                add_app_fragment_progress_bar.visibility = View.GONE
+            } ?: run {
+                add_app_fragment_progress_bar.visibility = View.VISIBLE
+            }
+        })
+        LoadInstalledApps(viewModel).execute(context!!.packageManager)
+    }
+
+
+    override fun onAppClicked(app: App) {
+        viewModel.add(app)
+        Navigation.findNavController(add_app_fragment).popBackStack()
+    }
+
+}

+ 97 - 0
app/src/main/java/com/sduduzog/slimlauncher/ui/options/CustomiseAppsFragment.kt

@@ -0,0 +1,97 @@
+package com.sduduzog.slimlauncher.ui.options
+
+import android.graphics.Canvas
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.lifecycle.Observer
+import androidx.lifecycle.ViewModelProviders
+import androidx.navigation.Navigation
+import androidx.recyclerview.widget.ItemTouchHelper
+import androidx.recyclerview.widget.RecyclerView
+import com.sduduzog.slimlauncher.R
+import com.sduduzog.slimlauncher.adapters.CustomAppsAdapter
+import com.sduduzog.slimlauncher.data.HomeApp
+import com.sduduzog.slimlauncher.data.MainViewModel
+import com.sduduzog.slimlauncher.ui.BaseFragment
+import com.sduduzog.slimlauncher.utils.OnAppsUpdatedListener
+import com.sduduzog.slimlauncher.utils.OnItemActionListener
+import kotlinx.android.synthetic.main.customise_apps_fragment.*
+
+class CustomiseAppsFragment : BaseFragment(), OnAppsUpdatedListener {
+
+    override fun getFragmentView(): View = customise_apps_fragment as View
+
+    private lateinit var viewModel: MainViewModel
+
+    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
+        return inflater.inflate(R.layout.customise_apps_fragment, container, false)
+    }
+
+    override fun onActivityCreated(savedInstanceState: Bundle?) {
+        super.onActivityCreated(savedInstanceState)
+
+        val adapter = CustomAppsAdapter(this)
+        activity?.let {
+            viewModel = ViewModelProviders.of(it).get(MainViewModel::class.java)
+        } ?: throw Error("Activity null, something here is fucked up")
+
+        viewModel.apps.observe(this, Observer {
+            it?.let { apps ->
+                adapter.setItems(apps)
+            } ?: adapter.setItems(listOf())
+        })
+
+
+        customise_apps_fragment_list.adapter = adapter
+        val listener: OnItemActionListener = adapter
+        val simpleItemTouchCallback = object : ItemTouchHelper.Callback() {
+
+            override fun onChildDraw(c: Canvas, recyclerView: RecyclerView,
+                                     viewHolder: RecyclerView.ViewHolder, dX: Float,
+                                     dY: Float, actionState: Int, isCurrentlyActive: Boolean) {
+                if (isCurrentlyActive) {
+                    viewHolder.itemView.alpha = 0.5f
+                } else {
+                    viewHolder.itemView.alpha = 1f
+                }
+                super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive)
+            }
+
+            override fun clearView(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder) {
+                super.clearView(recyclerView, viewHolder)
+                listener.onViewIdle()
+            }
+
+            override fun getMovementFlags(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder): Int {
+                val dragFlags = ItemTouchHelper.UP or ItemTouchHelper.DOWN
+                val swipeFlags = 0
+                return makeMovementFlags(dragFlags, swipeFlags)
+            }
+
+            override fun onMove(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder,
+                                target: RecyclerView.ViewHolder): Boolean {
+                return listener.onViewMoved(viewHolder.adapterPosition, target.adapterPosition)
+            }
+
+            override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
+                listener.onViewSwiped(viewHolder.adapterPosition)
+            }
+
+            override fun isLongPressDragEnabled() = false
+        }
+
+        val itemTouchHelper = ItemTouchHelper(simpleItemTouchCallback)
+
+        itemTouchHelper.attachToRecyclerView(customise_apps_fragment_list)
+
+        adapter.setItemTouchHelper(itemTouchHelper)
+
+        customise_apps_fragment_add.setOnClickListener(Navigation.createNavigateOnClickListener(R.id.action_customiseAppsFragment_to_addAppFragment))
+    }
+
+    override fun onAppsUpdated(list: List<HomeApp>) {
+        viewModel.update(*list.toTypedArray())
+    }
+}

+ 7 - 1
app/src/main/java/com/sduduzog/slimlauncher/ui/options/OptionsFragment.kt

@@ -4,14 +4,20 @@ 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 com.sduduzog.slimlauncher.ui.BaseFragment
 import kotlinx.android.synthetic.main.options_fragment.*
 
 class OptionsFragment : BaseFragment() {
-    override fun getFragmentView(): View = options_fragment
+    override fun getFragmentView(): View = options_fragment as View
 
     override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
         return inflater.inflate(R.layout.options_fragment, container, false)
     }
+
+    override fun onActivityCreated(savedInstanceState: Bundle?) {
+        super.onActivityCreated(savedInstanceState)
+        options_fragment_customise_apps.setOnClickListener(Navigation.createNavigateOnClickListener(R.id.action_optionsFragment_to_customiseAppsFragment))
+    }
 }

+ 31 - 0
app/src/main/java/com/sduduzog/slimlauncher/utils/LoadInstalledApps.kt

@@ -0,0 +1,31 @@
+package com.sduduzog.slimlauncher.utils
+
+import android.content.Intent
+import android.content.pm.PackageManager
+import android.content.pm.ResolveInfo
+import android.os.AsyncTask
+import com.sduduzog.slimlauncher.data.App
+import com.sduduzog.slimlauncher.data.MainViewModel
+import java.util.*
+
+class LoadInstalledApps(val viewModel: MainViewModel) : AsyncTask<PackageManager, Unit, List<App>>() {
+    override fun doInBackground(vararg params: PackageManager): List<App> {
+        val pm = params[0]
+        val list = mutableListOf<App>()
+        val main = Intent(Intent.ACTION_MAIN, null)
+        main.addCategory(Intent.CATEGORY_LAUNCHER)
+        val activitiesList = pm.queryIntentActivities(main, 0)
+        Collections.sort(activitiesList, ResolveInfo.DisplayNameComparator(pm))
+        for (i in activitiesList.indices) {
+            val item = activitiesList[i]
+            val activity = item.activityInfo
+            val app = App(activitiesList[i].loadLabel(pm).toString(), activity.applicationInfo.packageName, activity.name)
+            list.add(app)
+        }
+        return list
+    }
+
+    override fun onPostExecute(result: List<App>) {
+        viewModel.installedApps.value = result
+    }
+}

+ 7 - 0
app/src/main/java/com/sduduzog/slimlauncher/utils/OnAppClickedListener.kt

@@ -0,0 +1,7 @@
+package com.sduduzog.slimlauncher.utils
+
+import com.sduduzog.slimlauncher.data.App
+
+interface OnAppClickedListener{
+    fun onAppClicked(app: App)
+}

+ 7 - 0
app/src/main/java/com/sduduzog/slimlauncher/utils/OnAppsUpdatedListener.kt

@@ -0,0 +1,7 @@
+package com.sduduzog.slimlauncher.utils
+
+import com.sduduzog.slimlauncher.data.HomeApp
+
+interface OnAppsUpdatedListener {
+    fun onAppsUpdated(list: List<HomeApp>)
+}

+ 7 - 0
app/src/main/java/com/sduduzog/slimlauncher/utils/OnItemActionListener.kt

@@ -0,0 +1,7 @@
+package com.sduduzog.slimlauncher.utils
+
+interface OnItemActionListener {
+    fun onViewMoved(oldPosition: Int, newPosition: Int): Boolean
+    fun onViewSwiped(position: Int)
+    fun onViewIdle()
+}

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

@@ -1,9 +0,0 @@
-<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="?android:colorForeground"
-        android:pathData="M6.62,10.79c1.44,2.83 3.76,5.14 6.59,6.59l2.2,-2.2c0.27,-0.27 0.67,-0.36 1.02,-0.24 1.12,0.37 2.33,0.57 3.57,0.57 0.55,0 1,0.45 1,1V20c0,0.55 -0.45,1 -1,1 -9.39,0 -17,-7.61 -17,-17 0,-0.55 0.45,-1 1,-1h3.5c0.55,0 1,0.45 1,1 0,1.25 0.2,2.45 0.57,3.57 0.11,0.35 0.03,0.74 -0.25,1.02l-2.2,2.2z" />
-</vector>

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

@@ -1,9 +0,0 @@
-<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="?android:colorForeground"
-        android:pathData="M20,9H4v2h16V9zM4,15h16v-2H4v2z" />
-</vector>

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

@@ -1,9 +0,0 @@
-<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="?android:colorForeground"
-        android:pathData="M12,8l-6,6 1.41,1.41L12,10.83l4.59,4.58L18,14z" />
-</vector>

+ 0 - 12
app/src/main/res/drawable-v21/ic_photo_camera.xml

@@ -1,12 +0,0 @@
-<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="?android:colorForeground"
-        android:pathData="M12,12m-3.2,0a3.2,3.2 0,1 1,6.4 0a3.2,3.2 0,1 1,-6.4 0" />
-    <path
-        android:fillColor="?android:colorForeground"
-        android:pathData="M9,2L7.17,4L4,4c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2L22,6c0,-1.1 -0.9,-2 -2,-2h-3.17L15,2L9,2zM12,17c-2.76,0 -5,-2.24 -5,-5s2.24,-5 5,-5 5,2.24 5,5 -2.24,5 -5,5z" />
-</vector>

+ 9 - 0
app/src/main/res/drawable/ic_more_vert.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="?attr/colorAccent"
+        android:pathData="M12,8c1.1,0 2,-0.9 2,-2s-0.9,-2 -2,-2 -2,0.9 -2,2 0.9,2 2,2zM12,10c-1.1,0 -2,0.9 -2,2s0.9,2 2,2 2,-0.9 2,-2 -0.9,-2 -2,-2zM12,16c-1.1,0 -2,0.9 -2,2s0.9,2 2,2 2,-0.9 2,-2 -0.9,-2 -2,-2z"/>
+</vector>

+ 58 - 0
app/src/main/res/layout/add_app_fragment.xml

@@ -0,0 +1,58 @@
+<?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/add_app_fragment"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    tools:context=".ui.options.AddAppFragment">
+
+    <EditText
+        android:id="@+id/add_app_fragment_edit_text"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="8dp"
+        android:layout_marginLeft="8dp"
+        android:layout_marginTop="32dp"
+        android:layout_marginEnd="8dp"
+        android:layout_marginRight="8dp"
+        android:ems="10"
+        android:imeOptions="actionDone"
+        android:inputType="none|textNoSuggestions|textCapWords"
+        android:textSize="@dimen/_18ssp"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent"
+        tools:ignore="Autofill,LabelFor" />
+
+    <androidx.recyclerview.widget.RecyclerView
+        android:id="@+id/add_app_fragment_list"
+        android:layout_width="0dp"
+        android:layout_height="0dp"
+        android:layout_marginStart="8dp"
+        android:layout_marginLeft="8dp"
+        android:layout_marginEnd="8dp"
+        android:layout_marginRight="8dp"
+        app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/add_app_fragment_edit_text"
+        tools:listitem="@layout/add_app_fragment_list_item" />
+
+    <ProgressBar
+        android:id="@+id/add_app_fragment_progress_bar"
+        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"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintVertical_bias="0.25" />
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 10 - 0
app/src/main/res/layout/add_app_fragment_list_item.xml

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/aa_list_item_app_name"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content"
+    android:padding="6dp"
+    android:textAppearance="@style/TextAppearance.AppCompat"
+    android:textSize="@dimen/_18ssp">
+
+</TextView>

+ 52 - 0
app/src/main/res/layout/customise_apps_fragment.xml

@@ -0,0 +1,52 @@
+<?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/customise_apps_fragment"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    tools:context=".ui.options.CustomiseAppsFragment">
+
+    <TextView
+        android:id="@+id/textView6"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="16dp"
+        android:layout_marginLeft="16dp"
+        android:layout_marginTop="32dp"
+        android:text="@string/options_fragment_customise_apps"
+        android:textAppearance="@style/TextAppearance.AppCompat"
+        android:textSize="@dimen/_36ssp"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <androidx.recyclerview.widget.RecyclerView
+        android:id="@+id/customise_apps_fragment_list"
+        android:layout_width="0dp"
+        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"
+        app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/textView6"
+        tools:itemCount="5"
+        tools:listitem="@layout/customise_apps_fragment_list_item" />
+
+    <TextView
+        android:id="@+id/customise_apps_fragment_add"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="8dp"
+        android:layout_marginLeft="8dp"
+        android:layout_marginBottom="8dp"
+        android:padding="@dimen/_12ssp"
+        android:text="@string/customise_apps_fragment_add"
+        android:textAppearance="@style/TextAppearance.AppCompat"
+        android:textSize="18sp"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintStart_toStartOf="parent" />
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 46 - 0
app/src/main/res/layout/customise_apps_fragment_list_item.xml

@@ -0,0 +1,46 @@
+<?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:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:layout_marginTop="6dp"
+    android:layout_marginBottom="6dp">
+
+    <ImageView
+        android:id="@+id/ca_list_item_drag_handle"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="8dp"
+        android:padding="8dp"
+        app:layout_constraintBottom_toBottomOf="@+id/ca_list_item_app_name"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="@+id/ca_list_item_app_name"
+        app:srcCompat="@drawable/ic_drag_handle"
+        tools:ignore="ContentDescription" />
+
+    <TextView
+        android:id="@+id/ca_list_item_app_name"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="8dp"
+        android:layout_marginLeft="8dp"
+        android:textAppearance="@style/TextAppearance.AppCompat"
+        android:textSize="@dimen/_24ssp"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toStartOf="@+id/ca_list_item_more_icon"
+        app:layout_constraintStart_toEndOf="@+id/ca_list_item_drag_handle"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <ImageView
+        android:id="@+id/ca_list_item_more_icon"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="8dp"
+        android:padding="8dp"
+        app:layout_constraintBottom_toBottomOf="@+id/ca_list_item_app_name"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintTop_toTopOf="@+id/ca_list_item_app_name"
+        app:srcCompat="@drawable/ic_more_vert"
+        tools:ignore="ContentDescription" />
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 10 - 1
app/src/main/res/layout/main_fragment2.xml

@@ -21,7 +21,7 @@
         android:id="@+id/main_fragment_time_format"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:layout_marginTop="@dimen/_16sdp"
+        android:layout_marginTop="16dp"
         android:textAppearance="@style/TextAppearance.AppCompat"
         android:textSize="@dimen/_13sdp" />
 
@@ -59,6 +59,15 @@
         android:textAppearance="@style/TextAppearance.AppCompat"
         android:textSize="@dimen/_18ssp" />
 
+    <TextView
+        android:id="@+id/main_fragment_notes"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:padding="8dp"
+        android:text="@string/main_fragment_notes"
+        android:textAppearance="@style/TextAppearance.AppCompat"
+        android:textSize="18sp" />
+
     <ImageView
         android:id="@+id/main_fragment_call"
         android:layout_width="wrap_content"

+ 5 - 4
app/src/main/res/layout/main_fragment_list_item.xml

@@ -1,11 +1,12 @@
 <?xml version="1.0" encoding="utf-8"?>
 <TextView xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/main_label"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
-    android:id="@+id/main_label"
+    android:layout_marginTop="4dp"
+    android:layout_marginBottom="4dp"
     android:padding="12dp"
-    android:text="WhatsApp"
-    android:textSize="@dimen/_24ssp"
-    android:textAppearance="@style/TextAppearance.AppCompat">
+    android:textAppearance="@style/TextAppearance.AppCompat"
+    android:textSize="@dimen/_24ssp">
 
 </TextView>

+ 25 - 8
app/src/main/res/layout/main_motion_end.xml

@@ -10,6 +10,7 @@
         android:id="@+id/main_fragment_time"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
+        android:alpha="0"
         android:text="@string/main_placeholder_clock"
         android:textSize="@dimen/_40ssp"
         app:layout_constraintBottom_toTopOf="@+id/main_fragment_date"
@@ -22,6 +23,7 @@
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_marginTop="16dp"
+        android:alpha="0"
         android:textSize="@dimen/_13sdp"
         app:layout_constraintStart_toEndOf="@+id/main_fragment_time"
         app:layout_constraintTop_toTopOf="@+id/main_fragment_time" />
@@ -30,6 +32,7 @@
         android:id="@+id/main_fragment_date"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
+        android:alpha="0"
         android:padding="4dp"
         android:text="@string/main_placeholder_date"
         android:textSize="@dimen/_12sdp"
@@ -51,7 +54,7 @@
         app:layout_constraintStart_toStartOf="parent"
         app:layout_constraintTop_toBottomOf="@+id/main_fragment_date"
         app:layout_constraintVertical_chainStyle="packed"
-        tools:itemCount="5"
+        tools:itemCount="4"
         tools:listitem="@layout/main_fragment_list_item" />
 
     <androidx.recyclerview.widget.RecyclerView
@@ -75,21 +78,35 @@
         android:id="@+id/main_fragment_options"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
+        android:layout_marginBottom="8dp"
         android:padding="8dp"
         android:text="@string/main_fragment_options"
         android:textAppearance="@style/TextAppearance.AppCompat"
         android:textSize="18sp"
         app:layout_constraintBottom_toBottomOf="parent"
-        app:layout_constraintStart_toStartOf="@+id/main_fragment_list_exp"
-        app:layout_constraintTop_toBottomOf="@+id/main_fragment_list_exp" />
+        app:layout_constraintStart_toStartOf="@+id/main_fragment_list_exp" />
+
+    <TextView
+        android:id="@+id/main_fragment_notes"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginBottom="8dp"
+        android:padding="8dp"
+        android:text="@string/main_fragment_notes"
+        android:textAppearance="@style/TextAppearance.AppCompat"
+        android:textSize="18sp"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="@+id/main_fragment_list_exp" />
 
     <ImageView
         android:id="@+id/main_fragment_call"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:padding="8dp"
-        app:layout_constraintEnd_toStartOf="parent"
         app:layout_constraintTop_toBottomOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        android:layout_marginStart="8dp"
+        android:layout_marginLeft="8dp"
         app:srcCompat="@drawable/ic_call"
         tools:ignore="ContentDescription" />
 
@@ -97,13 +114,13 @@
         android:id="@+id/main_fragment_camera"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
+        android:padding="8dp"
         android:layout_marginEnd="8dp"
         android:layout_marginRight="8dp"
-        android:layout_marginBottom="8dp"
-        android:padding="8dp"
-        app:layout_constraintStart_toEndOf="parent"
         app:layout_constraintTop_toBottomOf="parent"
         app:srcCompat="@drawable/ic_photo_camera"
-        tools:ignore="ContentDescription" />
+        app:layout_constraintEnd_toEndOf="parent"
+        tools:ignore="ContentDescription"
+        tools:layout_editor_absoluteX="320dp" />
 
 </androidx.constraintlayout.widget.ConstraintLayout>

+ 13 - 3
app/src/main/res/layout/main_motion_start.xml

@@ -47,7 +47,7 @@
         android:layout_height="wrap_content"
         android:layout_marginStart="16dp"
         android:layout_marginLeft="16dp"
-        android:layout_marginTop="8dp"
+        android:layout_marginTop="32dp"
         android:layout_marginEnd="16dp"
         android:layout_marginRight="16dp"
         android:layout_marginBottom="8dp"
@@ -57,7 +57,7 @@
         app:layout_constraintStart_toStartOf="parent"
         app:layout_constraintTop_toTopOf="@+id/main_fragment_time"
         app:layout_constraintVertical_bias="0.494"
-        tools:itemCount="1"
+        tools:itemCount="5"
         tools:listitem="@layout/main_fragment_list_item" />
 
     <androidx.recyclerview.widget.RecyclerView
@@ -88,7 +88,17 @@
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintStart_toStartOf="@+id/main_fragment_list_exp"
         app:layout_constraintTop_toBottomOf="@+id/main_fragment_list_exp" />
-
+<TextView
+        android:id="@+id/main_fragment_notes"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:padding="8dp"
+        android:text="@string/main_fragment_notes"
+        android:textAppearance="@style/TextAppearance.AppCompat"
+        android:textSize="18sp"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="@+id/main_fragment_list_exp"
+        app:layout_constraintTop_toBottomOf="@+id/main_fragment_list_exp" />
     <ImageView
         android:id="@+id/main_fragment_call"
         android:layout_width="wrap_content"

+ 36 - 36
app/src/main/res/layout/options_fragment.xml

@@ -21,79 +21,79 @@
         app:layout_constraintTop_toTopOf="parent" />
 
     <TextView
-        android:id="@+id/textView6"
+        android:id="@+id/options_fragment_about_slim"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:layout_marginStart="16dp"
-        android:layout_marginLeft="16dp"
-        android:layout_marginTop="@dimen/_32sdp"
+        android:layout_marginStart="24dp"
+        android:layout_marginLeft="24dp"
+        android:layout_marginTop="32dp"
         android:text="@string/options_fragment_about_slim"
         android:textAppearance="@style/TextAppearance.AppCompat"
-        android:textSize="@dimen/_24ssp"
-        app:layout_constraintBottom_toTopOf="@+id/textView9"
+        android:textSize="@dimen/_20ssp"
+        app:layout_constraintBottom_toTopOf="@+id/options_fragment_device_settings"
         app:layout_constraintStart_toStartOf="parent"
         app:layout_constraintTop_toBottomOf="@+id/textView5"
         app:layout_constraintVertical_bias="0.17000002"
         app:layout_constraintVertical_chainStyle="packed" />
 
     <TextView
-        android:id="@+id/textView9"
+        android:id="@+id/options_fragment_device_settings"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:layout_marginTop="@dimen/_32sdp"
+        android:layout_marginTop="32dp"
         android:text="@string/options_fragment_device_settings"
         android:textAppearance="@style/TextAppearance.AppCompat"
-        android:textSize="@dimen/_24ssp"
-        app:layout_constraintBottom_toTopOf="@+id/textView10"
-        app:layout_constraintStart_toStartOf="@+id/textView6"
-        app:layout_constraintTop_toBottomOf="@+id/textView6" />
+        android:textSize="@dimen/_20ssp"
+        app:layout_constraintBottom_toTopOf="@+id/options_fragment_change_theme"
+        app:layout_constraintStart_toStartOf="@+id/options_fragment_about_slim"
+        app:layout_constraintTop_toBottomOf="@+id/options_fragment_about_slim" />
 
     <TextView
-        android:id="@+id/textView10"
+        android:id="@+id/options_fragment_change_theme"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:layout_marginTop="@dimen/_32sdp"
+        android:layout_marginTop="32dp"
         android:text="@string/options_fragment_change_theme"
         android:textAppearance="@style/TextAppearance.AppCompat"
-        android:textSize="@dimen/_24ssp"
-        app:layout_constraintBottom_toTopOf="@+id/textView11"
-        app:layout_constraintStart_toStartOf="@+id/textView9"
-        app:layout_constraintTop_toBottomOf="@+id/textView9" />
+        android:textSize="@dimen/_20ssp"
+        app:layout_constraintBottom_toTopOf="@+id/options_fragment_choose_time_format"
+        app:layout_constraintStart_toStartOf="@+id/options_fragment_device_settings"
+        app:layout_constraintTop_toBottomOf="@+id/options_fragment_device_settings" />
 
     <TextView
-        android:id="@+id/textView11"
+        android:id="@+id/options_fragment_choose_time_format"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:layout_marginTop="@dimen/_32sdp"
+        android:layout_marginTop="32dp"
         android:text="@string/options_fragment_choose_time_format"
         android:textAppearance="@style/TextAppearance.AppCompat"
-        android:textSize="@dimen/_24ssp"
-        app:layout_constraintBottom_toTopOf="@+id/textView17"
-        app:layout_constraintStart_toStartOf="@+id/textView10"
-        app:layout_constraintTop_toBottomOf="@+id/textView10" />
+        android:textSize="@dimen/_20ssp"
+        app:layout_constraintBottom_toTopOf="@+id/options_fragment_hide_status_bar"
+        app:layout_constraintStart_toStartOf="@+id/options_fragment_change_theme"
+        app:layout_constraintTop_toBottomOf="@+id/options_fragment_change_theme" />
 
     <TextView
-        android:id="@+id/textView17"
+        android:id="@+id/options_fragment_hide_status_bar"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:layout_marginTop="@dimen/_32sdp"
-        android:text="Hide Status Bar"
+        android:layout_marginTop="32dp"
+        android:text="@string/options_fragment_hide_status_bar"
         android:textAppearance="@style/TextAppearance.AppCompat"
-        android:textSize="@dimen/_24ssp"
-        app:layout_constraintBottom_toTopOf="@+id/textView19"
-        app:layout_constraintStart_toStartOf="@+id/textView11"
-        app:layout_constraintTop_toBottomOf="@+id/textView11" />
+        android:textSize="@dimen/_20ssp"
+        app:layout_constraintBottom_toTopOf="@+id/options_fragment_customise_apps"
+        app:layout_constraintStart_toStartOf="@+id/options_fragment_choose_time_format"
+        app:layout_constraintTop_toBottomOf="@+id/options_fragment_choose_time_format" />
 
     <TextView
-        android:id="@+id/textView19"
+        android:id="@+id/options_fragment_customise_apps"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:layout_marginTop="@dimen/_32sdp"
+        android:layout_marginTop="32dp"
         android:layout_marginBottom="32dp"
         android:text="@string/options_fragment_customise_apps"
         android:textAppearance="@style/TextAppearance.AppCompat"
-        android:textSize="@dimen/_24ssp"
+        android:textSize="@dimen/_20ssp"
         app:layout_constraintBottom_toBottomOf="parent"
-        app:layout_constraintStart_toStartOf="@+id/textView17"
-        app:layout_constraintTop_toBottomOf="@+id/textView17" />
+        app:layout_constraintStart_toStartOf="@+id/options_fragment_hide_status_bar"
+        app:layout_constraintTop_toBottomOf="@+id/options_fragment_hide_status_bar" />
 </androidx.constraintlayout.widget.ConstraintLayout>

+ 10 - 0
app/src/main/res/menu/customise_apps_popup_menu.xml

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<menu xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <item
+        android:id="@+id/ca_menu_rename"
+        android:title="@string/menu_rename" />
+    <item
+        android:id="@+id/ca_menu_remove"
+        android:title="@string/menu_remove" />
+</menu>

+ 17 - 50
app/src/main/res/navigation/nav_graph.xml

@@ -3,73 +3,40 @@
     xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
     android:id="@+id/nav_graph"
-    app:startDestination="@id/setupFragment">
+    app:startDestination="@id/mainFragment">
 
     <fragment
         android:id="@+id/mainFragment"
         android:name="com.sduduzog.slimlauncher.ui.main.MainFragment"
         android:label="main_fragment"
         tools:layout="@layout/main_fragment">
-        <action
-            android:id="@+id/action_mainFragment_to_notesListFragment"
-            app:destination="@id/notesListFragment" />
 
-        <action
-            android:id="@+id/action_mainFragment_to_settingsFragment"
-            app:destination="@id/settingsFragment" />
-        <action
-            android:id="@+id/action_mainFragment_to_aboutFragment"
-            app:destination="@id/aboutFragment" />
         <action
             android:id="@+id/action_mainFragment_to_optionsFragment"
             app:destination="@id/optionsFragment" />
     </fragment>
     <fragment
-        android:id="@+id/settingsFragment"
-        android:name="com.sduduzog.slimlauncher.ui.main.settings.SettingsFragment"
-        android:label="fragment_settings"
-        tools:layout="@layout/settings_fragment">
-        <action
-            android:id="@+id/action_openAppsFragment"
-            app:destination="@+id/appsFragment" />
-    </fragment>
-    <fragment
-        android:id="@+id/appsFragment"
-        android:name="com.sduduzog.slimlauncher.ui.main.settings.AppsFragment"
-        android:label="fragment_apps_list"
-        tools:layout="@layout/apps_fragment" />
-    <fragment
-        android:id="@+id/aboutFragment"
-        android:name="com.sduduzog.slimlauncher.ui.main.AboutFragment"
-        android:label="fragment_about"
-        tools:layout="@layout/about_fragment" />
-    <fragment
-        android:id="@+id/setupFragment"
-        android:name="com.sduduzog.slimlauncher.ui.main.setup.SetupFragment"
-        android:label="setup_fragment"
-        tools:layout="@layout/setup_fragment">
+        android:id="@+id/optionsFragment"
+        android:name="com.sduduzog.slimlauncher.ui.options.OptionsFragment"
+        android:label="options_fragment"
+        tools:layout="@layout/options_fragment" >
         <action
-            android:id="@+id/action_setupFragment_to_mainFragment2"
-            app:destination="@id/mainFragment" />
+            android:id="@+id/action_optionsFragment_to_customiseAppsFragment"
+            app:destination="@id/customiseAppsFragment" />
     </fragment>
     <fragment
-        android:id="@+id/notesListFragment"
-        android:name="com.sduduzog.slimlauncher.ui.main.notes.NotesListFragment"
-        android:label="notes_list_fragment"
-        tools:layout="@layout/notes_list_fragment">
+        android:id="@+id/customiseAppsFragment"
+        android:name="com.sduduzog.slimlauncher.ui.options.CustomiseAppsFragment"
+        android:label="customise_apps_fragment"
+        tools:layout="@layout/customise_apps_fragment" >
         <action
-            android:id="@+id/action_openNoteFragment"
-            app:destination="@id/noteFragment" />
+            android:id="@+id/action_customiseAppsFragment_to_addAppFragment"
+            app:destination="@id/addAppFragment" />
     </fragment>
     <fragment
-        android:id="@+id/noteFragment"
-        android:name="com.sduduzog.slimlauncher.ui.main.notes.NoteFragment"
-        android:label="note_fragment"
-        tools:layout="@layout/note_fragment" />
-    <fragment
-        android:id="@+id/optionsFragment"
-        android:name="com.sduduzog.slimlauncher.ui.options.OptionsFragment"
-        android:label="options_fragment"
-        tools:layout="@layout/options_fragment" />
+        android:id="@+id/addAppFragment"
+        android:name="com.sduduzog.slimlauncher.ui.options.AddAppFragment"
+        android:label="add_app_fragment"
+        tools:layout="@layout/add_app_fragment" />
 
 </navigation>

+ 5 - 0
app/src/main/res/values/strings.xml

@@ -90,6 +90,11 @@
     <string name="options_fragment_change_theme">Change Theme</string>
     <string name="options_fragment_choose_time_format">Choose Time Format</string>
     <string name="options_fragment_customise_apps">Customise Apps</string>
+    <string name="options_fragment_hide_status_bar">Hide Status Bar</string>
+    <string name="main_fragment_notes">Notes</string>
+    <string name="customise_apps_fragment_add">Add</string>
+    <string name="menu_rename">Rename</string>
+    <string name="menu_remove">Remove</string>
 
 
 </resources>