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.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.TextView;
import com.example.nemophila.entities.AccountNameJson;
import com.example.nemophila.entities.Post;
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 {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_requesting);
//Nemophilaから自分のuidとtokenを取得
String uid = ((Nemophila)getApplication()).getUid();
String token = ((Nemophila)getApplication()).getToken();
String requestingId;
//左上のボタンでマイページへ遷移
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);
}
});
//フレンド検索ボタン
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);
String searchingId = editSearchId.getText().toString();
//取得したIDのユーザー名を受け取り、OKならreqyestingIdに入れる
String requestingName;
//申請を送るダイアログを表示
RequestingDialogFragment dialog = new RequestingDialogFragment();
dialog.show(getSupportFragmentManager(), "Requesting_dialog");
//OK押したら申請するメソッドにuid、requestingId、tokenを渡す
}
});
//RecyclerView(表示の設定、直接表示するところはLivedataを購読しているonChanged内にしたい)
List<RequestingDataModel> requestingDataList = new ArrayList<>();
//xmlからrvにRecyclerViewを取得、アダプターを宣言
RecyclerView rv = (RecyclerView) findViewById(R.id.requestingList);
RequestingAdapter adapter = new RequestingAdapter(requestingDataList);
//一行ずつを縦に(LinearLayout)表示するLayoutManagerを宣言
LinearLayoutManager llm = new LinearLayoutManager(this);
//データごとの区切り線を入れる
RecyclerView.ItemDecoration itemDecoration =
new DividerItemDecoration(this, DividerItemDecoration.VERTICAL);
rv.addItemDecoration(itemDecoration);
rv.setHasFixedSize(true);
rv.setLayoutManager(llm);
//ViewModelを宣言し、申請先のデータをロードしておく
FriendViewModel friendViewModel = new ViewModelProvider(this).get(FriendViewModel.class);
friendViewModel.getRequesting(uid);
//申請先の一覧のLiveDataへの購読
friendViewModel.getRequestingLiveData().observe(this, new Observer<Collection<AccountNameJson>>() {
//データに変更があった時実行
@Override
public void onChanged(Collection<AccountNameJson> requestingUsers) {
//表示用のDataListを一旦クリアし、LiveDataから受け取ったデータを一つずつセット(重複しないように)
requestingDataList.clear();
//受け取ったLivedataの要素分繰り返し、セット
for (AccountNameJson user: requestingUsers) {
//dataを宣言 dataに投稿の必要なデータをセットし、それをpostsDatasetに追加してリストを作る
RequestingDataModel data = new RequestingDataModel();
data.setName(user.getName());
//投稿一つの情報がdataに全部セットされたらDatasetに追加
requestingDataList.add(data);
}
//onChange内に書くべき表示部分
adapter.setList(requestingDataList);
rv.setAdapter(adapter);
}
});
// //表示テスト用に仮データ
// List<RequestingDataModel> testDataSet = new ArrayList<>();
// for (int i = 0; i < 15; i++) {
// RequestingDataModel data = new RequestingDataModel();
// data.setName("ネモフィラ太郎"+ i + "号(テスト)");
//
// testDataSet.add(data);
// }
// //onChange内に書くべき表示部分
// adapter.setList(testDataSet);
// rv.setAdapter(adapter);
}
//RecyclerViewのための内部クラス
//とりあえずnameのみで作成
//Adapter
public class RequestingAdapter extends RecyclerView.Adapter<RequestingViewHolder> {
private List<RequestingDataModel> list;
public RequestingAdapter(List<RequestingDataModel> list) {
this.list =list;
}
public void setList(List<RequestingDataModel> 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();
// 処理はonItemClickに
onItemClick(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 onItemClick(View view, int position, RequestingDataModel requesting) {
// このメソッドをActivity内でオーバーライドして、クリックイベントの処理を設定する
}
}
//ViewHolder
public class RequestingViewHolder extends RecyclerView.ViewHolder {
public TextView nameView;
public Button deleteButton;
public RequestingViewHolder(@NonNull View itemView) {
super(itemView);
nameView = (TextView) itemView.findViewById(R.id.requestingName);
deleteButton = itemView.findViewById(R.id.requestingDeleteButton);
}
}
//DataModel
public static class RequestingDataModel {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
}