diff --git a/.idea/misc.xml b/.idea/misc.xml index 81804e1..6bb162c 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -14,7 +14,7 @@ - + diff --git a/app/src/main/java/com/example/nemophila/FriendActivity.java b/app/src/main/java/com/example/nemophila/FriendActivity.java index 1f6f9d0..07e82c7 100644 --- a/app/src/main/java/com/example/nemophila/FriendActivity.java +++ b/app/src/main/java/com/example/nemophila/FriendActivity.java @@ -50,224 +50,205 @@ super.onCreate(savedInstanceState); setContentView(R.layout.activity_friend); - Button showDialog = findViewById(R.id.showDialog); - showDialog.setOnClickListener(v -> { - // 任意の大きさでダイアログを生成 - Dialog dialog = new Dialog(this); - dialog.setContentView(R.layout.layout_friend_dialog); - dialog.getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT); + Button showFriend = findViewById(R.id.showFriend); + Button showRequesting = findViewById(R.id.showRequesting); + RecyclerView friendRecyclerView = findViewById(R.id.friendsList); + ConstraintLayout requestingConstraintLayout = findViewById(R.id.requestingLayout); - Button showFriend = dialog.findViewById(R.id.showFriend); - Button showRequesting = dialog.findViewById(R.id.showRequesting); - RecyclerView friendRecyclerView = dialog.findViewById(R.id.friendsList); - ConstraintLayout requestingConstraintLayout = dialog.findViewById(R.id.requestingLayout); + showFriend.setOnClickListener(v2 -> { + friendRecyclerView.setVisibility(View.VISIBLE); + requestingConstraintLayout.setVisibility(View.INVISIBLE); + }); - showFriend.setOnClickListener(v2 -> { - friendRecyclerView.setVisibility(View.VISIBLE); - requestingConstraintLayout.setVisibility(View.INVISIBLE); - }); + showRequesting.setOnClickListener(v3 -> { + friendRecyclerView.setVisibility(View.INVISIBLE); + requestingConstraintLayout.setVisibility(View.VISIBLE); + }); - showRequesting.setOnClickListener(v3 -> { - friendRecyclerView.setVisibility(View.INVISIBLE); - requestingConstraintLayout.setVisibility(View.VISIBLE); - }); - - // 初期化 - List friendsDataset = new ArrayList<>(); // 1行分の情報を持つDataModelを格納するリスト - RecyclerView rv = dialog.findViewById(R.id.friendsList); // recyclerViewを取得 - friendViewModel = new ViewModelProvider(this).get(FriendViewModel.class); // ViewModelを取得 - nemophila = (Nemophila) this.getApplication(); + // 初期化 + List friendsDataset = new ArrayList<>(); // 1行分の情報を持つDataModelを格納するリスト + RecyclerView rv = findViewById(R.id.friendsList); // recyclerViewを取得 + friendViewModel = new ViewModelProvider(this).get(FriendViewModel.class); // ViewModelを取得 + nemophila = (Nemophila) this.getApplication(); - //一行ずつを縦に(LinearLayout)表示するLayoutManagerを宣言 - LinearLayoutManager llm = new LinearLayoutManager(this); + //一行ずつを縦に(LinearLayout)表示するLayoutManagerを宣言 + LinearLayoutManager llm = new LinearLayoutManager(this); - // データ1つ1つの区切りが分かるように線を引く - RecyclerView.ItemDecoration itemDecoration = - new DividerItemDecoration(this, DividerItemDecoration.VERTICAL); - rv.addItemDecoration(itemDecoration); - rv.setHasFixedSize(true); - rv.setLayoutManager(llm); + // データ1つ1つの区切りが分かるように線を引く + RecyclerView.ItemDecoration itemDecoration = + new DividerItemDecoration(this, DividerItemDecoration.VERTICAL); + rv.addItemDecoration(itemDecoration); + rv.setHasFixedSize(true); + rv.setLayoutManager(llm); - uid = nemophila.getUid(); // 自身のidを取得 - token = nemophila.getToken(); // 自身のtokenを取得 - // getFriendsの通信が呼び出されて、フレンドの一覧をfriendsDatasetに格納し、Adapterにセットする - FriendActivityAdapter adapter = new FriendActivityAdapter(friendsDataset) { - @Override - void onDeleteClick(View view, int position, FriendDataModel friend) { - new AlertDialog.Builder(FriendActivity.this) - .setTitle("フレンドから" + friend.getName() + "を削除しますか?") - .setPositiveButton("OK", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - friendViewModel.deleteFriend(uid, friend.getId(), token); - } - }) - .setNegativeButton("キャンセル", null) - .create() - .show(); - } - - @Override - void onFavoriteClick(View view, int position, FriendDataModel friend, ImageView favorite) { - if (favorite.getVisibility() == View.INVISIBLE) { - favorite.setVisibility(View.VISIBLE); - nemophila.setFavoriteFriends(friend.getId()); - } else { - favorite.setVisibility(View.INVISIBLE); - nemophila.removeFavoriteFriends(friend.getId()); - System.out.println(nemophila.getFavoriteFriends()); - } - } - }; - friendViewModel.getFriends(uid); // 自身のフレンドの一覧を取得するメソッドを呼び出す - - friendViewModel.getFriendsLiveData().observe(this, new Observer>() { - @Override - public void onChanged(Collection friends) { - // 以前のデータが残っていると不都合なので、空にしておく - friendsDataset.clear(); - - for (AccountNameJson friend : friends) { - FriendDataModel data = new FriendDataModel(); - data.setName(friend.getName()); - data.setId(friend.getUid()); - friendsDataset.add(data); - } - - adapter.setList(friendsDataset); - rv.setAdapter(adapter); - } - }); - - //idからアカウント名を検索するためのAccountViewModelを宣言しておく - AccountViewModel accountViewModel = new ViewModelProvider(this).get(AccountViewModel.class); - - //フレンド検索ボタン - Button requestingButton = dialog.findViewById(R.id.requestingSearchButton); - requestingButton.setOnClickListener(new View.OnClickListener(){ - @Override - public void onClick(View v){ - //入力されたIDを取得 - EditText editSearchId = dialog.findViewById(R.id.inputRequestingId); - String searchingId = editSearchId.getText().toString(); - - //IDが存在しなければ落ちるのでその処理を書く - //取得したIDからアカウントを読み込んでおく - accountViewModel.fetchAccount(searchingId); - //検索用LiveDataへの購読 - accountViewModel.getAccountLiveData().observe(FriendActivity.this, new Observer() { - - //ViewModelからアカウントが返ってくれば(データ変更があれば)実行 - @Override - public void onChanged(Account user) { - if(user == null){ - new AlertDialog.Builder(FriendActivity.this) - .setTitle("IDが間違っています") - .setPositiveButton("OK", null) - .create() - .show(); - }else { - requestingName = (user.getName()); - - //申請を送るダイアログ - RequestingDialogFragment dialog = new RequestingDialogFragment(FriendActivity.this); - //名前を渡す - Bundle args = new Bundle(); - args.putString("message", requestingName); - dialog.setArguments(args); - - //ダイアログの表示 - dialog.show(getSupportFragmentManager(), "Requesting_dialog"); - //OK押したら申請するメソッドにuid、requestingId、tokenを渡す + uid = nemophila.getUid(); // 自身のidを取得 + token = nemophila.getToken(); // 自身のtokenを取得 + // getFriendsの通信が呼び出されて、フレンドの一覧をfriendsDatasetに格納し、Adapterにセットする + FriendActivityAdapter adapter = new FriendActivityAdapter(friendsDataset) { + @Override + void onDeleteClick(View view, int position, FriendDataModel friend) { + new AlertDialog.Builder(FriendActivity.this) + .setTitle("フレンドから" + friend.getName() + "を削除しますか?") + .setPositiveButton("OK", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + friendViewModel.deleteFriend(uid, friend.getId(), token); } + }) + .setNegativeButton("キャンセル", null) + .create() + .show(); + } + + @Override + void onFavoriteClick(View view, int position, FriendDataModel friend, ImageView favorite) { + if (favorite.getVisibility() == View.INVISIBLE) { + favorite.setVisibility(View.VISIBLE); + nemophila.setFavoriteFriends(friend.getId()); + } else { + favorite.setVisibility(View.INVISIBLE); + nemophila.removeFavoriteFriends(friend.getId()); + System.out.println(nemophila.getFavoriteFriends()); + } + } + }; + friendViewModel.getFriends(uid); // 自身のフレンドの一覧を取得するメソッドを呼び出す + + friendViewModel.getFriendsLiveData().observe(this, new Observer>() { + @Override + public void onChanged(Collection friends) { + // 以前のデータが残っていると不都合なので、空にしておく + friendsDataset.clear(); + + for (AccountNameJson friend : friends) { + FriendDataModel data = new FriendDataModel(); + data.setName(friend.getName()); + data.setId(friend.getUid()); + friendsDataset.add(data); + } + + adapter.setList(friendsDataset); + rv.setAdapter(adapter); + } + }); + + //idからアカウント名を検索するためのAccountViewModelを宣言しておく + AccountViewModel accountViewModel = new ViewModelProvider(this).get(AccountViewModel.class); + + //フレンド検索ボタン + Button requestingButton = findViewById(R.id.requestingSearchButton); + requestingButton.setOnClickListener(new View.OnClickListener(){ + @Override + public void onClick(View v){ + //入力されたIDを取得 + EditText editSearchId = findViewById(R.id.inputRequestingId); + String searchingId = editSearchId.getText().toString(); + + //IDが存在しなければ落ちるのでその処理を書く + //取得したIDからアカウントを読み込んでおく + accountViewModel.fetchAccount(searchingId); + //検索用LiveDataへの購読 + accountViewModel.getAccountLiveData().observe(FriendActivity.this, new Observer() { + + //ViewModelからアカウントが返ってくれば(データ変更があれば)実行 + @Override + public void onChanged(Account user) { + if(user == null){ + new AlertDialog.Builder(FriendActivity.this) + .setTitle("IDが間違っています") + .setPositiveButton("OK", null) + .create() + .show(); + }else { + requestingName = (user.getName()); + + //申請を送るダイアログ + RequestingDialogFragment dialog = new RequestingDialogFragment(FriendActivity.this); + //名前を渡す + Bundle args = new Bundle(); + args.putString("message", requestingName); + dialog.setArguments(args); + + //ダイアログの表示 + dialog.show(getSupportFragmentManager(), "Requesting_dialog"); + //OK押したら申請するメソッドにuid、requestingId、tokenを渡す } - }); - } - - - }); - - - //RecyclerView(表示の設定、直接表示するところはLivedataを購読しているonChanged内に) - List requestingDataList = new ArrayList<>(); - - //xmlからrvにRecyclerViewを取得 - RecyclerView rv_r = (RecyclerView) dialog.findViewById(R.id.requestingList); - - //アダプターを宣言し、削除ボタンを押したときの処理をオーバーライド - FriendActivity.RequestingAdapter adapter_r = new FriendActivity.RequestingAdapter(requestingDataList){ - @Override - void onDeleteClick_r(View view, int position, FriendActivity.RequestingDataModel user) { - new AlertDialog.Builder(FriendActivity.this) - .setTitle(user.getName() + "さんへの申請を削除しますか?") - .setPositiveButton("OK", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - Toast.makeText(FriendActivity.this, user.getName(), Toast.LENGTH_SHORT).show(); - friendViewModel.deleteRequesting(uid, user.getId(), token); - } - }) - .setNegativeButton("キャンセル", null) - .create() - .show(); - } - }; - - //一行ずつを縦に(LinearLayout)表示するLayoutManagerを宣言 - LinearLayoutManager llm_r = new LinearLayoutManager(this); - //データごとの区切り線を入れる - RecyclerView.ItemDecoration itemDecoration_r = - new DividerItemDecoration(this, DividerItemDecoration.VERTICAL); - rv_r.addItemDecoration(itemDecoration_r); - - rv_r.setHasFixedSize(true); - rv_r.setLayoutManager(llm_r); - - //FriendViewModelを初期化し、申請先のデータをロードしておく - friendViewModel = new ViewModelProvider(this).get(FriendViewModel.class); - friendViewModel.getRequesting(uid); - - //申請先の一覧のLiveDataへの購読 - friendViewModel.getRequestingLiveData().observe(this, new Observer>() { - //データに変更があった時実行 - @Override - public void onChanged(Collection requestingUsers) { - - //表示用のDataListを一旦クリアし、LiveDataから受け取ったデータを一つずつセット(重複しないように) - requestingDataList.clear(); - //受け取ったLivedataの要素分繰り返し、セット - for (AccountNameJson user: requestingUsers) { - //dataを宣言 dataに投稿の必要なデータをセットし、それをpostsDatasetに追加してリストを作る - RequestingActivity.RequestingDataModel data = new RequestingActivity.RequestingDataModel(); - data.setName(user.getName()); - data.setId(user.getUid()); - - //投稿一つの情報がdataに全部セットされたらDatasetに追加 - requestingDataList.add(data); } + }); + } - //onChange内に書くべき表示部分 - adapter_r.setList(requestingDataList); - rv_r.setAdapter(adapter_r); + + }); + + + //RecyclerView(表示の設定、直接表示するところはLivedataを購読しているonChanged内に) + List requestingDataList = new ArrayList<>(); + + //xmlからrvにRecyclerViewを取得 + RecyclerView rv_r = (RecyclerView) findViewById(R.id.requestingList); + + //アダプターを宣言し、削除ボタンを押したときの処理をオーバーライド + FriendActivity.RequestingAdapter adapter_r = new FriendActivity.RequestingAdapter(requestingDataList){ + @Override + void onDeleteClick_r(View view, int position, FriendActivity.RequestingDataModel user) { + new AlertDialog.Builder(FriendActivity.this) + .setTitle(user.getName() + "さんへの申請を削除しますか?") + .setPositiveButton("OK", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + Toast.makeText(FriendActivity.this, user.getName(), Toast.LENGTH_SHORT).show(); + friendViewModel.deleteRequesting(uid, user.getId(), token); + } + }) + .setNegativeButton("キャンセル", null) + .create() + .show(); + } + }; + + //一行ずつを縦に(LinearLayout)表示するLayoutManagerを宣言 + LinearLayoutManager llm_r = new LinearLayoutManager(this); + //データごとの区切り線を入れる + RecyclerView.ItemDecoration itemDecoration_r = + new DividerItemDecoration(this, DividerItemDecoration.VERTICAL); + rv_r.addItemDecoration(itemDecoration_r); + + rv_r.setHasFixedSize(true); + rv_r.setLayoutManager(llm_r); + + //FriendViewModelを初期化し、申請先のデータをロードしておく + friendViewModel = new ViewModelProvider(this).get(FriendViewModel.class); + friendViewModel.getRequesting(uid); + + //申請先の一覧のLiveDataへの購読 + friendViewModel.getRequestingLiveData().observe(this, new Observer>() { + //データに変更があった時実行 + @Override + public void onChanged(Collection requestingUsers) { + + //表示用のDataListを一旦クリアし、LiveDataから受け取ったデータを一つずつセット(重複しないように) + requestingDataList.clear(); + //受け取ったLivedataの要素分繰り返し、セット + for (AccountNameJson user: requestingUsers) { + //dataを宣言 dataに投稿の必要なデータをセットし、それをpostsDatasetに追加してリストを作る + RequestingActivity.RequestingDataModel data = new RequestingActivity.RequestingDataModel(); + data.setName(user.getName()); + data.setId(user.getUid()); + + //投稿一つの情報がdataに全部セットされたらDatasetに追加 + requestingDataList.add(data); } - }); - // ダイアログを閉じる - Button closeBtn = dialog.findViewById(R.id.close); - closeBtn.setOnClickListener(d -> dialog.dismiss()); - - // 生成したダイアログを表示 - dialog.show(); + //onChange内に書くべき表示部分 + adapter_r.setList(requestingDataList); + rv_r.setAdapter(adapter_r); + } }); - // マイページ画面に画面遷移する - Button backButton = findViewById(R.id.backMyPage); - backButton.setOnClickListener(v -> { - Intent intent = new Intent(getApplication(), MyPageActivity.class); - startActivity(intent); - }); - + // ダイアログを閉じる + Button closeBtn = findViewById(R.id.close); + closeBtn.setOnClickListener(d -> finish()); } // ----------- FriendのRecyclerView用の内部クラス ------------// diff --git a/app/src/main/java/com/example/nemophila/FriendDialogFragment.java b/app/src/main/java/com/example/nemophila/FriendDialogFragment.java deleted file mode 100644 index e75076c..0000000 --- a/app/src/main/java/com/example/nemophila/FriendDialogFragment.java +++ /dev/null @@ -1,457 +0,0 @@ -package com.example.nemophila; - -import android.app.AlertDialog; -import android.app.Dialog; -import android.content.DialogInterface; -import android.os.Bundle; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.view.WindowManager; -import android.widget.Button; -import android.widget.EditText; -import android.widget.ImageButton; -import android.widget.ImageView; -import android.widget.TextView; -import android.widget.Toast; - -import com.example.nemophila.entities.Account; -import com.example.nemophila.entities.AccountNameJson; -import com.example.nemophila.viewmodels.AccountViewModel; -import com.example.nemophila.viewmodels.FriendViewModel; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.constraintlayout.widget.ConstraintLayout; -import androidx.fragment.app.DialogFragment; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; -import androidx.recyclerview.widget.DividerItemDecoration; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; - -public class FriendDialogFragment extends DialogFragment { - Nemophila nemophila; - FriendViewModel friendViewModel; - String uid; - String token; - String requestingId; - String requestingName; - String searchingId; - - public FriendDialogFragment(Nemophila nemophila) { - this.nemophila = nemophila; - } - - @NonNull - @Override - public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { - Dialog dialog = new Dialog(getContext()); - dialog.setContentView(R.layout.layout_friend_dialog); - dialog.getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT); - - Button showFriend = dialog.findViewById(R.id.showFriend); - Button showRequesting = dialog.findViewById(R.id.showRequesting); - RecyclerView friendRecyclerView = dialog.findViewById(R.id.friendsList); - ConstraintLayout requestingConstraintLayout = dialog.findViewById(R.id.requestingLayout); - - showFriend.setOnClickListener(v2 -> { - friendRecyclerView.setVisibility(View.VISIBLE); - requestingConstraintLayout.setVisibility(View.INVISIBLE); - }); - - showRequesting.setOnClickListener(v3 -> { - friendRecyclerView.setVisibility(View.INVISIBLE); - requestingConstraintLayout.setVisibility(View.VISIBLE); - }); - - // 初期化 - List friendsDataset = new ArrayList<>(); // 1行分の情報を持つDataModelを格納するリスト - RecyclerView rv = dialog.findViewById(R.id.friendsList); // recyclerViewを取得 - friendViewModel = new ViewModelProvider(this).get(FriendViewModel.class); // ViewModelを取得 - - //一行ずつを縦に(LinearLayout)表示するLayoutManagerを宣言 - LinearLayoutManager llm = new LinearLayoutManager(getContext()); - - // データ1つ1つの区切りが分かるように線を引く - RecyclerView.ItemDecoration itemDecoration = - new DividerItemDecoration(getContext(), DividerItemDecoration.VERTICAL); - rv.addItemDecoration(itemDecoration); - rv.setHasFixedSize(true); - rv.setLayoutManager(llm); - - uid = nemophila.getUid(); // 自身のidを取得 - token = nemophila.getToken(); // 自身のtokenを取得 - // getFriendsの通信が呼び出されて、フレンドの一覧をfriendsDatasetに格納し、Adapterにセットする - FriendActivityAdapter adapter = new FriendActivityAdapter(friendsDataset) { - @Override - void onDeleteClick(View view, int position, FriendActivity.FriendDataModel friend) { - new AlertDialog.Builder(getContext()) - .setTitle("フレンドから" + friend.getName() + "を削除しますか?") - .setPositiveButton("OK", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - friendViewModel.deleteFriend(uid, friend.getId(), token); - } - }) - .setNegativeButton("キャンセル", null) - .create() - .show(); - } - - @Override - void onFavoriteClick(View view, int position, FriendActivity.FriendDataModel friend, ImageView favorite) { - if (favorite.getVisibility() == View.INVISIBLE) { - favorite.setVisibility(View.VISIBLE); - nemophila.setFavoriteFriends(friend.getId()); - } else { - favorite.setVisibility(View.INVISIBLE); - nemophila.removeFavoriteFriends(friend.getId()); - System.out.println(nemophila.getFavoriteFriends()); - } - } - }; - friendViewModel.getFriends(uid); // 自身のフレンドの一覧を取得するメソッドを呼び出す - - friendViewModel.getFriendsLiveData().observe(this, new Observer>() { - @Override - public void onChanged(Collection friends) { - // 以前のデータが残っていると不都合なので、空にしておく - friendsDataset.clear(); - - for (AccountNameJson friend : friends) { - FriendActivity.FriendDataModel data = new FriendActivity.FriendDataModel(); - data.setName(friend.getName()); - data.setId(friend.getUid()); - friendsDataset.add(data); - } - - adapter.setList(friendsDataset); - rv.setAdapter(adapter); - } - }); - - //idからアカウント名を検索するためのAccountViewModelを宣言しておく - AccountViewModel accountViewModel = new ViewModelProvider(this).get(AccountViewModel.class); - - //フレンド検索ボタン - Button requestingButton = dialog.findViewById(R.id.requestingSearchButton); - requestingButton.setOnClickListener(new View.OnClickListener(){ - @Override - public void onClick(View v){ - //入力されたIDを取得 - EditText editSearchId = dialog.findViewById(R.id.inputRequestingId); - String searchingId = editSearchId.getText().toString(); - - //IDが存在しなければ落ちるのでその処理を書く - //取得したIDからアカウントを読み込んでおく - accountViewModel.fetchAccount(searchingId); - //検索用LiveDataへの購読 - accountViewModel.getAccountLiveData().observe(, new Observer() { - - //ViewModelからアカウントが返ってくれば(データ変更があれば)実行 - @Override - public void onChanged(Account user) { - if(user == null){ - new AlertDialog.Builder(getContext()) - .setTitle("IDが間違っています") - .setPositiveButton("OK", null) - .create() - .show(); - }else { - requestingName = (user.getName()); - - new AlertDialog.Builder(getContext()) - .setTitle("フレンド申請") - .setMessage(requestingName + "さんに申請しますか?") - .setPositiveButton("申請を送る", new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int id) { - // ボタンを押した時にフレンド申請を送る - friendViewModel.putRequesting(uid, searchingId, requestingName, token); - } - }) - .setNegativeButton("キャンセル", null) - .create() - .show(); - -// //申請を送るダイアログ -// RequestingDialogFragment dialog = new RequestingDialogFragment(); -// //名前を渡す -// Bundle args = new Bundle(); -// args.putString("message", requestingName); -// dialog.setArguments(args); -// -// //ダイアログの表示 -// dialog.show(getSupportFragmentManager(), "Requesting_dialog"); -// //OK押したら申請するメソッドにuid、requestingId、tokenを渡す - } - } - }); - } - - - }); - - - //RecyclerView(表示の設定、直接表示するところはLivedataを購読しているonChanged内に) - List requestingDataList = new ArrayList<>(); - - //xmlからrvにRecyclerViewを取得 - RecyclerView rv_r = (RecyclerView) dialog.findViewById(R.id.requestingList); - - //アダプターを宣言し、削除ボタンを押したときの処理をオーバーライド - FriendActivity.RequestingAdapter adapter_r = new FriendActivity.RequestingAdapter(requestingDataList){ - @Override - void onDeleteClick_r(View view, int position, FriendActivity.RequestingDataModel user) { - new AlertDialog.Builder(FriendActivity.this) - .setTitle(user.getName() + "さんへの申請を削除しますか?") - .setPositiveButton("OK", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - Toast.makeText(FriendActivity.this, user.getName(), Toast.LENGTH_SHORT).show(); - friendViewModel.deleteRequesting(uid, user.getId(), token); - } - }) - .setNegativeButton("キャンセル", null) - .create() - .show(); - } - }; - - //一行ずつを縦に(LinearLayout)表示するLayoutManagerを宣言 - LinearLayoutManager llm_r = new LinearLayoutManager(this); - //データごとの区切り線を入れる - RecyclerView.ItemDecoration itemDecoration_r = - new DividerItemDecoration(this, DividerItemDecoration.VERTICAL); - rv_r.addItemDecoration(itemDecoration_r); - - rv_r.setHasFixedSize(true); - rv_r.setLayoutManager(llm_r); - - //FriendViewModelを初期化し、申請先のデータをロードしておく - friendViewModel = new ViewModelProvider(this).get(FriendViewModel.class); - friendViewModel.getRequesting(uid); - - //申請先の一覧のLiveDataへの購読 - friendViewModel.getRequestingLiveData().observe(this, new Observer>() { - //データに変更があった時実行 - @Override - public void onChanged(Collection requestingUsers) { - - //表示用のDataListを一旦クリアし、LiveDataから受け取ったデータを一つずつセット(重複しないように) - requestingDataList.clear(); - //受け取ったLivedataの要素分繰り返し、セット - for (AccountNameJson user: requestingUsers) { - //dataを宣言 dataに投稿の必要なデータをセットし、それをpostsDatasetに追加してリストを作る - RequestingActivity.RequestingDataModel data = new RequestingActivity.RequestingDataModel(); - data.setName(user.getName()); - data.setId(user.getUid()); - - //投稿一つの情報がdataに全部セットされたらDatasetに追加 - requestingDataList.add(data); - } - - //onChange内に書くべき表示部分 - adapter_r.setList(requestingDataList); - rv_r.setAdapter(adapter_r); - } - }); - - // ダイアログを閉じる - Button closeBtn = dialog.findViewById(R.id.close); - closeBtn.setOnClickListener(d -> dialog.dismiss()); - - return dialog; - } - - // ----------- FriendのRecyclerView用の内部クラス ------------// - // Adapter - abstract public class FriendActivityAdapter extends RecyclerView.Adapter { - private List friendData; - - public FriendActivityAdapter(List friendData) { - this.friendData = friendData; - } - - public void setList(List friendData) { - this.friendData = friendData; - } - - @NonNull - @Override - public FriendActivity.FriendsViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int ViewType) { - // layoutXMLからViewを生成 - View inflate = LayoutInflater.from(parent.getContext()).inflate(R.layout.friend_list_item, parent,false); - // ViewHolderを生成 - FriendActivity.FriendsViewHolder vh = new FriendActivity.FriendsViewHolder(inflate); - - // 削除ボタンを押したときのイベントを登録 - vh.deleteButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - int position = vh.getBindingAdapterPosition(); - // 処理はonDeleteClick()に丸投げ - onDeleteClick(v, position, friendData.get(position)); - } - }); - - // お気に入りに追加したときのイベントを登録 - vh.favoriteOutline.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - int position = vh.getBindingAdapterPosition(); - // 処理はonFavoriteClick()に丸投げ - onFavoriteClick(v, position, friendData.get(position), vh.favorite); - } - }); - - return vh; - } - - @Override - public void onBindViewHolder(@NonNull FriendActivity.FriendsViewHolder holder, int position) { - // 後からアイコンの登録をできるようにする - holder.nameView.setText(friendData.get(position).getName()); - if (nemophila.getFavoriteFriends().contains(friendData.get(position).getId())) { - holder.favorite.setVisibility(View.VISIBLE); - } - } - - @Override - public int getItemCount() { - return friendData.size(); - } - - abstract void onDeleteClick(View view, int position, FriendActivity.FriendDataModel friend); - abstract void onFavoriteClick(View view, int position, FriendActivity.FriendDataModel friend, ImageView favorite); - } - - // ViewHolder - public class FriendsViewHolder extends RecyclerView.ViewHolder { - public ImageView favorite; - public ImageButton favoriteOutline; - public ImageView iconView; - public TextView nameView; - public Button deleteButton; - - public FriendsViewHolder(@NonNull View itemView) { - super(itemView); - favorite = itemView.findViewById(R.id.favorite); - favoriteOutline = itemView.findViewById(R.id.favorite_outline); - iconView = itemView.findViewById(R.id.friendIcon); - nameView = itemView.findViewById(R.id.friendName); - deleteButton = itemView.findViewById(R.id.friendDelete); - } - } - - // DataModel - public static class FriendDataModel { - private String name; - private String id; - - public String getName() { - return name; - } - public String getId() { - return id; - } - - public void setName(String name) { - this.name = name; - } - public void setId(String id) { this.id = id;} - } - - // ----------- RequestingのRecyclerView用の内部クラス ------------// - //Adapter - public class RequestingAdapter extends RecyclerView.Adapter { - - private List list; - - public RequestingAdapter(List list) { - this.list =list; - } - - public void setList(List list) { - this.list = list; - } - - @NonNull - @Override - public FriendActivity.RequestingViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - //1データあたりのレイアウトを読み込み、ビューホルダーを宣言 - View inflate = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_requesting_activity, parent,false); - FriendActivity.RequestingViewHolder vh = new FriendActivity.RequestingViewHolder(inflate); - - // リスト内の削除ボタンを押した時の処理 - vh.deleteButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - int position = vh.getBindingAdapterPosition(); - // 処理はonDeleteClickに - onDeleteClick_r(v, position, list.get(position)); - } - }); - - return vh; - } - - @Override - public void onBindViewHolder(@NonNull FriendActivity.RequestingViewHolder holder, int position) { - holder.nameView.setText(list.get(position).getName()); - } - - @Override - public int getItemCount() { - return list.size(); - } - - void onDeleteClick_r(View view, int position, FriendActivity.RequestingDataModel requesting) { - // このメソッドをActivity内でオーバーライドして、クリックイベントの処理を設定する - } - } - - //ViewHolder - public class RequestingViewHolder extends RecyclerView.ViewHolder { - public TextView nameView; - public ImageView iconView; - public Button deleteButton; - - public RequestingViewHolder(@NonNull View itemView) { - super(itemView); - nameView = (TextView) itemView.findViewById(R.id.requestingName); - iconView = itemView.findViewById(R.id.requestingIcon); - deleteButton = itemView.findViewById(R.id.requestingDeleteButton); - } - } - - //DataModel - public static class RequestingDataModel { - private String name; - private String id; - - public String getName() { - return name; - } - public String getId() { - return id; - } - - public void setName(String name) { - this.name = name; - } - public void setId(String id){ - this.id = id; - } - } - - //ダイアログでOKを押した時に呼び出される フレンド申請を送るメソッド - public void putRequesting(){ - requestingId = searchingId; - friendViewModel.putRequesting(uid, requestingId, requestingName, token); - } -} diff --git a/app/src/main/java/com/example/nemophila/MyPageActivity.java b/app/src/main/java/com/example/nemophila/MyPageActivity.java index b67e074..f90011a 100644 --- a/app/src/main/java/com/example/nemophila/MyPageActivity.java +++ b/app/src/main/java/com/example/nemophila/MyPageActivity.java @@ -56,8 +56,8 @@ Button friendButton = (Button) findViewById(R.id.friend); friendButton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { - FriendDialogFragment dialog = new FriendDialogFragment(nemophila); - dialog.show(getSupportFragmentManager(), "tag"); + Intent intent = new Intent(MyPageActivity.this, FriendActivity.class); + startActivity(intent); } }); diff --git a/app/src/main/res/layout/activity_friend.xml b/app/src/main/res/layout/activity_friend.xml index c8ed16a..9eb30db 100644 --- a/app/src/main/res/layout/activity_friend.xml +++ b/app/src/main/res/layout/activity_friend.xml @@ -1,59 +1,137 @@ + android:layout_weight="0.1" + android:orientation="horizontal"> + +