Skip to content

Commit d765f03

Browse files
committed
add user status repo
Signed-off-by: alperozturk <[email protected]>
1 parent ccd89d3 commit d765f03

File tree

4 files changed

+93
-5
lines changed

4 files changed

+93
-5
lines changed

app/src/main/java/it/niedermann/owncloud/notes/accountswitcher/SetStatusMessageBottomSheet.kt

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import android.widget.AdapterView
2222
import android.widget.AdapterView.OnItemSelectedListener
2323
import android.widget.ArrayAdapter
2424
import androidx.annotation.VisibleForTesting
25+
import androidx.lifecycle.lifecycleScope
2526
import androidx.recyclerview.widget.LinearLayoutManager
2627
import com.nextcloud.common.User
2728
import com.owncloud.android.lib.resources.users.ClearAt
@@ -35,6 +36,7 @@ import com.vanniktech.emoji.installForceSingleEmoji
3536
import it.niedermann.owncloud.notes.R
3637
import it.niedermann.owncloud.notes.accountswitcher.adapter.PredefinedStatusClickListener
3738
import it.niedermann.owncloud.notes.accountswitcher.adapter.PredefinedStatusListAdapter
39+
import it.niedermann.owncloud.notes.accountswitcher.repository.UserStatusRepository
3840
import it.niedermann.owncloud.notes.accountswitcher.task.ClearStatusTask
3941
import it.niedermann.owncloud.notes.accountswitcher.task.SetPredefinedCustomStatusTask
4042
import it.niedermann.owncloud.notes.accountswitcher.task.SetUserDefinedCustomStatusTask
@@ -45,6 +47,8 @@ import it.niedermann.owncloud.notes.shared.util.DisplayUtils
4547
import it.niedermann.owncloud.notes.util.runner.AsyncRunner
4648
import it.niedermann.owncloud.notes.util.runner.ThreadPoolAsyncRunner
4749
import it.niedermann.owncloud.notes.util.storage.UserStorage
50+
import kotlinx.coroutines.Dispatchers
51+
import kotlinx.coroutines.launch
4852
import java.util.Calendar
4953
import java.util.Locale
5054

@@ -68,12 +72,11 @@ private const val CLEAR_AT_TYPE_END_OF = "end-of"
6872

6973
class SetStatusMessageBottomSheet(val user: User, val currentStatus: Status?) :
7074
BrandedBottomSheetDialogFragment(R.layout.set_status_message_bottom_sheet),
71-
PredefinedStatusClickListener,
72-
Injectable {
75+
PredefinedStatusClickListener{
7376

7477
private lateinit var binding: SetStatusMessageBottomSheetBinding
7578

76-
private lateinit var accountManager: UserAccountManager
79+
private lateinit var repository: UserStatusRepository
7780
private lateinit var predefinedStatus: ArrayList<PredefinedStatus>
7881
private lateinit var adapter: PredefinedStatusListAdapter
7982
private var selectedPredefinedMessageId: String? = null
@@ -88,6 +91,11 @@ class SetStatusMessageBottomSheet(val user: User, val currentStatus: Status?) :
8891
val uiHandler = Handler(Looper.getMainLooper())
8992
asyncRunner = ThreadPoolAsyncRunner(uiHandler, 4, "io")
9093
predefinedStatus = UserStorage.readPredefinedStatus(requireContext())
94+
95+
lifecycleScope.launch(Dispatchers.IO) {
96+
97+
}
98+
repository = UserStatusRepository(requireContext())
9199
EmojiManager.install(GoogleEmojiProvider())
92100
}
93101

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package it.niedermann.owncloud.notes.accountswitcher.repository
2+
3+
import android.content.Context
4+
import android.util.Log
5+
import androidx.annotation.WorkerThread
6+
import com.nextcloud.android.sso.model.SingleSignOnAccount
7+
import it.niedermann.owncloud.notes.persistence.ApiProvider
8+
import it.niedermann.owncloud.notes.shared.model.OcsResponse
9+
import retrofit2.Response
10+
import kotlin.getValue
11+
12+
class UserStatusRepository(
13+
private val context: Context,
14+
private val ssoAccount: SingleSignOnAccount
15+
) {
16+
companion object {
17+
private const val TAG = "UserStatusRepository"
18+
}
19+
20+
private val ocsAPI by lazy { ApiProvider.getInstance().getOcsAPI(context, ssoAccount) }
21+
22+
@WorkerThread
23+
fun clearStatus(): Boolean {
24+
return try {
25+
val response: Response<OcsResponse<Void>> = ocsAPI.clearStatusMessage().execute()
26+
response.isSuccessful
27+
} catch (t: Throwable) {
28+
Log.e(TAG, "Clearing status failed", t)
29+
false
30+
}
31+
}
32+
33+
@WorkerThread
34+
fun setPredefinedStatus(messageId: String, clearAt: Long? = null): Boolean {
35+
val body = mutableMapOf<String, String>("messageId" to messageId)
36+
clearAt?.let { body["clearAt"] = it.toString() }
37+
38+
return try {
39+
val response: Response<OcsResponse<Void>> = ocsAPI.setPredefinedStatusMessage(body).execute()
40+
response.isSuccessful
41+
} catch (t: Throwable) {
42+
Log.e(TAG, "Setting predefined status failed", t)
43+
false
44+
}
45+
}
46+
47+
@WorkerThread
48+
fun setCustomStatus(message: String, statusIcon: String, clearAt: Long? = null): Boolean {
49+
val body = mutableMapOf(
50+
"message" to message,
51+
"statusIcon" to statusIcon
52+
)
53+
clearAt?.let { body["clearAt"] = it.toString() }
54+
55+
return try {
56+
val response: Response<OcsResponse<Void>> = ocsAPI.setUserDefinedStatusMessage(body).execute()
57+
response.isSuccessful
58+
} catch (t: Throwable) {
59+
Log.e(TAG, "Setting custom status failed", t)
60+
false
61+
}
62+
}
63+
}

app/src/main/java/it/niedermann/owncloud/notes/persistence/sync/OcsAPI.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,19 @@
88

99
import com.nextcloud.android.sso.api.ParsedResponse;
1010

11+
import java.util.Map;
12+
1113
import io.reactivex.Observable;
1214
import it.niedermann.owncloud.notes.shared.model.Capabilities;
1315
import it.niedermann.owncloud.notes.shared.model.OcsResponse;
1416
import it.niedermann.owncloud.notes.shared.model.OcsUser;
1517
import retrofit2.Call;
18+
import retrofit2.http.Body;
19+
import retrofit2.http.DELETE;
1620
import retrofit2.http.GET;
1721
import retrofit2.http.Header;
22+
import retrofit2.http.Headers;
23+
import retrofit2.http.PUT;
1824
import retrofit2.http.Path;
1925

2026
/**
@@ -27,4 +33,15 @@ public interface OcsAPI {
2733

2834
@GET("users/{userId}?format=json")
2935
Call<OcsResponse<OcsUser>> getUser(@Path("userId") String userId);
36+
37+
@DELETE("apps/user_status/api/v1/user_status/message?format=json")
38+
Call<OcsResponse<Void>> clearStatusMessage();
39+
40+
@PUT("apps/user_status/api/v1/user_status/message/predefined?format=json")
41+
@Headers("Content-Type: application/json")
42+
Call<OcsResponse<Void>> setPredefinedStatusMessage(@Body Map<String, String> body);
43+
44+
@PUT("apps/user_status/api/v1/user_status/message/custom?format=json")
45+
@Headers("Content-Type: application/json")
46+
Call<OcsResponse<Void>> setUserDefinedStatusMessage(@Body Map<String, String> body);
3047
}

app/src/main/java/it/niedermann/owncloud/notes/util/storage/UserStorage.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,16 @@ package it.niedermann.owncloud.notes.util.storage
22

33
import android.content.Context
44
import android.content.SharedPreferences
5+
import androidx.preference.PreferenceManager
56
import com.google.gson.Gson
67
import com.google.gson.reflect.TypeToken
78
import com.owncloud.android.lib.resources.users.PredefinedStatus
89

910
object UserStorage {
10-
private const val APP = "NextcloudNotes"
1111
private const val PREDEFINED_STATUS = "PREDEFINED_STATUS"
1212

1313
private fun getSharedPreferences(context: Context): SharedPreferences {
14-
return context.getSharedPreferences(APP, Context.MODE_PRIVATE)
14+
return PreferenceManager.getDefaultSharedPreferences(context)
1515
}
1616

1717
fun readPredefinedStatus(context: Context): ArrayList<PredefinedStatus> {

0 commit comments

Comments
 (0)