diff --git a/app/src/main/java/com/example/nemophila/MapsActivity.java b/app/src/main/java/com/example/nemophila/MapsActivity.java index 0702432..43eb9b0 100644 --- a/app/src/main/java/com/example/nemophila/MapsActivity.java +++ b/app/src/main/java/com/example/nemophila/MapsActivity.java @@ -52,6 +52,7 @@ ShopsViewModel shopsViewModel; FriendViewModel friendViewModel; DialogFragment filterDialog; + MapsFragment mapsFragment; private Handler handler; //private HashMap NameToId; @@ -281,6 +282,10 @@ return false; } + public void setMapsFragment(MapsFragment mapsFragment) { + this.mapsFragment = mapsFragment; + } + // 内部クラス private class MyAdapter extends ArrayAdapter { private LayoutInflater layoutInflater; @@ -355,42 +360,47 @@ for (Shop shop : shops) { Marker setMarker = shopsViewModel.getMarker(shop); - //場合分け - //フィルターを一切かけていないとき - if(nemophila.getSelectGenres().isEmpty() && nemophila.getSelectFriends().isEmpty()){ - setMarker.setVisible(true); - } - //ジャンルのみフィルターをかけているとき - else if(nemophila.getSelectFriends().isEmpty()) { - for(String genre : nemophila.getSelectGenres()) { - if(shop.getGenreSet().contains(genre)) { - setMarker.setVisible(true); - } else { - setMarker.setVisible(false); - } + //自分とそのフレンド以外の投稿は確認しない + if (shop.getUserIdSet().contains(nemophila.getUid()) || shop.getUserIdSet().contains(friendsData)) { + //場合分け + //フィルターを一切かけていないとき + if(nemophila.getSelectGenres().isEmpty() && nemophila.getSelectFriends().isEmpty()){ + setMarker.setVisible(true); } - } - //フレンドのみフィルターをかけているとき - else if(nemophila.getSelectGenres().isEmpty()) { - for(String friendId : nemophila.getSelectFriends()) { - if(shop.getUserIdSet().contains(friendId)) { - setMarker.setVisible(true); - } else { - setMarker.setVisible(false); - } - } - } - //どちらもフィルターをかけているとき - else { - for(String genre : nemophila.getSelectGenres()) { - for(String friendId : nemophila.getSelectFriends()) { - if (shop.getGenreSet().contains(genre) && shop.getUserIdSet().contains(friendId)) { + //ジャンルのみフィルターをかけているとき + else if(nemophila.getSelectFriends().isEmpty()) { + for(String genre : nemophila.getSelectGenres()) { + if(shop.getGenreSet().contains(genre)) { setMarker.setVisible(true); } else { setMarker.setVisible(false); } } } + //フレンドのみフィルターをかけているとき + else if(nemophila.getSelectGenres().isEmpty()) { + for(String friendId : nemophila.getSelectFriends()) { + if(shop.getUserIdSet().contains(friendId)) { + setMarker.setVisible(true); + } else { + setMarker.setVisible(false); + } + } + } + //どちらもフィルターをかけているとき + else { + for(String genre : nemophila.getSelectGenres()) { + for(String friendId : nemophila.getSelectFriends()) { + if (shop.getGenreSet().contains(genre) && shop.getUserIdSet().contains(friendId)) { + setMarker.setVisible(true); + } else { + setMarker.setVisible(false); + } + } + } + } + } else { + setMarker.setVisible(false); } } } diff --git a/app/src/main/java/com/example/nemophila/MapsFragment.java b/app/src/main/java/com/example/nemophila/MapsFragment.java index 0c654b0..6092d87 100644 --- a/app/src/main/java/com/example/nemophila/MapsFragment.java +++ b/app/src/main/java/com/example/nemophila/MapsFragment.java @@ -35,6 +35,7 @@ import android.widget.Toast; import com.example.nemophila.databinding.ActivityMainBinding; +import com.example.nemophila.entities.AccountNameJson; import com.example.nemophila.entities.Post; import com.example.nemophila.entities.Shop; import com.example.nemophila.viewmodels.FriendViewModel; @@ -73,6 +74,7 @@ private LatLng tapLatlng; private Marker currentMarker; private BitmapDescriptor bd; + ArrayList friendsData; LocationManager locationManager; @@ -90,7 +92,7 @@ friendViewModel = new ViewModelProvider(getActivity()).get(FriendViewModel.class); postsViewModel = new ViewModelProvider(getActivity()).get(PostsViewModel.class); - + friendsData = new ArrayList<>(); //フレンドの更新が入った時の処理(LiveDataへの購読) friendViewModel.getFriends(nemophila.getUid()); friendViewModel.getFriendsLiveData().observe(getActivity(), friends -> { @@ -100,6 +102,9 @@ .show(); //nemophilaにセットしておく nemophila.setFriends(friends); + for (AccountNameJson friend : friends) { + friendsData.add(friend.getUid()); + } }); @@ -112,24 +117,60 @@ .show(); for (Shop shop : shops) { if ( shopsViewModel.getMarker(shop) == null) { //フレンド以外の投稿のピンも立てたい場合 - //各shopに対応するMarkerがなければMarkerを立てる shopLatlng = new LatLng(shop.getLatitude(), shop.getLongitude()); System.out.println(shopLatlng); Marker createMarker = mMap.addMarker(new MarkerOptions().position(shopLatlng).title("")); //マーカーに店情報を持たせる createMarker.setTag(shop); - //フィルター掛け - for(String genre : nemophila.getSelectGenres()) { - if(shop.getGenreSet().contains(genre)) { - createMarker.setVisible(true); - } else { - createMarker.setVisible(false); - } - } + //ShopToMarkerに紐づけ shopsViewModel.setShopAndMarker(shop, createMarker); - } + System.out.println(friendsData); + + //自分またはフレンドの投稿が含まれていない場合は非表示 + if (shop.getUserIdSet().contains(nemophila.getUid()) || shop.getUserIdSet().contains(friendsData)) { + //場合分け + //フィルターを一切かけていないとき + if(nemophila.getSelectGenres().isEmpty() && nemophila.getSelectFriends().isEmpty()){ + createMarker.setVisible(true); + } + //ジャンルのみフィルターをかけているとき + else if(nemophila.getSelectFriends().isEmpty()) { + for(String genre : nemophila.getSelectGenres()) { + if(shop.getGenreSet().contains(genre)) { + createMarker.setVisible(true); + } else { + createMarker.setVisible(false); + } + } + } + //フレンドのみフィルターをかけているとき + else if(nemophila.getSelectGenres().isEmpty()) { + for(String friendId : nemophila.getSelectFriends()) { + if(shop.getUserIdSet().contains(friendId)) { + createMarker.setVisible(true); + } else { + createMarker.setVisible(false); + } + } + } + //どちらもフィルターをかけているとき + else { + for(String genre : nemophila.getSelectGenres()) { + for(String friendId : nemophila.getSelectFriends()) { + if (shop.getGenreSet().contains(genre) && shop.getUserIdSet().contains(friendId)) { + createMarker.setVisible(true); + } else { + createMarker.setVisible(false); + } + } + } + } + } else { + createMarker.setVisible(false); + } + } } }); @@ -242,6 +283,8 @@ locationStart(); } + ((MapsActivity) getContext()).setMapsFragment(this); + SupportMapFragment mapFragment = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map); if (mapFragment != null) {