Loading app/src/main/java/it/niedermann/owncloud/notes/share/NoteShareActivity.java +16 −13 Original line number Diff line number Diff line Loading @@ -184,7 +184,8 @@ public class NoteShareActivity extends BrandedActivity implements ShareeListAdap // Schedule a new task with a delay future = executorService.schedule(() -> { try (Cursor cursor = provider.searchForUsersOrGroups(newText)) { try { provider.searchForUsersOrGroups(newText, cursor -> { runOnUiThread(() -> {{ if (cursor == null || cursor.getCount() == 0) { suggestionAdapter.changeCursor(null); Loading @@ -197,6 +198,7 @@ public class NoteShareActivity extends BrandedActivity implements ShareeListAdap binding.progressBar.setVisibility(View.GONE); }}); }); } catch (Exception e) { Log_OC.d(TAG, "Exception setupSearchView.onQueryTextChange: " + e); runOnUiThread(() -> binding.progressBar.setVisibility(View.GONE)); Loading @@ -223,6 +225,7 @@ public class NoteShareActivity extends BrandedActivity implements ShareeListAdap String shareWith = cursor.getString(cursor.getColumnIndexOrThrow(UsersAndGroupsSearchProvider.SHARE_WITH)); int shareType = cursor.getInt(cursor.getColumnIndexOrThrow(UsersAndGroupsSearchProvider.SHARE_TYPE)); navigateNoteShareDetail(shareWith, shareType); provider.dispose(); } return true; } Loading app/src/main/java/it/niedermann/owncloud/notes/share/helper/UsersAndGroupsSearchProvider.java +145 −127 Original line number Diff line number Diff line Loading @@ -31,10 +31,13 @@ import java.util.HashMap; import java.util.Iterator; import java.util.Locale; import java.util.Map; import java.util.function.Consumer; import io.reactivex.disposables.Disposable; import io.reactivex.schedulers.Schedulers; import it.niedermann.owncloud.notes.R; import it.niedermann.owncloud.notes.share.repository.ShareRepository; import it.niedermann.owncloud.notes.share.model.UsersAndGroupsSearchConfig; import it.niedermann.owncloud.notes.share.repository.ShareRepository; /** * Content provider for search suggestions, to search for users and groups existing in an ownCloud server. Loading Loading @@ -75,6 +78,7 @@ public class UsersAndGroupsSearchProvider { private final ShareRepository repository; private final Context context; private Disposable disposable; public UsersAndGroupsSearchProvider(Context context, ShareRepository repository) { this.context = context; Loading Loading @@ -106,11 +110,18 @@ public class UsersAndGroupsSearchProvider { ACTION_SHARE_WITH = context.getString(R.string.users_and_groups_search_provider_share_with); } public Cursor searchForUsersOrGroups(String userQuery) { public void searchForUsersOrGroups(String userQuery, Consumer<Cursor> callback) { final SingleSignOnAccount ssoAcc; try { ssoAcc = SingleAccountHelper.getCurrentSingleSignOnAccount(context); final var names = repository.getSharees(ssoAcc, userQuery, REQUESTED_PAGE, RESULTS_PER_PAGE).blockingGet(); disposable = repository.getSharees(ssoAcc, userQuery, REQUESTED_PAGE, RESULTS_PER_PAGE) .subscribeOn(Schedulers.io()) .observeOn(Schedulers.io()) .doOnError(throwable -> { Log_OC.e(TAG, "Exception while searching", throwable); callback.accept(null); }) .subscribe(names -> { MatrixCursor response = null; if (!names.isEmpty()) { response = new MatrixCursor(COLUMNS); Loading Loading @@ -239,11 +250,18 @@ public class UsersAndGroupsSearchProvider { } } return response; callback.accept(response); }, error -> { Log_OC.e(TAG, "Exception while searching", error); callback.accept(null); }); } catch (Exception e) { Log_OC.e(TAG, "Exception while searching", e); callback.accept(null); } } return null; public void dispose() { disposable.dispose(); } } Loading
app/src/main/java/it/niedermann/owncloud/notes/share/NoteShareActivity.java +16 −13 Original line number Diff line number Diff line Loading @@ -184,7 +184,8 @@ public class NoteShareActivity extends BrandedActivity implements ShareeListAdap // Schedule a new task with a delay future = executorService.schedule(() -> { try (Cursor cursor = provider.searchForUsersOrGroups(newText)) { try { provider.searchForUsersOrGroups(newText, cursor -> { runOnUiThread(() -> {{ if (cursor == null || cursor.getCount() == 0) { suggestionAdapter.changeCursor(null); Loading @@ -197,6 +198,7 @@ public class NoteShareActivity extends BrandedActivity implements ShareeListAdap binding.progressBar.setVisibility(View.GONE); }}); }); } catch (Exception e) { Log_OC.d(TAG, "Exception setupSearchView.onQueryTextChange: " + e); runOnUiThread(() -> binding.progressBar.setVisibility(View.GONE)); Loading @@ -223,6 +225,7 @@ public class NoteShareActivity extends BrandedActivity implements ShareeListAdap String shareWith = cursor.getString(cursor.getColumnIndexOrThrow(UsersAndGroupsSearchProvider.SHARE_WITH)); int shareType = cursor.getInt(cursor.getColumnIndexOrThrow(UsersAndGroupsSearchProvider.SHARE_TYPE)); navigateNoteShareDetail(shareWith, shareType); provider.dispose(); } return true; } Loading
app/src/main/java/it/niedermann/owncloud/notes/share/helper/UsersAndGroupsSearchProvider.java +145 −127 Original line number Diff line number Diff line Loading @@ -31,10 +31,13 @@ import java.util.HashMap; import java.util.Iterator; import java.util.Locale; import java.util.Map; import java.util.function.Consumer; import io.reactivex.disposables.Disposable; import io.reactivex.schedulers.Schedulers; import it.niedermann.owncloud.notes.R; import it.niedermann.owncloud.notes.share.repository.ShareRepository; import it.niedermann.owncloud.notes.share.model.UsersAndGroupsSearchConfig; import it.niedermann.owncloud.notes.share.repository.ShareRepository; /** * Content provider for search suggestions, to search for users and groups existing in an ownCloud server. Loading Loading @@ -75,6 +78,7 @@ public class UsersAndGroupsSearchProvider { private final ShareRepository repository; private final Context context; private Disposable disposable; public UsersAndGroupsSearchProvider(Context context, ShareRepository repository) { this.context = context; Loading Loading @@ -106,11 +110,18 @@ public class UsersAndGroupsSearchProvider { ACTION_SHARE_WITH = context.getString(R.string.users_and_groups_search_provider_share_with); } public Cursor searchForUsersOrGroups(String userQuery) { public void searchForUsersOrGroups(String userQuery, Consumer<Cursor> callback) { final SingleSignOnAccount ssoAcc; try { ssoAcc = SingleAccountHelper.getCurrentSingleSignOnAccount(context); final var names = repository.getSharees(ssoAcc, userQuery, REQUESTED_PAGE, RESULTS_PER_PAGE).blockingGet(); disposable = repository.getSharees(ssoAcc, userQuery, REQUESTED_PAGE, RESULTS_PER_PAGE) .subscribeOn(Schedulers.io()) .observeOn(Schedulers.io()) .doOnError(throwable -> { Log_OC.e(TAG, "Exception while searching", throwable); callback.accept(null); }) .subscribe(names -> { MatrixCursor response = null; if (!names.isEmpty()) { response = new MatrixCursor(COLUMNS); Loading Loading @@ -239,11 +250,18 @@ public class UsersAndGroupsSearchProvider { } } return response; callback.accept(response); }, error -> { Log_OC.e(TAG, "Exception while searching", error); callback.accept(null); }); } catch (Exception e) { Log_OC.e(TAG, "Exception while searching", e); callback.accept(null); } } return null; public void dispose() { disposable.dispose(); } }