From 454c6cd8e670c859dd73d6f614c88191e31e5945 Mon Sep 17 00:00:00 2001 From: Marcel Hibbe Date: Fri, 4 Feb 2022 15:18:26 +0100 Subject: [PATCH] add ability to send predefined and custom status Signed-off-by: Marcel Hibbe --- .../java/com/nextcloud/talk/api/NcApi.java | 14 +++ .../talk/ui/dialog/SetStatusDialogFragment.kt | 99 +++++++++++++++---- .../com/nextcloud/talk/utils/ApiUtils.java | 7 ++ 3 files changed, 99 insertions(+), 21 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/api/NcApi.java b/app/src/main/java/com/nextcloud/talk/api/NcApi.java index f247fe9ac..c35ec464f 100644 --- a/app/src/main/java/com/nextcloud/talk/api/NcApi.java +++ b/app/src/main/java/com/nextcloud/talk/api/NcApi.java @@ -458,4 +458,18 @@ public interface NcApi { Observable statusDeleteMessage(@Header("Authorization") String authorization, @Url String url); + @FormUrlEncoded + @PUT + Observable setPredefinedStatusMessage(@Header("Authorization") String authorization, + @Url String url, + @Field("messageId") String selectedPredefinedMessageId, + @Field("clearAt") Long clearAt); + + @FormUrlEncoded + @PUT + Observable setCustomStatusMessage(@Header("Authorization") String authorization, + @Url String url, + @Field("statusIcon") String statusIcon, + @Field("message") String message, + @Field("clearAt") Long clearAt); } 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 ce1b3f19b..e57bb50ac 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 @@ -98,7 +98,7 @@ class SetStatusDialogFragment : private lateinit var adapter: PredefinedStatusListAdapter private var selectedPredefinedMessageId: String? = null - private var clearAt: Long? = -1 + private var clearAt: Long? = null private lateinit var popup: EmojiPopup // @Inject @@ -113,6 +113,8 @@ class SetStatusDialogFragment : @Inject lateinit var ncApi: NcApi + lateinit var credentials: String + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -122,7 +124,7 @@ class SetStatusDialogFragment : currentUser = it.getParcelable(ARG_CURRENT_USER_PARAM) currentStatus = it.getParcelable(ARG_CURRENT_STATUS_PARAM) - val credentials = ApiUtils.getCredentials(currentUser?.username, currentUser?.token) + credentials = ApiUtils.getCredentials(currentUser?.username, currentUser?.token) ncApi.getPredefinedStatuses(credentials, ApiUtils.getUrlForPredefinedStatuses(currentUser?.baseUrl)) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) @@ -408,6 +410,61 @@ class SetStatusDialogFragment : private fun setStatusMessage() { + if (selectedPredefinedMessageId != null) { + + ncApi.setPredefinedStatusMessage( + credentials, + ApiUtils.getUrlForSetPredefinedStatus(currentUser?.baseUrl), + selectedPredefinedMessageId, + clearAt) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + ?.subscribe(object : Observer { + + override fun onSubscribe(d: Disposable) { + } + + override fun onNext(t: GenericOverall) { + Log.d(TAG, "PredefinedStatusMessage successfully set") + dismiss() + } + + override fun onError(e: Throwable) { + Log.d(TAG, "failed to set PredefinedStatusMessage", e) + } + + override fun onComplete() {} + + }) + } else { + ncApi.setCustomStatusMessage( + credentials, + ApiUtils.getUrlForSetCustomStatus(currentUser?.baseUrl), + binding.emoji.text.toString(), + binding.customStatusInput.text.toString(), + clearAt) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + ?.subscribe(object : Observer { + + override fun onSubscribe(d: Disposable) { + } + + override fun onNext(t: GenericOverall) { + Log.d(TAG, "CustomStatusMessage successfully set") + dismiss() + } + + override fun onError(e: Throwable) { + Log.d(TAG, "failed to set CustomStatusMessage", e) + } + + override fun onComplete() {} + + }) + } + + // if (selectedPredefinedMessageId != null) { // asyncRunner.postQuickTask( // SetPredefinedCustomStatusTask( @@ -439,25 +496,6 @@ class SetStatusDialogFragment : // } - - /** - * Fragment creator - */ - companion object { - @JvmStatic - fun newInstance(user: User, status: Status): SetStatusDialogFragment { - val args = Bundle() - args.putParcelable(ARG_CURRENT_USER_PARAM, user) - args.putParcelable(ARG_CURRENT_STATUS_PARAM, status) - - - val dialogFragment = SetStatusDialogFragment() - dialogFragment.arguments = args - // dialogFragment.setStyle(STYLE_NORMAL, R.style.Theme_ownCloud_Dialog) - return dialogFragment - } - } - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { return binding.root } @@ -502,5 +540,24 @@ class SetStatusDialogFragment : // } + /** + * Fragment creator + */ + companion object { + private const val TAG = "SetStatusDialogFragment" + + @JvmStatic + fun newInstance(user: User, status: Status): SetStatusDialogFragment { + val args = Bundle() + args.putParcelable(ARG_CURRENT_USER_PARAM, user) + args.putParcelable(ARG_CURRENT_STATUS_PARAM, status) + + + val dialogFragment = SetStatusDialogFragment() + dialogFragment.arguments = args + // dialogFragment.setStyle(STYLE_NORMAL, R.style.Theme_ownCloud_Dialog) + return dialogFragment + } + } } diff --git a/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.java b/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.java index 8bea73596..b5cf6ff74 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.java +++ b/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.java @@ -434,4 +434,11 @@ public class ApiUtils { } + public static String getUrlForSetPredefinedStatus(String baseUrl) { + return baseUrl + ocsApiVersion + "/apps/user_status/api/v1/user_status/message/predefined"; + } + + public static String getUrlForSetCustomStatus(String baseUrl) { + return baseUrl + ocsApiVersion + "/apps/user_status/api/v1/user_status/message/custom"; + } }