فهرست منبع

handle reset status button

Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
sowjanyakch 7 ماه پیش
والد
کامیت
9fbb3886ab

+ 1 - 0
app/src/main/java/com/nextcloud/talk/adapters/PredefinedStatusClickListener.kt

@@ -10,4 +10,5 @@ import com.nextcloud.talk.models.json.status.predefined.PredefinedStatus
 
 interface PredefinedStatusClickListener {
     fun onClick(predefinedStatus: PredefinedStatus)
+    fun revertStatus()
 }

+ 3 - 0
app/src/main/java/com/nextcloud/talk/adapters/PredefinedStatusViewHolder.kt

@@ -52,6 +52,9 @@ class PredefinedStatusViewHolder(private val binding: PredefinedStatusBinding) :
             if (position == 0) {
                 binding.clearAt.text = context.getString(R.string.previously_set)
             }
+            binding.resetStatusButton.setOnClickListener{
+                clickListener.revertStatus()
+            }
         }
     }
 }

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

@@ -286,6 +286,9 @@ public interface NcApi {
     @GET
     Observable<UserProfileOverall> getUserData(@Header("Authorization") String authorization, @Url String url);
 
+    @DELETE
+    Observable<GenericOverall> revertStatus(@Header("Authentication") String authorization, @Url String url);
+
     @FormUrlEncoded
     @PUT
     Observable<GenericOverall> setUserData(@Header("Authorization") String authorization,

+ 44 - 6
app/src/main/java/com/nextcloud/talk/ui/dialog/SetStatusDialogFragment.kt

@@ -28,6 +28,7 @@ import autodagger.AutoInjector
 import com.bluelinelabs.logansquare.LoganSquare
 import com.google.android.material.card.MaterialCardView
 import com.google.android.material.dialog.MaterialAlertDialogBuilder
+import com.google.android.material.snackbar.Snackbar
 import com.nextcloud.android.common.ui.theme.utils.ColorRole
 import com.nextcloud.talk.R
 import com.nextcloud.talk.adapters.PredefinedStatusClickListener
@@ -88,6 +89,7 @@ class SetStatusDialogFragment :
 
     private var currentUser: User? = null
     private var currentStatus: Status? = null
+    private lateinit var backupStatus: Status
 
     val predefinedStatusesList = ArrayList<PredefinedStatus>()
 
@@ -96,6 +98,7 @@ class SetStatusDialogFragment :
     private lateinit var popup: EmojiPopup
     private var isBackupStatusAvailable = false
 
+
     @Inject
     lateinit var ncApi: NcApi
 
@@ -167,13 +170,13 @@ class SetStatusDialogFragment :
                 @SuppressLint("NotifyDataSetChanged")
                 override fun onNext(statusOverall: StatusOverall) {
                     if (statusOverall.ocs?.meta?.statusCode == 200) {
-                        val status = statusOverall.ocs?.data
+                        backupStatus = statusOverall.ocs?.data!!
                         isBackupStatusAvailable = true
                         val backupPredefinedStatus = PredefinedStatus(
-                            status?.userId!!,
-                            status.icon,
-                            status.message!!,
-                            ClearAt(type = "period", time = status.clearAt.toString())
+                            backupStatus?.userId!!,
+                            backupStatus.icon,
+                            backupStatus.message!!,
+                            ClearAt(type = "period", time = backupStatus.clearAt.toString())
                         )
                         adapter.isBackupStatusAvailable = true
                         predefinedStatusesList.add(0, backupPredefinedStatus)
@@ -221,7 +224,6 @@ class SetStatusDialogFragment :
         binding.clearStatus.setOnClickListener { clearStatus() }
         binding.setStatus.setOnClickListener { setStatusMessage() }
         binding.emoji.setOnClickListener { openEmojiPopup() }
-
         popup = EmojiPopup(
             rootView = view,
             editText = binding.emoji,
@@ -282,6 +284,42 @@ class SetStatusDialogFragment :
         }
     }
 
+    override fun revertStatus(){
+        ncApi.revertStatus(credentials, ApiUtils.getUrlForRevertStatus(currentUser?.baseUrl!!, currentStatus?.messageId))
+            .subscribeOn(Schedulers.io())
+            .observeOn(AndroidSchedulers.mainThread())
+            .subscribe(object : Observer<GenericOverall> {
+
+                override fun onSubscribe(d: Disposable) {
+                }
+
+                @SuppressLint("NotifyDataSetChanged")
+                override fun onNext(genericOverall:GenericOverall) {
+                    Log.d(TAG,"$genericOverall")
+                    if(genericOverall.ocs?.meta?.statusCode == 200){
+                        Snackbar.make(
+                            binding.root,
+                            R.string.status_reverted,
+                            Snackbar.LENGTH_LONG
+                        ).show()
+                        adapter.isBackupStatusAvailable = false
+                        predefinedStatusesList.removeAt(0)
+                        adapter.notifyDataSetChanged()
+                        currentStatus = backupStatus
+                        setupCurrentStatus()
+                    }
+                }
+                override fun onError(e: Throwable) {
+                    Log.e(TAG, "Error while fetching predefined statuses", e)
+                }
+
+                override fun onComplete() {
+                }
+            })
+
+
+    }
+
     private fun setupGeneralStatusOptions() {
         binding.onlineStatus.setOnClickListener { setStatus(StatusType.ONLINE) }
         binding.dndStatus.setOnClickListener { setStatus(StatusType.DND) }

+ 4 - 0
app/src/main/java/com/nextcloud/talk/utils/ApiUtils.kt

@@ -487,6 +487,10 @@ object ApiUtils {
         return "$baseUrl$OCS_API_VERSION/apps/user_status/api/v1/statuses/_$userId"
     }
 
+    fun getUrlForRevertStatus(baseUrl:String, messageId:String?):String{
+        return "$baseUrl$OCS_API_VERSION/apps/user_status/api/v1/user_status/revert/$messageId"
+    }
+
     fun getUrlForSetStatusType(baseUrl: String): String {
         return getUrlForStatus(baseUrl) + "/status"
     }

+ 1 - 0
app/src/main/res/values/strings.xml

@@ -829,4 +829,5 @@ How to translate with transifex:
     <string name="unarchive_hint">Once a conversation is unarchived, it will be shown by default again.</string>
     <string name="previously_set">Previously set</string>
     <string name="conversation_read_only_failed">Failed to set conversation Read-only</string>
+    <string name="status_reverted">Status Reverted</string>
 </resources>