Эх сурвалжийг харах

Note creation and deletion works

sduduzog 7 жил өмнө
parent
commit
fa999f975f
37 өөрчлөгдсөн 704 нэмэгдсэн , 170 устгасан
  1. 3 0
      app/build.gradle
  2. 4 4
      app/src/androidTest/java/com/sduduzog/slimlauncher/DBTest.kt
  3. 1 1
      app/src/main/java/com/sduduzog/slimlauncher/MainActivity.kt
  4. 1 1
      app/src/main/java/com/sduduzog/slimlauncher/data/App.kt
  5. 1 1
      app/src/main/java/com/sduduzog/slimlauncher/data/AppDao.kt
  6. 45 15
      app/src/main/java/com/sduduzog/slimlauncher/data/DataRepository.kt
  7. 18 8
      app/src/main/java/com/sduduzog/slimlauncher/data/DataRoomDatabase.kt
  8. 1 1
      app/src/main/java/com/sduduzog/slimlauncher/data/HomeApp.kt
  9. 21 0
      app/src/main/java/com/sduduzog/slimlauncher/data/Note.kt
  10. 17 0
      app/src/main/java/com/sduduzog/slimlauncher/data/NoteDao.kt
  11. 2 4
      app/src/main/java/com/sduduzog/slimlauncher/ui/main/HomeAppsAdapter.kt
  12. 12 76
      app/src/main/java/com/sduduzog/slimlauncher/ui/main/MainFragment.kt
  13. 8 5
      app/src/main/java/com/sduduzog/slimlauncher/ui/main/MainViewModel.kt
  14. 1 1
      app/src/main/java/com/sduduzog/slimlauncher/ui/main/OnItemActionListener.kt
  15. 59 0
      app/src/main/java/com/sduduzog/slimlauncher/ui/main/OptionsFragment.kt
  16. 53 0
      app/src/main/java/com/sduduzog/slimlauncher/ui/main/notes/NoteFragment.kt
  17. 96 0
      app/src/main/java/com/sduduzog/slimlauncher/ui/main/notes/NotesListAdapter.kt
  18. 42 3
      app/src/main/java/com/sduduzog/slimlauncher/ui/main/notes/NotesListFragment.kt
  19. 28 0
      app/src/main/java/com/sduduzog/slimlauncher/ui/main/notes/NotesViewModel.kt
  20. 1 1
      app/src/main/java/com/sduduzog/slimlauncher/ui/main/settings/AppsFragment.kt
  21. 3 3
      app/src/main/java/com/sduduzog/slimlauncher/ui/main/settings/AppsListAdapter.kt
  22. 1 3
      app/src/main/java/com/sduduzog/slimlauncher/ui/main/settings/SettingsFragment.kt
  23. 3 2
      app/src/main/java/com/sduduzog/slimlauncher/ui/main/settings/SettingsListAdapter.kt
  24. 2 1
      app/src/main/java/com/sduduzog/slimlauncher/ui/main/setup/DialogInteractionListener.kt
  25. 3 3
      app/src/main/java/com/sduduzog/slimlauncher/ui/main/setup/SetupFragment.kt
  26. 15 0
      app/src/main/res/drawable/note_item_background.xml
  27. 1 1
      app/src/main/res/layout/main_bottom_sheet.xml
  28. 82 6
      app/src/main/res/layout/main_fragment.xml
  29. 8 5
      app/src/main/res/layout/notes_list_fragment.xml
  30. 35 0
      app/src/main/res/layout/notes_list_item.xml
  31. 83 0
      app/src/main/res/layout/options_fragment.xml
  32. 1 7
      app/src/main/res/layout/settings_fragment.xml
  33. 27 9
      app/src/main/res/navigation/nav_graph.xml
  34. 3 0
      app/src/main/res/transition/custom_transition.xml
  35. 3 0
      app/src/main/res/values/colors.xml
  36. 9 1
      app/src/main/res/values/strings.xml
  37. 11 8
      app/src/main/res/values/styles.xml

+ 3 - 0
app/build.gradle

@@ -25,6 +25,7 @@ android {
         debug {
             minifyEnabled false
             proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+            applicationIdSuffix ".debug"
         }
     }
 }
@@ -49,6 +50,8 @@ dependencies {
     implementation 'androidx.lifecycle:lifecycle-extensions:2.0.0'
     implementation 'android.arch.navigation:navigation-fragment:1.0.0-alpha07'
     implementation 'androidx.room:room-runtime:2.1.0-alpha02'
+    implementation 'androidx.legacy:legacy-support-v4:1.0.0-alpha1'
+    implementation 'androidx.legacy:legacy-support-v13:1.0.0-alpha1'
     kapt "androidx.room:room-compiler:2.1.0-alpha02"
     kapt "androidx.lifecycle:lifecycle-compiler:2.0.0"
 

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

@@ -5,8 +5,8 @@ import androidx.room.Room
 import androidx.test.InstrumentationRegistry
 import androidx.test.runner.AndroidJUnit4
 
-import com.sduduzog.slimlauncher.ui.main.model.AppDao
-import com.sduduzog.slimlauncher.ui.main.model.AppRoomDatabase
+import com.sduduzog.slimlauncher.data.AppDao
+import com.sduduzog.slimlauncher.data.DataRoomDatabase
 
 import org.junit.After
 import org.junit.Before
@@ -21,7 +21,7 @@ import org.junit.Rule
 class DBTest {
 
     private var mAppDao: AppDao? = null
-    private var mDb: AppRoomDatabase? = null
+    private var mDb: DataRoomDatabase? = null
 
     @get:Rule
     var instantTaskExecutorRule = InstantTaskExecutorRule()
@@ -29,7 +29,7 @@ class DBTest {
     @Before
     fun createDb() {
         val context = InstrumentationRegistry.getTargetContext()
-        mDb = Room.inMemoryDatabaseBuilder(context, AppRoomDatabase::class.java).build()
+        mDb = Room.inMemoryDatabaseBuilder(context, DataRoomDatabase::class.java).build()
         mAppDao = mDb?.appDao()
     }
 

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

@@ -8,7 +8,7 @@ import androidx.appcompat.app.AppCompatActivity
 import androidx.navigation.NavController
 import androidx.navigation.NavDestination
 import androidx.navigation.Navigation.findNavController
-import com.sduduzog.slimlauncher.ui.main.model.MainViewModel
+import com.sduduzog.slimlauncher.ui.main.MainViewModel
 
 
 class MainActivity : AppCompatActivity(), SharedPreferences.OnSharedPreferenceChangeListener, NavController.OnNavigatedListener {

+ 1 - 1
app/src/main/java/com/sduduzog/slimlauncher/ui/main/model/App.kt → app/src/main/java/com/sduduzog/slimlauncher/data/App.kt

@@ -1,4 +1,4 @@
-package com.sduduzog.slimlauncher.ui.main.model
+package com.sduduzog.slimlauncher.data
 
 import androidx.room.ColumnInfo
 import androidx.room.Entity

+ 1 - 1
app/src/main/java/com/sduduzog/slimlauncher/ui/main/model/AppDao.kt → app/src/main/java/com/sduduzog/slimlauncher/data/AppDao.kt

@@ -1,4 +1,4 @@
-package com.sduduzog.slimlauncher.ui.main.model
+package com.sduduzog.slimlauncher.data
 
 import androidx.lifecycle.LiveData
 import androidx.room.*

+ 45 - 15
app/src/main/java/com/sduduzog/slimlauncher/ui/main/model/AppRepository.kt → app/src/main/java/com/sduduzog/slimlauncher/data/DataRepository.kt

@@ -1,4 +1,4 @@
-package com.sduduzog.slimlauncher.ui.main.model
+package com.sduduzog.slimlauncher.data
 
 import android.app.Application
 import android.content.Intent
@@ -8,12 +8,14 @@ import android.os.AsyncTask
 import androidx.lifecycle.LiveData
 import java.util.*
 
-class AppRepository(application: Application) {
+class DataRepository(application: Application) {
 
-    private val db: AppRoomDatabase = AppRoomDatabase.getDatabase(application)!!
-    private var appDao: AppDao = db.appDao()
+    private val db: DataRoomDatabase = DataRoomDatabase.getDatabase(application)!!
+    private val appDao: AppDao = db.appDao()
+    private val noteDao: NoteDao = db.noteDao()
     private var _apps: LiveData<List<App>> = appDao.apps
     private var _homeApps: LiveData<List<HomeApp>> = appDao.homeApps
+    private var _notes: LiveData<List<Note>> = noteDao.notes
 
     private var pm: PackageManager = application.packageManager
 
@@ -23,12 +25,15 @@ class AppRepository(application: Application) {
     val apps: LiveData<List<App>>
         get() = _apps
 
-    fun insert(app: HomeApp) {
-        InsertAsyncTask(appDao).execute(app)
+    val notes: LiveData<List<Note>>
+    get() = _notes
+
+    fun insertHomeApp(app: HomeApp) {
+        InsertHomeAppAsyncTask(appDao).execute(app)
     }
 
-    fun delete(app: HomeApp) {
-        DeleteAsyncTask(appDao).execute(app)
+    fun deleteHomeApp(app: HomeApp) {
+        DeleteHomeAppAsyncTask(appDao).execute(app)
     }
 
     fun updateApps(list: List<HomeApp>) {
@@ -41,7 +46,15 @@ class AppRepository(application: Application) {
         RefreshAppsAsyncTask(appDao).execute(pm)
     }
 
-    private class InsertAsyncTask internal constructor(private val mAsyncTaskDao: AppDao) : AsyncTask<HomeApp, Void, Void>() {
+    fun saveNote(note: Note){
+        SaveNoteAsyncTask(noteDao).execute(note)
+    }
+
+    fun deleteNote(note: Note){
+        DeleteNoteAsyncTask(noteDao).execute(note)
+    }
+
+    private class InsertHomeAppAsyncTask internal constructor(private val mAsyncTaskDao: AppDao) : AsyncTask<HomeApp, Void, Void>() {
 
         override fun doInBackground(vararg params: HomeApp): Void? {
             mAsyncTaskDao.addHomeApp(params[0])
@@ -49,7 +62,7 @@ class AppRepository(application: Application) {
         }
     }
 
-    private class DeleteAsyncTask internal constructor(private val mAsyncTaskDao: AppDao) : AsyncTask<HomeApp, Void, Void>() {
+    private class DeleteHomeAppAsyncTask internal constructor(private val mAsyncTaskDao: AppDao) : AsyncTask<HomeApp, Void, Void>() {
 
         override fun doInBackground(vararg params: HomeApp): Void? {
             mAsyncTaskDao.delete(params[0])
@@ -76,7 +89,6 @@ class AppRepository(application: Application) {
             val launchables = pm.queryIntentActivities(main, 0)
             Collections.sort(launchables,
                     ResolveInfo.DisplayNameComparator(pm))
-            mAsyncTaskDao.deleteAll()
             for (i in launchables.indices) {
                 val item = launchables[i]
                 val activity = item.activityInfo
@@ -87,17 +99,35 @@ class AppRepository(application: Application) {
         }
     }
 
+    private class SaveNoteAsyncTask internal constructor(private val mAsyncTaskDao: NoteDao) : AsyncTask<Note, Void, Void>() {
+
+        override fun doInBackground(vararg params: Note): Void? {
+            val note = params[0]
+            mAsyncTaskDao.saveNote(note)
+            return null
+        }
+    }
+
+    private class DeleteNoteAsyncTask internal constructor(private val mAsyncTaskDao: NoteDao) : AsyncTask<Note, Void, Void>() {
+
+        override fun doInBackground(vararg params: Note): Void? {
+            val note = params[0]
+            mAsyncTaskDao.deleteNote(note)
+            return null
+        }
+    }
+
 
     companion object {
 
         @Volatile
         @JvmStatic
-        private var INSTANCE: AppRepository? = null
+        private var INSTANCE: DataRepository? = null
 
-        fun getInstance(application: Application): AppRepository {
-            synchronized(AppRepository::class.java) {
+        fun getInstance(application: Application): DataRepository {
+            synchronized(DataRepository::class.java) {
                 if (INSTANCE == null) {
-                    INSTANCE = AppRepository(application)
+                    INSTANCE = DataRepository(application)
                 }
                 return INSTANCE!!
             }

+ 18 - 8
app/src/main/java/com/sduduzog/slimlauncher/ui/main/model/AppRoomDatabase.kt → app/src/main/java/com/sduduzog/slimlauncher/data/DataRoomDatabase.kt

@@ -1,4 +1,4 @@
-package com.sduduzog.slimlauncher.ui.main.model
+package com.sduduzog.slimlauncher.data
 
 import android.content.Context
 import androidx.room.Database
@@ -7,22 +7,26 @@ import androidx.room.RoomDatabase
 import androidx.room.migration.Migration
 import androidx.sqlite.db.SupportSQLiteDatabase
 
-@Database(entities = [App::class, HomeApp::class], version = 2, exportSchema = false)
-abstract class AppRoomDatabase : RoomDatabase() {
+
+
+@Database(entities = [App::class, HomeApp::class, Note::class], version = 3, exportSchema = false)
+abstract class DataRoomDatabase : RoomDatabase() {
 
     abstract fun appDao(): AppDao
 
+    abstract fun noteDao(): NoteDao
+
     companion object {
         @Volatile
         @JvmStatic
-        private var INSTANCE: AppRoomDatabase? = null
+        private var INSTANCE: DataRoomDatabase? = null
 
-        fun getDatabase(context: Context): AppRoomDatabase? {
-            synchronized(AppRoomDatabase::class.java) {
+        fun getDatabase(context: Context): DataRoomDatabase? {
+            synchronized(DataRoomDatabase::class.java) {
                 if (INSTANCE == null) {
                     INSTANCE = Room.databaseBuilder(context.applicationContext,
-                            AppRoomDatabase::class.java, "app_database")
-                            .addMigrations(MIGRATION_1_2)
+                            DataRoomDatabase::class.java, "app_database")
+                            .addMigrations(MIGRATION_1_2, MIGRATION_2_3)
                             .build()
                 }
                 return INSTANCE
@@ -43,5 +47,11 @@ abstract class AppRoomDatabase : RoomDatabase() {
                 }
             }
         }
+
+        private val MIGRATION_2_3 = object: Migration(2, 3){
+            override fun migrate(database: SupportSQLiteDatabase) {
+                database.execSQL("CREATE TABLE IF NOT EXISTS `notes` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `title` TEXT, `body` TEXT NOT NULL, `edited` INTEGER NOT NULL)")
+            }
+        }
     }
 }

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

@@ -1,4 +1,4 @@
-package com.sduduzog.slimlauncher.ui.main.model
+package com.sduduzog.slimlauncher.data
 
 import androidx.room.ColumnInfo
 import androidx.room.Entity

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

@@ -0,0 +1,21 @@
+package com.sduduzog.slimlauncher.data
+
+import androidx.room.ColumnInfo
+import androidx.room.Entity
+import androidx.room.PrimaryKey
+import java.io.Serializable
+
+
+@Entity(tableName = "notes")
+data class Note(
+        @field:ColumnInfo(name = "body")
+        var body: String,
+        @field:ColumnInfo(name = "edited")
+        var edited: Long
+): Serializable {
+    @field:ColumnInfo(name = "id")
+    @PrimaryKey(autoGenerate = true)
+    var id: Int? = null
+    @field:ColumnInfo(name = "title")
+    var title: String? = null
+}

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

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

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

@@ -9,15 +9,13 @@ import android.view.View
 import android.view.ViewGroup
 import android.widget.TextView
 import android.widget.Toast
-import androidx.fragment.app.Fragment
 import androidx.lifecycle.Observer
 import androidx.lifecycle.ViewModelProviders
 import androidx.recyclerview.widget.RecyclerView
 import com.sduduzog.slimlauncher.R
-import com.sduduzog.slimlauncher.ui.main.model.HomeApp
-import com.sduduzog.slimlauncher.ui.main.model.MainViewModel
+import com.sduduzog.slimlauncher.data.HomeApp
 
-class HomeAppsAdapter(private var fragment: Fragment)
+class HomeAppsAdapter(private var fragment: MainFragment)
     : RecyclerView.Adapter<HomeAppsAdapter.ViewHolder>() {
 
     private var apps: List<HomeApp> = listOf()

+ 12 - 76
app/src/main/java/com/sduduzog/slimlauncher/ui/main/MainFragment.kt

@@ -1,27 +1,24 @@
 package com.sduduzog.slimlauncher.ui.main
 
 import android.animation.ObjectAnimator
-import android.content.*
-import android.net.Uri
-import android.os.Build
+import android.content.BroadcastReceiver
+import android.content.Context
+import android.content.Intent
+import android.content.IntentFilter
 import android.os.Bundle
 import android.provider.AlarmClock
 import android.provider.MediaStore
-import android.provider.Settings
 import android.util.Log
 import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
-import android.widget.FrameLayout
 import androidx.fragment.app.Fragment
 import androidx.navigation.Navigation
 import com.daasuu.ei.Ease
 import com.daasuu.ei.EasingInterpolator
-import com.google.android.material.bottomsheet.BottomSheetBehavior
 import com.sduduzog.slimlauncher.MainActivity
 import com.sduduzog.slimlauncher.R
-import kotlinx.android.synthetic.main.main_bottom_sheet.*
-import kotlinx.android.synthetic.main.main_content.*
+import kotlinx.android.synthetic.main.main_fragment.*
 import java.text.SimpleDateFormat
 import java.util.*
 
@@ -31,9 +28,7 @@ class MainFragment : Fragment() {
     @Suppress("PropertyName")
     val TAG: String = "MainFragment"
 
-    private lateinit var adapter: HomeAppsAdapter
     private lateinit var receiver: BroadcastReceiver
-    private lateinit var sheetBehavior: BottomSheetBehavior<FrameLayout>
 
     override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                               savedInstanceState: Bundle?): View {
@@ -42,29 +37,21 @@ class MainFragment : Fragment() {
 
     override fun onActivityCreated(savedInstanceState: Bundle?) {
         super.onActivityCreated(savedInstanceState)
-        Log.d(TAG, "onActivityCreated")
-        adapter = HomeAppsAdapter(this)
-        mainAppsList.adapter = adapter
-
-        sheetBehavior = BottomSheetBehavior.from(bottomSheet)
-        optionsView.alpha = 0.0f
+        mainAppsList.adapter = HomeAppsAdapter(this)
         setEventListeners()
     }
 
     override fun onStart() {
         super.onStart()
-        Log.d(TAG, "onStart")
         receiver = ClockReceiver()
         activity?.registerReceiver(receiver, IntentFilter(Intent.ACTION_TIME_TICK))
 
         doBounceAnimation(ivExpand)
-        sheetBehavior.state = BottomSheetBehavior.STATE_COLLAPSED
     }
 
 
     override fun onResume() {
         super.onResume()
-        Log.d(TAG, "onResume")
         updateUi()
     }
 
@@ -73,7 +60,6 @@ class MainFragment : Fragment() {
         with(context as MainActivity) {
             this.onBackPressedListener = object : MainActivity.OnBackPressedListener {
                 override fun onBackPressed() {
-                    sheetBehavior.state = BottomSheetBehavior.STATE_COLLAPSED
                 }
             }
         }
@@ -85,11 +71,8 @@ class MainFragment : Fragment() {
     }
 
     private fun setEventListeners() {
-        bottomSheet.setOnClickListener {
-
-        }
         clockTextView.setOnClickListener {
-            try{
+            try {
                 val intent = Intent(AlarmClock.ACTION_SHOW_ALARMS)
                 intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
                 startActivity(intent)
@@ -97,34 +80,8 @@ class MainFragment : Fragment() {
                 // Do nothing
             }
         }
-        sheetBehavior.setBottomSheetCallback(object : BottomSheetBehavior.BottomSheetCallback() {
-            override fun onSlide(p0: View, p1: Float) {
-                val multi = 3 * p1
-                optionsView.alpha = multi
-                optionsView.cardElevation = p1 * 8
-                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
-                    optionsView.elevation = p1 * 8
-                }
-            }
 
-            override fun onStateChanged(bottomSheet: View, newState: Int) {
-                iconTray.visibility = View.GONE
-                if (newState == BottomSheetBehavior.STATE_COLLAPSED) {
-                    iconTray.visibility = View.VISIBLE
-                }
-            }
-        })
-        settingsText.setOnClickListener(Navigation.createNavigateOnClickListener(R.id.action_openSettingsFragment))
-        deviceSettingsText.setOnClickListener { openSettings() }
-        rateAppText.setOnClickListener { rateApp() }
-        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
-            changeLauncherText.setOnClickListener {
-                startActivity(Intent(Settings.ACTION_HOME_SETTINGS))
-            }
-        } else changeLauncherText.visibility = View.GONE
-        aboutText.setOnClickListener(Navigation.createNavigateOnClickListener(R.id.action_openAboutFragment))
-        notesText.setOnClickListener(Navigation.createNavigateOnClickListener(R.id.action_openNotesListFragment))
-        ivCall.setOnClickListener {
+        buttonDialer.setOnClickListener {
             try {
                 val intent = Intent(Intent.ACTION_DIAL)
                 startActivity(intent)
@@ -132,7 +89,10 @@ class MainFragment : Fragment() {
                 Log.e(TAG, e.message)
             }
         }
-        ivCamera.setOnClickListener {
+
+        ivExpand.setOnClickListener(Navigation.createNavigateOnClickListener(R.id.action_openOptionsFragment))
+
+        buttonCamera.setOnClickListener {
             try {
                 val intent = Intent(MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA)
                 startActivity(intent)
@@ -140,32 +100,9 @@ class MainFragment : Fragment() {
                 Log.e(TAG, e.message)
             }
         }
-
-        ivExpand.setOnClickListener {
-            if (sheetBehavior.state == BottomSheetBehavior.STATE_COLLAPSED) sheetBehavior.state = BottomSheetBehavior.STATE_HALF_EXPANDED
-        }
     }
 
-    private fun rateApp() {
-        val uri = Uri.parse("market://details?id=" + context?.packageName)
-        val goToMarket = Intent(Intent.ACTION_VIEW, uri)
-        goToMarket.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY or
-                Intent.FLAG_ACTIVITY_MULTIPLE_TASK)
-        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
-            goToMarket.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT)
-        }
-        try {
-            startActivity(goToMarket)
-            Log.d(TAG, goToMarket.data?.query)
-        } catch (e: ActivityNotFoundException) {
-            startActivity(Intent(Intent.ACTION_VIEW,
-                    Uri.parse("http://play.google.com/store/apps/details?id=" + context?.packageName)))
-        }
-    }
 
-    private fun openSettings() {
-        startActivity(Intent(android.provider.Settings.ACTION_SETTINGS))
-    }
 
     private fun doBounceAnimation(targetView: View) {
         val animator = ObjectAnimator.ofFloat(targetView, "translationY", 0f, -20f, 0f)
@@ -200,5 +137,4 @@ class MainFragment : Fragment() {
             updateUi()
         }
     }
-
 }

+ 8 - 5
app/src/main/java/com/sduduzog/slimlauncher/ui/main/model/MainViewModel.kt → app/src/main/java/com/sduduzog/slimlauncher/ui/main/MainViewModel.kt

@@ -1,11 +1,14 @@
-package com.sduduzog.slimlauncher.ui.main.model
+package com.sduduzog.slimlauncher.ui.main
 
 import android.app.Application
 import androidx.lifecycle.AndroidViewModel
 import androidx.lifecycle.LiveData
+import com.sduduzog.slimlauncher.data.App
+import com.sduduzog.slimlauncher.data.DataRepository
+import com.sduduzog.slimlauncher.data.HomeApp
 
 class MainViewModel(application: Application) : AndroidViewModel(application) {
-    private var _repository: AppRepository = AppRepository.getInstance(application)
+    private var _repository: DataRepository = DataRepository.getInstance(application)
     private var _homeApps: LiveData<List<HomeApp>>
     private var _apps: LiveData<List<App>>
 
@@ -21,7 +24,7 @@ class MainViewModel(application: Application) : AndroidViewModel(application) {
         get() = _apps
 
     fun deleteApp(app: HomeApp) {
-        _repository.delete(app)
+        _repository.deleteHomeApp(app)
     }
 
     fun updateApps(list: List<HomeApp>) {
@@ -33,14 +36,14 @@ class MainViewModel(application: Application) : AndroidViewModel(application) {
     }
 
     fun addToHomeScreen(app: HomeApp) {
-        _repository.insert(app)
+        _repository.insertHomeApp(app)
     }
 
     fun addToHomeScreen(apps: List<App>) {
         for (i in apps.indices){
             val app = apps[i]
             val home = HomeApp(app.appName, app.packageName, app.activityName, i)
-            _repository.insert(home)
+            _repository.insertHomeApp(home)
         }
     }
 }

+ 1 - 1
app/src/main/java/com/sduduzog/slimlauncher/ui/main/settings/OnItemActionListener.kt → app/src/main/java/com/sduduzog/slimlauncher/ui/main/OnItemActionListener.kt

@@ -1,4 +1,4 @@
-package com.sduduzog.slimlauncher.ui.main.settings
+package com.sduduzog.slimlauncher.ui.main
 
 interface OnItemActionListener {
     fun onViewMoved(oldPosition: Int, newPosition: Int): Boolean

+ 59 - 0
app/src/main/java/com/sduduzog/slimlauncher/ui/main/OptionsFragment.kt

@@ -0,0 +1,59 @@
+package com.sduduzog.slimlauncher.ui.main
+
+
+import android.content.ActivityNotFoundException
+import android.content.Intent
+import android.net.Uri
+import android.os.Build
+import android.os.Bundle
+import android.provider.Settings
+import android.util.Log
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.fragment.app.Fragment
+import androidx.navigation.Navigation
+import com.sduduzog.slimlauncher.R
+import kotlinx.android.synthetic.main.options_fragment.*
+
+
+class OptionsFragment : Fragment() {
+
+    @Suppress("PropertyName")
+    val TAG: String = "OptionsFragment"
+
+    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
+                              savedInstanceState: Bundle?): View? {
+        // Inflate the layout for this fragment
+        return inflater.inflate(R.layout.options_fragment, container, false)
+    }
+
+    override fun onActivityCreated(savedInstanceState: Bundle?) {
+        super.onActivityCreated(savedInstanceState)
+        notesText.setOnClickListener(Navigation.createNavigateOnClickListener(R.id.action_openNotesListFragment))
+        settingsText.setOnClickListener(Navigation.createNavigateOnClickListener(R.id.action_openSettingsFragment))
+        deviceSettingsText.setOnClickListener {
+            startActivity(Intent(Settings.ACTION_SETTINGS))
+        }
+        changeLauncherText.setOnClickListener {
+            startActivity(Intent(Settings.ACTION_HOME_SETTINGS))
+        }
+        rateAppText.setOnClickListener {
+            val uri = Uri.parse("market://details?id=" + context?.packageName)
+            val goToMarket = Intent(Intent.ACTION_VIEW, uri)
+            goToMarket.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY or
+                    Intent.FLAG_ACTIVITY_MULTIPLE_TASK)
+            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+                goToMarket.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT)
+            }
+            try {
+                startActivity(goToMarket)
+                Log.d(TAG, goToMarket.data?.query)
+            } catch (e: ActivityNotFoundException) {
+                startActivity(Intent(Intent.ACTION_VIEW,
+                        Uri.parse("http://play.google.com/store/apps/details?id=" + context?.packageName)))
+            }
+        }
+        aboutText.setOnClickListener(Navigation.createNavigateOnClickListener(R.id.action_openAboutFragment))
+    }
+}

+ 53 - 0
app/src/main/java/com/sduduzog/slimlauncher/ui/main/notes/NoteFragment.kt

@@ -1,18 +1,71 @@
 package com.sduduzog.slimlauncher.ui.main.notes
 
 
+import android.content.Context
 import android.os.Bundle
+import android.util.Log
 import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
+import android.view.inputmethod.InputMethodManager
 import androidx.fragment.app.Fragment
+import androidx.lifecycle.ViewModelProviders
 import com.sduduzog.slimlauncher.R
+import com.sduduzog.slimlauncher.data.Note
+import kotlinx.android.synthetic.main.note_fragment.*
+
 
 class NoteFragment : Fragment() {
 
+    @Suppress("PropertyName")
+    val TAG: String = "NoteFragment"
+
+    private lateinit var note: Note
+    private lateinit var viewModel: NotesViewModel
+
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+        arguments.let {
+            note = if (it!!.containsKey("note")) {
+                it.get("note") as Note
+            } else {
+                Note("", -1L)
+            }
+        }
+        Log.d(TAG, "$note")
+        viewModel = ViewModelProviders.of(this).get(NotesViewModel::class.java)
+    }
+
     override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                               savedInstanceState: Bundle?): View? {
         // Inflate the layout for this fragment
         return inflater.inflate(R.layout.note_fragment, container, false)
     }
+
+    override fun onActivityCreated(savedInstanceState: Bundle?) {
+        super.onActivityCreated(savedInstanceState)
+        if (note.edited == -1L) {
+            if (bodyEditText.requestFocus()) {
+                val imm = activity!!.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
+                imm.showSoftInput(bodyEditText, InputMethodManager.SHOW_IMPLICIT)
+            }
+        }
+    }
+
+    override fun onStop() {
+        super.onStop()
+        saveNote()
+    }
+
+    private fun saveNote() {
+        val body = bodyEditText.text.toString()
+        val title = titleEditText.text.toString()
+        if (title.isNotEmpty()){
+            note.title = title
+        }
+        if (body.isNotEmpty()) {
+            note.body = body
+            viewModel.saveNote(note)
+        }
+    }
 }

+ 96 - 0
app/src/main/java/com/sduduzog/slimlauncher/ui/main/notes/NotesListAdapter.kt

@@ -0,0 +1,96 @@
+package com.sduduzog.slimlauncher.ui.main.notes
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+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
+import com.sduduzog.slimlauncher.data.Note
+import com.sduduzog.slimlauncher.ui.main.OnItemActionListener
+import java.text.SimpleDateFormat
+import java.util.*
+
+class NotesListAdapter(private val fragment: NotesListFragment) : RecyclerView.Adapter<NotesListAdapter.ViewHolder>(), OnItemActionListener {
+
+    private var deletedFrom = 0
+    private var notes: ArrayList<Note> = arrayListOf()
+    private var viewModel = ViewModelProviders.of(fragment).get(NotesViewModel::class.java)
+
+    init {
+        viewModel.notes.observe(fragment, Observer {
+            if (it != null) {
+                updateNotes(it.orEmpty())
+            }
+        })
+    }
+
+    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
+        val view = LayoutInflater.from(parent.context).inflate(R.layout.notes_list_item, parent, false)
+        return ViewHolder(view)
+    }
+
+    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
+        val note = notes[position]
+        with(note.title) {
+            if (this != null) {
+                holder.title.text = this
+                holder.title.visibility = View.VISIBLE
+            } else {
+                holder.title.visibility = View.GONE
+            }
+        }
+        holder.body.text = note.body
+        val fWatchDate = SimpleDateFormat("MMM dd, hh:mm", Locale.ENGLISH)
+        holder.edited.text = fWatchDate.format(note.edited)
+        val bundle = Bundle()
+        bundle.putSerializable("note", note)
+        holder.itemView.setOnClickListener(Navigation.createNavigateOnClickListener(R.id.action_openNoteFragment, bundle))
+    }
+
+    override fun getItemCount() = notes.size
+
+    override fun onViewMoved(oldPosition: Int, newPosition: Int): Boolean {
+        // Do nothing
+        return false
+    }
+
+    override fun onViewSwiped(position: Int) {
+        deletedFrom = position
+        if (position < notes.size) {
+            val note = notes[position]
+            viewModel.deleteNote(note)
+            Snackbar.make(fragment.view!!, "Note deleted successfully", Snackbar.LENGTH_LONG)
+                    .setAction("UNDO") {
+                        viewModel.saveNote(note)
+                    }
+                    .show()
+        } else
+            notifyDataSetChanged()
+    }
+
+    override fun onViewIdle() {
+        // Do nothing
+    }
+
+    private fun updateNotes(newList: List<Note>) {
+        val size = notes.size
+        notes.clear()
+        notes.addAll(newList)
+        if (size > newList.size) {
+            notifyItemRemoved(deletedFrom)
+        } else if (size < newList.size) notifyDataSetChanged()
+
+    }
+
+    inner class ViewHolder(mView: View) : RecyclerView.ViewHolder(mView) {
+        val title: TextView = mView.findViewById(R.id.item_note_title)
+        val body: TextView = mView.findViewById(R.id.item_note_body)
+        val edited: TextView = mView.findViewById(R.id.item_note_edited)
+    }
+}

+ 42 - 3
app/src/main/java/com/sduduzog/slimlauncher/ui/main/notes/NotesListFragment.kt

@@ -2,11 +2,18 @@ package com.sduduzog.slimlauncher.ui.main.notes
 
 
 import android.os.Bundle
+import android.util.Log
 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
+import com.sduduzog.slimlauncher.ui.main.OnItemActionListener
+import kotlinx.android.synthetic.main.notes_list_fragment.*
+import kotlinx.android.synthetic.main.settings_fragment.*
 
 
 class NotesListFragment : Fragment() {
@@ -17,7 +24,39 @@ class NotesListFragment : Fragment() {
         return inflater.inflate(R.layout.notes_list_fragment, container, false)
     }
 
-//    override fun onActivityCreated(savedInstanceState: Bundle?) {
-//        super.onActivityCreated(savedInstanceState)
-//    }
+    override fun onActivityCreated(savedInstanceState: Bundle?) {
+        super.onActivityCreated(savedInstanceState)
+        fab_add_note.setOnClickListener(Navigation.createNavigateOnClickListener(R.id.action_openNoteFragment))
+        fab_add_note.setOnLongClickListener {
+            Log.d("NoteListFragment", "Long press")
+            true
+        }
+
+        val adapter = NotesListAdapter(this)
+
+        notesList.adapter = adapter
+
+        val listener: OnItemActionListener = adapter
+
+        val simpleItemTouchCallback = object : ItemTouchHelper.Callback() {
+
+            override fun getMovementFlags(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder): Int {
+                val swipeFlags = ItemTouchHelper.LEFT or ItemTouchHelper.RIGHT
+                return makeMovementFlags(0, swipeFlags)
+            }
+
+            override fun onMove(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder, target: RecyclerView.ViewHolder): Boolean {
+                // Do nothing
+                return true
+            }
+
+            override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
+                listener.onViewSwiped(viewHolder.adapterPosition)
+            }
+        }
+
+        val itemTouchHelper = ItemTouchHelper(simpleItemTouchCallback)
+
+        itemTouchHelper.attachToRecyclerView(notesList)
+    }
 }

+ 28 - 0
app/src/main/java/com/sduduzog/slimlauncher/ui/main/notes/NotesViewModel.kt

@@ -0,0 +1,28 @@
+package com.sduduzog.slimlauncher.ui.main.notes
+
+import android.app.Application
+import androidx.lifecycle.AndroidViewModel
+import androidx.lifecycle.LiveData
+import com.sduduzog.slimlauncher.data.DataRepository
+import com.sduduzog.slimlauncher.data.Note
+
+class NotesViewModel(application: Application) : AndroidViewModel(application) {
+    private var _repository: DataRepository = DataRepository.getInstance(application)
+
+    private var _notes: LiveData<List<Note>>
+
+    init {
+        _notes = _repository.notes
+    }
+
+    val notes: LiveData<List<Note>>
+        get() = _notes
+
+    fun saveNote(note: Note){
+        _repository.saveNote(note)
+    }
+
+    fun deleteNote(note: Note){
+        _repository.deleteNote(note)
+    }
+}

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

@@ -8,7 +8,7 @@ import androidx.fragment.app.Fragment
 import androidx.lifecycle.ViewModelProviders
 import androidx.navigation.Navigation
 import com.sduduzog.slimlauncher.R
-import com.sduduzog.slimlauncher.ui.main.model.MainViewModel
+import com.sduduzog.slimlauncher.ui.main.MainViewModel
 import kotlinx.android.synthetic.main.apps_fragment.*
 
 

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

@@ -9,9 +9,9 @@ import androidx.fragment.app.Fragment
 import androidx.lifecycle.Observer
 import androidx.lifecycle.ViewModelProviders
 import com.sduduzog.slimlauncher.R
-import com.sduduzog.slimlauncher.ui.main.model.App
-import com.sduduzog.slimlauncher.ui.main.model.HomeApp
-import com.sduduzog.slimlauncher.ui.main.model.MainViewModel
+import com.sduduzog.slimlauncher.data.App
+import com.sduduzog.slimlauncher.data.HomeApp
+import com.sduduzog.slimlauncher.ui.main.MainViewModel
 
 
 import com.sduduzog.slimlauncher.ui.main.settings.AppsFragment.OnAppsChooserListener

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

@@ -1,7 +1,6 @@
 package com.sduduzog.slimlauncher.ui.main.settings
 
 
-import android.content.Context
 import android.content.Context.MODE_PRIVATE
 import android.graphics.Canvas
 import android.os.Bundle
@@ -11,9 +10,9 @@ import android.view.ViewGroup
 import androidx.core.content.edit
 import androidx.fragment.app.Fragment
 import androidx.recyclerview.widget.ItemTouchHelper
-import androidx.recyclerview.widget.LinearLayoutManager
 import androidx.recyclerview.widget.RecyclerView
 import com.sduduzog.slimlauncher.R
+import com.sduduzog.slimlauncher.ui.main.OnItemActionListener
 import kotlinx.android.synthetic.main.settings_fragment.*
 
 
@@ -30,7 +29,6 @@ class SettingsFragment : Fragment() {
         super.onActivityCreated(savedInstanceState)
         adapter = SettingsListAdapter(this)
         settingsAppList.adapter = adapter
-        settingsAppList.layoutManager = LinearLayoutManager((activity as Context))
         val listener: OnItemActionListener = adapter
 
         val simpleItemTouchCallback = object : ItemTouchHelper.Callback() {

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

@@ -12,8 +12,9 @@ import androidx.lifecycle.ViewModelProviders
 import androidx.navigation.Navigation
 import androidx.recyclerview.widget.RecyclerView
 import com.sduduzog.slimlauncher.R
-import com.sduduzog.slimlauncher.ui.main.model.HomeApp
-import com.sduduzog.slimlauncher.ui.main.model.MainViewModel
+import com.sduduzog.slimlauncher.data.HomeApp
+import com.sduduzog.slimlauncher.ui.main.MainViewModel
+import com.sduduzog.slimlauncher.ui.main.OnItemActionListener
 
 class SettingsListAdapter(private val fragment: Fragment) : RecyclerView.Adapter<SettingsListAdapter.AppViewHolder>(), OnItemActionListener {
 

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

@@ -1,6 +1,7 @@
 package com.sduduzog.slimlauncher.ui.main.setup
 
-import com.sduduzog.slimlauncher.ui.main.model.App
+import com.sduduzog.slimlauncher.data.App
+
 
 interface DialogInteractionListener {
     fun onAppsChosen(apps: List<App>)

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

@@ -18,9 +18,9 @@ import androidx.lifecycle.Observer
 import androidx.lifecycle.ViewModelProviders
 import androidx.navigation.Navigation
 import com.sduduzog.slimlauncher.R
-import com.sduduzog.slimlauncher.ui.main.model.App
-import com.sduduzog.slimlauncher.ui.main.model.HomeApp
-import com.sduduzog.slimlauncher.ui.main.model.MainViewModel
+import com.sduduzog.slimlauncher.data.App
+import com.sduduzog.slimlauncher.data.HomeApp
+import com.sduduzog.slimlauncher.ui.main.MainViewModel
 import kotlinx.android.synthetic.main.setup_fragment.*
 import java.util.*
 

+ 15 - 0
app/src/main/res/drawable/note_item_background.xml

@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+
+    <corners
+        android:radius="8dp" />
+
+    <gradient
+        android:startColor="#18ffffff"
+        android:endColor="#10000000"
+        android:centerX="0"
+        android:centerY="0"
+        android:angle="45"/>
+
+</shape>

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

@@ -48,7 +48,7 @@
                 android:padding="8dp"
                 android:text="@string/main_options_text_notes"
                 android:textSize="24sp"
-                android:visibility="gone" />
+                android:visibility="visible" />
 
             <TextView
                 android:id="@+id/settingsText"

+ 82 - 6
app/src/main/res/layout/main_fragment.xml

@@ -1,13 +1,89 @@
 <?xml version="1.0" encoding="utf-8"?>
-<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<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/main"
+    android:id="@+id/main_content"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    tools:context=".ui.main.MainFragment">
+    tools:context=".ui.main.OptionsFragment">
 
-    <include layout="@layout/main_content" />
+    <TextView
+        android:id="@+id/clockTextView"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="32dp"
+        android:text="@string/main_placeholder_clock"
+        android:textSize="64sp"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
 
-    <include layout="@layout/main_bottom_sheet" />
+    <TextView
+        android:id="@+id/dateTextView"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="@string/main_placeholder_date"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/clockTextView" />
 
-</androidx.coordinatorlayout.widget.CoordinatorLayout>
+    <androidx.recyclerview.widget.RecyclerView
+        android:id="@+id/mainAppsList"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="16dp"
+        android:layout_marginTop="32dp"
+        android:layout_marginEnd="16dp"
+        app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent"
+        tools:listitem="@layout/main_list_item" />
+
+    <TextView
+        android:id="@+id/clockAmPm"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="16dp"
+        android:textSize="18sp"
+        app:layout_constraintStart_toEndOf="@+id/clockTextView"
+        app:layout_constraintTop_toTopOf="@+id/clockTextView" />
+
+    <Button
+        android:id="@+id/buttonDialer"
+        style="@style/Widget.AppCompat.Button.Borderless"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginBottom="8dp"
+        android:text="@string/main_button_dialer"
+        android:textAppearance="@style/TextAppearance.AppCompat"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintStart_toStartOf="parent" />
+
+    <ImageView
+        android:id="@+id/ivExpand"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="8dp"
+        android:layout_marginEnd="8dp"
+        android:contentDescription="@string/main_slim_options"
+        android:padding="16dp"
+        app:layout_constraintBottom_toBottomOf="@+id/buttonDialer"
+        app:layout_constraintEnd_toStartOf="@+id/buttonCamera"
+        app:layout_constraintStart_toEndOf="@+id/buttonDialer"
+        app:layout_constraintTop_toTopOf="@+id/buttonDialer"
+        app:srcCompat="@drawable/ic_expand" />
+
+    <Button
+        android:id="@+id/buttonCamera"
+        style="@style/Widget.AppCompat.Button.Borderless"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginBottom="8dp"
+        android:text="@string/main_button_camera"
+        android:textAppearance="@style/TextAppearance.AppCompat"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent" />
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 8 - 5
app/src/main/res/layout/notes_list_fragment.xml

@@ -15,21 +15,24 @@
         <androidx.appcompat.widget.Toolbar
             android:layout_width="match_parent"
             android:layout_height="match_parent"
-            app:title="Hello" />
+            app:title="Notes" />
     </com.google.android.material.appbar.AppBarLayout>
 
     <androidx.recyclerview.widget.RecyclerView
         android:id="@+id/notesList"
-        app:layout_behavior="@string/appbar_scrolling_view_behavior"
         android:layout_width="match_parent"
-        android:layout_height="match_parent"/>
+        android:layout_height="match_parent"
+        app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
+        app:layout_behavior="@string/appbar_scrolling_view_behavior"
+        tools:listitem="@layout/notes_list_item" />
 
     <com.google.android.material.floatingactionbutton.FloatingActionButton
+        android:id="@+id/fab_add_note"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_gravity="bottom|end"
         android:layout_margin="16dp"
-        app:layout_anchorGravity="bottom|end"
-        android:src="@drawable/ic_edit" />
+        android:src="@drawable/ic_edit"
+        app:layout_anchorGravity="bottom|end" />
 
 </androidx.coordinatorlayout.widget.CoordinatorLayout>

+ 35 - 0
app/src/main/res/layout/notes_list_item.xml

@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:layout_margin="4dp"
+    android:background="@drawable/note_item_background"
+    android:orientation="vertical"
+    android:padding="4dp">
+
+    <TextView
+        android:id="@+id/item_note_title"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:padding="4dp"
+        android:text="@string/note_fragment_hint_title"
+        android:textAppearance="@style/TextAppearance.AppCompat.Medium" />
+
+    <TextView
+        android:id="@+id/item_note_body"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:ellipsize="end"
+        android:maxLines="4"
+        android:padding="4dp"
+        android:text="@string/note_fragment_hint_body" />
+
+    <TextView
+        android:id="@+id/item_note_edited"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:alpha="0.5"
+        android:padding="4dp"
+        android:text="@string/main_placeholder_clock"
+        android:textSize="12sp" />
+</LinearLayout>

+ 83 - 0
app/src/main/res/layout/options_fragment.xml

@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout 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/bottomSheet"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical"
+    tools:context=".ui.main.OptionsFragment">
+
+    <View
+        android:id="@+id/view"
+        android:layout_width="match_parent"
+        android:layout_height="1dp"
+        android:alpha="0.1"
+        android:background="?android:attr/colorForeground" />
+
+    <TextView
+        android:id="@+id/textView"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_margin="16dp"
+        android:text="@string/main_slim_options"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <TextView
+        android:id="@+id/notesText"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_margin="8dp"
+        android:padding="8dp"
+        android:text="@string/main_options_text_notes"
+        android:textSize="24sp"
+        android:visibility="visible" />
+
+    <TextView
+        android:id="@+id/settingsText"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_margin="8dp"
+        android:padding="8dp"
+        android:text="@string/main_options_home_screen_apps"
+        android:textSize="24sp" />
+
+    <TextView
+        android:id="@+id/deviceSettingsText"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_margin="8dp"
+        android:padding="8dp"
+        android:text="@string/main_options_settings"
+        android:textSize="24sp" />
+
+    <TextView
+        android:id="@+id/changeLauncherText"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_margin="8dp"
+        android:padding="8dp"
+        android:text="@string/main_options_change_launcher"
+        android:textSize="24sp" />
+
+    <TextView
+        android:id="@+id/rateAppText"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_margin="8dp"
+        android:padding="8dp"
+        android:text="@string/main_options_feedback"
+        android:textSize="24sp" />
+
+    <TextView
+        android:id="@+id/aboutText"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_margin="8dp"
+        android:padding="8dp"
+        android:text="@string/main_options_about_slim"
+        android:textSize="24sp" />
+
+
+</LinearLayout>

+ 1 - 7
app/src/main/res/layout/settings_fragment.xml

@@ -12,7 +12,6 @@
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_marginStart="16dp"
-        android:layout_marginLeft="16dp"
         android:layout_marginTop="16dp"
         android:text="@string/settings_title"
         app:layout_constraintStart_toStartOf="parent"
@@ -26,6 +25,7 @@
         android:layout_marginLeft="16dp"
         android:layout_marginEnd="16dp"
         android:layout_marginRight="16dp"
+        app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintStart_toStartOf="parent"
@@ -37,7 +37,6 @@
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_marginStart="24dp"
-        android:layout_marginLeft="24dp"
         android:layout_marginTop="16dp"
         android:text="@string/settings_text_use_24_hour_clock"
         android:textAppearance="@style/TextAppearance.AppCompat"
@@ -52,7 +51,6 @@
         android:layout_height="wrap_content"
         android:layout_marginTop="8dp"
         android:layout_marginEnd="24dp"
-        android:layout_marginRight="24dp"
         android:textAppearance="@style/TextAppearance.AppCompat"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintTop_toTopOf="@+id/textView2" />
@@ -84,7 +82,6 @@
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_marginStart="24dp"
-        android:layout_marginLeft="24dp"
         android:layout_marginTop="8dp"
         android:text="@string/main_options_change_theme"
         android:textAppearance="@style/TextAppearance.AppCompat"
@@ -119,7 +116,6 @@
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_marginStart="24dp"
-        android:layout_marginLeft="24dp"
         android:text="@string/settings_text_home_screen_apps"
         android:textAppearance="@style/TextAppearance.AppCompat"
         android:textSize="24sp"
@@ -133,7 +129,6 @@
         android:layout_height="wrap_content"
         android:layout_marginTop="8dp"
         android:layout_marginEnd="16dp"
-        android:layout_marginRight="16dp"
         android:text="@string/settings_button_change_theme"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintTop_toBottomOf="@+id/divider" />
@@ -143,7 +138,6 @@
         android:layout_width="0dp"
         android:layout_height="wrap_content"
         android:layout_marginEnd="8dp"
-        android:layout_marginRight="8dp"
         android:text="@string/settings_list_item_subtext"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintStart_toStartOf="@+id/textView8"

+ 27 - 9
app/src/main/res/navigation/nav_graph.xml

@@ -11,14 +11,8 @@
         android:label="main_fragment"
         tools:layout="@layout/main_fragment">
         <action
-            android:id="@+id/action_openSettingsFragment"
-            app:destination="@id/settingsFragment" />
-        <action
-            android:id="@+id/action_openAboutFragment"
-            app:destination="@id/aboutFragment" />
-        <action
-            android:id="@+id/action_openNotesListFragment"
-            app:destination="@+id/notesListFragment" />
+            android:id="@+id/action_openOptionsFragment"
+            app:destination="@id/optionsFragment" />
     </fragment>
     <fragment
         android:id="@+id/settingsFragment"
@@ -52,5 +46,29 @@
         android:id="@+id/notesListFragment"
         android:name="com.sduduzog.slimlauncher.ui.main.notes.NotesListFragment"
         android:label="notes_list_fragment"
-        tools:layout="@layout/notes_list_fragment" />
+        tools:layout="@layout/notes_list_fragment" >
+        <action
+            android:id="@+id/action_openNoteFragment"
+            app:destination="@id/noteFragment" />
+    </fragment>
+    <fragment
+        android:id="@+id/optionsFragment"
+        android:name="com.sduduzog.slimlauncher.ui.main.OptionsFragment"
+        android:label="options_fragment"
+        tools:layout="@layout/options_fragment" >
+        <action
+            android:id="@+id/action_openNotesListFragment"
+            app:destination="@id/notesListFragment" />
+        <action
+            android:id="@+id/action_openSettingsFragment"
+            app:destination="@id/settingsFragment" />
+        <action
+            android:id="@+id/action_openAboutFragment"
+            app:destination="@id/aboutFragment" />
+    </fragment>
+    <fragment
+        android:id="@+id/noteFragment"
+        android:name="com.sduduzog.slimlauncher.ui.main.notes.NoteFragment"
+        android:label="note_fragment"
+        tools:layout="@layout/note_fragment" />
 </navigation>

+ 3 - 0
app/src/main/res/transition/custom_transition.xml

@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8"?>
+<transitionSet xmlns:android="http://schemas.android.com/apk/res/android">
+</transitionSet>

+ 3 - 0
app/src/main/res/values/colors.xml

@@ -2,6 +2,9 @@
 <resources>
     <color name="colorAccent">#37474F</color>
 
+    <color name="colorWhite">#FFFFFF</color>
+    <color name="colorWhiteDark">#BDBDBD</color>
+
     <color name="primaryColor">#212121</color>
     <color name="primaryDarkColor">#000000</color>
 

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

@@ -21,6 +21,9 @@
     <string name="prefs_settings_key_theme">key_theme</string>
 
     <!--main package strings-->
+    <string name="main_button_dialer">Dialer</string>
+    <string name="main_button_camera">Camera</string>
+
     <string name="main_slim_options">Slim options</string>
     <string name="main_options_change_theme">Change theme</string>
     <string name="main_options_home_screen_apps">Preferences</string>
@@ -86,7 +89,9 @@
     <string name="setup_button_start">start</string>
     <string name="setup_text_welcome">Welcome!</string>
     <string name="setup_text_lets_get_you_set_up">Lets get you set up!</string>
-    <string name="setup_text_choose_apps">Choose apps that will appear on your home screen</string>
+    <string name="setup_text_choose_apps">
+        Choose apps that will appear on your home screen. You can change them later in \'Preferences\'
+    </string>
     <string name="setup_text_choose_your_preferred_clock">Choose your preferred clock type</string>
     <string name="icon_check">Icon check</string>
     <string name="setup_button_next">next</string>
@@ -96,5 +101,8 @@
 
     <string name="no_app_selected_toast_msg">Choose at least one app</string>
     <string name="choose_apps_title">Choose Apps</string>
+    <string name="title_activity_main2">Main2Activity</string>
+    <string name="action_settings">Settings</string>
+    <string name="section_format">Hello World from section: %1$d</string>
 
 </resources>

+ 11 - 8
app/src/main/res/values/styles.xml

@@ -4,15 +4,18 @@
     <style name="AppTheme" parent="@style/Theme.AppCompat.Light.NoActionBar">
         <item name="colorAccent">@color/colorAccent</item>
         <item name="android:colorForeground">@android:color/black</item>
-        <item name="android:statusBarColor">?android:attr/colorPrimaryDark</item>
+        <!--<item name="android:statusBarColor">@color/colorWhiteDark</item>-->
+        <item name="colorPrimary">@color/colorWhite</item>
+        <item name="colorPrimaryDark">@color/colorWhiteDark</item>
+        <item name="android:colorBackground">@color/colorWhite</item>
     </style>
 
     <style name="AppDarkTheme" parent="@style/Theme.AppCompat.NoActionBar">
         <item name="colorAccent">@color/colorAccent</item>
-        <item name="colorPrimary">@color/primaryColor</item>
-        <item name="colorPrimaryDark">@color/primaryDarkColor</item>
+        <item name="colorPrimary">@color/primaryDarkColor</item>
+        <item name="colorPrimaryDark">@color/primaryColor</item>
         <item name="android:colorBackground">@color/primaryDarkColor</item>
-        <item name="android:statusBarColor">?android:attr/colorPrimaryDark</item>
+        <!--<item name="android:statusBarColor">?android:attr/colorPrimaryDark</item>-->
         <item name="android:colorForeground">@color/inverseTextColor</item>
     </style>
 
@@ -20,7 +23,7 @@
         <item name="colorPrimary">@color/colorBlueGrey</item>
         <item name="colorPrimaryDark">@color/colorBlueGreyDark</item>
         <item name="android:colorBackground">@color/colorBlueGrey</item>
-        <item name="android:statusBarColor">?attr/colorPrimaryDark</item>
+        <!--<item name="android:statusBarColor">?attr/colorPrimaryDark</item>-->
         <item name="cardBackgroundColor">@color/colorBlueGreyDark</item>
         <item name="colorAccent">@color/inverseAccentColor</item>
     </style>
@@ -29,20 +32,20 @@
         <item name="colorPrimary">@color/colorCandy</item>
         <item name="colorPrimaryDark">@color/colorCandyDark</item>
         <item name="android:colorBackground">@color/colorCandy</item>
-        <item name="android:statusBarColor">@color/colorCandyDark</item>
+        <!--<item name="android:statusBarColor">@color/colorCandyDark</item>-->
     </style>
 
     <style name="AppPinkTheme" parent="AppTheme">
         <item name="colorPrimary">@color/colorPink</item>
         <item name="colorPrimaryDark">@color/colorPinkDark</item>
         <item name="android:colorBackground">@color/colorPink</item>
-        <item name="android:statusBarColor">@color/colorPinkDark</item>
+        <!--<item name="android:statusBarColor">@color/colorPinkDark</item>-->
     </style>
 
     <style name="AppTealTheme" parent="AppTheme">
         <item name="colorPrimary">@color/colorTeal</item>
         <item name="colorPrimaryDark">@color/colorTealDark</item>
         <item name="android:colorBackground">@color/colorTeal</item>
-        <item name="android:statusBarColor">@color/colorTealDark</item>
+        <!--<item name="android:statusBarColor">@color/colorTealDark</item>-->
     </style>
 </resources>