From 34117285977fdfec4941aa766ea1d6a1acf87530 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim=20Kr=C3=BCger?= Date: Wed, 2 Mar 2022 09:12:01 +0100 Subject: [PATCH 1/3] Pass 'null' for unset icon in custom status message MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The OCS Status API expect an valid emoji or 'null' for the status icon in a custom message: > field: statusIcon > type: string/null > Description: The icon picked by the user (must be an emoji, at most one) See [1] for more details. Resolves: #1839 See: [1] https://docs.nextcloud.com/server/latest/developer_manual/client_apis/OCS/ocs-status-api.html#set-a-custom-message-user-defined Signed-off-by: Tim Krüger --- .../talk/ui/dialog/SetStatusDialogFragment.kt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/ui/dialog/SetStatusDialogFragment.kt b/app/src/main/java/com/nextcloud/talk/ui/dialog/SetStatusDialogFragment.kt index 898564b8a..3db3be2f0 100644 --- a/app/src/main/java/com/nextcloud/talk/ui/dialog/SetStatusDialogFragment.kt +++ b/app/src/main/java/com/nextcloud/talk/ui/dialog/SetStatusDialogFragment.kt @@ -393,15 +393,15 @@ class SetStatusDialogFragment : } private fun setStatusMessage() { - var inputText = binding.customStatusInput.text.toString() - if (inputText.isEmpty()) { - inputText = " " - } + + val inputText = binding.customStatusInput.text.toString().ifEmpty { " " } + // The endpoint '/message/custom' expects a valid emoji as string or null + val statusIcon = binding.emoji.text.toString().ifEmpty { null } ncApi.setCustomStatusMessage( credentials, ApiUtils.getUrlForSetCustomStatus(currentUser?.baseUrl), - binding.emoji.text.toString(), + statusIcon, inputText, clearAt ) From f8e8a95b343c4dc981fbd354dd552edc750989c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim=20Kr=C3=BCger?= Date: Wed, 2 Mar 2022 09:20:07 +0100 Subject: [PATCH 2/3] Use '==' instead of 'equals' in Kotlin MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In Kotlin for a check of the structural equality '==' should be used. Referential equality is checked with '==='. See: - https://kotlinlang.org/docs/equality.html Signed-off-by: Tim Krüger --- .../talk/ui/dialog/SetStatusDialogFragment.kt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/ui/dialog/SetStatusDialogFragment.kt b/app/src/main/java/com/nextcloud/talk/ui/dialog/SetStatusDialogFragment.kt index 3db3be2f0..9ff59a01d 100644 --- a/app/src/main/java/com/nextcloud/talk/ui/dialog/SetStatusDialogFragment.kt +++ b/app/src/main/java/com/nextcloud/talk/ui/dialog/SetStatusDialogFragment.kt @@ -289,10 +289,10 @@ class SetStatusDialogFragment : @Suppress("ReturnCount") private fun clearAtToUnixTime(clearAt: ClearAt?): Long { if (clearAt != null) { - if (clearAt.type.equals("period")) { + if (clearAt.type == "period") { return System.currentTimeMillis() / ONE_SECOND_IN_MILLIS + clearAt.time.toLong() - } else if (clearAt.type.equals("end-of")) { - if (clearAt.time.equals("day")) { + } else if (clearAt.type == "end-of") { + if (clearAt.time == "day") { val date = Calendar.getInstance().apply { set(Calendar.HOUR_OF_DAY, LAST_HOUR_OF_DAY) set(Calendar.MINUTE, LAST_MINUTE_OF_HOUR) @@ -443,14 +443,14 @@ class SetStatusDialogFragment : binding.clearStatusAfterSpinner.setSelection(0) } else { val clearAt = predefinedStatus.clearAt!! - if (clearAt.type.equals("period")) { + if (clearAt.type == "period") { when (clearAt.time) { "1800" -> binding.clearStatusAfterSpinner.setSelection(POS_HALF_AN_HOUR) "3600" -> binding.clearStatusAfterSpinner.setSelection(POS_AN_HOUR) "14400" -> binding.clearStatusAfterSpinner.setSelection(POS_FOUR_HOURS) else -> binding.clearStatusAfterSpinner.setSelection(POS_DONT_CLEAR) } - } else if (clearAt.type.equals("end-of")) { + } else if (clearAt.type == "end-of") { when (clearAt.time) { "day" -> binding.clearStatusAfterSpinner.setSelection(POS_TODAY) "week" -> binding.clearStatusAfterSpinner.setSelection(POS_END_OF_WEEK) From cb1dd8e5b5278875beb56b382eecf30330294aab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim=20Kr=C3=BCger?= Date: Thu, 10 Mar 2022 16:59:36 +0100 Subject: [PATCH 3/3] Avoid empty status message MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Enable the 'Set status message' button only if a message is set. Currently the API don't allow us to set an empty message [1]. See: [1] nextcloud/server#31452 #1839 Signed-off-by: Tim Krüger --- .../talk/ui/dialog/SetStatusDialogFragment.kt | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/ui/dialog/SetStatusDialogFragment.kt b/app/src/main/java/com/nextcloud/talk/ui/dialog/SetStatusDialogFragment.kt index 9ff59a01d..306f3df13 100644 --- a/app/src/main/java/com/nextcloud/talk/ui/dialog/SetStatusDialogFragment.kt +++ b/app/src/main/java/com/nextcloud/talk/ui/dialog/SetStatusDialogFragment.kt @@ -35,6 +35,7 @@ import android.widget.AdapterView import android.widget.AdapterView.OnItemSelectedListener import android.widget.ArrayAdapter import androidx.appcompat.app.AlertDialog +import androidx.core.widget.doAfterTextChanged import androidx.fragment.app.DialogFragment import androidx.recyclerview.widget.LinearLayoutManager import autodagger.AutoInjector @@ -59,6 +60,7 @@ import io.reactivex.Observer import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.disposables.Disposable import io.reactivex.schedulers.Schedulers +import kotlinx.android.synthetic.main.dialog_set_status.* import okhttp3.ResponseBody import java.util.Calendar import java.util.Locale @@ -157,7 +159,8 @@ class SetStatusDialogFragment : currentStatus?.let { binding.emoji.setText(it.icon) binding.customStatusInput.text?.clear() - binding.customStatusInput.setText(it.message) + binding.customStatusInput.setText(it.message?.trim()) + binding.setStatus.isEnabled = it.message?.isEmpty() == false visualizeStatus(it.status) if (it.clearAt > 0) { @@ -231,6 +234,10 @@ class SetStatusDialogFragment : binding.setStatus.setBackgroundColor(resources.getColor(R.color.colorPrimary)) binding.customStatusInput.highlightColor = resources.getColor(R.color.colorPrimary) + + binding.customStatusInput.doAfterTextChanged { text -> + binding.setStatus.isEnabled = !text.isNullOrEmpty() + } } @Suppress("ComplexMethod") @@ -394,7 +401,7 @@ class SetStatusDialogFragment : private fun setStatusMessage() { - val inputText = binding.customStatusInput.text.toString().ifEmpty { " " } + val inputText = binding.customStatusInput.text.toString().ifEmpty { "" } // The endpoint '/message/custom' expects a valid emoji as string or null val statusIcon = binding.emoji.text.toString().ifEmpty { null }