diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index b19b47f..9d1c6dc 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -98,17 +98,18 @@ android:exported="false" /> - + android:exported="false" + android:windowSoftInputMode="adjustPan"/> + + + + + - + { friendRecyclerView.setVisibility(View.VISIBLE); @@ -133,6 +134,7 @@ } }); + //idからアカウント名を検索するためのAccountViewModelを宣言しておく AccountViewModel accountViewModel = new ViewModelProvider(this).get(AccountViewModel.class); @@ -145,45 +147,43 @@ EditText editSearchId = findViewById(R.id.inputRequestingId); String searchingId = editSearchId.getText().toString(); - //IDが存在しなければ落ちるのでその処理を書く - //取得したIDからアカウントを読み込んでおく + //取得したIDからアカウントを読み込む(検索用のOnChangedへ) 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を渡す - } - } - }); } + }); + //検索用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<>(); + List requestingDataList = new ArrayList<>(); //xmlからrvにRecyclerViewを取得 RecyclerView rv_r = (RecyclerView) findViewById(R.id.requestingList); @@ -232,7 +232,7 @@ //受け取ったLivedataの要素分繰り返し、セット for (AccountNameJson user: requestingUsers) { //dataを宣言 dataに投稿の必要なデータをセットし、それをpostsDatasetに追加してリストを作る - RequestingActivity.RequestingDataModel data = new RequestingActivity.RequestingDataModel(); + RequestingDataModel data = new RequestingDataModel(); data.setName(user.getName()); data.setId(user.getUid()); @@ -351,13 +351,13 @@ //Adapter public class RequestingAdapter extends RecyclerView.Adapter { - private List list; + private List list; - public RequestingAdapter(List list) { + public RequestingAdapter(List list) { this.list =list; } - public void setList(List list) { + public void setList(List list) { this.list = list; } diff --git a/app/src/main/java/com/example/nemophila/MyPageActivity.java b/app/src/main/java/com/example/nemophila/MyPageActivity.java index f90011a..d332234 100644 --- a/app/src/main/java/com/example/nemophila/MyPageActivity.java +++ b/app/src/main/java/com/example/nemophila/MyPageActivity.java @@ -66,7 +66,7 @@ Button requestingButton = (Button) findViewById(R.id.requesting); requestingButton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { - Intent intent = new Intent(MyPageActivity.this, RequestingActivity.class); + Intent intent = new Intent(MyPageActivity.this, FriendActivity.class); startActivity(intent); } }); diff --git a/app/src/main/java/com/example/nemophila/RequestingActivity.java b/app/src/main/java/com/example/nemophila/RequestingActivity.java index 69f77ad..f2a6f78 100644 --- a/app/src/main/java/com/example/nemophila/RequestingActivity.java +++ b/app/src/main/java/com/example/nemophila/RequestingActivity.java @@ -1,286 +1,286 @@ -package com.example.nemophila; - -import androidx.annotation.NonNull; -import androidx.appcompat.app.AppCompatActivity; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; -import androidx.recyclerview.widget.DividerItemDecoration; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; - -import android.app.AlertDialog; -import android.content.DialogInterface; -import android.content.Intent; -import android.os.Bundle; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.Button; -import android.widget.EditText; -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.entities.ErrorType; -import com.example.nemophila.entities.Post; -import com.example.nemophila.viewmodels.AccountViewModel; -import com.example.nemophila.viewmodels.FriendViewModel; -import com.example.nemophila.viewmodels.PostsViewModel; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; - -public class RequestingActivity extends AppCompatActivity { - - 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_requesting); - //Nemophilaから自分のuidとtokenを取得 - uid = ((Nemophila)getApplication()).getUid(); - token = ((Nemophila)getApplication()).getToken(); - - //左上のボタンでマイページへ遷移 - Button returnButton = (Button)findViewById(R.id.requestingAcReturnButton); - returnButton.setOnClickListener(new View.OnClickListener(){ - public void onClick(View v){ - Intent intent = new Intent(getApplication(), MyPageActivity.class); - startActivity(intent); - } - }); - - //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からアカウントを読み込み、検索用LiveDataのonChangeへ - 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()); - - //申請を送るダイアログ +//package com.example.nemophila; +// +//import androidx.annotation.NonNull; +//import androidx.appcompat.app.AppCompatActivity; +//import androidx.lifecycle.Observer; +//import androidx.lifecycle.ViewModelProvider; +//import androidx.recyclerview.widget.DividerItemDecoration; +//import androidx.recyclerview.widget.LinearLayoutManager; +//import androidx.recyclerview.widget.RecyclerView; +// +//import android.app.AlertDialog; +//import android.content.DialogInterface; +//import android.content.Intent; +//import android.os.Bundle; +//import android.view.LayoutInflater; +//import android.view.View; +//import android.view.ViewGroup; +//import android.widget.Button; +//import android.widget.EditText; +//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.entities.ErrorType; +//import com.example.nemophila.entities.Post; +//import com.example.nemophila.viewmodels.AccountViewModel; +//import com.example.nemophila.viewmodels.FriendViewModel; +//import com.example.nemophila.viewmodels.PostsViewModel; +// +//import java.util.ArrayList; +//import java.util.Collection; +//import java.util.List; +// +//public class RequestingActivity extends AppCompatActivity { +// +// 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_requesting); +// //Nemophilaから自分のuidとtokenを取得 +// uid = ((Nemophila)getApplication()).getUid(); +// token = ((Nemophila)getApplication()).getToken(); +// +// //左上のボタンでマイページへ遷移 +// Button returnButton = (Button)findViewById(R.id.requestingAcReturnButton); +// returnButton.setOnClickListener(new View.OnClickListener(){ +// public void onClick(View v){ +// Intent intent = new Intent(getApplication(), MyPageActivity.class); +// startActivity(intent); +// } +// }); +// +// //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からアカウントを読み込み、検索用LiveDataのonChangeへ +// 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); +// //名前を渡す +// Bundle args = new Bundle(); +// args.putString("message", requestingName); // dialog.setArguments(args); - - //ダイアログの表示 +// +// //ダイアログの表示 // dialog.show(getSupportFragmentManager(), "Requesting_dialog"); - //OK押したら申請するメソッドにuid、requestingId、tokenを渡す - } - } - }); - - //FriendViewModelの初期化 - friendViewModel = new ViewModelProvider(this).get(FriendViewModel.class); - - //エラーコードを購読 - friendViewModel.getErrorLiveData().observe(RequestingActivity.this, new Observer() { - @Override - public void onChanged(String error) { - - if (error == ErrorType.ResponseError.getText()) { - new AlertDialog.Builder(RequestingActivity.this) - .setTitle("既にフレンド、申請を受けているなどの理由で申請できません") - .setPositiveButton("OK", null) - .create() - .show(); - } - } - }); - - //RecyclerView(表示の設定、直接表示するところはLivedataを購読しているonChanged内に) - List requestingDataList = new ArrayList<>(); - - //xmlからrvにRecyclerViewを取得 - RecyclerView rv = (RecyclerView) findViewById(R.id.requestingList); - - //アダプターを宣言し、削除ボタンを押したときの処理をオーバーライド - RequestingAdapter adapter = new RequestingAdapter(requestingDataList){ - @Override - void onDeleteClick(View view, int position, 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) { - //申請先1人に必要な情報をセットするdataを宣言 - RequestingDataModel data = new RequestingDataModel(); - //dataをpostsDatasetに追加してリストを作る - data.setName(user.getName()); - data.setId(user.getUid()); - - //申請先一つの情報がdataに全部セットされたらDatasetに追加 重複していたら追加しない - if(!(requestingDataList.contains(data))) { - requestingDataList.add(0, data); - } - } - - //onChange内に書くべき表示部分 - adapter.setList(requestingDataList); - rv.setAdapter(adapter); - } - }); - } - - - //ダイアログでOKを押した時に呼び出される フレンド申請を送るメソッド - public void putRequesting(){ - requestingId = searchingId; - friendViewModel.putRequesting(uid, requestingId, requestingName, token); - } - - //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 RequestingViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - //1データあたりのレイアウトを読み込み、ビューホルダーを宣言 - View inflate = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_requesting_activity, parent,false); - RequestingViewHolder vh = new 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 RequestingViewHolder holder, int position) { - holder.nameView.setText(list.get(position).getName()); - } - - @Override - public int getItemCount() { - return list.size(); - } - - void onDeleteClick(View view, int position, 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 extends FriendActivity.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 +// //OK押したら申請するメソッドにuid、requestingId、tokenを渡す +// } +// } +// }); +// +// //FriendViewModelの初期化 +// friendViewModel = new ViewModelProvider(this).get(FriendViewModel.class); +// +// //エラーコードを購読 +// friendViewModel.getErrorLiveData().observe(RequestingActivity.this, new Observer() { +// @Override +// public void onChanged(String error) { +// +// if (error == ErrorType.ResponseError.getText()) { +// new AlertDialog.Builder(RequestingActivity.this) +// .setTitle("既にフレンド、申請を受けているなどの理由で申請できません") +// .setPositiveButton("OK", null) +// .create() +// .show(); +// } +// } +// }); +// +// //RecyclerView(表示の設定、直接表示するところはLivedataを購読しているonChanged内に) +// List requestingDataList = new ArrayList<>(); +// +// //xmlからrvにRecyclerViewを取得 +// RecyclerView rv = (RecyclerView) findViewById(R.id.requestingList); +// +// //アダプターを宣言し、削除ボタンを押したときの処理をオーバーライド +// RequestingAdapter adapter = new RequestingAdapter(requestingDataList){ +// @Override +// void onDeleteClick(View view, int position, 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) { +// //申請先1人に必要な情報をセットするdataを宣言 +// RequestingDataModel data = new RequestingDataModel(); +// //dataをpostsDatasetに追加してリストを作る +// data.setName(user.getName()); +// data.setId(user.getUid()); +// +// //申請先一つの情報がdataに全部セットされたらDatasetに追加 重複していたら追加しない +// if(!(requestingDataList.contains(data))) { +// requestingDataList.add(0, data); +// } +// } +// +// //onChange内に書くべき表示部分 +// adapter.setList(requestingDataList); +// rv.setAdapter(adapter); +// } +// }); +// } +// +// +// //ダイアログでOKを押した時に呼び出される フレンド申請を送るメソッド +// public void putRequesting(){ +// requestingId = searchingId; +// friendViewModel.putRequesting(uid, requestingId, requestingName, token); +// } +// +// //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 RequestingViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { +// //1データあたりのレイアウトを読み込み、ビューホルダーを宣言 +// View inflate = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_requesting_activity, parent,false); +// RequestingViewHolder vh = new 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 RequestingViewHolder holder, int position) { +// holder.nameView.setText(list.get(position).getName()); +// } +// +// @Override +// public int getItemCount() { +// return list.size(); +// } +// +// void onDeleteClick(View view, int position, 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 extends FriendActivity.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/res/layout/activity_friend.xml b/app/src/main/res/layout/activity_friend.xml index 9eb30db..e42699e 100644 --- a/app/src/main/res/layout/activity_friend.xml +++ b/app/src/main/res/layout/activity_friend.xml @@ -1,5 +1,6 @@ + android:visibility="invisible"/> - + android:orientation="vertical" + android:visibility="visible"> + + + android:layout_width="match_parent" + android:layout_height="0dp" + android:layout_weight="0.05" + android:text=" IDで検索してフレンド申請を送る"/> + + + + + + + + + +