From b86cb676d604aa2a65bf8587e2e56e274ac8ccb6 Mon Sep 17 00:00:00 2001 From: tarsin Date: Wed, 7 Jun 2023 13:43:57 +0800 Subject: [PATCH] Restore dialog to add filter --- .../ehviewer/ui/settings/FilterScreen.kt | 40 ++++++++++++- app/src/main/res/layout/dialog_add_filter.xml | 60 +++++++++++++++++++ 2 files changed, 99 insertions(+), 1 deletion(-) create mode 100644 app/src/main/res/layout/dialog_add_filter.xml diff --git a/app/src/main/java/com/hippo/ehviewer/ui/settings/FilterScreen.kt b/app/src/main/java/com/hippo/ehviewer/ui/settings/FilterScreen.kt index f1f1dcb54..cf52cb91b 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/settings/FilterScreen.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/settings/FilterScreen.kt @@ -1,7 +1,9 @@ package com.hippo.ehviewer.ui.settings import android.content.DialogInterface +import android.view.View import androidx.annotation.StringRes +import androidx.appcompat.app.AlertDialog import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth @@ -34,6 +36,7 @@ import androidx.compose.ui.unit.dp import com.hippo.ehviewer.R import com.hippo.ehviewer.client.EhFilter import com.hippo.ehviewer.dao.Filter +import com.hippo.ehviewer.databinding.DialogAddFilterBinding import com.hippo.ehviewer.ui.LocalNavController import com.hippo.ehviewer.ui.legacy.BaseDialogBuilder import kotlinx.coroutines.Dispatchers @@ -45,6 +48,41 @@ fun FilterScreen() { val context = LocalContext.current val coroutineScope = rememberCoroutineScope { Dispatchers.IO } val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior() + val scaffoldRecomposeScope = currentRecomposeScope + class AddFilterDialogHelper(private val dialog: AlertDialog) : View.OnClickListener { + private val mArray: Array = dialog.context.resources.getStringArray(R.array.filter_entries) + private val binding = DialogAddFilterBinding.bind(dialog.findViewById(R.id.base)!!) + init { dialog.getButton(DialogInterface.BUTTON_POSITIVE)!!.setOnClickListener(this) } + override fun onClick(v: View) { + val text1 = binding.spinner.editText!!.text.toString() + if (text1.isEmpty()) { + binding.spinner.error = dialog.context.getString(R.string.text_is_empty) + return + } else { + binding.spinner.error = null + } + val text = binding.textInputLayout.editText!!.text.toString().trim { it <= ' ' } + if (text.isBlank()) { + binding.textInputLayout.error = dialog.context.getString(R.string.text_is_empty) + return + } else { + binding.textInputLayout.error = null + } + val mode = mArray.indexOf(text1) + val filter = Filter() + filter.mode = mode + filter.text = text + if (!EhFilter.addFilter(filter)) { + binding.textInputLayout.error = dialog.context.getString(R.string.label_text_exist) + return + } else { + binding.textInputLayout.error = null + } + scaffoldRecomposeScope.invalidate() + dialog.dismiss() + } + } + Scaffold( topBar = { TopAppBar( @@ -63,7 +101,7 @@ fun FilterScreen() { ) }, floatingActionButton = { - FloatingActionButton(onClick = { }) { + FloatingActionButton(onClick = { AddFilterDialogHelper(BaseDialogBuilder(context).setTitle(R.string.add_filter).setView(R.layout.dialog_add_filter).setPositiveButton(R.string.add, null).setNegativeButton(android.R.string.cancel, null).show()) }) { Icon(imageVector = Icons.Default.Add, contentDescription = null) } }, diff --git a/app/src/main/res/layout/dialog_add_filter.xml b/app/src/main/res/layout/dialog_add_filter.xml new file mode 100644 index 000000000..eb0569fa2 --- /dev/null +++ b/app/src/main/res/layout/dialog_add_filter.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + +