Skip to content

Commit 95bd32d

Browse files
committed
redirect to share activity after add new share
Signed-off-by: alperozturk <[email protected]>
1 parent b2dd4ba commit 95bd32d

File tree

2 files changed

+76
-29
lines changed

2 files changed

+76
-29
lines changed

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

Lines changed: 73 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import android.view.ViewGroup;
1818
import android.view.inputmethod.EditorInfo;
1919

20+
import androidx.activity.OnBackPressedCallback;
2021
import androidx.activity.result.ActivityResultLauncher;
2122
import androidx.activity.result.contract.ActivityResultContracts;
2223
import androidx.annotation.NonNull;
@@ -36,6 +37,7 @@
3637
import org.jetbrains.annotations.NotNull;
3738

3839
import java.util.ArrayList;
40+
import java.util.Collections;
3941
import java.util.List;
4042
import java.util.concurrent.Executors;
4143
import java.util.concurrent.Future;
@@ -89,24 +91,51 @@ public class NoteShareActivity extends BrandedActivity implements ShareeListAdap
8991
private Account account;
9092
private ShareRepository repository;
9193
private Capabilities capabilities;
92-
private final List<OCShare> shares = new ArrayList<>();
94+
private ActivityResultLauncher<Intent> resultLauncher;
95+
private final List<OCShare> shares = Collections.synchronizedList(new ArrayList<>());
9396

9497
public void onCreate(@Nullable Bundle savedInstanceState) {
9598
super.onCreate(savedInstanceState);
9699

97100
executorService = Executors.newSingleThreadScheduledExecutor();
98101
binding = ActivityNoteShareBinding.inflate(getLayoutInflater());
99102
setContentView(binding.getRoot());
103+
registerResultLauncher();
100104
initializeArguments();
105+
initializeOnBackPressedDispatcher();
106+
}
107+
108+
private void registerResultLauncher() {
109+
resultLauncher = registerForActivityResult(
110+
new ActivityResultContracts.StartActivityForResult(),
111+
result -> {
112+
if (result.getResultCode() == RESULT_OK && result.getData() != null) {
113+
recreate();
114+
}
115+
});
116+
}
117+
118+
private void initializeOnBackPressedDispatcher() {
119+
getOnBackPressedDispatcher().addCallback(this, new OnBackPressedCallback(true) {
120+
@Override
121+
public void handleOnBackPressed() {
122+
Intent intent = new Intent(NoteShareActivity.this, MainActivity.class);
123+
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
124+
startActivity(intent);
125+
finish();
126+
}
127+
});
101128
}
102129

103130
private void initializeArguments() {
104131
Bundle bundler = getIntent().getExtras();
105132
note = BundleExtensionsKt.getSerializableArgument(bundler, ARG_NOTE, Note.class);
106133
account = BundleExtensionsKt.getSerializableArgument(bundler, ARG_ACCOUNT, Account.class);
134+
107135
if (note == null) {
108136
throw new IllegalArgumentException("Note cannot be null");
109137
}
138+
110139
if (account == null) {
111140
throw new IllegalArgumentException("Account cannot be null");
112141
}
@@ -280,7 +309,7 @@ private void navigateNoteShareDetail(String shareWith, int shareType) {
280309

281310
Intent intent = new Intent(this, NoteShareDetailActivity.class);
282311
intent.putExtras(bundle);
283-
startActivity(intent);
312+
resultLauncher.launch(intent);
284313
}
285314

286315
private boolean accountOwnsFile() {
@@ -428,56 +457,77 @@ public void requestPasswordForShare(OCShare share, boolean askForPassword) {
428457
public void showProfileBottomSheet(Account account, String shareWith) {
429458
}
430459

460+
private boolean isInitializingShares = false;
461+
431462
public void updateShareeListAdapter() {
463+
if (isInitializingShares) {
464+
Log_OC.d(TAG, "Shares initialization already in progress");
465+
return;
466+
}
467+
468+
isInitializingShares = true;
469+
432470
executorService.submit(() -> {
433471
try {
434472
ShareeListAdapter adapter = (ShareeListAdapter) binding.sharesList.getAdapter();
435473

436474
if (adapter == null) {
437475
runOnUiThread(() -> DisplayUtils.showSnackMessage(NoteShareActivity.this, getString(R.string.could_not_retrieve_shares)));
476+
isInitializingShares = false;
438477
return;
439478
}
440479

441-
// clear adapter
442-
adapter.removeAll();
443-
shares.clear();
480+
List<OCShare> tempShares = new ArrayList<>();
444481

445482
// to show share with users/groups info
446483
if (note != null) {
447484
// get shares from local DB
448-
final var shareEntities = repository.getShareEntitiesForSpecificNote(note);
449-
shareEntities.forEach(entity -> {
450-
if (entity.getId() != null) {
451-
addShares(entity.getId());
452-
}
453-
});
454-
455-
// get shares from remote
456-
final var shares = repository.getShareFromNote(note);
457-
if (shares != null) {
458-
shares.forEach(entity -> addShares(entity.getId()));
459-
}
485+
populateSharesList(tempShares);
460486
}
461487

462488
runOnUiThread(() -> {
489+
shares.clear();
490+
shares.addAll(tempShares);
491+
492+
adapter.removeAll();
463493
adapter.addShares(shares);
464494
addPublicShares(adapter);
465495
setShareWithYou();
496+
497+
isInitializingShares = false;
466498
});
467499
} catch (Exception e) {
468500
Log_OC.d(TAG, "Exception while updateShareeListAdapter: " + e);
469501
}
470502
});
471503
}
472504

473-
private void addShares(long id) {
505+
private void populateSharesList(List<OCShare> targetList) {
506+
// Get shares from local DB
507+
final var shareEntities = repository.getShareEntitiesForSpecificNote(note);
508+
for (var entity : shareEntities) {
509+
if (entity.getId() != null) {
510+
addSharesToList(entity.getId(), targetList);
511+
}
512+
}
513+
514+
// Get shares from remote
515+
final var remoteShares = repository.getShareFromNote(note);
516+
if (remoteShares != null) {
517+
for (var entity : remoteShares) {
518+
addSharesToList(entity.getId(), targetList);
519+
}
520+
}
521+
}
522+
523+
private void addSharesToList(long id, List<OCShare> targetList) {
474524
final var result = repository.getShares(id);
475525
if (result != null) {
476-
result.forEach(ocShare -> {
477-
if (!shares.contains(ocShare)) {
478-
shares.add(ocShare);
526+
for (OCShare ocShare : result) {
527+
if (!targetList.contains(ocShare)) {
528+
targetList.add(ocShare);
479529
}
480-
});
530+
}
481531
}
482532
}
483533

@@ -629,7 +679,7 @@ private void modifyExistingShare(OCShare share, int screenTypePermission) {
629679

630680
Intent intent = new Intent(this, NoteShareDetailActivity.class);
631681
intent.putExtras(bundle);
632-
startActivity(intent);
682+
resultLauncher.launch(intent);
633683
}
634684

635685
private boolean getExpDateShown() {

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

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ import it.niedermann.owncloud.notes.R
1515
import it.niedermann.owncloud.notes.branding.BrandedActivity
1616
import it.niedermann.owncloud.notes.branding.BrandingUtil
1717
import it.niedermann.owncloud.notes.databinding.ActivityNoteShareDetailBinding
18-
import it.niedermann.owncloud.notes.main.MainActivity
1918
import it.niedermann.owncloud.notes.persistence.entity.Note
2019
import it.niedermann.owncloud.notes.persistence.isSuccess
2120
import it.niedermann.owncloud.notes.share.dialog.ExpirationDatePickerDialogFragment
@@ -586,11 +585,9 @@ class NoteShareDetailActivity : BrandedActivity(),
586585
private suspend fun handleResult(success: Boolean) {
587586
withContext(Dispatchers.Main) {
588587
if (success) {
589-
Intent(this@NoteShareDetailActivity, MainActivity::class.java).apply {
590-
flags = Intent.FLAG_ACTIVITY_CLEAR_TOP
591-
}.also {
592-
startActivity(it)
593-
}
588+
val resultIntent = Intent()
589+
setResult(RESULT_OK, resultIntent)
590+
finish()
594591
} else {
595592
DisplayUtils.showSnackMessage(
596593
this@NoteShareDetailActivity,

0 commit comments

Comments
 (0)