Selaa lähdekoodia

add ability to send predefined and custom status

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
Marcel Hibbe 3 vuotta sitten
vanhempi
commit
454c6cd8e6

+ 14 - 0
app/src/main/java/com/nextcloud/talk/api/NcApi.java

@@ -458,4 +458,18 @@ public interface NcApi {
     Observable<GenericOverall> statusDeleteMessage(@Header("Authorization") String authorization, @Url String url);
 
 
+    @FormUrlEncoded
+    @PUT
+    Observable<GenericOverall> setPredefinedStatusMessage(@Header("Authorization") String authorization,
+                                      @Url String url,
+                                      @Field("messageId") String selectedPredefinedMessageId,
+                                      @Field("clearAt") Long clearAt);
+
+    @FormUrlEncoded
+    @PUT
+    Observable<GenericOverall> setCustomStatusMessage(@Header("Authorization") String authorization,
+                                  @Url String url,
+                                  @Field("statusIcon") String statusIcon,
+                                  @Field("message") String message,
+                                  @Field("clearAt") Long clearAt);
 }

+ 78 - 21
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<GenericOverall> {
+
+                    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<GenericOverall> {
+
+                    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
+        }
+    }
 
 }

+ 7 - 0
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";
+    }
 }