Forráskód Böngészése

chore: cleanup and some unfinished work

beautusg 7 éve
szülő
commit
367a000a46

+ 6 - 7
app/src/main/java/com/sduduzog/slimlauncher/MainActivity.kt

@@ -7,25 +7,24 @@ import android.view.View
 import androidx.appcompat.app.AppCompatActivity
 import androidx.navigation.NavController
 import androidx.navigation.Navigation.findNavController
-import com.sduduzog.slimlauncher.utils.Publisher
-import com.sduduzog.slimlauncher.utils.Subscriber
+import com.sduduzog.slimlauncher.utils.BaseFragment
 
 
-class MainActivity : AppCompatActivity(), SharedPreferences.OnSharedPreferenceChangeListener, Publisher {
+class MainActivity : AppCompatActivity(), SharedPreferences.OnSharedPreferenceChangeListener {
 
     private lateinit var settings: SharedPreferences
     private lateinit var navigator: NavController
-    private val subscribers: MutableSet<Subscriber> = mutableSetOf()
+    private val subscribers: MutableSet<BaseFragment> = mutableSetOf()
 
-    override fun attatchSubscriber(s: Subscriber) {
+    fun attachSubscriber(s: BaseFragment) {
         subscribers.add(s)
     }
 
-    override fun detachSubscriber(s: Subscriber) {
+    fun detachSubscriber(s: BaseFragment) {
         subscribers.remove(s)
     }
 
-    override fun dispatchBack() {
+    private fun dispatchBack() {
         for (s in subscribers) if (s.onBack()) return
         completeBackAction()
     }

+ 32 - 0
app/src/main/java/com/sduduzog/slimlauncher/adapters/TasksAdapter.kt

@@ -0,0 +1,32 @@
+package com.sduduzog.slimlauncher.adapters
+
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.CheckBox
+import androidx.recyclerview.widget.RecyclerView
+import com.sduduzog.slimlauncher.R
+import com.sduduzog.slimlauncher.data.model.Task
+
+class TasksAdapter : RecyclerView.Adapter<TasksAdapter.ViewHolder>() {
+
+    private var tasks: List<Task> = listOf()
+
+    override fun getItemCount(): Int = tasks.size
+
+    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
+
+    }
+
+    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
+        val view = LayoutInflater.from(parent.context).inflate(R.layout.task_fragment_list_item, parent, false)
+        return ViewHolder(view)
+    }
+
+    inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+        val checkBox: CheckBox = itemView.findViewById(R.id.tasks_fragment_list_item)
+        override fun toString(): String {
+            return super.toString() + " '${checkBox.text}'"
+        }
+    }
+}

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

@@ -5,9 +5,7 @@ import android.os.AsyncTask
 import androidx.lifecycle.LiveData
 import com.sduduzog.slimlauncher.data.model.HomeApp
 
-class AppRepository(application: Application) {
-    private val db: DataRoomDatabase = DataRoomDatabase.getDatabase(application)!!
-    private val appDao: AppDao = db.appDao()
+class AppRepository(application: Application) : Repository(application) {
 
     private val _apps = appDao.apps
 

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

@@ -8,15 +8,18 @@ import androidx.room.migration.Migration
 import androidx.sqlite.db.SupportSQLiteDatabase
 import com.sduduzog.slimlauncher.data.model.HomeApp
 import com.sduduzog.slimlauncher.data.model.Note
+import com.sduduzog.slimlauncher.data.model.Task
 
 
-@Database(entities = [HomeApp::class, Note::class], version = 4, exportSchema = false)
+@Database(entities = [HomeApp::class, Note::class, Task::class], version = 4, exportSchema = false)
 abstract class DataRoomDatabase : RoomDatabase() {
 
     abstract fun appDao(): AppDao
 
     abstract fun noteDao(): NoteDao
 
+    abstract fun taskDao(): TaskDao
+
     companion object {
         @Volatile
         @JvmStatic
@@ -58,6 +61,7 @@ abstract class DataRoomDatabase : RoomDatabase() {
         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)")
             }
         }
     }

+ 4 - 6
app/src/main/java/com/sduduzog/slimlauncher/data/NoteRepository.kt

@@ -5,20 +5,18 @@ import android.os.AsyncTask
 import androidx.lifecycle.LiveData
 import com.sduduzog.slimlauncher.data.model.Note
 
-class NoteRepository(application: Application) {
-    private val db: DataRoomDatabase = DataRoomDatabase.getDatabase(application)!!
-    private val noteDao: NoteDao = db.noteDao()
+class NoteRepository(application: Application) : Repository(application) {
 
     private val _notes = noteDao.notes
 
     val notes: LiveData<List<Note>>
         get() = _notes
-    
-    fun add(args: Note){
+
+    fun add(args: Note) {
         AddNoteAsyncTask(noteDao).execute(args)
     }
 
-    fun update(vararg args: Note){
+    fun update(vararg args: Note) {
         UpdateNotesAsyncTask(noteDao).execute(*args)
     }
 

+ 11 - 0
app/src/main/java/com/sduduzog/slimlauncher/data/Repository.kt

@@ -0,0 +1,11 @@
+package com.sduduzog.slimlauncher.data
+
+import android.app.Application
+
+abstract class Repository(application: Application) {
+    private val database: DataRoomDatabase = DataRoomDatabase.getDatabase(application)!!
+
+    protected val appDao: AppDao = database.appDao()
+    protected val noteDao: NoteDao = database.noteDao()
+    protected val taskDao: TaskDao = database.taskDao()
+}

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

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

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

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

+ 19 - 0
app/src/main/java/com/sduduzog/slimlauncher/data/model/Task.kt

@@ -0,0 +1,19 @@
+package com.sduduzog.slimlauncher.data.model
+
+import androidx.room.ColumnInfo
+import androidx.room.Entity
+import androidx.room.PrimaryKey
+
+@Entity(tableName = "tasks")
+data class Task(
+        @field:ColumnInfo(name = "body")
+        val body: String,
+        @field:ColumnInfo(name = "is_complete")
+        var isCompleted: Boolean,
+        @field:ColumnInfo(name = "sorting_index")
+        var sortingIndex: Int
+) {
+    @field:ColumnInfo(name = "id")
+    @PrimaryKey(autoGenerate = true)
+    var id: Int? = null
+}

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

@@ -55,6 +55,7 @@ class HomeFragment : BaseFragment(), OnLaunchAppListener {
         })
 
         setEventListeners()
+        home_fragment_tasks.setOnClickListener(Navigation.createNavigateOnClickListener(R.id.action_homeFragment_to_tasksFragment))
         home_fragment_options.setOnClickListener(Navigation.createNavigateOnClickListener(R.id.action_homeFragment_to_optionsFragment))
         home_fragment_notes.setOnClickListener(Navigation.createNavigateOnClickListener(R.id.action_homeFragment_to_notesFragment))
     }

+ 33 - 0
app/src/main/java/com/sduduzog/slimlauncher/ui/main/TasksFragment.kt

@@ -0,0 +1,33 @@
+package com.sduduzog.slimlauncher.ui.main
+
+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.adapters.TasksAdapter
+import com.sduduzog.slimlauncher.data.MainViewModel
+import com.sduduzog.slimlauncher.utils.BaseFragment
+import kotlinx.android.synthetic.main.tasks_fragment.*
+
+class TasksFragment : BaseFragment() {
+
+    override fun getFragmentView(): View = tasks_fragment
+
+    private lateinit var viewModel: MainViewModel
+
+    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
+        return inflater.inflate(R.layout.tasks_fragment, container, false)
+    }
+
+    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")
+    }
+}

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

@@ -47,25 +47,31 @@ class AddAppFragment : BaseFragment(), OnAppClickedListener {
             }
         })
         LoadInstalledApps(viewModel).execute(context!!.packageManager)
-        add_app_fragment_edit_text.addTextChangedListener(object: TextWatcher {
-            override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
-                // Do nothing
-                s?.let {
-                    LoadInstalledApps(viewModel, it.toString()).execute(context!!.packageManager)
-                }
-            }
+        add_app_fragment_edit_text.addTextChangedListener(onTextChangeListener)
+    }
 
-            override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
-                // Do nothing
-            }
+    override fun onDestroy() {
+        super.onDestroy()
+        add_app_fragment_edit_text.removeTextChangedListener(onTextChangeListener)
+    }
+
+    private val onTextChangeListener: TextWatcher = object : TextWatcher {
 
-            override fun afterTextChanged(s: Editable?) {
-                // Do nothing
+        override fun afterTextChanged(s: Editable?) {
+            // Do nothing
+        }
+
+        override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
+            // Do nothing
+        }
+
+        override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
+            s?.let {
+                LoadInstalledApps(viewModel, s.toString()).execute(context!!.packageManager)
             }
-        })
+        }
     }
 
-
     override fun onAppClicked(app: App) {
         viewModel.add(app)
         Navigation.findNavController(add_app_fragment).popBackStack()

+ 6 - 5
app/src/main/java/com/sduduzog/slimlauncher/utils/BaseFragment.kt

@@ -7,9 +7,10 @@ import android.view.View
 import androidx.appcompat.app.AppCompatActivity
 import androidx.core.app.ActivityOptionsCompat
 import androidx.fragment.app.Fragment
+import com.sduduzog.slimlauncher.MainActivity
 import com.sduduzog.slimlauncher.R
 
-abstract class BaseFragment : Fragment(), Subscriber {
+abstract class BaseFragment : Fragment() {
 
     abstract fun getFragmentView(): View
 
@@ -36,14 +37,14 @@ abstract class BaseFragment : Fragment(), Subscriber {
 
     override fun onStart() {
         super.onStart()
-        with(activity as Publisher){
-            this.attatchSubscriber(this@BaseFragment)
+        with(activity as MainActivity) {
+            this.attachSubscriber(this@BaseFragment)
         }
     }
 
     override fun onStop() {
         super.onStop()
-        with(activity as Publisher) {
+        with(activity as MainActivity) {
             this.detachSubscriber(this@BaseFragment)
         }
     }
@@ -57,5 +58,5 @@ abstract class BaseFragment : Fragment(), Subscriber {
         startActivity(intent, opts.toBundle())
     }
 
-    override fun onBack(): Boolean = false
+    open fun onBack(): Boolean = false
 }

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

@@ -1,7 +0,0 @@
-package com.sduduzog.slimlauncher.utils
-
-interface Publisher {
-    fun attatchSubscriber(s: Subscriber)
-    fun detachSubscriber(s: Subscriber)
-    fun dispatchBack()
-}

+ 0 - 5
app/src/main/java/com/sduduzog/slimlauncher/utils/Subscriber.kt

@@ -1,5 +0,0 @@
-package com.sduduzog.slimlauncher.utils
-
-interface Subscriber {
-    fun onBack(): Boolean
-}

+ 9 - 0
app/src/main/res/layout/task_fragment_list_item.xml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<CheckBox xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/tasks_fragment_list_item"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:layout_margin="@dimen/_8sdp"
+    android:layout_marginTop="@dimen/_16sdp"
+    android:text="@string/tasks_fragment_list_item"
+    android:textSize="20sp" />

+ 62 - 0
app/src/main/res/layout/tasks_fragment.xml

@@ -0,0 +1,62 @@
+<?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/tasks_fragment"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    tools:context=".ui.main.TasksFragment">
+
+    <EditText
+        android:id="@+id/tasks_fragment_input"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="@dimen/_32sdp"
+        android:ems="10"
+        android:hint="@string/tasks_fragment_enter_a_new_task"
+        android:inputType="textCapSentences"
+        android:padding="@dimen/_12sdp"
+        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/tasks_fragment_list"
+        android:layout_width="0dp"
+        android:layout_height="0dp"
+        android:layout_marginTop="@dimen/_8sdp"
+        app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
+        app:layout_constraintBottom_toTopOf="@+id/tasks_fragment_sort"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/tasks_fragment_input"
+        tools:listitem="@layout/task_fragment_list_item" />
+
+    <TextView
+        android:id="@+id/tasks_fragment_sort"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="@dimen/_16sdp"
+        android:layout_marginLeft="@dimen/_16sdp"
+        android:layout_marginBottom="@dimen/_8sdp"
+        android:padding="@dimen/_12sdp"
+        android:text="@string/tasks_fragment_sort"
+        android:textSize="@dimen/_18ssp"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintStart_toStartOf="parent" />
+
+    <TextView
+        android:id="@+id/tasks_fragment_clear"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginEnd="@dimen/_16sdp"
+        android:layout_marginRight="@dimen/_16sdp"
+        android:layout_marginBottom="@dimen/_8sdp"
+        android:padding="@dimen/_12sdp"
+        android:text="@string/tasks_fragment_clear_completed_tasks"
+        android:textSize="@dimen/_18ssp"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent" />
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 8 - 0
app/src/main/res/navigation/nav_graph.xml

@@ -16,6 +16,9 @@
         <action
             android:id="@+id/action_homeFragment_to_notesFragment"
             app:destination="@id/notesFragment" />
+        <action
+            android:id="@+id/action_homeFragment_to_tasksFragment"
+            app:destination="@id/tasksFragment" />
     </fragment>
     <fragment
         android:id="@+id/optionsFragment"
@@ -54,5 +57,10 @@
             android:id="@+id/action_notesFragment_to_noteFragment"
             app:destination="@id/noteFragment" />
     </fragment>
+    <fragment
+        android:id="@+id/tasksFragment"
+        android:name="com.sduduzog.slimlauncher.ui.main.TasksFragment"
+        android:label="tasks_fragment"
+        tools:layout="@layout/tasks_fragment" />
 
 </navigation>

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

@@ -53,6 +53,10 @@
     <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_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>
 
 
 </resources>