diff --git a/.editorconfig b/.editorconfig
index 129c9dcd..4bda7f7f 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -1,11 +1,14 @@
root = true
[*]
-indent_size=2
-end_of_line=lf
-charset=utf-8
-trim_trailing_whitespace=true
-insert_final_newline=true
+indent_size = 2
+end_of_line = lf
+charset = utf-8
+trim_trailing_whitespace = true
+insert_final_newline = true
[*.{kt,kts}]
-ij_kotlin_imports_layout=*
+ij_kotlin_imports_layout = *
+
+[*.xml]
+indent_size = 4
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
index ac477352..d88f58a9 100644
--- a/.idea/compiler.xml
+++ b/.idea/compiler.xml
@@ -11,6 +11,8 @@
+
+
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
index b9c4f02c..cb99164d 100644
--- a/.idea/gradle.xml
+++ b/.idea/gradle.xml
@@ -25,8 +25,7 @@
-
-
+
\ No newline at end of file
diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
new file mode 100644
index 00000000..0b18bb59
--- /dev/null
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 8f0a1f7f..67a156c7 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -10,6 +10,15 @@
+
+
+
+
+
+
+
+
+
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 0f04686a..0e998616 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -66,6 +66,7 @@ dependencies {
implementation(deps.coroutines.android)
implementation(deps.koin.android)
+ implementation(deps.androidx.material)
debugImplementation(deps.squareup.leakCanary)
implementation(deps.timber)
diff --git a/app/src/main/java/com/hoc/flowmvi/App.kt b/app/src/main/java/com/hoc/flowmvi/App.kt
index 2b5ad671..27bd8819 100644
--- a/app/src/main/java/com/hoc/flowmvi/App.kt
+++ b/app/src/main/java/com/hoc/flowmvi/App.kt
@@ -1,6 +1,7 @@
package com.hoc.flowmvi
import android.app.Application
+import com.google.android.material.color.DynamicColors
import com.hoc.flowmvi.core.coreModule
import com.hoc.flowmvi.data.dataModule
import com.hoc.flowmvi.domain.domainModule
@@ -20,6 +21,7 @@ import kotlin.time.ExperimentalTime
@ExperimentalCoroutinesApi
@ExperimentalStdlibApi
@ExperimentalTime
+@JvmField
val allModules = listOf(
coreModule,
dataModule,
@@ -38,6 +40,8 @@ class App : Application() {
override fun onCreate() {
super.onCreate()
+ DynamicColors.applyToActivitiesIfAvailable(this)
+
if (BuildConfig.DEBUG) {
Timber.plant(Timber.DebugTree())
} else {
diff --git a/buildSrc/src/main/kotlin/deps.kt b/buildSrc/src/main/kotlin/deps.kt
index ad167305..2fe34ddd 100644
--- a/buildSrc/src/main/kotlin/deps.kt
+++ b/buildSrc/src/main/kotlin/deps.kt
@@ -32,7 +32,7 @@ object deps {
const val constraintLayout = "androidx.constraintlayout:constraintlayout:2.1.1"
const val recyclerView = "androidx.recyclerview:recyclerview:1.2.1"
const val swipeRefreshLayout = "androidx.swiperefreshlayout:swiperefreshlayout:1.2.0-alpha01"
- const val material = "com.google.android.material:material:1.4.0"
+ const val material = "com.google.android.material:material:1.6.0-alpha02"
}
object lifecycle {
diff --git a/core-ui/src/main/java/com/hoc/flowmvi/core_ui/ContextExtensions.kt b/core-ui/src/main/java/com/hoc/flowmvi/core_ui/ContextExtensions.kt
new file mode 100644
index 00000000..6f559a20
--- /dev/null
+++ b/core-ui/src/main/java/com/hoc/flowmvi/core_ui/ContextExtensions.kt
@@ -0,0 +1,12 @@
+package com.hoc.flowmvi.core_ui
+
+import android.content.Context
+import android.widget.Toast
+import androidx.annotation.Px
+
+@Suppress("NOTHING_TO_INLINE")
+inline fun Context.toast(text: CharSequence) = Toast.makeText(this, text, Toast.LENGTH_SHORT).show()
+
+@Px
+@Suppress("NOTHING_TO_INLINE")
+inline fun Context.dpToPx(dp: Float): Int = (dp * resources.displayMetrics.density).toInt()
diff --git a/core-ui/src/main/java/com/hoc/flowmvi/core_ui/FlowBinding.kt b/core-ui/src/main/java/com/hoc/flowmvi/core_ui/FlowBinding.kt
index 73d57c17..105f0069 100644
--- a/core-ui/src/main/java/com/hoc/flowmvi/core_ui/FlowBinding.kt
+++ b/core-ui/src/main/java/com/hoc/flowmvi/core_ui/FlowBinding.kt
@@ -1,10 +1,8 @@
package com.hoc.flowmvi.core_ui
-import android.content.Context
import android.os.Looper
import android.view.View
import android.widget.EditText
-import android.widget.Toast
import androidx.annotation.CheckResult
import androidx.appcompat.widget.SearchView
import androidx.core.widget.doOnTextChanged
@@ -121,5 +119,3 @@ fun EditText.textChanges(): Flow {
awaitClose { removeTextChangedListener(listener) }
}.onStart { emit(text) }
}
-
-fun Context.toast(text: CharSequence) = Toast.makeText(this, text, Toast.LENGTH_SHORT).show()
diff --git a/core-ui/src/main/java/com/hoc/flowmvi/core_ui/SwipeLeftToDeleteCallback.kt b/core-ui/src/main/java/com/hoc/flowmvi/core_ui/SwipeLeftToDeleteCallback.kt
index 71ae822e..39b5ad6b 100644
--- a/core-ui/src/main/java/com/hoc/flowmvi/core_ui/SwipeLeftToDeleteCallback.kt
+++ b/core-ui/src/main/java/com/hoc/flowmvi/core_ui/SwipeLeftToDeleteCallback.kt
@@ -2,22 +2,26 @@ package com.hoc.flowmvi.core_ui
import android.content.Context
import android.graphics.Canvas
-import android.graphics.Color
import android.graphics.drawable.ColorDrawable
-import androidx.core.content.ContextCompat
+import androidx.core.content.ContextCompat.getColor
+import androidx.core.content.ContextCompat.getDrawable
import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.RecyclerView
+import kotlin.LazyThreadSafetyMode.NONE
class SwipeLeftToDeleteCallback(context: Context, private val onSwipedCallback: (Int) -> Unit) :
ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT) {
- private val background: ColorDrawable = ColorDrawable(Color.parseColor("#f44336"))
- private val iconDelete =
- ContextCompat.getDrawable(context, R.drawable.ic_baseline_delete_white_24)!!
+ private val background: ColorDrawable by lazy(NONE) {
+ ColorDrawable(getColor(context, R.color.swipe_to_delete_background_color))
+ }
+ private val iconDelete by lazy(NONE) {
+ getDrawable(context, R.drawable.ic_baseline_delete_white_24)!!
+ }
override fun onMove(
recyclerView: RecyclerView,
viewHolder: RecyclerView.ViewHolder,
- target: RecyclerView.ViewHolder
+ target: RecyclerView.ViewHolder,
) = false
override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
@@ -34,7 +38,7 @@ class SwipeLeftToDeleteCallback(context: Context, private val onSwipedCallback:
dX: Float,
dY: Float,
actionState: Int,
- isCurrentlyActive: Boolean
+ isCurrentlyActive: Boolean,
) {
super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive)
val itemView = viewHolder.itemView
@@ -56,7 +60,10 @@ class SwipeLeftToDeleteCallback(context: Context, private val onSwipedCallback:
itemView.bottom
)
}
- else -> background.setBounds(0, 0, 0, 0)
+ else -> {
+ background.setBounds(0, 0, 0, 0)
+ iconDelete.setBounds(0, 0, 0, 0)
+ }
}
background.draw(c)
iconDelete.draw(c)
diff --git a/core-ui/src/main/res/values-night/themes.xml b/core-ui/src/main/res/values-night/themes.xml
new file mode 100644
index 00000000..1f14d006
--- /dev/null
+++ b/core-ui/src/main/res/values-night/themes.xml
@@ -0,0 +1,31 @@
+
+
+
+
diff --git a/core-ui/src/main/res/values/colors.xml b/core-ui/src/main/res/values/colors.xml
index 030098fe..fd84d864 100644
--- a/core-ui/src/main/res/values/colors.xml
+++ b/core-ui/src/main/res/values/colors.xml
@@ -1,6 +1,58 @@
-
- #6200EE
- #3700B3
- #03DAC5
+ #6750A4
+ #FFFFFF
+ #EADDFF
+ #21005D
+ #625B71
+ #FFFFFF
+ #E8DEF8
+ #1D192B
+ #7D5260
+ #FFFFFF
+ #FFD8E4
+ #31111D
+ #B3261E
+ #F9DEDC
+ #FFFFFF
+ #410E0B
+ #FFFBFE
+ #1C1B1F
+ #FFFBFE
+ #1C1B1F
+ #E7E0EC
+ #49454F
+ #9A989C
+ #F4EFF4
+ #313033
+ #D0BCFF
+
+ #D0BCFF
+ #381E72
+ #4F378B
+ #EADDFF
+ #CCC2DC
+ #332D41
+ #4A4458
+ #E8DEF8
+ #EFB8C8
+ #492532
+ #633B48
+ #FFD8E4
+ #F2B8B5
+ #8C1D18
+ #601410
+ #F9DEDC
+ #1C1B1F
+ #E6E1E5
+ #1C1B1F
+ #E6E1E5
+ #49454F
+ #CAC4D0
+ #6D6775
+ #1C1B1F
+ #E6E1E5
+ #6750A4
+ #6750A4
+ #B3261E
+ #f44336
diff --git a/core-ui/src/main/res/values/styles.xml b/core-ui/src/main/res/values/styles.xml
index 1c56072b..2c5844dd 100644
--- a/core-ui/src/main/res/values/styles.xml
+++ b/core-ui/src/main/res/values/styles.xml
@@ -1,11 +1 @@
-
-
-
-
-
-
+
diff --git a/core-ui/src/main/res/values/themes.xml b/core-ui/src/main/res/values/themes.xml
new file mode 100644
index 00000000..01983e75
--- /dev/null
+++ b/core-ui/src/main/res/values/themes.xml
@@ -0,0 +1,30 @@
+
+
+
diff --git a/feature-add/src/main/res/layout/activity_add.xml b/feature-add/src/main/res/layout/activity_add.xml
index 94ee3ac6..5a145e88 100644
--- a/feature-add/src/main/res/layout/activity_add.xml
+++ b/feature-add/src/main/res/layout/activity_add.xml
@@ -2,8 +2,7 @@
+ android:layout_height="match_parent">
+ android:layout_height="wrap_content">
diff --git a/feature-main/src/main/res/drawable/ic_add_white_24dp.xml b/feature-main/src/main/res/drawable/ic_add_white_24dp.xml
index e3979cd7..5257a22e 100644
--- a/feature-main/src/main/res/drawable/ic_add_white_24dp.xml
+++ b/feature-main/src/main/res/drawable/ic_add_white_24dp.xml
@@ -1,5 +1,10 @@
-
-
+
+
diff --git a/feature-main/src/main/res/layout/activity_main.xml b/feature-main/src/main/res/layout/activity_main.xml
index 9772a99a..5cf781b9 100644
--- a/feature-main/src/main/res/layout/activity_main.xml
+++ b/feature-main/src/main/res/layout/activity_main.xml
@@ -4,10 +4,8 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:background="@android:color/white"
tools:context=".MainActivity">
-
+ >
+ >