Skip to content

Commit

Permalink
[FIX/#198] 컨플릭 해결
Browse files Browse the repository at this point in the history
  • Loading branch information
leeeyubin committed Feb 26, 2024
2 parents b2e001b + a0fbf56 commit 47a2f3d
Show file tree
Hide file tree
Showing 87 changed files with 928 additions and 1,923 deletions.
15 changes: 15 additions & 0 deletions .idea/git_toolbox_prj.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 10 additions & 0 deletions .idea/migrations.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 4 additions & 13 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="32"
tools:ignore="ScopedStorage" />

Expand Down Expand Up @@ -129,22 +130,12 @@
android:screenOrientation="portrait" />

<activity
android:name="com.going.presentation.todo.mytodo.create.MyTodoCreateActivity"
android:name="com.going.presentation.todo.create.TodoCreateActivity"
android:exported="false"
android:screenOrientation="portrait" />

<activity
android:name="com.going.presentation.todo.ourtodo.create.OurTodoCreateActivity"
android:exported="false"
android:screenOrientation="portrait" />

<activity
android:name="com.going.presentation.todo.detail.PrivateDetailActivity"
android:exported="false"
android:screenOrientation="portrait" />

<activity
android:name="com.going.presentation.todo.detail.PublicDetailActivity"
android:name="com.going.presentation.todo.detail.TodoDetailActivity"
android:exported="false"
android:screenOrientation="portrait" />

Expand Down
5 changes: 5 additions & 0 deletions core-ui/src/main/java/com/going/ui/extension/ActivityExt.kt
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,11 @@ fun Activity.setStatusBarColorFromResource(colorResId: Int) {
window.statusBarColor = statusBarColor
}

fun Activity.setNavigationBarColorFromResource(colorResId: Int) {
val navigationBarColor = ContextCompat.getColor(this, colorResId)
window.navigationBarColor = navigationBarColor
}

fun Activity.getWindowHeight(): Int {
val wm = this.getSystemService(Context.WINDOW_SERVICE) as WindowManager
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.going.ui.extension
package com.going.ui.state

enum class EnumUiState {
LOADING, SUCCESS, FAILURE, EMPTY
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.going.ui.extension
package com.going.ui.state

sealed interface UiState<out T> {
object Empty : UiState<Nothing>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.going.ui.extension
package com.going.ui.util

import androidx.recyclerview.widget.DiffUtil

Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
package com.going.presentation.todo
package com.going.ui.util

import android.content.Context
import android.graphics.Rect
import android.view.View
import androidx.recyclerview.widget.RecyclerView

class TodoDecoration(
class RvItemDecoration(
val context: Context,
private val top: Int,
private val left: Int,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
package com.going.domain.entity

enum class AuthState {
LOADING, SUCCESS, FAILURE, SIGNUP, SIGNIN, TENDENCY, EMPTY
LOADING, SUCCESS, FAILURE, OTHER_PAGE
}
5 changes: 5 additions & 0 deletions domain/src/main/kotlin/com/going/domain/entity/SignInState.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.going.domain.entity

enum class SignInState {
LOADING, SUCCESS, FAILURE, SIGNUP, TENDENCY
}
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ class DashBoardActivity :
setTravelerName()
initSettingBtnClickListener()
initCreateTripBtnClickListener()
initOnBackPressedListener()
initOnBackPressedListener(binding.root)
}

private fun checkIsFirstEntered() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.going.domain.entity.response.DashBoardModel
import com.going.domain.repository.DashBoardRepository
import com.going.ui.extension.UiState
import com.going.ui.state.UiState
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import android.view.ViewGroup
import androidx.recyclerview.widget.ListAdapter
import com.going.domain.entity.response.DashBoardModel.DashBoardTripModel
import com.going.presentation.databinding.ItemDashBoardCompletedBinding
import com.going.ui.extension.ItemDiffCallback
import com.going.ui.util.ItemDiffCallback

class CompletedAdapter(
private val itemDetailClick: (DashBoardTripModel) -> Unit
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import com.going.presentation.dashboard.triplist.DashBoardDecoration
import com.going.presentation.databinding.FragmentCompletedTripBinding
import com.going.presentation.todo.TodoActivity
import com.going.ui.base.BaseFragment
import com.going.ui.extension.UiState
import com.going.ui.state.UiState
import com.going.ui.extension.toast
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.launchIn
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import android.view.ViewGroup
import androidx.recyclerview.widget.ListAdapter
import com.going.domain.entity.response.DashBoardModel.DashBoardTripModel
import com.going.presentation.databinding.ItemDashBoardOngoingBinding
import com.going.ui.extension.ItemDiffCallback
import com.going.ui.util.ItemDiffCallback

class OngoingAdapter(
private val itemDetailClick: (DashBoardTripModel) -> Unit
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import com.going.presentation.dashboard.triplist.DashBoardDecoration
import com.going.presentation.databinding.FragmentOngoingTripBinding
import com.going.presentation.todo.TodoActivity
import com.going.ui.base.BaseFragment
import com.going.ui.extension.UiState
import com.going.ui.state.UiState
import com.going.ui.extension.toast
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.launchIn
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.going.presentation.designsystem.edittext

import android.content.Context
import android.content.res.TypedArray
import android.util.AttributeSet
import android.view.LayoutInflater
import androidx.constraintlayout.widget.ConstraintLayout
Expand All @@ -22,74 +23,78 @@ class EmojiCounterEditText(context: Context, attrs: AttributeSet) :
lateinit var overWarning: String
var blankWarning: String = ""

private val editTextStateMap by lazy {
mapOf(
EditTextState.SUCCESS to Triple(
R.color.gray_700,
R.drawable.shape_rect_4_gray700_line,
""
),
EditTextState.EMPTY to Triple(
R.color.gray_200,
R.drawable.shape_rect_4_gray200_line,
""
),
EditTextState.BLANK to Triple(
R.color.red_500,
R.drawable.shape_rect_4_red500_line,
blankWarning
),
EditTextState.OVER to Triple(
R.color.red_500,
R.drawable.shape_rect_4_red500_line,
overWarning
),
)
}

val editText
get() = binding.etEmojiCounterEtContent

var state: EditTextState = EditTextState.EMPTY
set(value) {
field = value
when (field) {
EditTextState.SUCCESS -> setEditTextState(
R.color.gray_700,
R.drawable.shape_rect_4_gray700_line,
)

EditTextState.EMPTY -> setEditTextState(
R.color.gray_200,
R.drawable.shape_rect_4_gray200_line,
)

EditTextState.BLANK -> setEditTextState(
R.color.red_500,
R.drawable.shape_rect_4_red500_line,
blankWarning,
)

EditTextState.OVER -> setEditTextState(
R.color.red_500,
R.drawable.shape_rect_4_red500_line,
overWarning,
)
}
editTextStateMap[field]?.let { setEditTextState(it) }
}

init {
val typedArray = context.obtainStyledAttributes(attrs, R.styleable.EmojiCounterEditText)

binding = ViewEmojiCounterEdittextBinding.inflate(
LayoutInflater.from(context),
this,
true,
)

binding.tvEmojiCounterEtTitle.text =
typedArray.getString(R.styleable.EmojiCounterEditText_title)
binding.etEmojiCounterEtContent.hint =
typedArray.getString(R.styleable.EmojiCounterEditText_hint)
canBlankError = typedArray.getBoolean(R.styleable.EmojiCounterEditText_canBlankError, false)
binding.etEmojiCounterEtContent.minLines = typedArray.getInt(R.styleable.EmojiCounterEditText_minLines, 1)
setBindingContent(typedArray)

typedArray.recycle()

binding.tvEmojiCounterEtNameCounter.text = context.getString(R.string.counter, 0, maxLen)

checkTextAvailable()
}

private fun setBindingContent(typedArray: TypedArray) {
with(binding) {
tvEmojiCounterEtTitle.text =
typedArray.getString(R.styleable.EmojiCounterEditText_title)
etEmojiCounterEtContent.hint =
typedArray.getString(R.styleable.EmojiCounterEditText_hint)
etEmojiCounterEtContent.minLines =
typedArray.getInt(R.styleable.EmojiCounterEditText_minLines, 1)
tvEmojiCounterEtNameCounter.text = context.getString(R.string.counter, 0, maxLen)
}
canBlankError = typedArray.getBoolean(R.styleable.EmojiCounterEditText_canBlankError, false)
}

private fun checkTextAvailable() {
binding.etEmojiCounterEtContent.doAfterTextChanged { text ->
val len = text.toString().getGraphemeLength()

state =
if (text.toString().isBlank() && len != 0 && canBlankError) {
EditTextState.BLANK
} else if (len > maxLen) {
EditTextState.OVER
} else if (len > 0) {
EditTextState.SUCCESS
} else {
EditTextState.EMPTY
}
state = when {
text.toString().isBlank() && len != 0 && canBlankError -> EditTextState.BLANK
len > maxLen -> EditTextState.OVER
len > 0 -> EditTextState.SUCCESS
else -> EditTextState.EMPTY
}

binding.tvEmojiCounterEtNameCounter.text =
context.getString(R.string.counter, len, maxLen)
Expand All @@ -101,14 +106,20 @@ class EmojiCounterEditText(context: Context, attrs: AttributeSet) :
binding.tvEmojiCounterEtNameCounter.text = context.getString(R.string.counter, 0, maxLen)
}

private fun setEditTextState(color: Int, background: Int, text: String = "") {
binding.tvEmojiCounterEtWarningMessage.isVisible = color == R.color.red_500
binding.tvEmojiCounterEtWarningMessage.text = text
binding.tvEmojiCounterEtNameCounter.setTextColor(context.colorOf(color))
binding.etEmojiCounterEtContent.background = ResourcesCompat.getDrawable(
this.resources,
background,
context.theme,
)
private fun setEditTextState(info: Triple<Int, Int, String>) {
val color = info.first
val background = info.second
val text = info.third

with(binding) {
tvEmojiCounterEtWarningMessage.isVisible = color == R.color.red_500
tvEmojiCounterEtNameCounter.setTextColor(context.colorOf(color))
etEmojiCounterEtContent.background = ResourcesCompat.getDrawable(
this@EmojiCounterEditText.resources,
background,
context.theme,
)
tvEmojiCounterEtWarningMessage.text = text
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package com.going.presentation.designsystem.snackbar

import android.content.Context
import android.view.LayoutInflater
import android.view.View
import androidx.core.content.ContextCompat
import androidx.databinding.DataBindingUtil
import com.going.presentation.R
import com.going.presentation.databinding.LayoutCustomSnackbarBinding
import com.google.android.material.snackbar.Snackbar

class CustomSnackBar(view: View, private val message: String) {

private val context = view.context
private val snackbar = Snackbar.make(view, "", DURATION)
private val snackbarLayout = snackbar.view as Snackbar.SnackbarLayout

private val inflater = LayoutInflater.from(context)
private val snackbarBinding: LayoutCustomSnackbarBinding =
DataBindingUtil.inflate(inflater, R.layout.layout_custom_snackbar, null, false)

init {
initView()
initData()
}

private fun initView() {
with(snackbarLayout) {
removeAllViews()
setPadding(0, 0, 0, 0)
setBackgroundColor(ContextCompat.getColor(context, android.R.color.transparent))
addView(snackbarBinding.root, 0)
}
}

private fun initData() {
snackbarBinding.tvSnackbar.text = message
}

fun show() {
snackbar.show()
}

companion object {
private const val DURATION = 2000

@JvmStatic
fun make(view: View, message: String) = CustomSnackBar(view, message)
}
}

fun Context.customSnackBar(anchorView: View, message: String) {
CustomSnackBar.make(anchorView, message).show()
}
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ class FinishTripActivity :
initCopyCodetvClickListener()
initSendCodeBtnClickListener()
initEnterTripBtnClickListener()
initOnBackPressedListener()
initOnBackPressedListener(binding.root)
}

private fun initCopyCodetvClickListener() {
Expand Down
Loading

0 comments on commit 47a2f3d

Please sign in to comment.