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"> - + > + >