Skip to content

Commit e99b6f8

Browse files
committed
use api result
Signed-off-by: alperozturk <[email protected]>
1 parent 39d01e3 commit e99b6f8

File tree

4 files changed

+93
-55
lines changed

4 files changed

+93
-55
lines changed
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package it.niedermann.owncloud.notes.persistence
2+
3+
sealed class ApiResult<out T> {
4+
data class Success<out T>(val data: T, val message: String? = null) : ApiResult<T>()
5+
data class Error(val message: String, val code: Int? = null) : ApiResult<Nothing>()
6+
}
7+
8+
fun <T> ApiResult<T>.isSuccess(): Boolean = this is ApiResult.Success<T>
9+
fun <T> ApiResult<T>.isError(): Boolean = this is ApiResult.Error

app/src/main/java/it/niedermann/owncloud/notes/share/NoteShareActivity.java

Lines changed: 50 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@
4848
import it.niedermann.owncloud.notes.branding.BrandingUtil;
4949
import it.niedermann.owncloud.notes.databinding.ActivityNoteShareBinding;
5050
import it.niedermann.owncloud.notes.main.MainActivity;
51+
import it.niedermann.owncloud.notes.persistence.ApiResult;
52+
import it.niedermann.owncloud.notes.persistence.ApiResultKt;
5153
import it.niedermann.owncloud.notes.persistence.entity.Account;
5254
import it.niedermann.owncloud.notes.persistence.entity.Note;
5355
import it.niedermann.owncloud.notes.share.adapter.ShareeListAdapter;
@@ -60,9 +62,11 @@
6062
import it.niedermann.owncloud.notes.share.helper.UsersAndGroupsSearchProvider;
6163
import it.niedermann.owncloud.notes.share.listener.NoteShareItemAction;
6264
import it.niedermann.owncloud.notes.share.listener.ShareeListAdapterListener;
65+
import it.niedermann.owncloud.notes.share.model.CreateShareResponse;
6366
import it.niedermann.owncloud.notes.share.model.UsersAndGroupsSearchConfig;
6467
import it.niedermann.owncloud.notes.share.repository.ShareRepository;
6568
import it.niedermann.owncloud.notes.shared.model.Capabilities;
69+
import it.niedermann.owncloud.notes.shared.model.OcsResponse;
6670
import it.niedermann.owncloud.notes.shared.util.DisplayUtils;
6771
import it.niedermann.owncloud.notes.shared.util.ShareUtil;
6872
import it.niedermann.owncloud.notes.shared.util.clipboard.ClipboardUtil;
@@ -331,16 +335,17 @@ public void createPublicShareLink() {
331335
} else {
332336
executorService.submit(() -> {
333337
final var result = repository.addShare(note, ShareType.PUBLIC_LINK, "", "false", "", 0, "");
334-
if (result != null) {
335-
final var message = result.getSecond();
336-
DisplayUtils.showSnackMessage(NoteShareActivity.this, message);
338+
runOnUiThread(() -> {
339+
if (result instanceof ApiResult.Success<OcsResponse<CreateShareResponse>> successResponse) {
340+
DisplayUtils.showSnackMessage(NoteShareActivity.this, successResponse.getMessage());
337341

338-
if (result.getFirst()) {
339342
note.setIsShared(true);
340343
repository.updateNote(note);
341-
runOnUiThread(this::recreate);
344+
runOnUiThread(NoteShareActivity.this::recreate);
345+
} else if (result instanceof ApiResult.Error errorResponse) {
346+
DisplayUtils.showSnackMessage(NoteShareActivity.this, errorResponse.getMessage());
342347
}
343-
}
348+
});
344349
});
345350
}
346351
}
@@ -363,14 +368,14 @@ private void showShareLinkDialog(String link) {
363368
intentToShareLink.setType("text/plain");
364369
intentToShareLink.putExtra(Intent.EXTRA_SUBJECT, getString(R.string.note_share_activity_subject_shared_with_you, note.getTitle()));
365370

366-
String[] packagesToExclude = new String[] { this.getPackageName() };
371+
String[] packagesToExclude = new String[]{this.getPackageName()};
367372
DialogFragment chooserDialog = ShareLinkToDialog.newInstance(intentToShareLink, packagesToExclude);
368373
chooserDialog.show(getSupportFragmentManager(), FTAG_CHOOSER_DIALOG);
369374
}
370375

371376
private String createInternalLink() {
372377
Uri baseUri = Uri.parse(account.getUrl());
373-
return baseUri + "/index.php/f/" + note.getRemoteId();
378+
return baseUri + "/index.php/f/" + note.getRemoteId();
374379
}
375380

376381
@Override
@@ -642,7 +647,15 @@ private boolean getExpDateShown() {
642647

643648
@Override
644649
public void onQuickPermissionChanged(OCShare share, int permission) {
645-
repository.updateSharePermission(share.getId(), permission);
650+
executorService.submit(() -> {
651+
final var result = repository.updateSharePermission(share.getId(), permission);
652+
653+
runOnUiThread(() -> {
654+
if (result instanceof ApiResult.Error error) {
655+
DisplayUtils.showSnackMessage(NoteShareActivity.this, error.getMessage());
656+
}
657+
});
658+
});
646659
}
647660

648661
private final ActivityResultLauncher<String> requestContactPermissionLauncher =
@@ -711,13 +724,11 @@ public void shareFileViaPublicShare(@Nullable Note note, @Nullable String passwo
711724
);
712725

713726
runOnUiThread(() -> {
714-
if (result != null) {
715-
final var message = result.getSecond();
716-
DisplayUtils.showSnackMessage(NoteShareActivity.this, message);
717-
718-
if (result.getFirst()) {
719-
NoteShareActivity.this.recreate();
720-
}
727+
if (ApiResultKt.isSuccess(result)) {
728+
NoteShareActivity.this.recreate();
729+
} else if (ApiResultKt.isError(result)) {
730+
ApiResult.Error error = (ApiResult.Error) result;
731+
DisplayUtils.showSnackMessage(NoteShareActivity.this, error.getMessage());
721732
}
722733
});
723734
});
@@ -730,26 +741,29 @@ public void setPasswordToShare(@NotNull OCShare share, @Nullable String password
730741
return;
731742
}
732743

733-
executorService.submit(() -> {{
734-
final var requestBody = repository.getUpdateShareRequest(false,
735-
share,
736-
"",
737-
password,
738-
false,
739-
-1,
740-
repository.getCapabilities().getDefaultPermission()
741-
);
742-
final var success = repository.updateShare(share.getId(), requestBody);
744+
executorService.submit(() -> {
745+
{
746+
final var requestBody = repository.getUpdateShareRequest(false,
747+
share,
748+
"",
749+
password,
750+
false,
751+
-1,
752+
repository.getCapabilities().getDefaultPermission()
753+
);
754+
final var result = repository.updateShare(share.getId(), requestBody);
743755

744-
runOnUiThread(() -> {
745-
if (success) {
746-
final var intent = new Intent(NoteShareActivity.this, MainActivity.class);
747-
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
748-
NoteShareActivity.this.startActivity(intent);
749-
} else {
750-
DisplayUtils.showSnackMessage(NoteShareActivity.this, getString(R.string.note_share_detail_activity_create_share_error));
751-
}
752-
});
753-
}});
756+
runOnUiThread(() -> {
757+
if (ApiResultKt.isSuccess(result)) {
758+
final var intent = new Intent(NoteShareActivity.this, MainActivity.class);
759+
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
760+
NoteShareActivity.this.startActivity(intent);
761+
} else if (ApiResultKt.isError(result)) {
762+
ApiResult.Error error = (ApiResult.Error) result;
763+
DisplayUtils.showSnackMessage(NoteShareActivity.this, error.getMessage());
764+
}
765+
});
766+
}
767+
});
754768
}
755769
}

app/src/main/java/it/niedermann/owncloud/notes/share/NoteShareDetailActivity.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import it.niedermann.owncloud.notes.branding.BrandingUtil
1818
import it.niedermann.owncloud.notes.databinding.ActivityNoteShareDetailBinding
1919
import it.niedermann.owncloud.notes.main.MainActivity
2020
import it.niedermann.owncloud.notes.persistence.entity.Note
21+
import it.niedermann.owncloud.notes.persistence.isSuccess
2122
import it.niedermann.owncloud.notes.share.dialog.ExpirationDatePickerDialogFragment
2223
import it.niedermann.owncloud.notes.share.helper.SharingMenuHelper
2324
import it.niedermann.owncloud.notes.share.model.SharePasswordRequest
@@ -544,11 +545,11 @@ class NoteShareDetailActivity : BrandedActivity(),
544545

545546
val updateShareResult = repository.updateShare(share!!.id, requestBody)
546547

547-
if (updateShareResult && sendEmail) {
548+
if (updateShareResult.isSuccess() && sendEmail) {
548549
val sendEmailResult = repository.sendEmail(share!!.id, SharePasswordRequest(password))
549550
handleResult(sendEmailResult)
550551
} else {
551-
handleResult(updateShareResult)
552+
handleResult(updateShareResult.isSuccess())
552553
}
553554

554555
if (!sendEmail) {
@@ -576,11 +577,11 @@ class NoteShareDetailActivity : BrandedActivity(),
576577
noteText
577578
)
578579

579-
if (result != null && result.first) {
580+
if (result.isSuccess()) {
580581
repository.getSharesForNotesAndSaveShareEntities()
581582
}
582583

583-
handleResult(result != null && result.first)
584+
handleResult(result.isSuccess())
584585
}
585586

586587
private suspend fun handleResult(success: Boolean) {

app/src/main/java/it/niedermann/owncloud/notes/share/repository/ShareRepository.kt

Lines changed: 29 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,12 @@ import com.owncloud.android.lib.resources.shares.OCShare
99
import com.owncloud.android.lib.resources.shares.ShareType
1010
import it.niedermann.owncloud.notes.R
1111
import it.niedermann.owncloud.notes.persistence.ApiProvider
12+
import it.niedermann.owncloud.notes.persistence.ApiResult
1213
import it.niedermann.owncloud.notes.persistence.NotesRepository
1314
import it.niedermann.owncloud.notes.persistence.entity.Note
1415
import it.niedermann.owncloud.notes.persistence.entity.ShareEntity
1516
import it.niedermann.owncloud.notes.share.model.CreateShareRequest
17+
import it.niedermann.owncloud.notes.share.model.CreateShareResponse
1618
import it.niedermann.owncloud.notes.share.model.ShareAttributesV1
1719
import it.niedermann.owncloud.notes.share.model.ShareAttributesV2
1820
import it.niedermann.owncloud.notes.share.model.SharePasswordRequest
@@ -22,6 +24,7 @@ import it.niedermann.owncloud.notes.share.model.toOCShare
2224
import it.niedermann.owncloud.notes.shared.model.ApiVersion
2325
import it.niedermann.owncloud.notes.shared.model.Capabilities
2426
import it.niedermann.owncloud.notes.shared.model.NotesSettings
27+
import it.niedermann.owncloud.notes.shared.model.OcsResponse
2528
import it.niedermann.owncloud.notes.shared.util.StringConstants
2629
import it.niedermann.owncloud.notes.shared.util.extensions.getErrorMessage
2730
import it.niedermann.owncloud.notes.shared.util.extensions.toExpirationDateString
@@ -307,21 +310,27 @@ class ShareRepository(
307310
}
308311
}
309312

310-
fun updateShare(shareId: Long, requestBody: UpdateShareRequest): Boolean {
313+
fun updateShare(
314+
shareId: Long,
315+
requestBody: UpdateShareRequest
316+
): ApiResult<OcsResponse<CreateShareResponse>?> {
311317
val shareAPI = apiProvider.getShareAPI(applicationContext, account)
312318
val call = shareAPI.updateShare(shareId, requestBody)
313319
val response = call.execute()
314320
return try {
315321
if (response.isSuccessful) {
316322
Log_OC.d(tag, "Share updated successfully: ${response.body().toString()}")
323+
ApiResult.Success(
324+
data = response.body(),
325+
message = applicationContext.getString(R.string.note_share_created)
326+
)
317327
} else {
318328
Log_OC.d(tag, "Failed to update share: ${response.errorBody()?.string()}")
329+
ApiResult.Error(message = response.getErrorMessage() ?: "")
319330
}
320-
321-
response.isSuccessful
322331
} catch (e: Exception) {
323332
Log_OC.d(tag, "Exception while updating share", e)
324-
false
333+
ApiResult.Error(message = e.message ?: "")
325334
}
326335
}
327336

@@ -335,10 +344,13 @@ class ShareRepository(
335344
password: String = "",
336345
permissions: Int = 0,
337346
shareNote: String = ""
338-
): Pair<Boolean, String>? {
347+
): ApiResult<OcsResponse<CreateShareResponse>?> {
348+
val defaultErrorMessage =
349+
applicationContext.getString(R.string.note_share_activity_cannot_created)
339350
val notesPathCall = notesRepository.getServerSettings(account, ApiVersion.API_VERSION_1_0)
340351
val notesPathResponse = notesPathCall.execute()
341-
val notesPathResponseResult = notesPathResponse.body() ?: return null
352+
val notesPathResponseResult =
353+
notesPathResponse.body() ?: return ApiResult.Error(message = defaultErrorMessage)
342354
val notesPath = notesPathResponseResult.notesPath
343355
val notesSuffix = notesPathResponseResult.fileSuffix
344356

@@ -355,32 +367,33 @@ class ShareRepository(
355367
val shareAPI = apiProvider.getShareAPI(applicationContext, account)
356368
val call = shareAPI.addShare(request = requestBody)
357369
val response = call.execute()
358-
val defaultErrorMessage =
359-
applicationContext.getString(R.string.note_share_activity_cannot_created)
360370

361371
return try {
362372
if (response.isSuccessful) {
363373
val createShareResponse = response.body()
364374
Log_OC.d(tag, "Response successful: $createShareResponse")
365-
true to applicationContext.getString(R.string.note_share_created)
375+
ApiResult.Success(
376+
data = createShareResponse,
377+
message = applicationContext.getString(R.string.note_share_created)
378+
)
366379
} else {
367380
val errorMessage = response.getErrorMessage()
368381
if (errorMessage == null) {
369-
return false to defaultErrorMessage
382+
return ApiResult.Error(message = defaultErrorMessage)
370383
}
371384
Log_OC.d(tag, "Response failed: $errorMessage")
372-
false to errorMessage
385+
ApiResult.Error(message = errorMessage)
373386
}
374387
} catch (e: Exception) {
375388
Log_OC.d(tag, "Exception while creating share", e)
376-
false to defaultErrorMessage
389+
ApiResult.Error(message = defaultErrorMessage)
377390
}
378391
}
379392

380393
fun updateSharePermission(
381394
shareId: Long,
382395
permissions: Int? = null,
383-
): Boolean {
396+
): ApiResult<OcsResponse<CreateShareResponse>?> {
384397
val shareAPI = apiProvider.getShareAPI(applicationContext, account)
385398
val requestBody = UpdateSharePermissionRequest(permissions = permissions)
386399

@@ -389,13 +402,14 @@ class ShareRepository(
389402
val response = call.execute()
390403
if (response.isSuccessful) {
391404
Log_OC.d(tag, "Share updated successfully: ${response.body()}")
405+
ApiResult.Success(response.body())
392406
} else {
393407
Log_OC.d(tag, "Failed to update share: ${response.errorBody()?.string()}")
408+
ApiResult.Error(message = response.getErrorMessage() ?: "", code = null)
394409
}
395-
response.isSuccessful
396410
} catch (e: Exception) {
397411
Log_OC.d(tag, "Exception while updating share", e)
398-
false
412+
ApiResult.Error(message = e.message ?: "", code = null)
399413
}
400414
}
401415
// endregion

0 commit comments

Comments
 (0)