diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml
index e69de29..e58179e 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 c94d993..31863cb 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -17,8 +17,9 @@
-
+
+
diff --git a/app/src/main/java/com/example/nemophila/FriendActivity.java b/app/src/main/java/com/example/nemophila/FriendActivity.java
index 22a0002..0c9f2bb 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,299 +39,216 @@
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 showFriend = findViewById(R.id.showFriend);
+ Button showRequesting = findViewById(R.id.showRequesting);
+ RecyclerView friendRecyclerView = findViewById(R.id.friendsList);
+ ConstraintLayout requestingConstraintLayout = findViewById(R.id.requestingLayout);
- 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);
-
- // データ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);
- }
- });
-
-// //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");
+ showFriend.setOnClickListener(v2 -> {
+ friendRecyclerView.setVisibility(View.VISIBLE);
+ requestingConstraintLayout.setVisibility(View.INVISIBLE);
});
- // マイページ画面に画面遷移する
- Button backButton = findViewById(R.id.backMyPage);
- backButton.setOnClickListener(v -> {
- Intent intent = new Intent(getApplication(), MyPageActivity.class);
- startActivity(intent);
+ showRequesting.setOnClickListener(v3 -> {
+ friendRecyclerView.setVisibility(View.INVISIBLE);
+ requestingConstraintLayout.setVisibility(View.VISIBLE);
});
-
+
+ // 初期化
+ List friendsDataset = new ArrayList<>(); // 1行分の情報を持つDataModelを格納するリスト
+ RecyclerView rv = findViewById(R.id.friendsList); // recyclerViewを取得
+ 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);
+
+ uid = nemophila.getUid(); // 自身のidを取得
+ token = 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(uid, friend.getId(), token);
+ }
+ })
+ .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(uid); // 自身のフレンドの一覧を取得するメソッドを呼び出す
+
+ 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 = findViewById(R.id.requestingSearchButton);
+ requestingButton.setOnClickListener(new View.OnClickListener(){
+ @Override
+ public void onClick(View v){
+ //入力されたIDを取得
+ EditText editSearchId = 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) 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 = findViewById(R.id.close);
+ closeBtn.setOnClickListener(d -> finish());
}
// ----------- FriendのRecyclerView用の内部クラス ------------//
@@ -373,7 +291,6 @@
onFavoriteClick(v, position, friendData.get(position), vh.favorite);
}
});
-
return vh;
}
@@ -390,7 +307,6 @@
public int getItemCount() {
return friendData.size();
}
-
abstract void onDeleteClick(View view, int position, FriendDataModel friend);
abstract void onFavoriteClick(View view, int position, FriendDataModel friend, ImageView favorite);
}
@@ -458,7 +374,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 +391,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 +428,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/MapsDialogFragment.java b/app/src/main/java/com/example/nemophila/MapsDialogFragment.java
index f2028a4..caad4ba 100644
--- a/app/src/main/java/com/example/nemophila/MapsDialogFragment.java
+++ b/app/src/main/java/com/example/nemophila/MapsDialogFragment.java
@@ -45,8 +45,8 @@
}
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
- builder.setTitle("投稿したいお店はこの中にありますか?")
- .setPositiveButton("該当する店がありません(新規作成)", new DialogInterface.OnClickListener() {
+ builder.setTitle("周囲の店舗情報")
+ .setPositiveButton("新規作成", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
//このボタンを押した時の処理を書きます。
//新規投稿画面へ遷移
diff --git a/app/src/main/java/com/example/nemophila/PostActivity.java b/app/src/main/java/com/example/nemophila/PostActivity.java
index 36f7a4b..69db41e 100644
--- a/app/src/main/java/com/example/nemophila/PostActivity.java
+++ b/app/src/main/java/com/example/nemophila/PostActivity.java
@@ -2,38 +2,33 @@
import androidx.activity.result.ActivityResultCallback;
import androidx.activity.result.ActivityResultLauncher;
-import androidx.activity.result.contract.ActivityResultContract;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider;
-import android.app.Activity;
import android.content.Intent;
-import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
-import android.provider.MediaStore;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
+import android.widget.ImageButton;
+import android.widget.ImageView;
import android.widget.Spinner;
import android.widget.TextView;
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.io.IOException;
-import java.util.Collection;
-import java.util.Collections;
+import java.nio.charset.StandardCharsets;
+import java.util.Base64;
import java.util.List;
import retrofit2.Retrofit;
@@ -48,24 +43,50 @@
private String comment;
private String token;
private String sid;
- private String img1 = null;
- private String img2 = null;
- private String img3 = null;
+ private String[] img;
private String shopName;
+ private ImageButton[] deleteButtons;
+ private ImageView[] postImages;
+ private List uriLists;
private PostsViewModel postsViewModel;
private ShopsViewModel shopsViewModel;
- private Account account;
- private Retrofit retrofit;
private Nemophila nemophila;
- private ActivityResultLauncher launcher = registerForActivityResult(new ActivityResultContracts.GetContent(),
- new ActivityResultCallback() {
- @Override
- public void onActivityResult(Uri result) {
+ //画像挿入
+ private ActivityResultLauncher launcher = registerForActivityResult(new ActivityResultContracts.OpenMultipleDocuments(), new ActivityResultCallback>() {
+ @Override
+ public void onActivityResult(List uriList) {
+ uriLists = uriList;
- }
- });
+ postImages[0] = findViewById(R.id.imageView1);
+ postImages[1] = findViewById(R.id.imageView2);
+ postImages[2] = findViewById(R.id.imageView3);
+
+ System.out.println(uriLists.get(0));
+
+// for (int i = 0; i () {
@Override
public void onChanged(Shop shop) {
System.out.println("店舗新規作成完了");
- postsViewModel.createPost(uid, token, shop.getSid(), rate, genre, comment, img1, img2, img3);
+ postsViewModel.createPost(uid, token, shop.getSid(), rate, genre, comment, img[0], img[1], img[2]);
System.out.println("lat" + nemophila.getCurrentLatitude() + "\nlong" + nemophila.getCurrentLongitude());
@@ -220,12 +245,70 @@
selectPictureButton.setOnClickListener(new View.OnClickListener(){
public void onClick(View v) {
// 画像選択(3枚)
- launcher.launch("image/*");
+ launcher.launch(new String[]{"image/*"});
}
});
+// 写真の削除ボタン
+ deleteButtons[0]= (ImageButton) findViewById(R.id.deleteButton1);
+ deleteButtons[1]= (ImageButton) findViewById(R.id.deleteButton2);
+ deleteButtons[2]= (ImageButton) findViewById(R.id.deleteButton3);
+
+ deleteButtons[0].setVisibility(View.INVISIBLE);
+ deleteButtons[1].setVisibility(View.INVISIBLE);
+ deleteButtons[2].setVisibility(View.INVISIBLE);
+
+ deleteButtons[0].setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ postImages[0].setImageURI(null);
+ uriLists.set(0, null);
+// uriLists.remove(1);
+ System.out.println("削除ボタン1");
+ for (int i = 0; i < postImages.length-1; i++){
+ postImages[i].setImageURI(uriLists.get(i+1));
+// postImages[i].setImageURI(uriList.get(i));
+ postImages[i+1].setImageURI(null);
+// uriLists.remove(i);
+ uriLists.set(i+1, null);
+// postImages[i+1] = null;
+ System.out.println(uriLists.get(i));
+ if (uriLists.get(i) == null){
+ deleteButtons[i].setVisibility(View.INVISIBLE);
+ }
+ }
+ }
+ });
+
+ deleteButtons[1].setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ postImages[1].setImageURI(null);
+ uriLists.set(1, null);
+// postImages[1] = null;
+ System.out.println("削除ボタン2");
+ for (int i = 1; i < postImages.length-1; i++){
+ postImages[i].setImageURI(uriLists.get(i+1));
+ postImages[i+1].setImageURI(null);
+// postImages[i+1] = null;
+ if (uriLists.get(i)==null){
+ deleteButtons[i].setVisibility(View.INVISIBLE);
+ }
+ }
+ }
+ });
+
+ deleteButtons[2].setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ postImages[2].setImageURI(null);
+
+ System.out.println("削除ボタン3");
+ deleteButtons[2].setVisibility(View.INVISIBLE);
+ }
+ });
//投稿ボタンの処理
Button postButton = (Button)findViewById(R.id.postButton);
@@ -246,7 +329,7 @@
if (shop == null) {
shopsViewModel.createShop(shopName, nemophila.getCurrentLongitude(), nemophila.getCurrentLatitude());
} else {
- postsViewModel.createPost(uid, token, sid, rate, genre, comment, img1, img2, img3);
+ postsViewModel.createPost(uid, token, sid, rate, genre, comment, img[0], img[1], img[2]);
System.out.println("既存店舗に投稿");
System.out.println("lat" + nemophila.getCurrentLatitude() + "\nlong" + nemophila.getCurrentLongitude());
diff --git a/app/src/main/java/com/example/nemophila/RequestingActivity.java b/app/src/main/java/com/example/nemophila/RequestingActivity.java
index 94df1eb..69f77ad 100644
--- a/app/src/main/java/com/example/nemophila/RequestingActivity.java
+++ b/app/src/main/java/com/example/nemophila/RequestingActivity.java
@@ -23,6 +23,7 @@
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;
@@ -64,48 +65,64 @@
//フレンド検索ボタン
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からアカウントを読み込んでおく
+ //取得した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);
- dialog.setArguments(args);
-
- //ダイアログの表示
- dialog.show(getSupportFragmentManager(), "Requesting_dialog");
- //OK押したら申請するメソッドにuid、requestingId、tokenを渡す
- }
- }
- });
}
-
-
});
+ //検索用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を渡す
+ }
+ }
+ });
+
+ //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<>();
@@ -156,13 +173,16 @@
requestingDataList.clear();
//受け取ったLivedataの要素分繰り返し、セット
for (AccountNameJson user: requestingUsers) {
- //dataを宣言 dataに投稿の必要なデータをセットし、それをpostsDatasetに追加してリストを作る
+ //申請先1人に必要な情報をセットするdataを宣言
RequestingDataModel data = new RequestingDataModel();
+ //dataをpostsDatasetに追加してリストを作る
data.setName(user.getName());
data.setId(user.getUid());
- //投稿一つの情報がdataに全部セットされたらDatasetに追加
- requestingDataList.add(data);
+ //申請先一つの情報がdataに全部セットされたらDatasetに追加 重複していたら追加しない
+ if(!(requestingDataList.contains(data))) {
+ requestingDataList.add(0, data);
+ }
}
//onChange内に書くべき表示部分
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/java/com/example/nemophila/ShopActivity.java b/app/src/main/java/com/example/nemophila/ShopActivity.java
index 0c88111..d02d414 100644
--- a/app/src/main/java/com/example/nemophila/ShopActivity.java
+++ b/app/src/main/java/com/example/nemophila/ShopActivity.java
@@ -30,7 +30,6 @@
import java.util.List;
public class ShopActivity extends AppCompatActivity {
- Nemophila nemophila;
private ShopAcAdapter adapter = null;
@Override
@@ -41,6 +40,7 @@
Shop shop;
String shopName;
String sid;
+ String myUid = ((Nemophila)getApplication()).getUid();
//NemophilaからcurrentShopを取得、店名の表示
shop = ((Nemophila)getApplication()).getCurrentShop();
@@ -78,7 +78,7 @@
RecyclerView rv = (RecyclerView) findViewById(R.id.postsList);
adapter = new ShopAcAdapter(postsDataset);
- //一行ずつを縦に(LinearLayout)表示するLayoutManagerを宣言
+ //一行ずつを縦に(LinearLayout)表示するLayoutManagerを宣言 第三引数のtrueで降順に表示
LinearLayoutManager llm = new LinearLayoutManager(this);
//
RecyclerView.ItemDecoration itemDecoration =
@@ -114,7 +114,7 @@
//postsDatasetを一旦クリアし、LiveDataから受け取ったデータを一つずつセット(重複しないように)
postsDataset.clear();
- int friendFrag;
+ int postViewFrag;
for (Post post: ShopPosts){
//dataを宣言 dataに投稿の必要なデータをセットし、それをpostsDatasetに追加してリストを作る
@@ -124,16 +124,20 @@
String uid = post.getUid();
String name = post.getName();
- //投稿がフレンドのものかチェック
- friendFrag = 0;
- for(AccountNameJson friendNJ: friends){
- if(uid.equals(friendNJ.getUid())){
- friendFrag = 1;
+ //投稿が自分もしくはフレンドのものかチェック
+ postViewFrag = 0;
+ if(uid.equals(myUid)) {
+ postViewFrag = 1;
+ }else {
+ for (AccountNameJson friendNJ : friends) {
+ if (uid.equals(friendNJ.getUid())) {
+ postViewFrag = 1;
+ }
}
}
- //フレンドの投稿のみdataにセット
- if(friendFrag == 1) {
+ //表示する投稿のみdataにセット
+ if(postViewFrag == 1) {
// if(friends.contains(uid)){
//選択が何もない場合は全ての投稿を、選択がある場合は一致する投稿をdataにセット
if (selectingGenre.isEmpty() || selectingGenre.contains(genre)) {
@@ -155,7 +159,7 @@
data.setComment(post.getComment());
//投稿一つの情報がdataに全部セットされたらDatasetに追加
- postsDataset.add(data);
+ postsDataset.add(0, data);
}
}
}
diff --git a/app/src/main/java/com/example/nemophila/TestActivity.java b/app/src/main/java/com/example/nemophila/TestActivity.java
index 3ff993a..c9734de 100644
--- a/app/src/main/java/com/example/nemophila/TestActivity.java
+++ b/app/src/main/java/com/example/nemophila/TestActivity.java
@@ -3,12 +3,15 @@
import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.ViewModelProvider;
+import android.content.Intent;
+import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
+import android.widget.ImageView;
import android.widget.Spinner;
import com.example.nemophila.viewmodels.AccountViewModel;
@@ -16,6 +19,8 @@
import com.example.nemophila.viewmodels.PostsViewModel;
import com.example.nemophila.viewmodels.ShopsViewModel;
+import java.util.Base64;
+
public class TestActivity extends AppCompatActivity {
int position;
@@ -62,7 +67,13 @@
// shopsViewModel.start(500, nemophila);
break;
case 1:
- accountViewModel.getAccountPosts("1111");
+ //accountViewModel.getAccountPosts("1111");
+ Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
+ String s = "Y29udGVudDovL2NvbS5hbmRyb2lkLnByb3ZpZGVycy5tZWRpYS5kb2N1bWVudHMvZG9jdW1lbnQvaW1hZ2UlM0EzNA==";
+ s = new String(Base64.getDecoder().decode(s));
+ Uri uri = Uri.parse(s);
+ ImageView imageView = findViewById(R.id.imageView4);
+ imageView.setImageURI(uri);
break;
case 2:
postsViewModel.createPost("1114", "dbfd3740-8dcc-4b9c-b3b0-42c908da1c65", "151347fa-2c90-44d7-ba48-f23f475b910d", 1,
diff --git a/app/src/main/java/com/example/nemophila/entities/ErrorType.java b/app/src/main/java/com/example/nemophila/entities/ErrorType.java
new file mode 100644
index 0000000..4ab24d7
--- /dev/null
+++ b/app/src/main/java/com/example/nemophila/entities/ErrorType.java
@@ -0,0 +1,19 @@
+package com.example.nemophila.entities;
+
+public enum ErrorType {
+ ResponseError("レスポンスエラー"),
+ NetworkError("ネットワークエラー"),
+ InvalidToken("トークンが不一致"),
+ UnknownError("不明なエラー"),
+ ResponseNoyFound("リソースが見つかりません");
+
+ private final String text;
+
+ ErrorType(String text) {
+ this.text = text;
+ }
+
+ public String getText() {
+ return text;
+ }
+}
diff --git a/app/src/main/java/com/example/nemophila/entities/Shop.java b/app/src/main/java/com/example/nemophila/entities/Shop.java
index 13522f2..be24255 100644
--- a/app/src/main/java/com/example/nemophila/entities/Shop.java
+++ b/app/src/main/java/com/example/nemophila/entities/Shop.java
@@ -7,6 +7,8 @@
private String name;
private double longitude;
private double latitude;
+ private ArrayList genreSet;
+ private ArrayList userIdSet;
//Getter
public String getSid() {
@@ -21,6 +23,12 @@
public double getLatitude() {
return latitude;
}
+ public ArrayList getGenreSet() {
+ return genreSet;
+ }
+ public ArrayList getUserIdSet() {
+ return userIdSet;
+ }
//Setter
public void setSid(String id) {
@@ -35,6 +43,12 @@
public void setLatitude(double latitude) {
this.latitude = latitude;
}
+ public void setGenreSet(ArrayList genreSet) {
+ this.genreSet = genreSet;
+ }
+ public void setUserIdSet(ArrayList userIdSet) {
+ this.userIdSet = userIdSet;
+ }
@Override
public boolean equals(Object other) {
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 300fbe7..207f837 100644
--- a/app/src/main/java/com/example/nemophila/viewmodels/AccountViewModel.java
+++ b/app/src/main/java/com/example/nemophila/viewmodels/AccountViewModel.java
@@ -7,6 +7,7 @@
import com.example.nemophila.entities.Account;
import com.example.nemophila.entities.AccountJson;
import com.example.nemophila.entities.AccountNameJson;
+import com.example.nemophila.entities.ErrorType;
import com.example.nemophila.entities.Post;
import com.example.nemophila.entities.PostJson;
import com.example.nemophila.resources.AccountsRest;
@@ -35,6 +36,7 @@
private final MutableLiveData> accountPostsLiveData;
private final MutableLiveData pwErrorLiveData;
private final MutableLiveData accountLiveData;
+ private final MutableLiveData errorLiveData;
// コンストラクタ
public AccountViewModel() {
@@ -48,6 +50,7 @@
this.accountPostsLiveData = new MutableLiveData<>();
this.pwErrorLiveData = new MutableLiveData<>();
this.accountLiveData = new MutableLiveData<>();
+ this.errorLiveData = new MutableLiveData<>();
}
// ライブデータの取得(ゲッター)
@@ -64,6 +67,9 @@
public MutableLiveData getAccountLiveData() {
return accountLiveData;
}
+ public MutableLiveData getErrorLiveData() {
+ return errorLiveData;
+ }
// 対象のアカウント情報の削除
public void deleteAccount(String uid, String token) {
@@ -242,4 +248,17 @@
}
accountPostsLiveData.setValue(preData);
}
+
+ private String parseStatusCode(Integer stats) {
+ switch (stats) {
+ case 404:
+ return ErrorType.ResponseNoyFound.getText();
+ case 401:
+ return ErrorType.InvalidToken.getText();
+ case 400:
+ return ErrorType.ResponseError.getText();
+ default:
+ return ErrorType.UnknownError.getText();
+ }
+ }
}
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 83c6596..8f3dc95 100644
--- a/app/src/main/java/com/example/nemophila/viewmodels/FriendViewModel.java
+++ b/app/src/main/java/com/example/nemophila/viewmodels/FriendViewModel.java
@@ -4,6 +4,7 @@
import androidx.lifecycle.ViewModel;
import com.example.nemophila.entities.AccountNameJson;
+import com.example.nemophila.entities.ErrorType;
import com.example.nemophila.entities.Post;
import com.example.nemophila.entities.PostJson;
import com.example.nemophila.resources.AccountsRest;
@@ -26,6 +27,7 @@
private final MutableLiveData> friendsLiveData;
private final MutableLiveData> requestedLiveData;
private final MutableLiveData> requestingLiveData;
+ private final MutableLiveData errorLiveData;
// コンストラクタ
public FriendViewModel() {
@@ -37,6 +39,7 @@
this.friendsLiveData = new MutableLiveData<>();
this.requestedLiveData = new MutableLiveData<>();
this.requestingLiveData = new MutableLiveData<>();
+ this.errorLiveData = new MutableLiveData<>();
}
// ライブデータの取得(ゲッター)
@@ -47,6 +50,9 @@
return requestedLiveData;
}
public MutableLiveData> getRequestingLiveData() { return requestingLiveData; }
+ public MutableLiveData getErrorLiveData() {
+ return errorLiveData;
+ }
//フレンドの情報の取得
@@ -60,11 +66,13 @@
friendsLiveData.setValue(response.body());
} else {
System.out.println("ResponseError: " + response.code());
+ errorLiveData.setValue(parseStatusCode(response.code()));
}
}
@Override
public void onFailure(Call> call, Throwable t) {
System.out.println(" NetworkError: " + t);
+ errorLiveData.setValue(ErrorType.NetworkError.getText());
}
});
}
@@ -79,11 +87,13 @@
System.out.println("Successful");
} else {
System.out.println("ResponseError: " + response.code());
+ errorLiveData.setValue(parseStatusCode(response.code()));
}
}
@Override
public void onFailure(Call call, Throwable t) {
System.out.println(" NetworkError: " + t);
+ errorLiveData.setValue(ErrorType.NetworkError.getText());
}
});
}
@@ -98,11 +108,13 @@
System.out.println("Successful");
} else {
System.out.println("ResponseError: " + response.code());
+ errorLiveData.setValue(parseStatusCode(response.code()));
}
}
@Override
public void onFailure(Call call, Throwable t) {
System.out.println(" NetworkError: " + t);
+ errorLiveData.setValue(ErrorType.NetworkError.getText());
}
});
}
@@ -117,11 +129,13 @@
System.out.println("Successful");
} else {
System.out.println("ResponseError: " + response.code());
+ errorLiveData.setValue(parseStatusCode(response.code()));
}
}
@Override
public void onFailure(Call> call, Throwable t) {
System.out.println(" NetworkError: " + t);
+ errorLiveData.setValue(ErrorType.NetworkError.getText());
}
});
}
@@ -136,11 +150,13 @@
addRequestingLiveData(requesting_id, name);
} else {
System.out.println("ResponseError: " + response.code());
+ errorLiveData.setValue(parseStatusCode(response.code()));
}
}
@Override
public void onFailure(Call call, Throwable t) {
System.out.println(" NetworkError: " + t);
+ errorLiveData.setValue(ErrorType.NetworkError.getText());
}
});
}
@@ -155,11 +171,13 @@
System.out.println("Successful Delete");
} else {
System.out.println("ResponseError: " + response.code());
+ errorLiveData.setValue(parseStatusCode(response.code()));
}
}
@Override
public void onFailure(Call call, Throwable t) {
System.out.println(" NetworkError: " + t);
+ errorLiveData.setValue(ErrorType.NetworkError.getText());
}
});
}
@@ -175,11 +193,13 @@
requestedLiveData.setValue(accountNameJson);
} else {
System.out.println("ResponseError: " + response.code());
+ errorLiveData.setValue(parseStatusCode(response.code()));
}
}
@Override
public void onFailure(Call> call, Throwable t) {
System.out.println(" NetworkError: " + t);
+ errorLiveData.setValue(ErrorType.NetworkError.getText());
}
});
}
@@ -194,11 +214,13 @@
removeRequestedLiveData(fid);
} else {
System.out.println("ResponseError: " + response.code());
+ errorLiveData.setValue(parseStatusCode(response.code()));
}
}
@Override
public void onFailure(Call call, Throwable t) {
System.out.println(" NetworkError: " + t);
+ errorLiveData.setValue(ErrorType.NetworkError.getText());
}
});
}
@@ -216,7 +238,7 @@
preData.add(anj);
}
preData.add(createAccountNameJson(uid, name));
- requestedLiveData.setValue(preData);
+ requestingLiveData.setValue(preData);
}
private void removeFriendLiveData(String id) {
@@ -251,4 +273,17 @@
}
requestedLiveData.setValue(preData);
}
+
+ private String parseStatusCode(Integer stats) {
+ switch (stats) {
+ case 404:
+ return ErrorType.ResponseNoyFound.getText();
+ case 401:
+ return ErrorType.InvalidToken.getText();
+ case 400:
+ return ErrorType.ResponseError.getText();
+ default:
+ return ErrorType.UnknownError.getText();
+ }
+ }
}
diff --git a/app/src/main/java/com/example/nemophila/viewmodels/PostsViewModel.java b/app/src/main/java/com/example/nemophila/viewmodels/PostsViewModel.java
index 2985f6a..9229454 100644
--- a/app/src/main/java/com/example/nemophila/viewmodels/PostsViewModel.java
+++ b/app/src/main/java/com/example/nemophila/viewmodels/PostsViewModel.java
@@ -4,6 +4,7 @@
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;
+import com.example.nemophila.entities.ErrorType;
import com.example.nemophila.entities.Post;
import com.example.nemophila.entities.PostJson;
import com.example.nemophila.resources.PostsRest;
@@ -26,6 +27,7 @@
//LiveData
final private MutableLiveData> accountPostsLiveData;
final private MutableLiveData> shopPostsLiveData;
+ private final MutableLiveData errorLiveData;
//コンストラクタ
public PostsViewModel() {
@@ -36,6 +38,7 @@
.addConverterFactory(JacksonConverterFactory.create())
.build();
this.postsRest = retrofit.create(PostsRest.class);
+ this.errorLiveData = new MutableLiveData<>();
}
//getter
@@ -45,6 +48,9 @@
public LiveData> getShopPostLiveData() {
return this.shopPostsLiveData;
}
+ public MutableLiveData getErrorLiveData() {
+ return errorLiveData;
+ }
//AccountのpostJsonを取得
@@ -57,12 +63,14 @@
setAccountPostLiveData(response.body());
} else {
System.out.println("AccountPosts ResponseError");
+ errorLiveData.setValue(parseStatusCode(response.code()));
}
}
@Override
public void onFailure(Call> call, Throwable t) {
System.out.println("AccountPosts NetWorkError: " + t);
+ errorLiveData.setValue(ErrorType.NetworkError.getText());
}
});
}
@@ -88,12 +96,14 @@
setShopPostLiveData(postJson);
} else {
System.out.println("ShopPosts ResponseError");
+ errorLiveData.setValue(parseStatusCode(response.code()));
}
}
@Override
public void onFailure(Call> call, Throwable t) {
System.out.println("ShopPosts NetWorkError: " + t);
+ errorLiveData.setValue(ErrorType.NetworkError.getText());
}
});
}
@@ -120,12 +130,14 @@
System.out.println("Success CreatePost" + response.body());
} else {
System.out.println("CreatePosts ResponseError");
+ errorLiveData.setValue(parseStatusCode(response.code()));
}
}
@Override
public void onFailure(Call call, Throwable t) {
System.out.println("CreatePosts NetWorkError: " + t);
+ errorLiveData.setValue(ErrorType.NetworkError.getText());
}
});
}
@@ -137,4 +149,17 @@
}
return ids;
}
+
+ private String parseStatusCode(Integer stats) {
+ switch (stats) {
+ case 404:
+ return ErrorType.ResponseNoyFound.getText();
+ case 401:
+ return ErrorType.InvalidToken.getText();
+ case 400:
+ return ErrorType.ResponseError.getText();
+ default:
+ return ErrorType.UnknownError.getText();
+ }
+ }
}
diff --git a/app/src/main/java/com/example/nemophila/viewmodels/ShopsViewModel.java b/app/src/main/java/com/example/nemophila/viewmodels/ShopsViewModel.java
index 148afaf..e5e8b46 100644
--- a/app/src/main/java/com/example/nemophila/viewmodels/ShopsViewModel.java
+++ b/app/src/main/java/com/example/nemophila/viewmodels/ShopsViewModel.java
@@ -4,6 +4,7 @@
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;
+import com.example.nemophila.entities.ErrorType;
import com.example.nemophila.entities.Shop;
import com.example.nemophila.resources.ShopsRest;
import com.google.android.gms.maps.model.Marker;
@@ -37,6 +38,7 @@
final private MutableLiveData> shopsLiveData;
final private MutableLiveData> nearShopsLiveData;
final private MutableLiveData currentShopLiveData;
+ private final MutableLiveData errorLiveData;
// コンストラクタ
public ShopsViewModel() {
@@ -49,6 +51,7 @@
.build();
this.shopsRest = retrofit.create(ShopsRest.class);
this.ShopToMarker = new HashMap<>();
+ this.errorLiveData = new MutableLiveData<>();
}
// ライブデータを返す
@@ -59,6 +62,9 @@
public LiveData getCurrentLiveData() {
return this.currentShopLiveData;
}
+ public MutableLiveData getErrorLiveData() {
+ return errorLiveData;
+ }
// ShopToMarkerに新しく店と地図上のピンを紐づける
public void setShopAndMarker(Shop shop, Marker marker) {
@@ -177,4 +183,17 @@
}
});
}
+
+ private String parseStatusCode(Integer stats) {
+ switch (stats) {
+ case 404:
+ return ErrorType.ResponseNoyFound.getText();
+ case 401:
+ return ErrorType.InvalidToken.getText();
+ case 400:
+ return ErrorType.ResponseError.getText();
+ default:
+ return ErrorType.UnknownError.getText();
+ }
+ }
}
diff --git a/app/src/main/res/layout/activity_friend.xml b/app/src/main/res/layout/activity_friend.xml
index c8ed16a..9eb30db 100644
--- a/app/src/main/res/layout/activity_friend.xml
+++ b/app/src/main/res/layout/activity_friend.xml
@@ -1,59 +1,137 @@
+ android:layout_weight="0.1"
+ android:orientation="horizontal">
+
+
-
-
-
-
+ android:layout_weight="0.48"
+ android:backgroundTint="#CFD8DC"/>
+ android:layout_height="match_parent"
+ android:layout_weight="0.48"
+ android:backgroundTint="#CFD8DC"/>
-
+ android:layout_weight="0.02"/>
-
+ android:layout_weight="0.8">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_mypage.xml b/app/src/main/res/layout/activity_mypage.xml
index 5ba4e04..666129e 100644
--- a/app/src/main/res/layout/activity_mypage.xml
+++ b/app/src/main/res/layout/activity_mypage.xml
@@ -117,6 +117,22 @@
app:layout_constraintTop_toBottomOf="@+id/requesting"
app:layout_constraintVertical_bias="0" />
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
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/activity_test.xml b/app/src/main/res/layout/activity_test.xml
index 6dc8dde..c119366 100644
--- a/app/src/main/res/layout/activity_test.xml
+++ b/app/src/main/res/layout/activity_test.xml
@@ -26,4 +26,14 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.149" />
+
+
\ 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
deleted file mode 100644
index afe04fd..0000000
--- a/app/src/main/res/layout/layout_friend_dialog.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/layout_my_page_activity_posts.xml b/app/src/main/res/layout/layout_my_page_activity_posts.xml
index 769dde2..f682c29 100644
--- a/app/src/main/res/layout/layout_my_page_activity_posts.xml
+++ b/app/src/main/res/layout/layout_my_page_activity_posts.xml
@@ -8,12 +8,6 @@
android:layout_marginBottom="10dp"
android:orientation="vertical">
-
-
@@ -92,4 +86,15 @@
android:hint="No Comment"
android:textSize="20sp" />
+
+
+
+
\ No newline at end of file