diff --git a/.idea/misc.xml b/.idea/misc.xml
index 960c647..432cce0 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -15,13 +15,20 @@
+
+
+
+
+
+
+
diff --git a/app/src/main/java/com/example/nemophila/FriendActivity.java b/app/src/main/java/com/example/nemophila/FriendActivity.java
index 2df9314..22a0002 100644
--- a/app/src/main/java/com/example/nemophila/FriendActivity.java
+++ b/app/src/main/java/com/example/nemophila/FriendActivity.java
@@ -9,21 +9,27 @@
import androidx.recyclerview.widget.RecyclerView;
import android.app.AlertDialog;
+import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.PorterDuff;
import android.os.Bundle;
+import android.util.DisplayMetrics;
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;
@@ -37,72 +43,285 @@
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();
+// // 初期化
+// 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 -> {
+ // 任意の大きさでダイアログを生成
+ Dialog dialog = new Dialog(this);
+ dialog.setContentView(R.layout.layout_friend_dialog);
+ dialog.getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT);
+
+ // 初期化
+ List friendsDataset = new ArrayList<>(); // 1行分の情報を持つDataModelを格納するリスト
+ RecyclerView rv = dialog.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);
+ //一行ずつを縦に(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);
- 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);
+ 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();
}
- adapter.setList(friendsDataset);
- rv.setAdapter(adapter);
- }
+ @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);
+ }
+ });
+
+// //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);
+// }
+// });
+
+ Button friendBtn = dialog.findViewById(R.id.showFriend);
+ friendBtn.setOnClickListener(fv -> {
+
+ });
+
+ // ダイアログを閉じる
+ Button closeBtn = dialog.findViewById(R.id.close);
+ closeBtn.setOnClickListener(d -> dialog.dismiss());
+
+ // 生成したダイアログを表示
+ 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");
});
// マイページ画面に画面遷移する
@@ -114,7 +333,7 @@
}
- // ----------- RecyclerView用の内部クラス ------------//
+ // ----------- FriendのRecyclerView用の内部クラス ------------//
// Adapter
abstract public class FriendActivityAdapter extends RecyclerView.Adapter {
private List friendData;
@@ -211,4 +430,88 @@
}
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(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(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;
+ }
+
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/nemophila/RequestingActivity.java b/app/src/main/java/com/example/nemophila/RequestingActivity.java
index 12f8900..94df1eb 100644
--- a/app/src/main/java/com/example/nemophila/RequestingActivity.java
+++ b/app/src/main/java/com/example/nemophila/RequestingActivity.java
@@ -243,7 +243,7 @@
}
//DataModel
- public static class RequestingDataModel {
+ public static class RequestingDataModel extends FriendActivity.RequestingDataModel {
private String name;
private String id;
diff --git a/app/src/main/res/layout/activity_friend.xml b/app/src/main/res/layout/activity_friend.xml
index 8a95aba..c8ed16a 100644
--- a/app/src/main/res/layout/activity_friend.xml
+++ b/app/src/main/res/layout/activity_friend.xml
@@ -13,7 +13,9 @@
android:orientation="horizontal"
android:background="#AFAFB0">
-
diff --git a/app/src/main/res/layout/layout_friend.xml b/app/src/main/res/layout/layout_friend.xml
new file mode 100644
index 0000000..8d0f3a7
--- /dev/null
+++ b/app/src/main/res/layout/layout_friend.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
\ 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
new file mode 100644
index 0000000..afe04fd
--- /dev/null
+++ b/app/src/main/res/layout/layout_friend_dialog.xml
@@ -0,0 +1,73 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file