diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml
index e69de29..86843cb 100644
--- a/.idea/deploymentTargetDropDown.xml
+++ b/.idea/deploymentTargetDropDown.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 432cce0..81804e1 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -16,6 +16,7 @@
+
diff --git a/app/src/main/java/com/example/nemophila/FriendActivity.java b/app/src/main/java/com/example/nemophila/FriendActivity.java
index 22a0002..1f6f9d0 100644
--- a/app/src/main/java/com/example/nemophila/FriendActivity.java
+++ b/app/src/main/java/com/example/nemophila/FriendActivity.java
@@ -2,6 +2,7 @@
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
+import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.DividerItemDecoration;
@@ -38,79 +39,17 @@
public class FriendActivity extends AppCompatActivity {
private Nemophila nemophila;
+ FriendViewModel friendViewModel;
+ String uid;
+ String token;
+ String requestingId;
+ String requestingName;
+ String searchingId;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_friend);
-// // 初期化
-// List friendsDataset = new ArrayList<>(); // 1行分の情報を持つDataModelを格納するリスト
-// RecyclerView rv = findViewById(R.id.friendsList); // recyclerViewを取得
-// FriendViewModel friendViewModel = new ViewModelProvider(this).get(FriendViewModel.class); // ViewModelを取得
-// nemophila = (Nemophila) this.getApplication();
-//
-//
-// //一行ずつを縦に(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);
-//
-// String myUid = nemophila.getUid(); // 自身のidを取得
-// String myToken = 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(myUid, friend.getId(), myToken);
-// }
-// })
-// .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(myUid); // 自身のフレンドの一覧を取得するメソッドを呼び出す
-//
-// 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);
-// }
-// });
-
Button showDialog = findViewById(R.id.showDialog);
showDialog.setOnClickListener(v -> {
// 任意の大きさでダイアログを生成
@@ -118,10 +57,25 @@
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 friendViewModel = new ViewModelProvider(this).get(FriendViewModel.class); // ViewModelを取得
+ friendViewModel = new ViewModelProvider(this).get(FriendViewModel.class); // ViewModelを取得
nemophila = (Nemophila) this.getApplication();
@@ -135,8 +89,8 @@
rv.setHasFixedSize(true);
rv.setLayoutManager(llm);
- String myUid = nemophila.getUid(); // 自身のidを取得
- String myToken = nemophila.getToken(); // 自身のtokenを取得
+ uid = nemophila.getUid(); // 自身のidを取得
+ token = nemophila.getToken(); // 自身のtokenを取得
// getFriendsの通信が呼び出されて、フレンドの一覧をfriendsDatasetに格納し、Adapterにセットする
FriendActivityAdapter adapter = new FriendActivityAdapter(friendsDataset) {
@Override
@@ -146,7 +100,7 @@
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
- friendViewModel.deleteFriend(myUid, friend.getId(), myToken);
+ friendViewModel.deleteFriend(uid, friend.getId(), token);
}
})
.setNegativeButton("キャンセル", null)
@@ -166,7 +120,7 @@
}
}
};
- friendViewModel.getFriends(myUid); // 自身のフレンドの一覧を取得するメソッドを呼び出す
+ friendViewModel.getFriends(uid); // 自身のフレンドの一覧を取得するメソッドを呼び出す
friendViewModel.getFriendsLiveData().observe(this, new Observer>() {
@Override
@@ -186,122 +140,117 @@
}
});
-// //idからアカウント名を検索するためのAccountViewModelを宣言しておく
-// AccountViewModel accountViewModel = new ViewModelProvider(this).get(AccountViewModel.class);
-//
-// //フレンド検索ボタン
-// Button requestingButton = (Button)findViewById(R.id.requestingSearchButton);
-// requestingButton.setOnClickListener(new View.OnClickListener(){
-// @Override
-// public void onClick(View v){
-// //入力されたIDを取得
-// EditText editSearchId = (EditText) findViewById(R.id.inputRequestingId);
-// searchingId = editSearchId.getText().toString();
-//
-// //IDが存在しなければ落ちるのでその処理を書く
-// //取得したIDからアカウントを読み込んでおく
-// accountViewModel.fetchAccount(searchingId);
-// //検索用LiveDataへの購読
-// accountViewModel.getAccountLiveData().observe(RequestingActivity.this, new Observer() {
-//
-// //ViewModelからアカウントが返ってくれば(データ変更があれば)実行
-// @Override
-// public void onChanged(Account user) {
-// if(user == null){
-// new AlertDialog.Builder(RequestingActivity.this)
-// .setTitle("IDが間違っています")
-// .setPositiveButton("OK", null)
-// .create()
-// .show();
-// }else {
-// requestingName = (user.getName());
-//
-// //申請を送るダイアログ
-// RequestingDialogFragment dialog = new RequestingDialogFragment(RequestingActivity.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 = (RecyclerView) findViewById(R.id.requestingList);
-//
-// //アダプターを宣言し、削除ボタンを押したときの処理をオーバーライド
-// RequestingActivity.RequestingAdapter adapter = new RequestingActivity.RequestingAdapter(requestingDataList){
-// @Override
-// void onDeleteClick(View view, int position, RequestingActivity.RequestingDataModel user) {
-// new AlertDialog.Builder(RequestingActivity.this)
-// .setTitle(user.getName() + "さんへの申請を削除しますか?")
-// .setPositiveButton("OK", new DialogInterface.OnClickListener() {
-// @Override
-// public void onClick(DialogInterface dialog, int which) {
-// Toast.makeText(RequestingActivity.this, user.getName(), Toast.LENGTH_SHORT).show();
-// friendViewModel.deleteRequesting(uid, user.getId(), token);
-// }
-// })
-// .setNegativeButton("キャンセル", null)
-// .create()
-// .show();
-// }
-// };
-//
-// //一行ずつを縦に(LinearLayout)表示するLayoutManagerを宣言
-// LinearLayoutManager llm = new LinearLayoutManager(this);
-// //データごとの区切り線を入れる
-// RecyclerView.ItemDecoration itemDecoration =
-// new DividerItemDecoration(this, DividerItemDecoration.VERTICAL);
-// rv.addItemDecoration(itemDecoration);
-//
-// rv.setHasFixedSize(true);
-// rv.setLayoutManager(llm);
-//
-// //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.setList(requestingDataList);
-// rv.setAdapter(adapter);
-// }
-// });
+ //idからアカウント名を検索するためのAccountViewModelを宣言しておく
+ AccountViewModel accountViewModel = new ViewModelProvider(this).get(AccountViewModel.class);
- Button friendBtn = dialog.findViewById(R.id.showFriend);
- friendBtn.setOnClickListener(fv -> {
+ //フレンド検索ボタン
+ 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を渡す
+ }
+ }
+ });
+ }
+
+
+ });
+
+
+ //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);
+ }
});
// ダイアログを閉じる
@@ -310,18 +259,6 @@
// 生成したダイアログを表示
dialog.show();
-
-// WindowManager.LayoutParams lp = dialog.getWindow().getAttributes();
-// DisplayMetrics metrics = getResources().getDisplayMetrics();
-//
-// // 画面サイズの0.8倍の大きさ
-// int dialogWidth = (int) (metrics.widthPixels * 0.8);
-// int dialogHeight = (int) (metrics.heightPixels * 0.8);
-// lp.width = dialogWidth;
-// lp.height = dialogHeight;
-// dialog.getWindow().setAttributes(lp);
-
-// dialog.show(getSupportFragmentManager(), "friend_dialog");
});
// マイページ画面に画面遷移する
@@ -458,7 +395,7 @@
public void onClick(View v) {
int position = vh.getBindingAdapterPosition();
// 処理はonDeleteClickに
- onDeleteClick(v, position, list.get(position));
+ onDeleteClick_r(v, position, list.get(position));
}
});
@@ -475,7 +412,7 @@
return list.size();
}
- void onDeleteClick(View view, int position, FriendActivity.RequestingDataModel requesting) {
+ void onDeleteClick_r(View view, int position, FriendActivity.RequestingDataModel requesting) {
// このメソッドをActivity内でオーバーライドして、クリックイベントの処理を設定する
}
}
@@ -512,6 +449,11 @@
public void setId(String id){
this.id = id;
}
+ }
+ //ダイアログでOKを押した時に呼び出される フレンド申請を送るメソッド
+ public void putRequesting(){
+ requestingId = searchingId;
+ friendViewModel.putRequesting(uid, requestingId, requestingName, token);
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/nemophila/FriendDialogFragment.java b/app/src/main/java/com/example/nemophila/FriendDialogFragment.java
new file mode 100644
index 0000000..e75076c
--- /dev/null
+++ b/app/src/main/java/com/example/nemophila/FriendDialogFragment.java
@@ -0,0 +1,457 @@
+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 f90011a..b67e074 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) {
- Intent intent = new Intent(MyPageActivity.this, FriendActivity.class);
- startActivity(intent);
+ FriendDialogFragment dialog = new FriendDialogFragment(nemophila);
+ dialog.show(getSupportFragmentManager(), "tag");
}
});
diff --git a/app/src/main/java/com/example/nemophila/RequestingActivity.java b/app/src/main/java/com/example/nemophila/RequestingActivity.java
index 94df1eb..eda2628 100644
--- a/app/src/main/java/com/example/nemophila/RequestingActivity.java
+++ b/app/src/main/java/com/example/nemophila/RequestingActivity.java
@@ -88,16 +88,16 @@
}else {
requestingName = (user.getName());
- //申請を送るダイアログ
- RequestingDialogFragment dialog = new RequestingDialogFragment(RequestingActivity.this);
- //名前を渡す
- Bundle args = new Bundle();
- args.putString("message", requestingName);
- dialog.setArguments(args);
-
- //ダイアログの表示
- dialog.show(getSupportFragmentManager(), "Requesting_dialog");
- //OK押したら申請するメソッドにuid、requestingId、tokenを渡す
+// //申請を送るダイアログ
+//// RequestingDialogFragment dialog = new RequestingDialogFragment();
+// //名前を渡す
+// Bundle args = new Bundle();
+// args.putString("message", requestingName);
+// dialog.setArguments(args);
+//
+// //ダイアログの表示
+// dialog.show(getSupportFragmentManager(), "Requesting_dialog");
+// //OK押したら申請するメソッドにuid、requestingId、tokenを渡す
}
}
});
diff --git a/app/src/main/java/com/example/nemophila/RequestingDialogFragment.java b/app/src/main/java/com/example/nemophila/RequestingDialogFragment.java
index 22a3c07..9fb66ed 100644
--- a/app/src/main/java/com/example/nemophila/RequestingDialogFragment.java
+++ b/app/src/main/java/com/example/nemophila/RequestingDialogFragment.java
@@ -10,10 +10,10 @@
import androidx.fragment.app.DialogFragment;
public class RequestingDialogFragment extends DialogFragment {
- private RequestingActivity requestingActivity;
+ private FriendActivity friendActivity;
- public RequestingDialogFragment(RequestingActivity requestingActivity) {
- this.requestingActivity = requestingActivity;
+ public RequestingDialogFragment(FriendActivity friendActivity) {
+ this.friendActivity = friendActivity;
}
@NonNull
@@ -28,7 +28,7 @@
.setPositiveButton("申請を送る", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// ボタンを押した時にフレンド申請を送る
- requestingActivity.putRequesting();
+ friendActivity.putRequesting();
}
})
.setNegativeButton("キャンセル", null);
diff --git a/app/src/main/res/layout/activity_requesting.xml b/app/src/main/res/layout/activity_requesting.xml
index b15fa49..c22f3c2 100644
--- a/app/src/main/res/layout/activity_requesting.xml
+++ b/app/src/main/res/layout/activity_requesting.xml
@@ -6,98 +6,117 @@
android:layout_height="match_parent"
tools:context=".RequestingActivity">
+
-
+
-
+
-
+
-
+
+
-
+
-
+
-
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/layout_friend_dialog.xml b/app/src/main/res/layout/layout_friend_dialog.xml
index afe04fd..7c7ac15 100644
--- a/app/src/main/res/layout/layout_friend_dialog.xml
+++ b/app/src/main/res/layout/layout_friend_dialog.xml
@@ -2,6 +2,7 @@
+ android:layout_height="match_parent"
+ android:visibility="visible"/>
-
+ android:visibility="invisible">
+
+
+
+
+
+
+
+
+
+
+