From 6dfff5bb128960a223f70fb8ba35718f226f9c26 Mon Sep 17 00:00:00 2001 From: Aidan Follestad Date: Fri, 30 Nov 2018 15:34:40 -0800 Subject: [PATCH] Begin to modularize reused view layouts, switch to Material Components theme --- .idea/modules.xml | 1 + app/build.gradle | 1 + .../afollestad/nocknock/ui/AddSiteActivity.kt | 71 +++++------- .../afollestad/nocknock/ui/MainActivity.kt | 4 +- .../nocknock/ui/ViewSiteActivity.kt | 106 ++++-------------- app/src/main/res/drawable/green_circle.xml | 12 -- app/src/main/res/drawable/red_circle.xml | 12 -- app/src/main/res/drawable/yellow_circle.xml | 12 -- app/src/main/res/layout/activity_addsite.xml | 87 +++----------- app/src/main/res/layout/activity_viewsite.xml | 91 ++++----------- app/src/main/res/layout/list_item_server.xml | 2 +- app/src/main/res/values/arrays.xml | 7 -- app/src/main/res/values/colors.xml | 6 - app/src/main/res/values/dimens.xml | 11 +- app/src/main/res/values/strings.xml | 4 - app/src/main/res/values/styles.xml | 6 +- settings.gradle | 2 +- viewcomponents/.gitignore | 1 + viewcomponents/build.gradle | 29 +++++ viewcomponents/src/main/AndroidManifest.xml | 2 + .../viewcomponents/CheckIntervalLayout.kt | 103 +++++++++++++++++ .../viewcomponents/JavaScriptInputLayout.kt | 49 ++++++++ .../viewcomponents/LoadingIndicatorFrame.kt | 40 +++++++ .../viewcomponents}/StatusImageView.kt | 3 +- .../nocknock/viewcomponents}/ext/ViewExt.kt | 7 +- .../src/main/res/drawable/green_circle.xml | 10 ++ .../src/main/res/drawable/red_circle.xml | 10 ++ .../src/main/res/drawable/status_error.xml | 7 +- .../src/main/res/drawable/status_ok.xml | 7 +- .../src/main/res/drawable/status_progress.xml | 7 +- .../src/main/res/drawable/yellow_circle.xml | 10 ++ .../main/res/layout/check_interval_layout.xml | 53 +++++++++ .../src/main/res/layout/include_divider.xml | 8 ++ .../res/layout/javascript_input_layout.xml | 16 +-- .../src/main/res/layout/list_item_spinner.xml | 3 +- .../res/layout/list_item_spinner_dropdown.xml | 0 .../res/layout/loading_indicator_frame.xml | 15 +++ viewcomponents/src/main/res/values/arrays.xml | 11 ++ viewcomponents/src/main/res/values/colors.xml | 12 ++ viewcomponents/src/main/res/values/dimens.xml | 19 ++++ .../src/main/res/values/strings.xml | 10 ++ 41 files changed, 502 insertions(+), 365 deletions(-) delete mode 100644 app/src/main/res/drawable/green_circle.xml delete mode 100644 app/src/main/res/drawable/red_circle.xml delete mode 100644 app/src/main/res/drawable/yellow_circle.xml create mode 100644 viewcomponents/.gitignore create mode 100644 viewcomponents/build.gradle create mode 100644 viewcomponents/src/main/AndroidManifest.xml create mode 100644 viewcomponents/src/main/java/com/afollestad/nocknock/viewcomponents/CheckIntervalLayout.kt create mode 100644 viewcomponents/src/main/java/com/afollestad/nocknock/viewcomponents/JavaScriptInputLayout.kt create mode 100644 viewcomponents/src/main/java/com/afollestad/nocknock/viewcomponents/LoadingIndicatorFrame.kt rename {app/src/main/java/com/afollestad/nocknock/views => viewcomponents/src/main/java/com/afollestad/nocknock/viewcomponents}/StatusImageView.kt (94%) rename {utilities/src/main/java/com/afollestad/nocknock/utilities => viewcomponents/src/main/java/com/afollestad/nocknock/viewcomponents}/ext/ViewExt.kt (85%) create mode 100644 viewcomponents/src/main/res/drawable/green_circle.xml create mode 100644 viewcomponents/src/main/res/drawable/red_circle.xml rename {app => viewcomponents}/src/main/res/drawable/status_error.xml (64%) rename {app => viewcomponents}/src/main/res/drawable/status_ok.xml (58%) rename {app => viewcomponents}/src/main/res/drawable/status_progress.xml (71%) create mode 100644 viewcomponents/src/main/res/drawable/yellow_circle.xml create mode 100644 viewcomponents/src/main/res/layout/check_interval_layout.xml create mode 100644 viewcomponents/src/main/res/layout/include_divider.xml rename app/src/main/res/layout/include_script_input.xml => viewcomponents/src/main/res/layout/javascript_input_layout.xml (75%) rename {app => viewcomponents}/src/main/res/layout/list_item_spinner.xml (86%) rename {app => viewcomponents}/src/main/res/layout/list_item_spinner_dropdown.xml (100%) create mode 100644 viewcomponents/src/main/res/layout/loading_indicator_frame.xml create mode 100644 viewcomponents/src/main/res/values/arrays.xml create mode 100644 viewcomponents/src/main/res/values/colors.xml create mode 100644 viewcomponents/src/main/res/values/dimens.xml create mode 100644 viewcomponents/src/main/res/values/strings.xml diff --git a/.idea/modules.xml b/.idea/modules.xml index 22d4f44..d5f1277 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -8,6 +8,7 @@ + diff --git a/app/build.gradle b/app/build.gradle index 205652d..dd87fe6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -22,6 +22,7 @@ dependencies { implementation project(':utilities') implementation project(':engine') implementation project(':notifications') + implementation project(':viewcomponents') implementation 'androidx.appcompat:appcompat:' + versions.androidx implementation 'androidx.recyclerview:recyclerview:' + versions.androidx diff --git a/app/src/main/java/com/afollestad/nocknock/ui/AddSiteActivity.kt b/app/src/main/java/com/afollestad/nocknock/ui/AddSiteActivity.kt index d09e04c..083ec7b 100644 --- a/app/src/main/java/com/afollestad/nocknock/ui/AddSiteActivity.kt +++ b/app/src/main/java/com/afollestad/nocknock/ui/AddSiteActivity.kt @@ -25,33 +25,30 @@ import com.afollestad.nocknock.data.ValidationMode.STATUS_CODE import com.afollestad.nocknock.data.ValidationMode.TERM_SEARCH import com.afollestad.nocknock.engine.db.ServerModelStore import com.afollestad.nocknock.engine.statuscheck.CheckStatusManager -import com.afollestad.nocknock.utilities.ext.conceal -import com.afollestad.nocknock.utilities.ext.hide import com.afollestad.nocknock.utilities.ext.injector import com.afollestad.nocknock.utilities.ext.onEnd -import com.afollestad.nocknock.utilities.ext.onItemSelected -import com.afollestad.nocknock.utilities.ext.onLayout import com.afollestad.nocknock.utilities.ext.scopeWhileAttached -import com.afollestad.nocknock.utilities.ext.show -import com.afollestad.nocknock.utilities.ext.showOrHide -import com.afollestad.nocknock.utilities.ext.textAsLong -import com.afollestad.nocknock.utilities.ext.trimmedText -import kotlinx.android.synthetic.main.activity_addsite.checkIntervalInput -import kotlinx.android.synthetic.main.activity_addsite.checkIntervalSpinner -import kotlinx.android.synthetic.main.activity_addsite.content_loading_progress +import com.afollestad.nocknock.viewcomponents.ext.conceal +import com.afollestad.nocknock.viewcomponents.ext.hide +import com.afollestad.nocknock.viewcomponents.ext.onItemSelected +import com.afollestad.nocknock.viewcomponents.ext.onLayout +import com.afollestad.nocknock.viewcomponents.ext.show +import com.afollestad.nocknock.viewcomponents.ext.showOrHide +import com.afollestad.nocknock.viewcomponents.ext.trimmedText +import kotlinx.android.synthetic.main.activity_addsite.checkIntervalLayout import kotlinx.android.synthetic.main.activity_addsite.doneBtn import kotlinx.android.synthetic.main.activity_addsite.inputName import kotlinx.android.synthetic.main.activity_addsite.inputUrl +import kotlinx.android.synthetic.main.activity_addsite.loadingProgress import kotlinx.android.synthetic.main.activity_addsite.nameTiLayout import kotlinx.android.synthetic.main.activity_addsite.responseValidationMode import kotlinx.android.synthetic.main.activity_addsite.responseValidationSearchTerm import kotlinx.android.synthetic.main.activity_addsite.rootView +import kotlinx.android.synthetic.main.activity_addsite.scriptInputLayout import kotlinx.android.synthetic.main.activity_addsite.textUrlWarning import kotlinx.android.synthetic.main.activity_addsite.toolbar import kotlinx.android.synthetic.main.activity_addsite.urlTiLayout import kotlinx.android.synthetic.main.activity_addsite.validationModeDescription -import kotlinx.android.synthetic.main.include_script_input.responseValidationScript -import kotlinx.android.synthetic.main.include_script_input.responseValidationScriptInput import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.Dispatchers.Main import kotlinx.coroutines.async @@ -97,14 +94,6 @@ class AddSiteActivity : AppCompatActivity(), View.OnClickListener { rootView.onLayout { circularRevealActivity() } } - val intervalOptionsAdapter = ArrayAdapter( - this, - R.layout.list_item_spinner, - resources.getStringArray(R.array.interval_options) - ) - intervalOptionsAdapter.setDropDownViewResource(R.layout.list_item_spinner_dropdown) - checkIntervalSpinner.adapter = intervalOptionsAdapter - inputUrl.setOnFocusChangeListener { _, hasFocus -> if (!hasFocus) { val inputStr = inputUrl.text @@ -137,7 +126,7 @@ class AddSiteActivity : AppCompatActivity(), View.OnClickListener { responseValidationMode.adapter = validationOptionsAdapter responseValidationMode.onItemSelected { pos -> responseValidationSearchTerm.showOrHide(pos == 1) - responseValidationScript.showOrHide(pos == 2) + scriptInputLayout.showOrHide(pos == 2) validationModeDescription.setText( when (pos) { @@ -200,14 +189,14 @@ class AddSiteActivity : AppCompatActivity(), View.OnClickListener { // Done button override fun onClick(view: View) { isClosing = true - var model = ServerModel( + var newModel = ServerModel( name = inputName.trimmedText(), url = inputUrl.trimmedText(), status = WAITING, validationMode = STATUS_CODE ) - if (model.name.isEmpty()) { + if (newModel.name.isEmpty()) { nameTiLayout.error = getString(R.string.please_enter_name) isClosing = false return @@ -215,42 +204,42 @@ class AddSiteActivity : AppCompatActivity(), View.OnClickListener { nameTiLayout.error = null } - if (model.url.isEmpty()) { + if (newModel.url.isEmpty()) { urlTiLayout.error = getString(R.string.please_enter_url) isClosing = false return } else { urlTiLayout.error = null - if (!WEB_URL.matcher(model.url).find()) { + if (!WEB_URL.matcher(newModel.url).find()) { urlTiLayout.error = getString(R.string.please_enter_valid_url) isClosing = false return } else { - val uri = Uri.parse(model.url) + val uri = Uri.parse(newModel.url) if (uri.scheme == null) { - model = model.copy(url = "http://${model.url}") + newModel = newModel.copy(url = "http://${newModel.url}") } } } - val parsedCheckInterval = getParsedCheckInterval() + val selectedCheckInterval = checkIntervalLayout.getSelectedCheckInterval() val selectedValidationMode = getSelectedValidationMode() val selectedValidationContent = getSelectedValidationContent() - model = model.copy( - checkInterval = parsedCheckInterval, - lastCheck = currentTimeMillis() - parsedCheckInterval, + newModel = newModel.copy( + checkInterval = selectedCheckInterval, + lastCheck = currentTimeMillis() - selectedCheckInterval, validationMode = selectedValidationMode, validationContent = selectedValidationContent ) rootView.scopeWhileAttached(Main) { launch(coroutineContext) { - content_loading_progress.show() - val storedModel = async(IO) { serverModelStore.put(model) }.await() + loadingProgress.setLoading() + val storedModel = async(IO) { serverModelStore.put(newModel) }.await() checkStatusManager.cancelCheck(storedModel) checkStatusManager.scheduleCheck(storedModel, rightNow = true) - content_loading_progress.hide() + loadingProgress.setDone() setResult(RESULT_OK) finish() @@ -261,16 +250,6 @@ class AddSiteActivity : AppCompatActivity(), View.OnClickListener { override fun onBackPressed() = closeActivityWithReveal() - private fun getParsedCheckInterval(): Long { - val intervalInput = checkIntervalInput.textAsLong() - return when (checkIntervalSpinner.selectedItemPosition) { - 0 -> intervalInput * (60 * 1000) - 1 -> intervalInput * (60 * 60 * 1000) - 2 -> intervalInput * (60 * 60 * 24 * 1000) - else -> intervalInput * (60 * 60 * 24 * 7 * 1000) - } - } - private fun getSelectedValidationMode() = when (responseValidationMode.selectedItemPosition) { 0 -> STATUS_CODE 1 -> TERM_SEARCH @@ -285,7 +264,7 @@ class AddSiteActivity : AppCompatActivity(), View.OnClickListener { private fun getSelectedValidationContent() = when (responseValidationMode.selectedItemPosition) { 0 -> null 1 -> responseValidationSearchTerm.trimmedText() - 2 -> responseValidationScriptInput.trimmedText() + 2 -> scriptInputLayout.getCode() else -> { throw IllegalStateException( "Unexpected validation mode index: ${responseValidationMode.selectedItemPosition}" diff --git a/app/src/main/java/com/afollestad/nocknock/ui/MainActivity.kt b/app/src/main/java/com/afollestad/nocknock/ui/MainActivity.kt index 18224fd..2df975c 100644 --- a/app/src/main/java/com/afollestad/nocknock/ui/MainActivity.kt +++ b/app/src/main/java/com/afollestad/nocknock/ui/MainActivity.kt @@ -44,8 +44,8 @@ import com.afollestad.nocknock.utilities.ext.onEnd import com.afollestad.nocknock.utilities.ext.safeRegisterReceiver import com.afollestad.nocknock.utilities.ext.safeUnregisterReceiver import com.afollestad.nocknock.utilities.ext.scopeWhileAttached -import com.afollestad.nocknock.utilities.ext.show -import com.afollestad.nocknock.utilities.ext.showOrHide +import com.afollestad.nocknock.viewcomponents.ext.show +import com.afollestad.nocknock.viewcomponents.ext.showOrHide import com.afollestad.nocknock.utilities.util.MathUtil.bezierCurve import kotlinx.android.synthetic.main.activity_main.emptyText import kotlinx.android.synthetic.main.activity_main.fab diff --git a/app/src/main/java/com/afollestad/nocknock/ui/ViewSiteActivity.kt b/app/src/main/java/com/afollestad/nocknock/ui/ViewSiteActivity.kt index 5ee8e2b..8c3c6fb 100644 --- a/app/src/main/java/com/afollestad/nocknock/ui/ViewSiteActivity.kt +++ b/app/src/main/java/com/afollestad/nocknock/ui/ViewSiteActivity.kt @@ -35,46 +35,38 @@ import com.afollestad.nocknock.engine.db.ServerModelStore import com.afollestad.nocknock.engine.statuscheck.CheckStatusJob.Companion.ACTION_STATUS_UPDATE import com.afollestad.nocknock.engine.statuscheck.CheckStatusManager import com.afollestad.nocknock.notifications.NockNotificationManager -import com.afollestad.nocknock.utilities.ext.DAY -import com.afollestad.nocknock.utilities.ext.HOUR -import com.afollestad.nocknock.utilities.ext.MINUTE -import com.afollestad.nocknock.utilities.ext.WEEK import com.afollestad.nocknock.utilities.ext.formatDate -import com.afollestad.nocknock.utilities.ext.hide import com.afollestad.nocknock.utilities.ext.injector import com.afollestad.nocknock.utilities.ext.isHttpOrHttps -import com.afollestad.nocknock.utilities.ext.onItemSelected import com.afollestad.nocknock.utilities.ext.safeRegisterReceiver import com.afollestad.nocknock.utilities.ext.safeUnregisterReceiver import com.afollestad.nocknock.utilities.ext.scopeWhileAttached -import com.afollestad.nocknock.utilities.ext.show -import com.afollestad.nocknock.utilities.ext.showOrHide -import com.afollestad.nocknock.utilities.ext.textAsLong -import com.afollestad.nocknock.utilities.ext.trimmedText -import kotlinx.android.synthetic.main.activity_viewsite.checkIntervalInput -import kotlinx.android.synthetic.main.activity_viewsite.checkIntervalSpinner -import kotlinx.android.synthetic.main.activity_viewsite.content_loading_progress +import com.afollestad.nocknock.viewcomponents.ext.hide +import com.afollestad.nocknock.viewcomponents.ext.onItemSelected +import com.afollestad.nocknock.viewcomponents.ext.show +import com.afollestad.nocknock.viewcomponents.ext.showOrHide +import com.afollestad.nocknock.viewcomponents.ext.trimmedText +import kotlinx.android.synthetic.main.activity_viewsite.checkIntervalLayout import kotlinx.android.synthetic.main.activity_viewsite.doneBtn import kotlinx.android.synthetic.main.activity_viewsite.iconStatus import kotlinx.android.synthetic.main.activity_viewsite.inputName import kotlinx.android.synthetic.main.activity_viewsite.inputUrl +import kotlinx.android.synthetic.main.activity_viewsite.loadingProgress import kotlinx.android.synthetic.main.activity_viewsite.responseValidationMode import kotlinx.android.synthetic.main.activity_viewsite.responseValidationSearchTerm import kotlinx.android.synthetic.main.activity_viewsite.rootView +import kotlinx.android.synthetic.main.activity_viewsite.scriptInputLayout import kotlinx.android.synthetic.main.activity_viewsite.textLastCheckResult import kotlinx.android.synthetic.main.activity_viewsite.textNextCheck import kotlinx.android.synthetic.main.activity_viewsite.textUrlWarning import kotlinx.android.synthetic.main.activity_viewsite.toolbar import kotlinx.android.synthetic.main.activity_viewsite.validationModeDescription -import kotlinx.android.synthetic.main.include_script_input.responseValidationScript -import kotlinx.android.synthetic.main.include_script_input.responseValidationScriptInput import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.Dispatchers.Main import kotlinx.coroutines.async import kotlinx.coroutines.launch import java.lang.System.currentTimeMillis import javax.inject.Inject -import kotlin.math.ceil private const val KEY_VIEW_MODEL = "site_model" @@ -130,14 +122,6 @@ class ViewSiteActivity : AppCompatActivity(), setOnMenuItemClickListener(this@ViewSiteActivity) } - val intervalOptionsAdapter = ArrayAdapter( - this, - R.layout.list_item_spinner, - resources.getStringArray(R.array.interval_options) - ) - intervalOptionsAdapter.setDropDownViewResource(R.layout.list_item_spinner_dropdown) - checkIntervalSpinner.adapter = intervalOptionsAdapter - inputUrl.setOnFocusChangeListener { _, hasFocus -> if (!hasFocus) { val inputStr = inputUrl.text @@ -170,7 +154,7 @@ class ViewSiteActivity : AppCompatActivity(), responseValidationMode.onItemSelected { pos -> responseValidationSearchTerm.showOrHide(pos == 1) - responseValidationScript.showOrHide(pos == 2) + scriptInputLayout.showOrHide(pos == 2) validationModeDescription.setText( when (pos) { @@ -213,45 +197,13 @@ class ViewSiteActivity : AppCompatActivity(), if (this.checkInterval == 0L) { textNextCheck.setText(R.string.none_turned_off) - checkIntervalInput.setText("") - checkIntervalSpinner.setSelection(0) + checkIntervalLayout.clear() } else { var lastCheck = this.lastCheck if (lastCheck == 0L) { lastCheck = currentTimeMillis() } textNextCheck.text = (lastCheck + this.checkInterval).formatDate() - - when { - this.checkInterval >= WEEK -> { - checkIntervalInput.setText( - ceil((this.checkInterval.toFloat() / WEEK).toDouble()).toInt().toString() - ) - checkIntervalSpinner.setSelection(3) - } - this.checkInterval >= DAY -> { - checkIntervalInput.setText( - ceil((this.checkInterval.toFloat() / DAY.toFloat()).toDouble()).toInt().toString() - ) - checkIntervalSpinner.setSelection(2) - } - this.checkInterval >= HOUR -> { - checkIntervalInput.setText( - ceil((this.checkInterval.toFloat() / HOUR.toFloat()).toDouble()).toInt().toString() - ) - checkIntervalSpinner.setSelection(1) - } - this.checkInterval >= MINUTE -> { - checkIntervalInput.setText( - ceil((this.checkInterval.toFloat() / MINUTE.toFloat()).toDouble()).toInt().toString() - ) - checkIntervalSpinner.setSelection(0) - } - else -> { - checkIntervalInput.setText("0") - checkIntervalSpinner.setSelection(0) - } - } } responseValidationMode.setSelection(validationMode.value - 1) @@ -259,13 +211,11 @@ class ViewSiteActivity : AppCompatActivity(), when (this.validationMode) { TERM_SEARCH -> responseValidationSearchTerm.setText(this.validationContent ?: "") JAVASCRIPT -> { - responseValidationScriptInput.setText( - this.validationContent ?: getString(R.string.default_js) - ) + scriptInputLayout.setCode(this.validationContent) } else -> { responseValidationSearchTerm.setText("") - responseValidationScriptInput.setText("") + scriptInputLayout.clear() } } @@ -316,13 +266,13 @@ class ViewSiteActivity : AppCompatActivity(), } } - val parsedCheckInterval = getParsedCheckInterval() + val selectedCheckInterval = checkIntervalLayout.getSelectedCheckInterval() val selectedValidationMode = getSelectedValidationMode() val selectedValidationContent = getSelectedValidationContent() currentModel = currentModel.copy( - checkInterval = parsedCheckInterval, - lastCheck = currentTimeMillis() - parsedCheckInterval, + checkInterval = selectedCheckInterval, + lastCheck = currentTimeMillis() - selectedCheckInterval, validationMode = selectedValidationMode, validationContent = selectedValidationContent ) @@ -334,10 +284,10 @@ class ViewSiteActivity : AppCompatActivity(), override fun onClick(view: View) { rootView.scopeWhileAttached(Main) { launch(coroutineContext) { - content_loading_progress.show() + loadingProgress.setLoading() if (!updateModelFromInput(true)) { // Validation didn't pass - content_loading_progress.hide() + loadingProgress.setDone() return@launch } @@ -345,7 +295,7 @@ class ViewSiteActivity : AppCompatActivity(), checkStatusManager.cancelCheck(currentModel) checkStatusManager.scheduleCheck(currentModel, rightNow = true) - content_loading_progress.hide() + loadingProgress.setDone() setResult(RESULT_OK) finish() } @@ -357,7 +307,7 @@ class ViewSiteActivity : AppCompatActivity(), R.id.refresh -> { rootView.scopeWhileAttached(Main) { launch(coroutineContext) { - content_loading_progress.show() + loadingProgress.setLoading() updateModelFromInput(false) currentModel = currentModel.copy(status = WAITING) displayCurrentModel() @@ -366,7 +316,7 @@ class ViewSiteActivity : AppCompatActivity(), checkStatusManager.cancelCheck(currentModel) checkStatusManager.scheduleCheck(currentModel, rightNow = true) - content_loading_progress.hide() + loadingProgress.setDone() } } return true @@ -400,9 +350,9 @@ class ViewSiteActivity : AppCompatActivity(), private fun performRemoveSite(model: ServerModel) { rootView.scopeWhileAttached(Main) { launch(coroutineContext) { - content_loading_progress.show() + loadingProgress.setLoading() async(IO) { serverModelStore.delete(model) }.await() - content_loading_progress.hide() + loadingProgress.setDone() finish() } } @@ -413,16 +363,6 @@ class ViewSiteActivity : AppCompatActivity(), item.isEnabled = currentModel.status != CHECKING && currentModel.status != WAITING } - private fun getParsedCheckInterval(): Long { - val intervalInput = checkIntervalInput.textAsLong() - return when (checkIntervalSpinner.selectedItemPosition) { - 0 -> intervalInput * (60 * 1000) - 1 -> intervalInput * (60 * 60 * 1000) - 2 -> intervalInput * (60 * 60 * 24 * 1000) - else -> intervalInput * (60 * 60 * 24 * 7 * 1000) - } - } - private fun getSelectedValidationMode() = when (responseValidationMode.selectedItemPosition) { 0 -> STATUS_CODE 1 -> TERM_SEARCH @@ -437,7 +377,7 @@ class ViewSiteActivity : AppCompatActivity(), private fun getSelectedValidationContent() = when (responseValidationMode.selectedItemPosition) { 0 -> null 1 -> responseValidationSearchTerm.trimmedText() - 2 -> responseValidationScriptInput.trimmedText() + 2 -> scriptInputLayout.getCode() else -> { throw IllegalStateException( "Unexpected validation mode index: ${responseValidationMode.selectedItemPosition}" diff --git a/app/src/main/res/drawable/green_circle.xml b/app/src/main/res/drawable/green_circle.xml deleted file mode 100644 index e02aec2..0000000 --- a/app/src/main/res/drawable/green_circle.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - diff --git a/app/src/main/res/drawable/red_circle.xml b/app/src/main/res/drawable/red_circle.xml deleted file mode 100644 index d2aecb2..0000000 --- a/app/src/main/res/drawable/red_circle.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - diff --git a/app/src/main/res/drawable/yellow_circle.xml b/app/src/main/res/drawable/yellow_circle.xml deleted file mode 100644 index dfff479..0000000 --- a/app/src/main/res/drawable/yellow_circle.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - diff --git a/app/src/main/res/layout/activity_addsite.xml b/app/src/main/res/layout/activity_addsite.xml index 758a1c7..89d3624 100644 --- a/app/src/main/res/layout/activity_addsite.xml +++ b/app/src/main/res/layout/activity_addsite.xml @@ -96,62 +96,13 @@ tools:text="Warning: this app checks for server availability with HTTP requests. It's recommended that you use an HTTP URL." /> - + - - - - - - - - - - - - + -