diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml index e58179e..c71e415 100644 --- a/.idea/deploymentTargetDropDown.xml +++ b/.idea/deploymentTargetDropDown.xml @@ -7,11 +7,11 @@ - + - + \ No newline at end of file diff --git a/app/src/main/java/com/example/nemophila/MapsActivity.java b/app/src/main/java/com/example/nemophila/MapsActivity.java index 0702432..13efa24 100644 --- a/app/src/main/java/com/example/nemophila/MapsActivity.java +++ b/app/src/main/java/com/example/nemophila/MapsActivity.java @@ -43,6 +43,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; +import java.util.HashSet; import java.util.List; @@ -52,6 +53,7 @@ ShopsViewModel shopsViewModel; FriendViewModel friendViewModel; DialogFragment filterDialog; + MapsFragment mapsFragment; private Handler handler; //private HashMap NameToId; @@ -281,6 +283,10 @@ return false; } + public void setMapsFragment(MapsFragment mapsFragment) { + this.mapsFragment = mapsFragment; + } + // 内部クラス private class MyAdapter extends ArrayAdapter { private LayoutInflater layoutInflater; @@ -355,42 +361,54 @@ 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); - } + ArrayList userIdSet = (ArrayList)shop.getUserIdSet().clone(); + friendsData.add(nemophila.getUid()); + userIdSet.retainAll(friendsData); + + //自分とそのフレンド以外の投稿は確認しない + if( userIdSet.size() > 0) { + //場合分け + //フィルターを一切かけていないとき + 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); + break; } else { setMarker.setVisible(false); } } } + //フレンドのみフィルターをかけているとき + else if(nemophila.getSelectGenres().isEmpty()) { + for(String friendId : nemophila.getSelectFriends()) { + if(shop.getUserIdSet().contains(friendId)) { + setMarker.setVisible(true); + break; + } 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); + break; + } 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 053faca..20e9e3d 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; @@ -70,14 +71,10 @@ private LatLng currentLatlng = null; private LatLng initialLatlng; private LatLng shopLatlng; -// private LatLng testLatlng; -// private LatLng testLatlng2; private LatLng tapLatlng; -// private CameraPosition nowCamera; -// private LatLng nowLatlng; private Marker currentMarker; private BitmapDescriptor bd; - private boolean isLongClick; + ArrayList friendsData; LocationManager locationManager; @@ -95,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 -> { @@ -105,6 +102,9 @@ .show(); //nemophilaにセットしておく nemophila.setFriends(friends); + for (AccountNameJson friend : friends) { + friendsData.add(friend.getUid()); + } }); @@ -117,37 +117,66 @@ .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); - } - } - -// if ( !nemophila.getSelectFriends().isEmpty() ) { -// createMaker.setVisible(false); -// } //ShopToMarkerに紐づけ shopsViewModel.setShopAndMarker(shop, createMarker); - } else { -// //すでに立っているピンをフィルター掛け -// Marker setMaker = shopsViewModel.getMarker(shop); -// if ( !nemophila.getSelectGenres().isEmpty() ) { -// setMaker.setVisible(false); -// } -// if ( !nemophila.getSelectFriends().isEmpty() ) { -// setMaker.setVisible(false); -// } + System.out.println(friendsData); + + ArrayList userIdSet = (ArrayList)shop.getUserIdSet().clone(); + friendsData.add(nemophila.getUid()); + userIdSet.retainAll(friendsData); + + //自分とそのフレンド以外の投稿は確認しない + if( userIdSet.size() > 0) { + //場合分け + //フィルターを一切かけていないとき + 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); + break; + } else { + createMarker.setVisible(false); + } + } + } + //フレンドのみフィルターをかけているとき + else if(nemophila.getSelectGenres().isEmpty()) { + for(String friendId : nemophila.getSelectFriends()) { + if(shop.getUserIdSet().contains(friendId)) { + createMarker.setVisible(true); + break; + } 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); + break; + } else { + createMarker.setVisible(false); + } + } + } + } + } else { + createMarker.setVisible(false); + } } } }); @@ -198,11 +227,6 @@ //長押し時に店を作成し、その座標にピンを立てる //長押し時にその座標を保存し、投稿画面に移り、Shop作成完了時にはピンを立て、Shop画面に移行 mMap.setOnMapLongClickListener(longpushLocation -> { - //長押しされた位置の緯度経度を取得 - //LatLng newlocation = new LatLng(longpushLocation.latitude, longpushLocation.longitude); - - //長押し座標を画面中心にしておく - //zoomMap(longpushLocation.latitude, longpushLocation.longitude); //Nemophilaに座標を保存 nemophila.setCurrentLatitude(longpushLocation.latitude); nemophila.setCurrentLongitude(longpushLocation.longitude); @@ -220,12 +244,6 @@ mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() { @Override public boolean onMarkerClick(Marker marker) { - //店の詳細と投稿一覧を表示 - //ここでshopActivityを呼び出す - - //下からクリックしたことを通知 - //Toast.makeText(getActivity(), "ピンクリック", Toast.LENGTH_SHORT).show(); - //現在地マーカーをクリックしたときのみ例外 if(marker.getTag() == null) { //以下の処理をストップ @@ -260,9 +278,6 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); - //binding = ActivityMainBinding.inflate(getLayoutInflater()); - //getActivity().setContentView(binding.getRoot()); - if (ActivityCompat.checkSelfPermission( getContext(), Manifest.permission.ACCESS_FINE_LOCATION) @@ -275,11 +290,7 @@ locationStart(); } -// // Obtain the SupportMapFragment and get notified when the map is ready to be used. -// SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() -// .findFragmentById(R.id.map); -// assert mapFragment != null; -// mapFragment.getMapAsync(this); + ((MapsActivity) getContext()).setMapsFragment(this); SupportMapFragment mapFragment = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map); @@ -303,7 +314,6 @@ LatLng latlng = new LatLng(latitude, longitude); - // LatLngBounds (LatLng southwest, LatLng northeast) //左下、右上 LatLngBounds bounds = LatLngBounds.builder() .include(new LatLng(south, west))