Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Unverified Commit 9d8c0651 authored by alperozturk's avatar alperozturk
Browse files

bind suggestions to UI

parent c4b11ef0
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -40,7 +40,7 @@ class ShareRepository private constructor(private val applicationContext: Contex
    ): Single<ArrayList<JSONObject>> {
        return Single.fromCallable {
            val shareAPI = apiProvider.getShareAPI(applicationContext, account)
            val call2 = shareAPI.getSharees2(search = searchString, page = page, perPage = perPage)
            val call2 = shareAPI.getSharees(search = searchString, page = page, perPage = perPage)
            val response2 = call2.execute()

            val respJSON = JSONObject(response2.body().toString())
+1 −12
Original line number Diff line number Diff line
@@ -3,7 +3,6 @@ package it.niedermann.owncloud.notes.persistence.sync
import com.nextcloud.android.sso.api.EmptyResponse
import com.owncloud.android.lib.resources.shares.OCShare
import com.owncloud.android.lib.resources.shares.ShareType
import it.niedermann.owncloud.notes.share.model.ShareesData
import it.niedermann.owncloud.notes.shared.model.OcsResponse
import retrofit2.Call
import retrofit2.http.DELETE
@@ -13,16 +12,6 @@ import retrofit2.http.POST
import retrofit2.http.Query

interface ShareAPI {
    @GET("sharees")
    fun getSharees2(
        @Query("format") format: String = "json",
        @Query("itemType") itemType: String = "file",
        @Query("search") search: String,
        @Query("page") page: Int,
        @Query("perPage") perPage: Int,
        @Query("lookup") lookup: Boolean = true,
    ): Call<Any>

    @GET("sharees")
    fun getSharees(
        @Query("format") format: String = "json",
@@ -31,7 +20,7 @@ interface ShareAPI {
        @Query("page") page: Int,
        @Query("perPage") perPage: Int,
        @Query("lookup") lookup: Boolean = true,
    ): Call<OcsResponse<ShareesData>>
    ): Call<Any>

    @GET("shares")
    fun getShares(remoteId: Long): Call<OcsResponse<List<OCShare>>>
+24 −3
Original line number Diff line number Diff line
@@ -50,6 +50,7 @@ import it.niedermann.owncloud.notes.persistence.ShareRepository;
import it.niedermann.owncloud.notes.persistence.entity.Account;
import it.niedermann.owncloud.notes.persistence.entity.Note;
import it.niedermann.owncloud.notes.share.adapter.ShareeListAdapter;
import it.niedermann.owncloud.notes.share.adapter.SuggestionAdapter;
import it.niedermann.owncloud.notes.share.dialog.FileDetailSharingMenuBottomSheetDialog;
import it.niedermann.owncloud.notes.share.dialog.QuickSharingPermissionsBottomSheetDialog;
import it.niedermann.owncloud.notes.share.dialog.ShareLinkToDialog;
@@ -57,7 +58,6 @@ import it.niedermann.owncloud.notes.share.dialog.SharePasswordDialogFragment;
import it.niedermann.owncloud.notes.share.helper.UsersAndGroupsSearchProvider;
import it.niedermann.owncloud.notes.share.listener.FileDetailsSharingMenuBottomSheetActions;
import it.niedermann.owncloud.notes.share.listener.ShareeListAdapterListener;
import it.niedermann.owncloud.notes.share.model.ShareesData;
import it.niedermann.owncloud.notes.share.model.UsersAndGroupsSearchConfig;
import it.niedermann.owncloud.notes.share.operations.ClientFactoryImpl;
import it.niedermann.owncloud.notes.share.operations.RetrieveHoverCardAsyncTask;
@@ -154,6 +154,9 @@ public class NoteShareActivity extends BrandedActivity implements ShareeListAdap
            return;
        }

        SuggestionAdapter suggestionAdapter = new SuggestionAdapter(this, null);
        binding.searchView.setSuggestionsAdapter(suggestionAdapter);

        // assumes parent activity is the searchable activity
        binding.searchView.setSearchableInfo(searchManager.getSearchableInfo(componentName));

@@ -176,12 +179,30 @@ public class NoteShareActivity extends BrandedActivity implements ShareeListAdap
            @Override
            public boolean onQueryTextChange(String newText) {
                new Thread(() -> {{
                    ShareesData data = provider.searchForUsersOrGroups(newText);
                    Log_OC.e(NoteShareActivity.class.getSimpleName(), "Fetched" + newText);
                    try (Cursor cursor = provider.searchForUsersOrGroups(newText)) {
                        runOnUiThread(() -> suggestionAdapter.changeCursor(cursor));
                    }
                }}).start();
                return false;
            }
        });

        binding.searchView.setOnSuggestionListener(new SearchView.OnSuggestionListener() {
            @Override
            public boolean onSuggestionSelect(int position) {
                return false;
            }

            @Override
            public boolean onSuggestionClick(int position) {
                Cursor cursor = suggestionAdapter.getCursor();
                if (cursor.moveToPosition(position)) {
                    String suggestion = cursor.getString(cursor.getColumnIndexOrThrow(SearchManager.SUGGEST_COLUMN_TEXT_1));
                    binding.searchView.setQuery(suggestion, false);
                }
                return true;
            }
        });
    }

    private void disableSearchView(View view) {
+31 −0
Original line number Diff line number Diff line
package it.niedermann.owncloud.notes.share.adapter;

import android.app.SearchManager;
import android.content.Context;
import android.database.Cursor;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import androidx.cursoradapter.widget.CursorAdapter;

public class SuggestionAdapter extends CursorAdapter {

    public SuggestionAdapter(Context context, Cursor cursor) {
        super(context, cursor, false);
    }

    @Override
    public View newView(Context context, Cursor cursor, ViewGroup parent) {
        LayoutInflater inflater = LayoutInflater.from(context);
        return inflater.inflate(android.R.layout.simple_list_item_1, parent, false);
    }

    @Override
    public void bindView(View view, Context context, Cursor cursor) {
        TextView textView = view.findViewById(android.R.id.text1);
        String suggestion = cursor.getString(cursor.getColumnIndexOrThrow(SearchManager.SUGGEST_COLUMN_TEXT_1));
        textView.setText(suggestion);
    }
}
+15 −24
Original line number Diff line number Diff line
@@ -29,7 +29,6 @@ import com.owncloud.android.lib.resources.shares.ShareType;
import com.owncloud.android.lib.resources.users.Status;
import com.owncloud.android.lib.resources.users.StatusType;

import org.json.JSONException;
import org.json.JSONObject;

import java.io.ByteArrayOutputStream;
@@ -38,19 +37,14 @@ import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.concurrent.ExecutionException;

import io.reactivex.Scheduler;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers;
import it.niedermann.nextcloud.sso.glide.SingleSignOnUrl;
import it.niedermann.owncloud.notes.R;
import it.niedermann.owncloud.notes.persistence.ShareRepository;
import it.niedermann.owncloud.notes.persistence.entity.Account;
import it.niedermann.owncloud.notes.share.model.ShareesData;
import it.niedermann.owncloud.notes.share.model.UsersAndGroupsSearchConfig;

/**
@@ -77,19 +71,19 @@ public class UsersAndGroupsSearchProvider {

    public static final String CONTENT = "content";

    private String AUTHORITY;
    private String DATA_USER;
    private String DATA_GROUP;
    private String DATA_ROOM;
    private String DATA_REMOTE;
    private String DATA_EMAIL;
    private String DATA_CIRCLE;
    private final String AUTHORITY;
    private final String DATA_USER;
    private final String DATA_GROUP;
    private final String DATA_ROOM;
    private final String DATA_REMOTE;
    private final String DATA_EMAIL;
    private final String DATA_CIRCLE;

    private UriMatcher mUriMatcher;
    private final UriMatcher mUriMatcher;

    private ShareRepository repository;
    private Account account;
    private Context context;
    private final ShareRepository repository;
    private final Account account;
    private final Context context;

    public UsersAndGroupsSearchProvider(Context context, Account account, ShareRepository repository) {
        this.context = context;
@@ -126,14 +120,14 @@ public class UsersAndGroupsSearchProvider {
        ACTION_SHARE_WITH = context.getString(R.string.users_and_groups_share_with);
    }

    public ShareesData searchForUsersOrGroups(String userQuery) {
    public Cursor searchForUsersOrGroups(String userQuery) {
        final SingleSignOnAccount ssoAcc;
        try {
            ssoAcc = SingleAccountHelper.getCurrentSingleSignOnAccount(context);
            final var names = repository.getSharees(ssoAcc, userQuery, REQUESTED_PAGE, RESULTS_PER_PAGE).blockingGet();
            ShareesData data = new ShareesData(null,null,null );
            MatrixCursor response = null;
            if (!names.isEmpty()) {
                MatrixCursor response = new MatrixCursor(COLUMNS);
                response = new MatrixCursor(COLUMNS);

                Uri userBaseUri = new Uri.Builder().scheme(CONTENT).authority(DATA_USER).build();
                Uri groupBaseUri = new Uri.Builder().scheme(CONTENT).authority(DATA_GROUP).build();
@@ -254,13 +248,10 @@ public class UsersAndGroupsSearchProvider {
                                .add(dataUri);
                    }

                    data.setDisplayName(displayName);
                    data.setDataUri(dataUri);
                    data.setIcon(icon);
                }
            }

            return data;
            return response;
        } catch (Exception e) {
            Log_OC.e(TAG, "Exception while searching", e);
        }
Loading