diff --git a/app/src/main/java/com/example/nemophila/MapsFragment.java b/app/src/main/java/com/example/nemophila/MapsFragment.java index 5a4966f..a078e85 100644 --- a/app/src/main/java/com/example/nemophila/MapsFragment.java +++ b/app/src/main/java/com/example/nemophila/MapsFragment.java @@ -33,6 +33,8 @@ import com.example.nemophila.databinding.ActivityMainBinding; import com.example.nemophila.entities.Shop; +import com.example.nemophila.viewmodels.FriendViewModel; +import com.example.nemophila.viewmodels.PostsViewModel; import com.example.nemophila.viewmodels.ShopsViewModel; import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; @@ -53,6 +55,8 @@ public class MapsFragment extends Fragment implements LocationListener { ShopsViewModel shopsViewModel; + FriendViewModel friendViewModel; + PostsViewModel postsViewModel; Nemophila nemophila; private GoogleMap mMap; @@ -68,6 +72,7 @@ private Marker currentMarker; private BitmapDescriptor bd; private boolean isLongClick; + private LocationManager locationManager; @@ -81,19 +86,32 @@ //ViewModelへのアクセス shopsViewModel = new ViewModelProvider(getActivity()).get(ShopsViewModel.class); + friendViewModel = new ViewModelProvider(getActivity()).get(FriendViewModel.class); + postsViewModel = new ViewModelProvider(getActivity()).get(PostsViewModel.class); - // 店情報の更新が入った時の処理 - // LiveDataへの購読 + //フレンドの更新が入った時の処理(LiveDataへの購読) + friendViewModel.getFriendsLiveData().observe(getActivity(), friends -> { + Toast.makeText(getActivity(), + String.format("フレンドの更新を確認しました。"), + Toast.LENGTH_SHORT) + .show(); + //nemophilaにセットしておく + nemophila.setFriends(friends); + }); + + // 店情報の更新が入った時の処理(LiveDataへの購読) shopsViewModel.getShopsLiveData().observe(getActivity(), shops -> { Toast.makeText(getActivity(), String.format("表示していない店を確認しました。ピンを立てます"), Toast.LENGTH_SHORT) .show(); - //受け取ったshopsに対してMarkerが立っているかを確認 - //各shopに対応するMarkerがなければMarkerを立てる for (Shop shop : shops) { - if (shopsViewModel.getMarker(shop) == null) { + //受け取ったshopsにfriendsの投稿が含まれているかを確認,受け取ったshopsに対してMarkerが立っているかを確認 + if ( shopsViewModel.getMarker(shop) == null) { //フレンド以外の投稿のピンも立てたい場合 + //if( && shopsViewModel.getMarker(shop) == null) { + + //各shopに対応するMarkerがなければMarkerを立てる shopLatlng = new LatLng(shop.getLatitude(), shop.getLongitude()); System.out.println(shopLatlng); Marker createMaker = mMap.addMarker(new MarkerOptions().position(shopLatlng).title("")); @@ -105,8 +123,7 @@ } }); - // 長押しを認識した後の処理 - // LiveDataへの購読 + // 長押しを認識した後の処理(LiveDataへの購読) shopsViewModel.getNearShopsLiveData().observe(getActivity(), shops -> { Toast.makeText(getActivity(), String.format("近辺の店を確認しました。ダイアログを表示します"), diff --git a/app/src/main/java/com/example/nemophila/MyPageActivity.java b/app/src/main/java/com/example/nemophila/MyPageActivity.java index 502a50b..f90011a 100644 --- a/app/src/main/java/com/example/nemophila/MyPageActivity.java +++ b/app/src/main/java/com/example/nemophila/MyPageActivity.java @@ -1,5 +1,6 @@ package com.example.nemophila; +import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -99,22 +100,22 @@ } }); - /* ここからあんまわかっていない */ RecyclerView rv = findViewById(R.id.postsList); LinearLayoutManager llm = new LinearLayoutManager(this); List myPageActDataset = new ArrayList<>(); MyPageActAdapter adapter = new MyPageActAdapter(myPageActDataset) { + // 「(投稿)削除」ボタンを押した後、「Yes」を押すと対象の投稿を削除する @Override void onDeleteButtonClick(View view, int position, MyPageActDataModel dataModel) { new AlertDialog.Builder(MyPageActivity.this) .setTitle("警告") - .setMessage("この投稿を削除しますか?") + .setMessage("この投稿を削除しますか?\n削除すると元に戻せなくなります!") .setPositiveButton("Yes", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { - Toast.makeText(MyPageActivity.this, dataModel.getPid(), Toast.LENGTH_SHORT).show(); + Toast.makeText(MyPageActivity.this, "投稿を削除しました。", Toast.LENGTH_SHORT).show(); System.out.println("投稿を削除しました。"); -// accountViewModel.deleteAccountPost(dataModel.getSid(), uid, dataModel.getPid(), token); + accountViewModel.deleteAccountPost(uid, dataModel.getPid(), token); } }) .setNegativeButton("No", null) @@ -127,6 +128,7 @@ rv.setLayoutManager(llm); rv.setAdapter(adapter); + // getAccountPostsLiveDataとの通信により今までにユーザーがしている投稿を表示する accountViewModel.getAccountPosts(uid); accountViewModel.getAccountPostsLiveData().observe(this, new Observer >() { @Override @@ -149,6 +151,7 @@ data.setRate(strRate); data.setGenre(post.getGenre()); data.setComment(post.getComment()); + data.setPid(post.getPid()); myPageActDataset.add(data); } @@ -168,7 +171,7 @@ public MyPageActAdapter(List list) { this.list = list; } @Override - public MyPageActViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + public MyPageActViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View inflate = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_my_page_activity_posts, parent,false); MyPageActViewHolder vh = new MyPageActViewHolder(inflate); @@ -184,7 +187,7 @@ } @Override - public void onBindViewHolder(MyPageActViewHolder holder, int position) { + public void onBindViewHolder(@NonNull MyPageActViewHolder holder, int position) { holder.dateView.setText(list.get(position).getDate()); holder.rateView.setText(list.get(position).getRate()); holder.genreView.setText(list.get(position).getGenre()); @@ -205,7 +208,7 @@ public TextView commentView; public ImageButton deleteButton; - public MyPageActViewHolder(View view) { + public MyPageActViewHolder(@NonNull View view) { super(view); dateView = (TextView) view.findViewById(R.id.date); rateView = (TextView) view.findViewById(R.id.rate); @@ -216,12 +219,11 @@ } // DataModel - public class MyPageActDataModel { + public static class MyPageActDataModel { private String date; private String rate; private String genre; private String comment; - private String sid; private String pid; public String getDate() { @@ -252,9 +254,6 @@ this.comment = comment; } - public String getSid() { return sid; } - public void setSid(String sid) { this.sid = sid; } - public String getPid() { return pid; } public void setPid(String sid) { this.pid = pid; } } diff --git a/app/src/main/java/com/example/nemophila/resources/AccountsRest.java b/app/src/main/java/com/example/nemophila/resources/AccountsRest.java index a3bf6ff..02a6203 100644 --- a/app/src/main/java/com/example/nemophila/resources/AccountsRest.java +++ b/app/src/main/java/com/example/nemophila/resources/AccountsRest.java @@ -71,9 +71,8 @@ ); @FormUrlEncoded - @POST("shops/{sid}/posts/{uid}/{pid}") + @POST("accounts/{uid}/posts/{pid}") Call deletePost( - @Path("sid") String sid, @Path("uid") String uid, @Path("pid") String pid, @Field("token") String token diff --git a/app/src/main/java/com/example/nemophila/viewmodels/AccountViewModel.java b/app/src/main/java/com/example/nemophila/viewmodels/AccountViewModel.java index 3216931..300fbe7 100644 --- a/app/src/main/java/com/example/nemophila/viewmodels/AccountViewModel.java +++ b/app/src/main/java/com/example/nemophila/viewmodels/AccountViewModel.java @@ -6,6 +6,7 @@ import com.example.nemophila.R; import com.example.nemophila.entities.Account; import com.example.nemophila.entities.AccountJson; +import com.example.nemophila.entities.AccountNameJson; import com.example.nemophila.entities.Post; import com.example.nemophila.entities.PostJson; import com.example.nemophila.resources.AccountsRest; @@ -211,13 +212,14 @@ } // 対象のアカウントがした投稿の削除 - public void deleteAccountPost(String sid, String uid, String pid, String token) { - Call call = accountsRest.deletePost(sid, uid, pid, token); + public void deleteAccountPost(String uid, String pid, String token) { + Call call = accountsRest.deletePost(uid, pid, token); call.enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { if (response.isSuccessful()) { + deleteAccountPostLiveData(pid); System.out.println("successful"); } else { System.out.println("response error"); @@ -229,4 +231,15 @@ } }); } + + private void deleteAccountPostLiveData(String id) { + ArrayList preData = new ArrayList<>(); + for (Post post: accountPostsLiveData.getValue()) { + if (post.getPid().equals(id)) { + continue; + } + preData.add(post); + } + accountPostsLiveData.setValue(preData); + } }