Working search in both map and list view
This commit is contained in:
		@@ -1,37 +1,24 @@
 | 
			
		||||
package it.danieleverducci.nextcloudmaps.fragments;
 | 
			
		||||
 | 
			
		||||
import static android.view.View.GONE;
 | 
			
		||||
import static android.view.View.VISIBLE;
 | 
			
		||||
import static it.danieleverducci.nextcloudmaps.activity.main.GeofavoriteAdapter.SORT_BY_CATEGORY;
 | 
			
		||||
import static it.danieleverducci.nextcloudmaps.activity.main.GeofavoriteAdapter.SORT_BY_CREATED;
 | 
			
		||||
import static it.danieleverducci.nextcloudmaps.activity.main.GeofavoriteAdapter.SORT_BY_DISTANCE;
 | 
			
		||||
import static it.danieleverducci.nextcloudmaps.activity.main.GeofavoriteAdapter.SORT_BY_TITLE;
 | 
			
		||||
 | 
			
		||||
import android.os.Bundle;
 | 
			
		||||
import android.text.TextUtils;
 | 
			
		||||
import android.util.Log;
 | 
			
		||||
import android.view.LayoutInflater;
 | 
			
		||||
import android.view.View;
 | 
			
		||||
import android.view.ViewGroup;
 | 
			
		||||
import android.widget.Toast;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
import androidx.annotation.Nullable;
 | 
			
		||||
import androidx.appcompat.widget.AppCompatImageButton;
 | 
			
		||||
import androidx.appcompat.widget.AppCompatImageView;
 | 
			
		||||
import androidx.appcompat.widget.SearchView;
 | 
			
		||||
import androidx.appcompat.widget.Toolbar;
 | 
			
		||||
import androidx.fragment.app.Fragment;
 | 
			
		||||
import androidx.fragment.app.FragmentManager;
 | 
			
		||||
import androidx.fragment.app.FragmentTransaction;
 | 
			
		||||
import androidx.lifecycle.Observer;
 | 
			
		||||
import androidx.recyclerview.widget.LinearLayoutManager;
 | 
			
		||||
import androidx.recyclerview.widget.RecyclerView;
 | 
			
		||||
import androidx.recyclerview.widget.StaggeredGridLayoutManager;
 | 
			
		||||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
 | 
			
		||||
 | 
			
		||||
import com.google.android.material.card.MaterialCardView;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
@@ -47,7 +34,6 @@ public class GeofavoriteListFragment extends GeofavoritesFragment implements Sor
 | 
			
		||||
 | 
			
		||||
    private SwipeRefreshLayout swipeRefresh;
 | 
			
		||||
    private GeofavoriteAdapter geofavoriteAdapter;
 | 
			
		||||
    private List<Geofavorite> geofavorites = new ArrayList<>();
 | 
			
		||||
 | 
			
		||||
    @Nullable
 | 
			
		||||
    @Override
 | 
			
		||||
@@ -99,13 +85,6 @@ public class GeofavoriteListFragment extends GeofavoritesFragment implements Sor
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
        mGeofavoritesFragmentViewModel.getGeofavorites().observe(getViewLifecycleOwner(), new Observer<List<Geofavorite>>() {
 | 
			
		||||
            @Override
 | 
			
		||||
            public void onChanged(List<Geofavorite> geofavorites) {
 | 
			
		||||
                GeofavoriteListFragment.this.geofavorites = geofavorites;
 | 
			
		||||
                geofavoriteAdapter.setGeofavoriteList(geofavorites);
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        // Setup view listeners
 | 
			
		||||
        swipeRefresh = v.findViewById(R.id.swipe_refresh);
 | 
			
		||||
@@ -130,10 +109,10 @@ public class GeofavoriteListFragment extends GeofavoritesFragment implements Sor
 | 
			
		||||
        updateSortingIcon(sortRule);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void onSearch(String query) {
 | 
			
		||||
        geofavoriteAdapter.setGeofavoriteList(
 | 
			
		||||
                (new GeofavoritesFilter(geofavorites)).byText(query)
 | 
			
		||||
        );
 | 
			
		||||
    @Override
 | 
			
		||||
    public void onDatasetChange(List<Geofavorite> items) {
 | 
			
		||||
        // Called when the items are loaded or a filtering happens
 | 
			
		||||
        geofavoriteAdapter.setGeofavoriteList(items);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
 
 | 
			
		||||
@@ -106,15 +106,6 @@ public class GeofavoriteMapFragment extends GeofavoritesFragment implements Main
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
        mGeofavoritesFragmentViewModel.getGeofavorites().observe(getViewLifecycleOwner(), new Observer<List<Geofavorite>>() {
 | 
			
		||||
            @Override
 | 
			
		||||
            public void onChanged(List<Geofavorite> geofavorites) {
 | 
			
		||||
                clearAllMarkers();
 | 
			
		||||
                for(Geofavorite gf : geofavorites)
 | 
			
		||||
                    addMarker(gf);
 | 
			
		||||
                map.invalidate();
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        return v;
 | 
			
		||||
    }
 | 
			
		||||
@@ -126,6 +117,14 @@ public class GeofavoriteMapFragment extends GeofavoritesFragment implements Main
 | 
			
		||||
        ((MainActivity)requireActivity()).addOnGpsPermissionGrantedListener(this);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void onDatasetChange(List<Geofavorite> items) {
 | 
			
		||||
        clearAllMarkers();
 | 
			
		||||
        for(Geofavorite gf : items)
 | 
			
		||||
            addMarker(gf);
 | 
			
		||||
        map.invalidate();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void onStop() {
 | 
			
		||||
        super.onStop();
 | 
			
		||||
@@ -139,11 +138,6 @@ public class GeofavoriteMapFragment extends GeofavoritesFragment implements Main
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void onSearch(String query) {
 | 
			
		||||
        // TODO: filter
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void onGpsPermissionGranted() {
 | 
			
		||||
        showUserPosition();
 | 
			
		||||
 
 | 
			
		||||
@@ -31,12 +31,15 @@ import com.nextcloud.android.sso.model.SingleSignOnAccount;
 | 
			
		||||
import com.squareup.picasso.Picasso;
 | 
			
		||||
 | 
			
		||||
import java.io.File;
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
import it.danieleverducci.nextcloudmaps.R;
 | 
			
		||||
import it.danieleverducci.nextcloudmaps.activity.detail.GeofavoriteDetailActivity;
 | 
			
		||||
import it.danieleverducci.nextcloudmaps.activity.main.GeofavoritesFragmentViewModel;
 | 
			
		||||
import it.danieleverducci.nextcloudmaps.activity.main.MainActivity;
 | 
			
		||||
import it.danieleverducci.nextcloudmaps.model.Geofavorite;
 | 
			
		||||
import it.danieleverducci.nextcloudmaps.utils.GeofavoritesFilter;
 | 
			
		||||
import it.danieleverducci.nextcloudmaps.utils.IntentGenerator;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -50,6 +53,7 @@ public abstract class GeofavoritesFragment extends Fragment {
 | 
			
		||||
    private View toolbar;
 | 
			
		||||
    private View homeToolbar;
 | 
			
		||||
    private SearchView searchView;
 | 
			
		||||
    private List<Geofavorite> geofavorites = new ArrayList<>();
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void onCreate(@Nullable Bundle savedInstanceState) {
 | 
			
		||||
@@ -93,11 +97,21 @@ public abstract class GeofavoritesFragment extends Fragment {
 | 
			
		||||
 | 
			
		||||
            @Override
 | 
			
		||||
            public boolean onQueryTextChange(String query) {
 | 
			
		||||
                onSearch(query);
 | 
			
		||||
                onDatasetChange(
 | 
			
		||||
                    (new GeofavoritesFilter(geofavorites)).byText(query)
 | 
			
		||||
                );
 | 
			
		||||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        mGeofavoritesFragmentViewModel.getGeofavorites().observe(getViewLifecycleOwner(), new Observer<List<Geofavorite>>() {
 | 
			
		||||
            @Override
 | 
			
		||||
            public void onChanged(List<Geofavorite> geofavorites) {
 | 
			
		||||
                GeofavoritesFragment.this.geofavorites = geofavorites;
 | 
			
		||||
                onDatasetChange(geofavorites);
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        searchView.setOnCloseListener(() -> {
 | 
			
		||||
            if (toolbar.getVisibility() == VISIBLE && TextUtils.isEmpty(searchView.getQuery())) {
 | 
			
		||||
                updateToolbars(true);
 | 
			
		||||
@@ -131,7 +145,7 @@ public abstract class GeofavoritesFragment extends Fragment {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    abstract public void onSearch(String query);
 | 
			
		||||
    abstract public void onDatasetChange(List<Geofavorite> items);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    protected void openGeofavorite(Geofavorite item) {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user