diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml index 1adb1c2..40556a2 100644 --- a/.idea/deploymentTargetDropDown.xml +++ b/.idea/deploymentTargetDropDown.xml @@ -7,11 +7,11 @@ - + - + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 81be3c3..54ed16b 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -13,20 +13,26 @@ - - + + + + + - + + + + diff --git a/app/build.gradle b/app/build.gradle index 9204a42..1fc7e27 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -29,6 +29,7 @@ buildFeatures { viewBinding true } + namespace 'com.example.nemophila' } //repositories { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6156318..ef76412 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -28,10 +28,10 @@ android:exported="true" android:label="Map"> - - - - + + + + - - + + - - + + + android:label="@string/title_activity_requesting" + android:windowSoftInputMode="adjustPan"> + + + + - - + + - - + + diff --git a/app/src/main/java/com/example/nemophila/FriendActivity.java b/app/src/main/java/com/example/nemophila/FriendActivity.java index 8168255..02785cb 100644 --- a/app/src/main/java/com/example/nemophila/FriendActivity.java +++ b/app/src/main/java/com/example/nemophila/FriendActivity.java @@ -2,6 +2,8 @@ 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; @@ -15,7 +17,11 @@ import android.widget.ImageView; import android.widget.TextView; +import com.example.nemophila.entities.AccountNameJson; +import com.example.nemophila.viewmodels.FriendViewModel; + import java.util.ArrayList; +import java.util.Collection; import java.util.List; public class FriendActivity extends AppCompatActivity { @@ -30,6 +36,9 @@ List friendsDataset = new ArrayList<>(); // 1行分の情報を持つDataModelを格納するリスト RecyclerView rv = findViewById(R.id.friendsList); // recyclerViewを取得 adapter = new FriendActivityAdapter(friendsDataset); // adapterを取得 + FriendViewModel friendViewModel = new ViewModelProvider(this).get(FriendViewModel.class); // ViewModelを取得 + Nemophila nemophila = (Nemophila) this.getApplication(); + //一行ずつを縦に(LinearLayout)表示するLayoutManagerを宣言 LinearLayoutManager llm = new LinearLayoutManager(this); @@ -41,6 +50,27 @@ rv.setHasFixedSize(true); rv.setLayoutManager(llm); + String myUid = nemophila.getUid(); // 自身のidを取得 + 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()); + friendsDataset.add(data); + + //RecyclerViewをonChangedが呼ばれるたび表示(アダプターを更新してRecyclerViewにセット) + adapter.setList(friendsDataset); + rv.setAdapter(adapter); + } + } + }); + // マイページ画面に画面遷移する Button backButton = findViewById(R.id.backMyPage); backButton.setOnClickListener(v -> { diff --git a/app/src/main/java/com/example/nemophila/FriendActivityAdapter.java b/app/src/main/java/com/example/nemophila/FriendActivityAdapter.java deleted file mode 100644 index f4490da..0000000 --- a/app/src/main/java/com/example/nemophila/FriendActivityAdapter.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.example.nemophila; - -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; - -import java.util.List; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -public class FriendActivityAdapter extends RecyclerView.Adapter { - private List list; - - public FriendActivityAdapter(List list) { - this.list = list; - } - - public void setList(List list) { - this.list = list; - } - - @NonNull - @Override - public FriendsViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int ViewType) { - View inflate = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_friends_activity, parent,false); - FriendsViewHolder vh = new FriendsViewHolder(inflate); - return vh; - } - - @Override - public void onBindViewHolder(@NonNull FriendsViewHolder holder, int position) { - // 後からアイコンの登録をできるようにする - holder.nameView.setText(list.get(position).getName()); - } - - @Override - public int getItemCount() { - return list.size(); - } -} diff --git a/app/src/main/java/com/example/nemophila/FriendDataModel.java b/app/src/main/java/com/example/nemophila/FriendDataModel.java deleted file mode 100644 index 1eaaefc..0000000 --- a/app/src/main/java/com/example/nemophila/FriendDataModel.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.example.nemophila; - -public class FriendDataModel { - private String name; - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } -} diff --git a/app/src/main/java/com/example/nemophila/FriendsViewHolder.java b/app/src/main/java/com/example/nemophila/FriendsViewHolder.java deleted file mode 100644 index 393098a..0000000 --- a/app/src/main/java/com/example/nemophila/FriendsViewHolder.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.example.nemophila; - -import android.view.View; -import android.widget.Button; -import android.widget.ImageView; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -public class FriendsViewHolder extends RecyclerView.ViewHolder { - public ImageView iconView; - public TextView nameView; - public Button deleteButton; - - public FriendsViewHolder(@NonNull View itemView) { - super(itemView); - iconView = itemView.findViewById(R.id.friendIcon); - nameView = itemView.findViewById(R.id.friendName); - deleteButton = itemView.findViewById(R.id.friendDelete); - } -} diff --git a/app/src/main/java/com/example/nemophila/MyPageActivity.java b/app/src/main/java/com/example/nemophila/MyPageActivity.java index 3b40999..0791148 100644 --- a/app/src/main/java/com/example/nemophila/MyPageActivity.java +++ b/app/src/main/java/com/example/nemophila/MyPageActivity.java @@ -8,7 +8,9 @@ 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.TextView; @@ -83,24 +85,24 @@ } }); - /* ここからよくわかっていない */ + /* ここからあんまわかっていない */ RecyclerView rv = (RecyclerView) findViewById(R.id.postsList); LinearLayoutManager llm = new LinearLayoutManager(this); - List postsDataset = new ArrayList<>(); - MyPageActivityAdapter adapter = new MyPageActivityAdapter(postsDataset); + List MyPageActDataset = new ArrayList<>(); + MyPageActAdapter adapter = new MyPageActAdapter(MyPageActDataset); rv.setHasFixedSize(true); rv.setLayoutManager(llm); rv.setAdapter(adapter); + accountViewModel.getAccountPosts(uid); accountViewModel.getAccountPostsLiveData().observe(this, new Observer >() { @Override public void onChanged(Collection Posts) { - //postsDatasetを一旦クリアし、LiveDataから受け取ったデータを一つずつセット(重複しないように) - postsDataset.clear(); + //MyPageActDatasetを一旦クリアし、LiveDataから受け取ったデータを一つずつセット + MyPageActDataset.clear(); for (Post post: Posts){ - PostDataModel data = new PostDataModel(); - data.setName(post.getName()); + MyPageActDataModel data = new MyPageActDataModel(); data.setDate(post.getDate()); //rateはintで受け取った評価に対応した星の数のStringに変換してセット int intRate = post.getRate(); @@ -115,25 +117,101 @@ data.setRate(strRate); data.setGenre(post.getGenre()); data.setComment(post.getComment()); - - postsDataset.add(data); + MyPageActDataset.add(data); } + //RecyclerViewをonChangedが呼ばれるたび表示(アダプターを更新してRecyclerViewにセット) - adapter.setList(postsDataset); + adapter.setList(MyPageActDataset); rv.setAdapter(adapter); } }); } -// protected void onResume(Bundle savedInstanceState) { -// super.onResume(savedInstanceState); -// -// Nemophila nemophila = (Nemophila) getApplication(); -// String uid = nemophila.getUid(); -// String name = nemophila.getName(); -// TextView myName = (TextView) findViewById(R.id.name); -// myName.setText(name); -// TextView id = (TextView) findViewById(R.id.id); -// id.setText(uid); -// } + /* ここからMyPageActivityの内部クラス */ + + // Adapter + public class MyPageActAdapter extends RecyclerView.Adapter { + + private List list; + + public void setList(List list) { + this.list = list; + } + + public MyPageActAdapter(List list) { + this.list = list; + } + + @Override + public MyPageActViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View inflate = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_my_page_activity_posts, parent,false); + MyPageActViewHolder vh = new MyPageActViewHolder(inflate); + return vh; + } + + @Override + public void onBindViewHolder(MyPageActViewHolder holder, int position) { + holder.dateView.setText(list.get(position).getDate()); + holder.rateView.setText(list.get(position).getRate()); + holder.genreView.setText(list.get(position).getGenre()); + holder.commentView.setText(list.get(position).getComment()); + } + + @Override + public int getItemCount() { + return list.size(); + } + } + + // ViewHolder + public class MyPageActViewHolder extends RecyclerView.ViewHolder { + public TextView dateView; + public TextView rateView; + public TextView genreView; + public TextView commentView; + + public MyPageActViewHolder(View itemView) { + super(itemView); + dateView = (TextView) itemView.findViewById(R.id.date); + rateView = (TextView) itemView.findViewById(R.id.rate); + genreView = (TextView) itemView.findViewById(R.id.genre); + commentView = (TextView) itemView.findViewById(R.id.comment); + } + } + + // DataModel + public class MyPageActDataModel { + private String date; + private String rate; + private String genre; + private String comment; + + public String getDate() { + return date; + } + public void setDate(String date) { + this.date = date; + } + + public String getRate() { + return rate; + } + public void setRate(String rate) { + this.rate = rate; + } + + public String getGenre() { + return genre; + } + public void setGenre(String genre) { + this.genre = genre; + } + + public String getComment() { + return comment; + } + public void setComment(String comment) { + this.comment = comment; + } + } } diff --git a/app/src/main/java/com/example/nemophila/MyPageActivityAdapter.java b/app/src/main/java/com/example/nemophila/MyPageActivityAdapter.java deleted file mode 100644 index 6af5422..0000000 --- a/app/src/main/java/com/example/nemophila/MyPageActivityAdapter.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.example.nemophila; - -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; - -import androidx.recyclerview.widget.RecyclerView; - -import java.util.List; - -public class MyPageActivityAdapter extends RecyclerView.Adapter { - - private List list; - - public void setList(List list) { - this.list = list; - } - - public MyPageActivityAdapter(List list) { - this.list = list; - } - - @Override - public PostsViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - View inflate = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_my_page_activity_posts, parent,false); - PostsViewHolder vh = new PostsViewHolder(inflate); - return vh; - } - - @Override - public void onBindViewHolder(PostsViewHolder holder, int position) { - holder.dateView.setText(list.get(position).getDate()); - holder.rateView.setText(list.get(position).getRate()); - holder.genreView.setText(list.get(position).getGenre()); - holder.commentView.setText(list.get(position).getComment()); - } - - @Override - public int getItemCount() { - return list.size(); - } -} diff --git a/app/src/main/java/com/example/nemophila/PostActivity.java b/app/src/main/java/com/example/nemophila/PostActivity.java index 6282a6f..cf0b6b2 100644 --- a/app/src/main/java/com/example/nemophila/PostActivity.java +++ b/app/src/main/java/com/example/nemophila/PostActivity.java @@ -1,6 +1,7 @@ package com.example.nemophila; import androidx.appcompat.app.AppCompatActivity; +import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; import android.content.Intent; @@ -15,11 +16,17 @@ import com.example.nemophila.entities.Account; +import com.example.nemophila.entities.Post; import com.example.nemophila.entities.Shop; +import com.example.nemophila.resources.ShopsRest; import com.example.nemophila.viewmodels.PostsViewModel; import com.example.nemophila.viewmodels.ShopsViewModel; import com.google.android.material.snackbar.Snackbar; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + import retrofit2.Retrofit; @@ -53,6 +60,24 @@ postsViewModel = new ViewModelProvider(this).get(PostsViewModel.class); shopsViewModel = new ViewModelProvider(this).get(ShopsViewModel.class); +//店舗新規作成のオブザーバー + shopsViewModel.getCurrentLiveData().observe(this, new Observer() { + @Override + public void onChanged(Shop shop) { + System.out.println("店舗新規作成完了"); + postsViewModel.createPost(uid, token, shop.getSid(), rate, genre, comment, img1, img2, img3); + + System.out.println("lat" + nemophila.getCurrentLatitude() + "\nlong" + nemophila.getCurrentLongitude()); + + //投稿時にリセット + nemophila.setDummyShop(null); + nemophila.setCurrentShop(null); + + Intent intent = new Intent(getApplication(), MainActivity.class); + startActivity(intent); + } + }); + uid = nemophila.getUid(); token = nemophila.getToken(); shop = nemophila.getCurrentShop(); @@ -169,17 +194,24 @@ // startActivity(intent); } else { //評価入力済の時 - shopsViewModel.createShop(shopName, nemophila.getCurrentLongitude(), nemophila.getCurrentLatitude()); - postsViewModel.createPost(uid, token, sid, rate, genre, comment, img1, img2, img3); - //投稿時にリセット - nemophila.setDummyShop(null); - nemophila.setCurrentShop(null); + if (shop == null) { + shopsViewModel.createShop(shopName, nemophila.getCurrentLongitude(), nemophila.getCurrentLatitude()); + } else { + postsViewModel.createPost(uid, token, sid, rate, genre, comment, img1, img2, img3); + System.out.println("既存店舗に投稿"); + System.out.println("lat" + nemophila.getCurrentLatitude() + "\nlong" + nemophila.getCurrentLongitude()); - Intent intent = new Intent(getApplication(), MainActivity.class); - startActivity(intent); + //投稿時にリセット + nemophila.setDummyShop(null); + nemophila.setCurrentShop(null); + + Intent intent = new Intent(getApplication(), MainActivity.class); + startActivity(intent); + } } } + }); } } diff --git a/app/src/main/java/com/example/nemophila/PostDataModel.java b/app/src/main/java/com/example/nemophila/PostDataModel.java index 0d9f577..f4c5bc0 100644 --- a/app/src/main/java/com/example/nemophila/PostDataModel.java +++ b/app/src/main/java/com/example/nemophila/PostDataModel.java @@ -1,43 +1,43 @@ -package com.example.nemophila; - -public class PostDataModel { - private String name; - private String date; - private String rate; - private String genre; - private String comment; - - public String getName() { - return name; - } - public void setName(String name) { - this.name = name; - } - - public String getDate() { - return date;} - public void setDate(String date) { - this.date = date; - } - - public String getRate() { - return rate; - } - public void setRate(String rate) { - this.rate = rate; - } - - public String getGenre() { - return genre; - } - public void setGenre(String genre) { - this.genre = genre; - } - - public String getComment() { - return comment; - } - public void setComment(String comment) { - this.comment = comment; - } -} +//package com.example.nemophila; +// +//public class PostDataModel { +// private String name; +// private String date; +// private String rate; +// private String genre; +// private String comment; +// +// public String getName() { +// return name; +// } +// public void setName(String name) { +// this.name = name; +// } +// +// public String getDate() { +// return date;} +// public void setDate(String date) { +// this.date = date; +// } +// +// public String getRate() { +// return rate; +// } +// public void setRate(String rate) { +// this.rate = rate; +// } +// +// public String getGenre() { +// return genre; +// } +// public void setGenre(String genre) { +// this.genre = genre; +// } +// +// public String getComment() { +// return comment; +// } +// public void setComment(String comment) { +// this.comment = comment; +// } +//} diff --git a/app/src/main/java/com/example/nemophila/PostsViewHolder.java b/app/src/main/java/com/example/nemophila/PostsViewHolder.java index c1d19fd..1f618d3 100644 --- a/app/src/main/java/com/example/nemophila/PostsViewHolder.java +++ b/app/src/main/java/com/example/nemophila/PostsViewHolder.java @@ -1,24 +1,24 @@ -package com.example.nemophila; - -import android.view.View; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -public class PostsViewHolder extends RecyclerView.ViewHolder { - public TextView nameView; - public TextView dateView; - public TextView rateView; - public TextView genreView; - public TextView commentView; - - public PostsViewHolder(@NonNull View itemView) { - super(itemView); - nameView = (TextView) itemView.findViewById(R.id.userName); - dateView = (TextView) itemView.findViewById(R.id.date); - rateView = (TextView) itemView.findViewById(R.id.rate); - genreView = (TextView) itemView.findViewById(R.id.genre); - commentView = (TextView) itemView.findViewById(R.id.comment); - } -} +//package com.example.nemophila; +// +//import android.view.View; +//import android.widget.TextView; +// +//import androidx.annotation.NonNull; +//import androidx.recyclerview.widget.RecyclerView; +// +//public class PostsViewHolder extends RecyclerView.ViewHolder { +// public TextView nameView; +// public TextView dateView; +// public TextView rateView; +// public TextView genreView; +// public TextView commentView; +// +// public PostsViewHolder(@NonNull View itemView) { +// super(itemView); +// nameView = (TextView) itemView.findViewById(R.id.userName); +// dateView = (TextView) itemView.findViewById(R.id.date); +// rateView = (TextView) itemView.findViewById(R.id.rate); +// genreView = (TextView) itemView.findViewById(R.id.genre); +// commentView = (TextView) itemView.findViewById(R.id.comment); +// } +//} diff --git a/app/src/main/java/com/example/nemophila/RequestingActivity.java b/app/src/main/java/com/example/nemophila/RequestingActivity.java index 6214a8e..6adf436 100644 --- a/app/src/main/java/com/example/nemophila/RequestingActivity.java +++ b/app/src/main/java/com/example/nemophila/RequestingActivity.java @@ -1,8 +1,25 @@ package com.example.nemophila; +import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; +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.viewmodels.PostsViewModel; + +import java.util.ArrayList; +import java.util.List; public class RequestingActivity extends AppCompatActivity { @@ -10,5 +27,129 @@ 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 requestingDataSet = new ArrayList<>(); + List RequestingDataList = new ArrayList<>(); + + //xmlからrvにRecyclerViewを取得、アダプターを宣言 + RecyclerView rv = (RecyclerView) findViewById(R.id.requestingList); + RequestingActivity.RequestingAdapter adapter = new RequestingActivity.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); + + + //表示テスト用に仮データ + List 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 { + + private List list; + + public RequestingAdapter(List list) { + this.list =list; + } + + public void setList(List list) { + this.list = list; + } + + @NonNull + @Override + public RequestingActivity.RequestingViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + + View inflate = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_requesting_activity, parent,false); + RequestingActivity.RequestingViewHolder vh = new RequestingActivity.RequestingViewHolder(inflate); + return vh; + } + + @Override + public void onBindViewHolder(@NonNull RequestingActivity.RequestingViewHolder holder, int position) { + holder.nameView.setText(list.get(position).getName()); + } + + @Override + public int getItemCount() { + return list.size(); + } + } + + //ViewHolder + public class RequestingViewHolder extends RecyclerView.ViewHolder { + public TextView nameView; + + public RequestingViewHolder(@NonNull View itemView) { + super(itemView); + nameView = (TextView) itemView.findViewById(R.id.requestingName); + } + } + + //DataModel + public static class RequestingDataModel { + private String name; + + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + + } + } \ No newline at end of file diff --git a/app/src/main/java/com/example/nemophila/RequestingDialogFragment.java b/app/src/main/java/com/example/nemophila/RequestingDialogFragment.java new file mode 100644 index 0000000..03fa52f --- /dev/null +++ b/app/src/main/java/com/example/nemophila/RequestingDialogFragment.java @@ -0,0 +1,29 @@ +package com.example.nemophila; + +import android.app.Dialog; +import android.content.DialogInterface; +import android.os.Bundle; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AlertDialog; +import androidx.fragment.app.DialogFragment; + +public class RequestingDialogFragment extends DialogFragment { + + @NonNull + @Override + public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { + AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); + builder.setTitle("フレンド申請") + .setMessage("IDにあったユーザー") + .setPositiveButton("申請を送る", new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int id) { + // ボタンを押した時の処理 + } + }) + .setNegativeButton("キャンセル", null); + return builder.create(); + } + +} diff --git a/app/src/main/java/com/example/nemophila/ShopActivity.java b/app/src/main/java/com/example/nemophila/ShopActivity.java index 3b9d9bb..b99788f 100644 --- a/app/src/main/java/com/example/nemophila/ShopActivity.java +++ b/app/src/main/java/com/example/nemophila/ShopActivity.java @@ -253,7 +253,8 @@ } public String getDate() { - return date;} + return date; + } public void setDate(String date) { this.date = date; } diff --git a/app/src/main/java/com/example/nemophila/SignUpActivity.java b/app/src/main/java/com/example/nemophila/SignUpActivity.java index e1f276b..b867654 100644 --- a/app/src/main/java/com/example/nemophila/SignUpActivity.java +++ b/app/src/main/java/com/example/nemophila/SignUpActivity.java @@ -34,6 +34,14 @@ //Nemophilaと連携 nemophila = (Nemophila) this.getApplication(); + //Nemophilaにtokenとuidがある場合サインアップ画面をスキップ + if ((nemophila.getUid() != null) && (nemophila.getToken() != null)){ + Intent intent = new Intent(SignUpActivity.this,MainActivity.class); + startActivity(intent); + System.out.println("サインアップ処理をスキップ"); + return; + } + //通信の初期化 this.retrofit = new Retrofit.Builder() .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/nemophila/") diff --git a/app/src/main/java/com/example/nemophila/entities/AccountNameJson.java b/app/src/main/java/com/example/nemophila/entities/AccountNameJson.java new file mode 100644 index 0000000..2df8fc1 --- /dev/null +++ b/app/src/main/java/com/example/nemophila/entities/AccountNameJson.java @@ -0,0 +1,22 @@ +package com.example.nemophila.entities; + +public class AccountNameJson { + private String uid; + private String name; + + // Getter + public String getName() { + return name; + } + public String getUid() { + return uid; + } + + // Setter + public void setName(String name) { + this.name = name; + } + public void setUid(String uid) { + this.uid = uid; + } +} diff --git a/app/src/main/java/com/example/nemophila/resources/FriendsRest.java b/app/src/main/java/com/example/nemophila/resources/FriendsRest.java index dd66b14..52b4fbf 100644 --- a/app/src/main/java/com/example/nemophila/resources/FriendsRest.java +++ b/app/src/main/java/com/example/nemophila/resources/FriendsRest.java @@ -1,5 +1,6 @@ package com.example.nemophila.resources; +import com.example.nemophila.entities.AccountNameJson; import com.example.nemophila.entities.PostJson; import java.util.Collection; @@ -13,9 +14,8 @@ import retrofit2.http.Path; public interface FriendsRest { - @GET("accounts/{uid}/friends") - Call> getFriends( + Call> getFriends( @Path("uid") String uid ); @@ -35,7 +35,7 @@ ); @GET("/accounts/{uid}/requesting") - Call> getRequesting( + Call> getRequesting( @Path("uid") String uid ); @@ -56,7 +56,7 @@ ); @GET("accounts/{uid}/reqested") - Call> getRequested( + Call> getRequested( @Path("uid") String uid ); diff --git a/app/src/main/java/com/example/nemophila/viewmodels/AccountViewModel.java b/app/src/main/java/com/example/nemophila/viewmodels/AccountViewModel.java index b670f3a..aec3547 100644 --- a/app/src/main/java/com/example/nemophila/viewmodels/AccountViewModel.java +++ b/app/src/main/java/com/example/nemophila/viewmodels/AccountViewModel.java @@ -1,5 +1,6 @@ package com.example.nemophila.viewmodels; +import android.util.Log; import android.widget.TextView; import com.example.nemophila.R; @@ -12,6 +13,7 @@ import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.ViewModel; +import java.io.IOException; import java.util.ArrayList; import java.util.Collection; @@ -31,6 +33,7 @@ private final MutableLiveData pwLiveData; private final MutableLiveData> accountPostsLiveData; private final MutableLiveData pwErrorLiveData; + private final MutableLiveData accountLiveData; // コンストラクタ public AccountViewModel() { @@ -43,6 +46,7 @@ this.pwLiveData = new MutableLiveData<>(); this.accountPostsLiveData = new MutableLiveData<>(); this.pwErrorLiveData = new MutableLiveData<>(); + this.accountLiveData = new MutableLiveData<>(); } // ライブデータの取得(ゲッター) @@ -56,6 +60,9 @@ public MutableLiveData getPwErrorLiveData() { return pwErrorLiveData; } + public MutableLiveData getAccountLiveData() { + return accountLiveData; + } // 対象のアカウント情報の削除 public void deleteAccount(String uid, String token) { @@ -156,6 +163,47 @@ accountPostsLiveData.setValue(posts); } + //idからアカウント情報を取得するメソッド + private void fetchAccount(String id) { + Call call = accountsRest.getAccount(id); + + call.enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (response.isSuccessful()) { + Account ac = new Account(response.body()); + accountLiveData.setValue(ac); + System.out.println("success"); + } else { + System.out.println("response error"); + } + } + + @Override + public void onFailure(Call call, Throwable t) { + System.out.println("network error" + t); + } + }); + } + + //同期的にidからアカウント情報を取得するメソッド + public Account sample(String id) { + try { + Response response = accountsRest.getAccount(id).execute(); + + if (response.isSuccessful()) { + Account account = new Account(response.body()); + return account; + } else { + Log.d("message", "error" + response.code()); + } + + } catch (IOException e) { + Log.i("message", "error" + e.getMessage()); + } + return null; + } + // 対象のアカウントがした投稿の削除 public void deleteAccountPost(String sid, String uid, String pid, String token) { Call call = accountsRest.deletePost(sid, uid, pid, token); diff --git a/app/src/main/java/com/example/nemophila/viewmodels/FriendViewModel.java b/app/src/main/java/com/example/nemophila/viewmodels/FriendViewModel.java index bf32a70..2be6f58 100644 --- a/app/src/main/java/com/example/nemophila/viewmodels/FriendViewModel.java +++ b/app/src/main/java/com/example/nemophila/viewmodels/FriendViewModel.java @@ -3,7 +3,9 @@ import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.ViewModel; +import com.example.nemophila.entities.AccountNameJson; import com.example.nemophila.entities.Post; +import com.example.nemophila.entities.PostJson; import com.example.nemophila.resources.AccountsRest; import com.example.nemophila.resources.FriendsRest; @@ -20,9 +22,9 @@ private final Retrofit retrofit; private final FriendsRest friendsRest; // ライブデータ - private final MutableLiveData friendsLiveData; - private final MutableLiveData requestedLiveData; - private final MutableLiveData> requestingLiveData; + private final MutableLiveData> friendsLiveData; + private final MutableLiveData> requestedLiveData; + private final MutableLiveData> requestingLiveData; // コンストラクタ public FriendViewModel() { @@ -37,15 +39,38 @@ } // ライブデータの取得(ゲッター) - public MutableLiveData getFriendsLiveData() { + public MutableLiveData> getFriendsLiveData() { return friendsLiveData; } - public MutableLiveData getRequestedLiveData() { + public MutableLiveData> getRequestedLiveData() { return requestedLiveData; } - public MutableLiveData> getRequestingLiveData() { return requestingLiveData; } + public MutableLiveData> getRequestingLiveData() { return requestingLiveData; } - public void searchFriend(String uid,String fid, String token) { + +//フレンドの情報の取得 + public void getFriends(String uid) { + Call> call = friendsRest.getFriends(uid); + call.enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + if (response.isSuccessful()) { + System.out.println("Successful"); + Collection accountNameJson = response.body(); + friendsLiveData.setValue(accountNameJson); + + } else { + System.out.println("ResponseError"); + } + } + @Override + public void onFailure(Call> call, Throwable t) { + System.out.println(" NetworkError" + t); + } + }); + } +// + public void putFriend(String uid,String fid, String token) { Call call = friendsRest.putFriend(uid,fid,token); call.enqueue(new Callback() { @Override @@ -62,4 +87,112 @@ } }); } + // 対象のアカウントのフレンド登録情報の削除 + public void deleteFriend(String uid,String fid, String token) { + Call call = friendsRest.deleteFriend(uid,fid,token); + call.enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (response.isSuccessful()) { + System.out.println("Successful"); + } else { + System.out.println("ResponseError"); + } + } + @Override + public void onFailure(Call call, Throwable t) { + System.out.println(" NetworkError" + t); + } + }); + } + //フレンド申請を行うときの情報の取得 + public void getRequesting(String uid) { + Call> call = friendsRest.getRequesting(uid); + call.enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + if (response.isSuccessful()) { + System.out.println("Successful"); + } else { + System.out.println("ResponseError"); + } + } + @Override + public void onFailure(Call> call, Throwable t) { + System.out.println(" NetworkError" + t); + } + }); + } + + public void putRequesting(String uid,String requesting_id, String token) { + Call call = friendsRest.putRequesting(uid,requesting_id,token); + call.enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (response.isSuccessful()) { + System.out.println("Successful"); + } else { + System.out.println("ResponseError"); + } + } + @Override + public void onFailure(Call call, Throwable t) { + System.out.println(" NetworkError" + t); + } + }); + } + // 対象のアカウントのフレンド申請を行うときの情報削除 + public void deleteRequesting(String uid,String requesting_id, String token) { + Call call = friendsRest.deleteRequesting(uid,requesting_id,token); + call.enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (response.isSuccessful()) { + System.out.println("Successful"); + } else { + System.out.println("ResponseError"); + } + } + @Override + public void onFailure(Call call, Throwable t) { + System.out.println(" NetworkError" + t); + } + }); + } + //フレンド申請を行われたときの情報の取得 + public void getRequested(String uid) { + Call> call = friendsRest.getRequested(uid); + call.enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + if (response.isSuccessful()) { + System.out.println("Successful"); + } else { + System.out.println("ResponseError"); + } + } + @Override + public void onFailure(Call> call, Throwable t) { + System.out.println(" NetworkError" + t); + } + }); + } + // 対象のアカウントのフレンド申請を行われたときの情報削除 + public void deleteRequested(String uid,String fid, String token) { + Call call = friendsRest.deleteRequested(uid,fid,token); + call.enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (response.isSuccessful()) { + System.out.println("Successful"); + } else { + System.out.println("ResponseError"); + } + } + @Override + public void onFailure(Call call, Throwable t) { + System.out.println(" NetworkError" + t); + } + }); + } } diff --git a/app/src/main/res/drawable/blue_circle_button.xml b/app/src/main/res/drawable/blue_circle_button.xml new file mode 100644 index 0000000..e007807 --- /dev/null +++ b/app/src/main/res/drawable/blue_circle_button.xml @@ -0,0 +1,6 @@ + + + + diff --git a/app/src/main/res/drawable/ic_baseline_clear_24.xml b/app/src/main/res/drawable/ic_baseline_clear_24.xml new file mode 100644 index 0000000..844b6b6 --- /dev/null +++ b/app/src/main/res/drawable/ic_baseline_clear_24.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/layout/activity_requesting.xml b/app/src/main/res/layout/activity_requesting.xml index b0eb893..6dc38db 100644 --- a/app/src/main/res/layout/activity_requesting.xml +++ b/app/src/main/res/layout/activity_requesting.xml @@ -6,4 +6,98 @@ android:layout_height="match_parent" tools:context=".RequestingActivity"> + +