From ab11bb400fdae392acf241223b614541a7fa4699 Mon Sep 17 00:00:00 2001 From: gimangi Date: Thu, 12 May 2022 15:06:34 +0900 Subject: [PATCH] #29 [FEAT] memo dialog with button enable --- .../adapter/MemoListAdapter.kt | 6 ++ .../singleline_note/ui/main/MainActivity.kt | 65 +++++++++++++------ .../singleline_note/ui/main/MainViewModel.kt | 1 + .../singleline_note/util/BindingAdapter.kt | 6 +- app/src/main/res/layout/activity_main.xml | 3 + .../main/res/layout/activity_memo_create.xml | 2 + app/src/main/res/values/strings.xml | 5 ++ 7 files changed, 66 insertions(+), 22 deletions(-) diff --git a/app/src/main/java/com/gimangi/singleline_note/adapter/MemoListAdapter.kt b/app/src/main/java/com/gimangi/singleline_note/adapter/MemoListAdapter.kt index 48ee3ca..d109289 100644 --- a/app/src/main/java/com/gimangi/singleline_note/adapter/MemoListAdapter.kt +++ b/app/src/main/java/com/gimangi/singleline_note/adapter/MemoListAdapter.kt @@ -58,6 +58,12 @@ class MemoListAdapter() : RecyclerView.Adapter() { } } + fun getNumSelected(): Int { + return dataList.filter { + it.selected.get() == true + }.size + } + fun getDataList() = this.dataList } \ No newline at end of file diff --git a/app/src/main/java/com/gimangi/singleline_note/ui/main/MainActivity.kt b/app/src/main/java/com/gimangi/singleline_note/ui/main/MainActivity.kt index 70a7545..0370b6d 100644 --- a/app/src/main/java/com/gimangi/singleline_note/ui/main/MainActivity.kt +++ b/app/src/main/java/com/gimangi/singleline_note/ui/main/MainActivity.kt @@ -6,11 +6,13 @@ import android.util.Log import android.view.View import com.gimangi.singleline_note.R import com.gimangi.singleline_note.adapter.MemoListAdapter +import com.gimangi.singleline_note.data.model.DialogData import com.gimangi.singleline_note.data.model.MemoPreviewData import com.gimangi.singleline_note.databinding.ActivityMainBinding import com.gimangi.singleline_note.ui.base.BaseActivity import com.gimangi.singleline_note.ui.memo.MemoCreateActivity import com.gimangi.singleline_note.ui.memo.MemoCreateViewModel +import com.gimangi.singleline_note.ui.shared.SlnGenericDialog import org.koin.androidx.viewmodel.ext.android.viewModel import java.util.* @@ -57,8 +59,14 @@ class MainActivity() : if (mainViewModel.isEditMode.get() == true) { // edit mode -> select memoListAdapter.getDataList()[position].also { - if (it.selected.get() != null) - it.selected.set(!it.selected.get()!!) + val selected = it.selected.get() ?: false + it.selected.set(!selected) // selected 토글 + + // 선택된 메모가 존재하는지 파악 (버튼 비활성화) + if (memoListAdapter.getNumSelected() > 0) + mainViewModel.selectedMemoExist.set(true) + else + mainViewModel.selectedMemoExist.set(false) } } else { // normal mode -> detail view @@ -103,26 +111,45 @@ class MainActivity() : // 삭제 진행 binding.btnDeleteConfirm.setOnClickListener { - // 삭제할 메모 리스트 - val targets = memoListAdapter.getDataList().filter { - it.selected.get() == true - }.map { - it.memoId - } - // DB에 요청 - mainViewModel.deleteMemoDataList(targets).observe(this) { - // 진행 완료 - memoListAdapter.apply { - // list adapter 에서도 제거 - getDataList().removeIf { - it.selected.get() == true - } - notifyDataSetChanged() + // 삭제 확인 다이얼로그 + SlnGenericDialog(this).show( + DialogData( + title = getString(R.string.dialog_memo_delete_title), + cancel = getString(R.string.dialog_memo_delete_cancel), + confirm = getString(R.string.dialog_memo_delete_confirm) + ), + onConfirm = { + deleteSelectedMemo() + }, + onCancel = { } - switchEditMode(false) - } + ) + + + } + } + private fun deleteSelectedMemo() { + + // 삭제할 메모 리스트 + val targets = memoListAdapter.getDataList().filter { + it.selected.get() == true + }.map { + it.memoId + } + + // DB에 요청 + mainViewModel.deleteMemoDataList(targets).observe(this) { + // 진행 완료 + memoListAdapter.apply { + // list adapter 에서도 제거 + getDataList().removeIf { + it.selected.get() == true + } + notifyDataSetChanged() + } + switchEditMode(false) } } diff --git a/app/src/main/java/com/gimangi/singleline_note/ui/main/MainViewModel.kt b/app/src/main/java/com/gimangi/singleline_note/ui/main/MainViewModel.kt index 49d48f6..8db8210 100644 --- a/app/src/main/java/com/gimangi/singleline_note/ui/main/MainViewModel.kt +++ b/app/src/main/java/com/gimangi/singleline_note/ui/main/MainViewModel.kt @@ -13,6 +13,7 @@ import kotlinx.coroutines.launch class MainViewModel: ViewModel() { val isEditMode = ObservableField(false) + val selectedMemoExist = ObservableField(false) val searchResultData = MutableLiveData() fun getMemoDataList(): MutableLiveData> { diff --git a/app/src/main/java/com/gimangi/singleline_note/util/BindingAdapter.kt b/app/src/main/java/com/gimangi/singleline_note/util/BindingAdapter.kt index a88a3e8..11acd5f 100644 --- a/app/src/main/java/com/gimangi/singleline_note/util/BindingAdapter.kt +++ b/app/src/main/java/com/gimangi/singleline_note/util/BindingAdapter.kt @@ -37,10 +37,10 @@ object BindingAdapter { // 완료 버튼 색상 및 enable 결정 @JvmStatic - @BindingAdapter("setButtonEnable") - fun setButtonEnable(button: Button, value: Boolean) { + @BindingAdapter("setButtonEnable", "setButtonDefaultColor") + fun setButtonEnable(button: Button, value: Boolean, defaultColor: Int) { if (value) { - button.setTextColor(ContextCompat.getColor(context!!, R.color.white)) + button.setTextColor(ContextCompat.getColor(context!!, defaultColor)) button.isEnabled = true } else { button.setTextColor(ContextCompat.getColor(context!!, R.color.gray4)) diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 92e0d97..132f940 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -4,6 +4,7 @@ xmlns:app="http://schemas.android.com/apk/res-auto"> + @@ -155,6 +156,8 @@ android:textSize="12sp" android:layout_marginEnd="26dp" setVisible="@{viewModel.isEditMode}" + setButtonEnable="@{viewModel.selectedMemoExist}" + setButtonDefaultColor="@{R.color.red}" app:layout_constraintBottom_toTopOf="@+id/et_search_memo" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" /> diff --git a/app/src/main/res/layout/activity_memo_create.xml b/app/src/main/res/layout/activity_memo_create.xml index a783fb6..fa3b0f4 100644 --- a/app/src/main/res/layout/activity_memo_create.xml +++ b/app/src/main/res/layout/activity_memo_create.xml @@ -3,6 +3,7 @@ xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> + @@ -62,6 +63,7 @@ android:minHeight="0dp" android:layout_marginEnd="20dp" setButtonEnable="@{viewModel.allTextNotEmpty}" + setButtonDefaultColor="@{R.color.white}" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" /> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e96554a..e511c6f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -8,6 +8,11 @@ 삭제 삭제할 메모를 선택해주세요 + + 선택된 메모를 삭제하시겠습니까? + 삭제 + 취소 + 항목