Browse Source

chore: Tasks basically works

beautusg 7 năm trước cách đây
mục cha
commit
accf51f8e4
23 tập tin đã thay đổi với 261 bổ sung210 xóa
  1. 6 6
      app/src/androidTest/java/com/sduduzog/slimlauncher/DBTest.kt
  2. 25 2
      app/src/main/java/com/sduduzog/slimlauncher/adapters/TasksAdapter.kt
  3. 0 25
      app/src/main/java/com/sduduzog/slimlauncher/data/AppDao.kt
  4. 0 50
      app/src/main/java/com/sduduzog/slimlauncher/data/AppRepository.kt
  5. 48 0
      app/src/main/java/com/sduduzog/slimlauncher/data/BaseDao.kt
  6. 7 11
      app/src/main/java/com/sduduzog/slimlauncher/data/BaseDatabase.kt
  7. 27 13
      app/src/main/java/com/sduduzog/slimlauncher/data/MainViewModel.kt
  8. 0 21
      app/src/main/java/com/sduduzog/slimlauncher/data/NoteDao.kt
  9. 0 50
      app/src/main/java/com/sduduzog/slimlauncher/data/NoteRepository.kt
  10. 118 5
      app/src/main/java/com/sduduzog/slimlauncher/data/Repository.kt
  11. 0 7
      app/src/main/java/com/sduduzog/slimlauncher/data/TaskDao.kt
  12. 0 6
      app/src/main/java/com/sduduzog/slimlauncher/data/TaskRepository.kt
  13. 1 1
      app/src/main/java/com/sduduzog/slimlauncher/data/model/HomeApp.kt
  14. 1 1
      app/src/main/java/com/sduduzog/slimlauncher/ui/main/HomeFragment.kt
  15. 1 1
      app/src/main/java/com/sduduzog/slimlauncher/ui/main/NoteFragment.kt
  16. 1 1
      app/src/main/java/com/sduduzog/slimlauncher/ui/main/NotesFragment.kt
  17. 18 3
      app/src/main/java/com/sduduzog/slimlauncher/ui/main/TasksFragment.kt
  18. 2 2
      app/src/main/java/com/sduduzog/slimlauncher/ui/options/AddAppFragment.kt
  19. 1 1
      app/src/main/java/com/sduduzog/slimlauncher/ui/options/CustomiseAppsFragment.kt
  20. 1 1
      app/src/main/java/com/sduduzog/slimlauncher/ui/options/OptionsFragment.kt
  21. 2 1
      app/src/main/java/com/sduduzog/slimlauncher/utils/BaseFragment.kt
  22. 1 1
      app/src/main/res/layout/task_fragment_list_item.xml
  23. 1 1
      app/src/main/res/values/strings.xml

+ 6 - 6
app/src/androidTest/java/com/sduduzog/slimlauncher/DBTest.kt

@@ -5,8 +5,8 @@ import androidx.lifecycle.Observer
 import androidx.room.Room
 import androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner
 import androidx.test.platform.app.InstrumentationRegistry
-import com.sduduzog.slimlauncher.data.AppDao
-import com.sduduzog.slimlauncher.data.DataRoomDatabase
+import com.sduduzog.slimlauncher.data.BaseDao
+import com.sduduzog.slimlauncher.data.BaseDatabase
 import com.sduduzog.slimlauncher.data.model.HomeApp
 import org.hamcrest.CoreMatchers.equalTo
 import org.junit.After
@@ -21,8 +21,8 @@ import java.util.concurrent.TimeUnit
 @RunWith(AndroidJUnit4ClassRunner::class)
 class DBTest {
 
-    private var mAppDao: AppDao? = null
-    private var mDb: DataRoomDatabase? = null
+    private var mAppDao: BaseDao? = null
+    private var mDb: BaseDatabase? = null
 
     @get:Rule
     var instantTaskExecutorRule = InstantTaskExecutorRule()
@@ -30,8 +30,8 @@ class DBTest {
     @Before
     fun createDb() {
         val context = InstrumentationRegistry.getInstrumentation().targetContext
-        mDb = Room.inMemoryDatabaseBuilder(context, DataRoomDatabase::class.java).build()
-        mAppDao = mDb!!.appDao()
+        mDb = Room.inMemoryDatabaseBuilder(context, BaseDatabase::class.java).build()
+        mAppDao = mDb!!.baseDao()
     }
 
     @After

+ 25 - 2
app/src/main/java/com/sduduzog/slimlauncher/adapters/TasksAdapter.kt

@@ -1,21 +1,39 @@
 package com.sduduzog.slimlauncher.adapters
 
+import android.content.Context
+import android.text.Spanned
 import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
 import android.widget.CheckBox
+import androidx.core.text.HtmlCompat
+import androidx.core.text.HtmlCompat.FROM_HTML_MODE_LEGACY
 import androidx.recyclerview.widget.RecyclerView
 import com.sduduzog.slimlauncher.R
+import com.sduduzog.slimlauncher.data.MainViewModel
 import com.sduduzog.slimlauncher.data.model.Task
 
-class TasksAdapter : RecyclerView.Adapter<TasksAdapter.ViewHolder>() {
+class TasksAdapter(private val context: Context, private val viewModel: MainViewModel) : RecyclerView.Adapter<TasksAdapter.ViewHolder>() {
 
     private var tasks: List<Task> = listOf()
 
     override fun getItemCount(): Int = tasks.size
 
     override fun onBindViewHolder(holder: ViewHolder, position: Int) {
-
+        val task = tasks[position]
+        if (task.isCompleted) {
+            holder.checkBox.isChecked = true
+            val text = context.getString(R.string.tasks_fragment_list_item_complete, task.body)
+            val styledText: Spanned = HtmlCompat.fromHtml(text, FROM_HTML_MODE_LEGACY)
+            holder.checkBox.text = styledText
+        } else {
+            holder.checkBox.isChecked = false
+            holder.checkBox.text = task.body
+        }
+        holder.checkBox.setOnClickListener {
+            task.isCompleted = !task.isCompleted
+            viewModel.update(task)
+        }
     }
 
     override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
@@ -23,6 +41,11 @@ class TasksAdapter : RecyclerView.Adapter<TasksAdapter.ViewHolder>() {
         return ViewHolder(view)
     }
 
+    fun setItems(list: List<Task>) {
+        this.tasks = list
+        notifyDataSetChanged()
+    }
+
     inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
         val checkBox: CheckBox = itemView.findViewById(R.id.tasks_fragment_list_item)
         override fun toString(): String {

+ 0 - 25
app/src/main/java/com/sduduzog/slimlauncher/data/AppDao.kt

@@ -1,25 +0,0 @@
-package com.sduduzog.slimlauncher.data
-
-import androidx.lifecycle.LiveData
-import androidx.room.*
-import com.sduduzog.slimlauncher.data.model.HomeApp
-
-@Dao
-interface AppDao {
-
-    @get:Query("SELECT * FROM home_apps ORDER BY sorting_index ASC")
-    val apps: LiveData<List<HomeApp>>
-
-    @Update(onConflict = OnConflictStrategy.REPLACE)
-    fun update(vararg apps: HomeApp)
-
-    @Insert(onConflict = OnConflictStrategy.REPLACE)
-    fun add(app: HomeApp)
-
-    @Query("DELETE FROM home_apps")
-    fun clearHomeApps()
-
-    @Delete
-    fun remove(vararg app: HomeApp)
-
-}

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

@@ -1,50 +0,0 @@
-package com.sduduzog.slimlauncher.data
-
-import android.app.Application
-import android.os.AsyncTask
-import androidx.lifecycle.LiveData
-import com.sduduzog.slimlauncher.data.model.HomeApp
-
-class AppRepository(application: Application) : Repository(application) {
-
-    private val _apps = appDao.apps
-
-    val apps: LiveData<List<HomeApp>>
-        get() = _apps
-
-    fun add(app: HomeApp) {
-        AddAppAsyncTask(appDao).execute(app)
-    }
-
-    fun update(vararg list: HomeApp) {
-        UpdateAppAsyncTask(appDao).execute(*list)
-    }
-
-    fun remove(app: HomeApp) {
-        RemoveAppAsyncTask(appDao).execute(app)
-    }
-
-    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
-        }
-    }
-
-    private class RemoveAppAsyncTask(private val mAsyncTaskDao: AppDao) : AsyncTask<HomeApp, Void, Void>() {
-
-        override fun doInBackground(vararg params: HomeApp): Void? {
-            mAsyncTaskDao.remove(*params)
-            return null
-        }
-    }
-}

+ 48 - 0
app/src/main/java/com/sduduzog/slimlauncher/data/BaseDao.kt

@@ -0,0 +1,48 @@
+package com.sduduzog.slimlauncher.data
+
+import androidx.lifecycle.LiveData
+import androidx.room.*
+import com.sduduzog.slimlauncher.data.model.HomeApp
+import com.sduduzog.slimlauncher.data.model.Note
+import com.sduduzog.slimlauncher.data.model.Task
+
+@Dao
+interface BaseDao {
+
+    @get:Query("SELECT * FROM home_apps ORDER BY sorting_index ASC")
+    val apps: LiveData<List<HomeApp>>
+
+    @get:Query("SELECT * FROM `notes` ORDER BY `id` DESC")
+    val notes: LiveData<List<Note>>
+
+    @get:Query("SELECT * FROM `tasks` ORDER BY `sorting_index` DESC")
+    val tasks: LiveData<List<Task>>
+
+    @Insert(onConflict = OnConflictStrategy.REPLACE)
+    fun add(app: HomeApp)
+
+    @Insert(onConflict = OnConflictStrategy.REPLACE)
+    fun add(note: Note)
+
+    @Insert(onConflict = OnConflictStrategy.REPLACE)
+    fun add(task: Task)
+
+    @Update(onConflict = OnConflictStrategy.REPLACE)
+    fun update(vararg apps: HomeApp)
+
+    @Update(onConflict = OnConflictStrategy.REPLACE)
+    fun update(vararg note: Note)
+
+    @Update(onConflict = OnConflictStrategy.REPLACE)
+    fun update(vararg task: Task)
+
+    @Delete
+    fun remove(vararg app: HomeApp)
+
+    @Delete
+    fun remove(vararg note: Note)
+
+    @Delete
+    fun remove(vararg task: Task)
+
+}

+ 7 - 11
app/src/main/java/com/sduduzog/slimlauncher/data/DataRoomDatabase.kt → app/src/main/java/com/sduduzog/slimlauncher/data/BaseDatabase.kt

@@ -12,24 +12,20 @@ import com.sduduzog.slimlauncher.data.model.Task
 
 
 @Database(entities = [HomeApp::class, Note::class, Task::class], version = 4, exportSchema = false)
-abstract class DataRoomDatabase : RoomDatabase() {
+abstract class BaseDatabase : RoomDatabase() {
 
-    abstract fun appDao(): AppDao
-
-    abstract fun noteDao(): NoteDao
-
-    abstract fun taskDao(): TaskDao
+    abstract fun baseDao(): BaseDao
 
     companion object {
         @Volatile
         @JvmStatic
-        private var INSTANCE: DataRoomDatabase? = null
+        private var INSTANCE: BaseDatabase? = null
 
-        fun getDatabase(context: Context): DataRoomDatabase? {
-            synchronized(DataRoomDatabase::class.java) {
+        fun getDatabase(context: Context): BaseDatabase? {
+            synchronized(Database::class.java) {
                 if (INSTANCE == null) {
                     INSTANCE = Room.databaseBuilder(context.applicationContext,
-                            DataRoomDatabase::class.java, "app_database")
+                            BaseDatabase::class.java, "app_database")
                             .addMigrations(MIGRATION_1_2, MIGRATION_2_3, MIGRATION_3_4)
                             .build()
                 }
@@ -58,7 +54,7 @@ abstract class DataRoomDatabase : RoomDatabase() {
             }
         }
 
-        private val MIGRATION_3_4 = object : Migration(3, 4){
+        private val MIGRATION_3_4 = object : Migration(3, 4) {
             override fun migrate(database: SupportSQLiteDatabase) {
                 database.execSQL("DROP TABLE IF EXISTS `apps`")
                 database.execSQL("CREATE TABLE IF NOT EXISTS `tasks` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `body` TEXT NOT NULL, `is_complete` INTEGER NOT NULL, `sorting_index` INTEGER NOT NULL)")

+ 27 - 13
app/src/main/java/com/sduduzog/slimlauncher/data/MainViewModel.kt

@@ -7,18 +7,20 @@ import androidx.lifecycle.MutableLiveData
 import com.sduduzog.slimlauncher.data.model.App
 import com.sduduzog.slimlauncher.data.model.HomeApp
 import com.sduduzog.slimlauncher.data.model.Note
+import com.sduduzog.slimlauncher.data.model.Task
 
 class MainViewModel(application: Application) : AndroidViewModel(application) {
 
-    private val _appRepository = AppRepository(application)
-    private val _noteRepository = NoteRepository(application)
+    private val _baseRepository = Repository(application)
 
     private var _apps: LiveData<List<HomeApp>>
     private var _notes: LiveData<List<Note>>
+    private var _tasks: LiveData<List<Task>>
 
     init {
-        _apps = _appRepository.apps
-        _notes = _noteRepository.notes
+        _apps = _baseRepository.apps
+        _notes = _baseRepository.notes
+        _tasks = _baseRepository.tasks
     }
 
     val apps: LiveData<List<HomeApp>>
@@ -29,27 +31,39 @@ class MainViewModel(application: Application) : AndroidViewModel(application) {
     val notes: LiveData<List<Note>>
         get() = _notes
 
+    val tasks: LiveData<List<Task>>
+        get() = _tasks
+
     fun add(app: App) {
         val index = _apps.value!!.size
-        _appRepository.add(HomeApp.from(app, index))
+        _baseRepository.add(HomeApp.from(app, index))
+    }
+
+    fun add(note: Note) {
+        _baseRepository.add(note)
     }
 
-    fun add(note: Note){
-        _noteRepository.add(note)
+    fun add(task: Task) {
+        _baseRepository.add(task)
     }
 
     fun update(vararg args: HomeApp) {
-        _appRepository.update(*args)
+        _baseRepository.update(*args)
     }
 
-    fun update(vararg args: Note){
-        _noteRepository.update(*args)
+    fun update(vararg args: Note) {
+        _baseRepository.update(*args)
+    }
+
+    fun update(vararg args: Task) {
+        _baseRepository.update(*args)
     }
 
     fun remove(app: HomeApp) {
-        _appRepository.remove(app)
+        _baseRepository.remove(app)
     }
-    fun remove(note: Note){
-        _noteRepository.remove(note)
+
+    fun remove(note: Note) {
+        _baseRepository.remove(note)
     }
 }

+ 0 - 21
app/src/main/java/com/sduduzog/slimlauncher/data/NoteDao.kt

@@ -1,21 +0,0 @@
-package com.sduduzog.slimlauncher.data
-
-import androidx.lifecycle.LiveData
-import androidx.room.*
-import com.sduduzog.slimlauncher.data.model.Note
-
-@Dao
-interface NoteDao {
-
-    @get:Query("SELECT * FROM notes ORDER BY id DESC")
-    val notes: LiveData<List<Note>>
-
-    @Insert(onConflict = OnConflictStrategy.REPLACE)
-    fun add(note: Note)
-
-    @Update
-    fun update(vararg note: Note)
-
-    @Delete
-    fun remove(vararg note: Note)
-}

+ 0 - 50
app/src/main/java/com/sduduzog/slimlauncher/data/NoteRepository.kt

@@ -1,50 +0,0 @@
-package com.sduduzog.slimlauncher.data
-
-import android.app.Application
-import android.os.AsyncTask
-import androidx.lifecycle.LiveData
-import com.sduduzog.slimlauncher.data.model.Note
-
-class NoteRepository(application: Application) : Repository(application) {
-
-    private val _notes = noteDao.notes
-
-    val notes: LiveData<List<Note>>
-        get() = _notes
-
-    fun add(args: Note) {
-        AddNoteAsyncTask(noteDao).execute(args)
-    }
-
-    fun update(vararg args: Note) {
-        UpdateNotesAsyncTask(noteDao).execute(*args)
-    }
-
-    fun remove(note: Note) {
-        RemoveNoteAsyncTask(noteDao).execute(note)
-    }
-
-    private class AddNoteAsyncTask(private val mAsyncTaskDao: NoteDao) : AsyncTask<Note, Void, Void>() {
-
-        override fun doInBackground(vararg params: Note): Void? {
-            mAsyncTaskDao.add(params[0])
-            return null
-        }
-    }
-
-    private class UpdateNotesAsyncTask(private val mAsyncTaskDao: NoteDao) : AsyncTask<Note, Void, Void>() {
-
-        override fun doInBackground(vararg params: Note): Void? {
-            mAsyncTaskDao.update(*params)
-            return null
-        }
-    }
-
-    private class RemoveNoteAsyncTask(private val mAsyncTaskDao: NoteDao) : AsyncTask<Note, Void, Void>() {
-
-        override fun doInBackground(vararg params: Note): Void? {
-            mAsyncTaskDao.remove(*params)
-            return null
-        }
-    }
-}

+ 118 - 5
app/src/main/java/com/sduduzog/slimlauncher/data/Repository.kt

@@ -1,11 +1,124 @@
 package com.sduduzog.slimlauncher.data
 
 import android.app.Application
+import android.os.AsyncTask
+import androidx.lifecycle.LiveData
+import com.sduduzog.slimlauncher.data.model.HomeApp
+import com.sduduzog.slimlauncher.data.model.Note
+import com.sduduzog.slimlauncher.data.model.Task
 
-abstract class Repository(application: Application) {
-    private val database: DataRoomDatabase = DataRoomDatabase.getDatabase(application)!!
+class Repository(application: Application) {
+    private val database: BaseDatabase = BaseDatabase.getDatabase(application)!!
 
-    protected val appDao: AppDao = database.appDao()
-    protected val noteDao: NoteDao = database.noteDao()
-    protected val taskDao: TaskDao = database.taskDao()
+    private val baseDao: BaseDao = database.baseDao()
+
+    private val _apps = baseDao.apps
+    private val _notes = baseDao.notes
+    private val _tasks = baseDao.tasks
+
+
+    val apps: LiveData<List<HomeApp>>
+        get() = _apps
+
+    val notes: LiveData<List<Note>>
+        get() = _notes
+
+    val tasks: LiveData<List<Task>>
+        get() = _tasks
+
+    fun add(app: HomeApp) {
+        AddAppAsyncTask(baseDao).execute(app)
+    }
+
+    fun add(args: Note) {
+        AddNoteAsyncTask(baseDao).execute(args)
+    }
+
+    fun add(args: Task) {
+        AddTaskAsyncTask(baseDao).execute(args)
+    }
+
+    fun update(vararg list: HomeApp) {
+        UpdateAppAsyncTask(baseDao).execute(*list)
+    }
+
+    fun update(vararg args: Note) {
+        UpdateNotesAsyncTask(baseDao).execute(*args)
+    }
+
+    fun update(vararg args: Task) {
+        UpdateTaskAsyncTask(baseDao).execute(*args)
+    }
+
+    fun remove(app: HomeApp) {
+        RemoveAppAsyncTask(baseDao).execute(app)
+    }
+
+    fun remove(note: Note) {
+        RemoveNoteAsyncTask(baseDao).execute(note)
+    }
+
+    private class AddAppAsyncTask(private val mAsyncTaskDao: BaseDao) : AsyncTask<HomeApp, Void, Void>() {
+
+        override fun doInBackground(vararg params: HomeApp): Void? {
+            mAsyncTaskDao.add(params[0])
+            return null
+        }
+    }
+
+    private class AddNoteAsyncTask(private val mAsyncTaskDao: BaseDao) : AsyncTask<Note, Void, Void>() {
+
+        override fun doInBackground(vararg params: Note): Void? {
+            mAsyncTaskDao.add(params[0])
+            return null
+        }
+    }
+
+    private class AddTaskAsyncTask(private val mAsyncTaskDao: BaseDao) : AsyncTask<Task, Void, Void>() {
+
+        override fun doInBackground(vararg params: Task): Void? {
+            mAsyncTaskDao.add(params[0])
+            return null
+        }
+    }
+
+    private class UpdateAppAsyncTask(private val mAsyncTaskDao: BaseDao) : AsyncTask<HomeApp, Void, Void>() {
+
+        override fun doInBackground(vararg params: HomeApp): Void? {
+            mAsyncTaskDao.update(*params)
+            return null
+        }
+    }
+
+    private class UpdateNotesAsyncTask(private val mAsyncTaskDao: BaseDao) : AsyncTask<Note, Void, Void>() {
+
+        override fun doInBackground(vararg params: Note): Void? {
+            mAsyncTaskDao.update(*params)
+            return null
+        }
+    }
+
+    private class UpdateTaskAsyncTask(private val mAsyncTaskDao: BaseDao) : AsyncTask<Task, Void, Void>() {
+
+        override fun doInBackground(vararg params: Task): Void? {
+            mAsyncTaskDao.update(*params)
+            return null
+        }
+    }
+
+    private class RemoveAppAsyncTask(private val mAsyncTaskDao: BaseDao) : AsyncTask<HomeApp, Void, Void>() {
+
+        override fun doInBackground(vararg params: HomeApp): Void? {
+            mAsyncTaskDao.remove(*params)
+            return null
+        }
+    }
+
+    private class RemoveNoteAsyncTask(private val mAsyncTaskDao: BaseDao) : AsyncTask<Note, Void, Void>() {
+
+        override fun doInBackground(vararg params: Note): Void? {
+            mAsyncTaskDao.remove(*params)
+            return null
+        }
+    }
 }

+ 0 - 7
app/src/main/java/com/sduduzog/slimlauncher/data/TaskDao.kt

@@ -1,7 +0,0 @@
-package com.sduduzog.slimlauncher.data
-
-import androidx.room.Dao
-
-@Dao
-interface TaskDao {
-}

+ 0 - 6
app/src/main/java/com/sduduzog/slimlauncher/data/TaskRepository.kt

@@ -1,6 +0,0 @@
-package com.sduduzog.slimlauncher.data
-
-import android.app.Application
-
-class TaskRepository(application: Application) : Repository(application) {
-}

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

@@ -15,7 +15,7 @@ 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)

+ 1 - 1
app/src/main/java/com/sduduzog/slimlauncher/ui/main/HomeFragment.kt

@@ -66,7 +66,7 @@ class HomeFragment : BaseFragment(), OnLaunchAppListener {
         activity?.registerReceiver(receiver, IntentFilter(Intent.ACTION_TIME_TICK))
     }
 
-    override fun getFragmentView(): View {
+    override fun getFragmentView(): ViewGroup {
         return home_fragment
     }
 

+ 1 - 1
app/src/main/java/com/sduduzog/slimlauncher/ui/main/NoteFragment.kt

@@ -20,7 +20,7 @@ import java.util.*
 
 class NoteFragment : BaseFragment() {
 
-    override fun getFragmentView(): View = note_fragment
+    override fun getFragmentView(): ViewGroup = note_fragment
 
     private lateinit var note: Note
     private lateinit var viewModel: MainViewModel

+ 1 - 1
app/src/main/java/com/sduduzog/slimlauncher/ui/main/NotesFragment.kt

@@ -20,7 +20,7 @@ import kotlinx.android.synthetic.main.notes_fragment.*
 
 class NotesFragment : BaseFragment(), OnShitDoneToNotesListener {
 
-    override fun getFragmentView(): View = notes_fragment
+    override fun getFragmentView(): ViewGroup = notes_fragment
 
     private lateinit var viewModel: MainViewModel
 

+ 18 - 3
app/src/main/java/com/sduduzog/slimlauncher/ui/main/TasksFragment.kt

@@ -4,16 +4,18 @@ 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 com.sduduzog.slimlauncher.R
 import com.sduduzog.slimlauncher.adapters.TasksAdapter
 import com.sduduzog.slimlauncher.data.MainViewModel
+import com.sduduzog.slimlauncher.data.model.Task
 import com.sduduzog.slimlauncher.utils.BaseFragment
 import kotlinx.android.synthetic.main.tasks_fragment.*
 
 class TasksFragment : BaseFragment() {
 
-    override fun getFragmentView(): View = tasks_fragment
+    override fun getFragmentView(): ViewGroup = tasks_fragment
 
     private lateinit var viewModel: MainViewModel
 
@@ -23,11 +25,24 @@ class TasksFragment : BaseFragment() {
 
     override fun onActivityCreated(savedInstanceState: Bundle?) {
         super.onActivityCreated(savedInstanceState)
-        val adapter = TasksAdapter()
-        tasks_fragment_list.adapter = adapter
 
         activity?.let {
             viewModel = ViewModelProviders.of(it).get(MainViewModel::class.java)
         } ?: throw Error("Activity null, something here is fucked up")
+        val adapter = TasksAdapter(context!!, viewModel)
+        tasks_fragment_list.adapter = adapter
+        viewModel.tasks.observe(this, Observer {
+            it?.let { list ->
+                adapter.setItems(list)
+            }
+        })
+
+        tasks_fragment_input.setOnEditorActionListener { v, _, _ ->
+            val body = v.text.toString()
+            val task = Task(body, false, viewModel.tasks.value.orEmpty().size)
+            if (body.isNotBlank()) viewModel.add(task)
+            v.text = ""
+            true
+        }
     }
 }

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

@@ -20,7 +20,7 @@ import kotlinx.android.synthetic.main.add_app_fragment.*
 
 class AddAppFragment : BaseFragment(), OnAppClickedListener {
 
-    override fun getFragmentView(): View = add_app_fragment as View
+    override fun getFragmentView(): ViewGroup = add_app_fragment
 
     private lateinit var viewModel: MainViewModel
 
@@ -52,7 +52,7 @@ class AddAppFragment : BaseFragment(), OnAppClickedListener {
 
     override fun onDestroy() {
         super.onDestroy()
-        add_app_fragment_edit_text.removeTextChangedListener(onTextChangeListener)
+        add_app_fragment_edit_text?.removeTextChangedListener(onTextChangeListener)
     }
 
     private val onTextChangeListener: TextWatcher = object : TextWatcher {

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

@@ -24,7 +24,7 @@ import kotlinx.android.synthetic.main.customise_apps_fragment.*
 
 class CustomiseAppsFragment : BaseFragment(), OnShitDoneToAppsListener {
 
-    override fun getFragmentView(): View = customise_apps_fragment as View
+    override fun getFragmentView(): ViewGroup = customise_apps_fragment
 
     private lateinit var viewModel: MainViewModel
 

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

@@ -17,7 +17,7 @@ import com.sduduzog.slimlauncher.utils.BaseFragment
 import kotlinx.android.synthetic.main.options_fragment.*
 
 class OptionsFragment : BaseFragment() {
-    override fun getFragmentView(): View = options_fragment as View
+    override fun getFragmentView(): ViewGroup = options_fragment
 
     override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
         return inflater.inflate(R.layout.options_fragment, container, false)

+ 2 - 1
app/src/main/java/com/sduduzog/slimlauncher/utils/BaseFragment.kt

@@ -4,6 +4,7 @@ import android.content.Intent
 import android.os.Build
 import android.util.TypedValue
 import android.view.View
+import android.view.ViewGroup
 import androidx.appcompat.app.AppCompatActivity
 import androidx.core.app.ActivityOptionsCompat
 import androidx.fragment.app.Fragment
@@ -12,7 +13,7 @@ import com.sduduzog.slimlauncher.R
 
 abstract class BaseFragment : Fragment() {
 
-    abstract fun getFragmentView(): View
+    abstract fun getFragmentView(): ViewGroup
 
 
     override fun onResume() {

+ 1 - 1
app/src/main/res/layout/task_fragment_list_item.xml

@@ -5,5 +5,5 @@
     android:layout_height="wrap_content"
     android:layout_margin="@dimen/_8sdp"
     android:layout_marginTop="@dimen/_16sdp"
-    android:text="@string/tasks_fragment_list_item"
+    android:text="@string/tasks_fragment_list_item_complete"
     android:textSize="20sp" />

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

@@ -53,7 +53,7 @@
     <string name="home_fragment_tasks">Tasks</string>
     <string name="notes_fragment_create_new_note">Create New Note</string>
     <string name="add_apps_fragment_search_apps">Search apps</string>
-    <string name="tasks_fragment_list_item"><strike>Checkbox</strike></string>
+    <string name="tasks_fragment_list_item_complete">&lt;strike>%s&lt;/strike></string>
     <string name="tasks_fragment_sort">Sort</string>
     <string name="tasks_fragment_clear_completed_tasks">Clear completed tasks</string>
     <string name="tasks_fragment_enter_a_new_task">Enter a new task</string>