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);
@@ -143,47 +145,45 @@
public void onClick(View v){
//入力されたIDを取得
EditText editSearchId = findViewById(R.id.inputRequestingId);
- String searchingId = editSearchId.getText().toString();
+ 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,12 +232,12 @@
//受け取った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());
//投稿一つの情報がdataに全部セットされたらDatasetに追加
- requestingDataList.add(data);
+ requestingDataList.add(0, data);
}
//onChange内に書くべき表示部分
@@ -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/MapsActivity.java b/app/src/main/java/com/example/nemophila/MapsActivity.java
index 1256256..0702432 100644
--- a/app/src/main/java/com/example/nemophila/MapsActivity.java
+++ b/app/src/main/java/com/example/nemophila/MapsActivity.java
@@ -7,6 +7,8 @@
import androidx.appcompat.widget.Toolbar;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.fragment.app.DialogFragment;
+import androidx.lifecycle.Observer;
+import androidx.lifecycle.ViewModelProvider;
import androidx.navigation.NavController;
import androidx.navigation.fragment.NavHostFragment;
import androidx.navigation.ui.AppBarConfiguration;
@@ -30,28 +32,42 @@
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.Shop;
+import com.example.nemophila.viewmodels.FriendViewModel;
+import com.example.nemophila.viewmodels.ShopsViewModel;
+import com.google.android.gms.maps.model.Marker;
import com.google.android.material.navigation.NavigationView;
import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
import java.util.List;
public class MapsActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
Nemophila nemophila;
+ ShopsViewModel shopsViewModel;
+ FriendViewModel friendViewModel;
DialogFragment filterDialog;
private Handler handler;
+ //private HashMap NameToId;
+
// フィルターのリスト用
ArrayList listData;
ListView list;
boolean isGenre;
String genreData[];
- String friendsData[];
+ ArrayList friendsData;
@Override
protected void onCreate(Bundle savedInstanceState) {
+ shopsViewModel = new ViewModelProvider(this).get(ShopsViewModel.class);
+ friendViewModel = new ViewModelProvider(this).get(FriendViewModel.class);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
@@ -115,19 +131,28 @@
});
// サイドメニューのフィルターのリストの準備
- genreData = new String[5];
- friendsData = new String[5];
- genreData[0] = "和食";
- genreData[1] = "中華";
- genreData[2] = "イタリアン";
- genreData[3] = "洋食";
- genreData[4] = "ジャンクフード";
+ genreData = new String[]{"中華", "和食", "イタリアン", "フレンチ", "カフェ", "バー", "居酒屋", "ラーメン", "うどん・そば", "その他 海外料理"};
+ friendsData = new ArrayList<>();
+ //NameToId = new HashMap<>();
- friendsData[0] = "iyo";
- friendsData[1] = "iyo2";
- friendsData[2] = "superiyo";
- friendsData[3] = "perfectiyo";
- friendsData[4] = "finaliyo";
+// friendsData[0] = "iyo";
+// friendsData[1] = "iyo2";
+// friendsData[2] = "superiyo";
+// friendsData[3] = "perfectiyo";
+// friendsData[4] = "finaliyo";
+
+ //フレンド一覧を取得
+ friendViewModel.getFriends(nemophila.getUid());
+ friendViewModel.getFriendsLiveData().observe(this, new Observer>() {
+ @Override
+ public void onChanged(Collection friends) {
+ for (AccountNameJson friend : friends) {
+ friendsData.add(friend.getUid());
+ //NameToId.put(friend.getName(), friend.getUid());
+ }
+ }
+ });
+
listData = new ArrayList<>();
list = findViewById(R.id.drawer_list);
@@ -186,6 +211,8 @@
public void prepareGenreList(String s){
+ //sは検索欄に入力された文字列
+
// 現在表示されているリストがジャンルのリストかどうかを設定
isGenre = true;
@@ -215,20 +242,26 @@
}
public void prepareFriendList(String s){
+ //sは検索欄に入力された文字列
+
// 現在表示されているリストがジャンルのリストかどうかを設定
isGenre = false;
// 一度リストのデータを取り除いてから追加する
listData.clear();
- for(int i = 0; i < friendsData.length; i++){
+
+ for (AccountNameJson friend : nemophila.getFriends()) {
if(s == null) {
FilterDataModel fd = new FilterDataModel();
- fd.setText(friendsData[i]);
+ fd.setText(friend.getUid());
+ fd.setNameText(friend.getName());
listData.add(fd);
} else {
- if(friendsData[i].contains(s)){
+ //検索にヒットしたフレンドのみのリストにする
+ if(friend.getName().contains(s)){
FilterDataModel fd = new FilterDataModel();
- fd.setText(friendsData[i]);
+ fd.setText(friend.getUid());
+ fd.setNameText(friend.getName());
listData.add(fd);
}
}
@@ -260,23 +293,38 @@
// 画面外に行ったときにチェックがずれないようにする
@Override
public View getView(int position, View convertView, ViewGroup parent) {
- FilterDataModel item = (FilterDataModel) getItem(position);
- if (convertView == null) {
- convertView = layoutInflater.inflate(R.layout.filter_item, null);
- }
+ CheckBox checkBox;
- TextView textView = convertView.findViewById(R.id.filter_text);
- textView.setText(item.text);
- CheckBox checkBox = convertView.findViewById(R.id.filter_checkbox);
- checkBox.setOnCheckedChangeListener(null);
- //チェック済みの項目をチェックにしておく
if(isGenre) {
+ FilterDataModel item = (FilterDataModel) getItem(position);
+ if (convertView == null) {
+ convertView = layoutInflater.inflate(R.layout.filter_item, null);
+ }
+
+ TextView textView = convertView.findViewById(R.id.filter_text);
+ textView.setText(item.text);
+ checkBox = convertView.findViewById(R.id.filter_checkbox);
+ checkBox.setOnCheckedChangeListener(null);
+ //チェック済みの項目をチェックにしておく
checkBox.setChecked(nemophila.getSelectGenres().contains(item.getText()));
} else {
+ FilterDataModel item = (FilterDataModel) getItem(position);
+ if (convertView == null) {
+ convertView = layoutInflater.inflate(R.layout.filter_friend_item, null);
+ }
+
+ TextView textView = convertView.findViewById(R.id.filter_text);
+ TextView nameTextView = convertView.findViewById(R.id.filter_name);
+ textView.setText(item.text);
+ nameTextView.setText(item.nameText);
+
+ checkBox = convertView.findViewById(R.id.filter_checkbox);
+ checkBox.setOnCheckedChangeListener(null);
+ //チェック済みの項目をチェックにしておく
checkBox.setChecked(nemophila.getSelectFriends().contains(item.getText()));
}
- // チェックボックスを押したときの処理
+ // チェックボックスを押したときの処理 //bがtrueでチェック状態を指す
checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
@@ -291,12 +339,61 @@
if(isGenre) {
//Toast.makeText(MapsActivity.this, listData.get(position).getText(), Toast.LENGTH_SHORT).show();
nemophila.removeSelectGenres(listData.get(position).getText());
+
} else {
nemophila.removeSelectFriends(listData.get(position).getText());
}
}
FilterDataModel data = getItem(position);
data.isChecked = b;
+ Collection shops = shopsViewModel.getPreShoplist();
+
+ if ( shops != null ) {
+ System.out.println(shops);
+ nemophila.getSelectGenres();
+
+ for (Shop shop : shops) {
+ Marker setMarker = shopsViewModel.getMarker(shop);
+
+ //場合分け
+ //フィルターを一切かけていないとき
+ if(nemophila.getSelectGenres().isEmpty() && nemophila.getSelectFriends().isEmpty()){
+ setMarker.setVisible(true);
+ }
+ //ジャンルのみフィルターをかけているとき
+ else if(nemophila.getSelectFriends().isEmpty()) {
+ for(String genre : nemophila.getSelectGenres()) {
+ if(shop.getGenreSet().contains(genre)) {
+ setMarker.setVisible(true);
+ } else {
+ setMarker.setVisible(false);
+ }
+ }
+ }
+ //フレンドのみフィルターをかけているとき
+ else if(nemophila.getSelectGenres().isEmpty()) {
+ for(String friendId : nemophila.getSelectFriends()) {
+ if(shop.getUserIdSet().contains(friendId)) {
+ setMarker.setVisible(true);
+ } else {
+ setMarker.setVisible(false);
+ }
+ }
+ }
+ //どちらもフィルターをかけているとき
+ else {
+ for(String genre : nemophila.getSelectGenres()) {
+ for(String friendId : nemophila.getSelectFriends()) {
+ if (shop.getGenreSet().contains(genre) && shop.getUserIdSet().contains(friendId)) {
+ setMarker.setVisible(true);
+ } else {
+ setMarker.setVisible(false);
+ }
+ }
+ }
+ }
+ }
+ }
}
});
@@ -306,11 +403,16 @@
private static class FilterDataModel{
private String text;
+ private String nameText;
+
private boolean isChecked;
public String getText() {
return text;
}
+ public String getNameText() {
+ return nameText;
+ }
public boolean isChecked() {
return isChecked;
@@ -319,6 +421,9 @@
public void setText(String text) {
this.text = text;
}
+ public void setNameText(String text) {
+ this.nameText = text;
+ }
public void setChecked(boolean checked) {
isChecked = checked;
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/MapsFragment.java b/app/src/main/java/com/example/nemophila/MapsFragment.java
index 1ee5dd6..053faca 100644
--- a/app/src/main/java/com/example/nemophila/MapsFragment.java
+++ b/app/src/main/java/com/example/nemophila/MapsFragment.java
@@ -9,6 +9,7 @@
import androidx.core.content.res.ResourcesCompat;
import androidx.fragment.app.DialogFragment;
import androidx.fragment.app.Fragment;
+import androidx.lifecycle.LiveData;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider;
@@ -55,6 +56,7 @@
import com.google.common.collect.Maps;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.Map;
public class MapsFragment extends Fragment implements LocationListener {
@@ -113,46 +115,39 @@
String.format("表示していない店を確認しました。ピンを立てます"),
Toast.LENGTH_SHORT)
.show();
-
for (Shop shop : shops) {
- //受け取ったshopsにfriendsの投稿が含まれているかを確認,受け取ったshopsに対してMarkerが立っているかを確認
-
- //observeの中にobserveはうまくいかなかった
-// postsViewModel.loadShopPost(shop.getSid());
-// postsViewModel.getShopPostLiveData().observe(getActivity(), new Observer >() {
-// @Override
-// public void onChanged(ArrayList posts) {
-// ArrayList ids = postsViewModel.getUserIds();
-//
-// for(int i = 0; i < ids.size(); i++) {
-// ArrayList fids = nemophila.getFriendIds();
-// for(int j = 0; j < fids.size(); j++) {
-// if( ( ids.get(i).equals(fids.get(j)) || ids.get(i).equals(nemophila.getUid()) ) && shopsViewModel.getMarker(shop) == null ){
-// //各shopに対応するMarkerがなければMarkerを立てる
-// shopLatlng = new LatLng(shop.getLatitude(), shop.getLongitude());
-// System.out.println(shopLatlng);
-// Marker createMaker = mMap.addMarker(new MarkerOptions().position(shopLatlng).title(""));
-// //マーカーに店情報を持たせる
-// createMaker.setTag(shop);
-// //ShopToMarkerに紐づけ
-// shopsViewModel.setShopAndMarker(shop, createMaker);
-// }
-// }
-// }
-// }
-// });
-
if ( shopsViewModel.getMarker(shop) == null) { //フレンド以外の投稿のピンも立てたい場合
- //if( && shopsViewModel.getMarker(shop) == null) {
//各shopに対応するMarkerがなければMarkerを立てる
shopLatlng = new LatLng(shop.getLatitude(), shop.getLongitude());
System.out.println(shopLatlng);
- Marker createMaker = mMap.addMarker(new MarkerOptions().position(shopLatlng).title(""));
+ Marker createMarker = mMap.addMarker(new MarkerOptions().position(shopLatlng).title(""));
//マーカーに店情報を持たせる
- createMaker.setTag(shop);
+ createMarker.setTag(shop);
+ //フィルター掛け
+ for(String genre : nemophila.getSelectGenres()) {
+ if(shop.getGenreSet().contains(genre)) {
+ createMarker.setVisible(true);
+ } else {
+ createMarker.setVisible(false);
+ }
+ }
+
+// if ( !nemophila.getSelectFriends().isEmpty() ) {
+// createMaker.setVisible(false);
+// }
+
//ShopToMarkerに紐づけ
- shopsViewModel.setShopAndMarker(shop, createMaker);
+ shopsViewModel.setShopAndMarker(shop, createMarker);
+ } else {
+// //すでに立っているピンをフィルター掛け
+// Marker setMaker = shopsViewModel.getMarker(shop);
+// if ( !nemophila.getSelectGenres().isEmpty() ) {
+// setMaker.setVisible(false);
+// }
+// if ( !nemophila.getSelectFriends().isEmpty() ) {
+// setMaker.setVisible(false);
+// }
}
}
});
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 78a3ec8..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());
-
- //申請を送るダイアログ
- 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<>();
-
- //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
+//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);
+// 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
diff --git a/app/src/main/java/com/example/nemophila/TestActivity.java b/app/src/main/java/com/example/nemophila/TestActivity.java
index c9734de..cd77215 100644
--- a/app/src/main/java/com/example/nemophila/TestActivity.java
+++ b/app/src/main/java/com/example/nemophila/TestActivity.java
@@ -85,4 +85,4 @@
}
});
}
-}
+}
\ No newline at end of file
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/resources/AccountsRest.java b/app/src/main/java/com/example/nemophila/resources/AccountsRest.java
index f8c10df..83ab4a8 100644
--- a/app/src/main/java/com/example/nemophila/resources/AccountsRest.java
+++ b/app/src/main/java/com/example/nemophila/resources/AccountsRest.java
@@ -64,6 +64,15 @@
@Field("name") String name,
@Field("token") String token
);
+
+ @FormUrlEncoded
+ @PUT("accounts/{uid}/icon")
+ Call changeIcon(
+ @Path("uid") String uid,
+ @Field("name") String icon,
+ @Field("token") String token
+ );
+
@GET("accounts/{uid}/posts")
Call> getAccountPosts(
@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 207f837..a4f9f2a 100644
--- a/app/src/main/java/com/example/nemophila/viewmodels/AccountViewModel.java
+++ b/app/src/main/java/com/example/nemophila/viewmodels/AccountViewModel.java
@@ -37,6 +37,7 @@
private final MutableLiveData pwErrorLiveData;
private final MutableLiveData accountLiveData;
private final MutableLiveData errorLiveData;
+ private final MutableLiveData finishChangeIconLiveData;
// コンストラクタ
public AccountViewModel() {
@@ -51,6 +52,7 @@
this.pwErrorLiveData = new MutableLiveData<>();
this.accountLiveData = new MutableLiveData<>();
this.errorLiveData = new MutableLiveData<>();
+ this.finishChangeIconLiveData = new MutableLiveData<>();
}
// ライブデータの取得(ゲッター)
@@ -70,6 +72,7 @@
public MutableLiveData getErrorLiveData() {
return errorLiveData;
}
+ public MutableLiveData getFinishChangeIconLiveData() {return finishChangeIconLiveData;}
// 対象のアカウント情報の削除
public void deleteAccount(String uid, String token) {
@@ -138,6 +141,29 @@
});
}
+ // アイコンの変更を行う
+ public void changeIcon(String uid, String icon, String token) {
+ Call call = accountsRest.changeIcon(uid, icon, token);
+
+ call.enqueue(new Callback() {
+ @Override
+ public void onResponse(Call call, Response response) {
+ if (response.isSuccessful()) {
+ finishChangeIconLiveData.setValue(true);
+ } else {
+ finishChangeIconLiveData.setValue(false);
+ System.out.println("response error");
+ }
+ }
+
+ @Override
+ public void onFailure(Call call, Throwable t) {
+ finishChangeIconLiveData.setValue(false);
+ System.out.println("ChangeIcon NetworkError :" + t);
+ }
+ });
+ }
+
// 対象のアカウントがした投稿の全取得
public void getAccountPosts(String uid) {
Call> call = accountsRest.getAccountPosts(uid);
@@ -160,7 +186,7 @@
});
}
- //PostJsonからPostを作成し,対象のライブデータに設定する
+ // PostJsonからPostを作成し,対象のライブデータに設定する
private void setAccountPostLiveDataFromJson(Collection postJson) {
ArrayList posts = new ArrayList<>();
for(PostJson pj: postJson) {
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 8f3dc95..13e1bf2 100644
--- a/app/src/main/java/com/example/nemophila/viewmodels/FriendViewModel.java
+++ b/app/src/main/java/com/example/nemophila/viewmodels/FriendViewModel.java
@@ -235,7 +235,9 @@
private void addRequestingLiveData(String uid, String name) {
ArrayList preData = new ArrayList<>();
for (AccountNameJson anj: requestingLiveData.getValue()) {
- preData.add(anj);
+ if(!anj.getUid().equals(uid)) {
+ preData.add(anj);
+ }
}
preData.add(createAccountNameJson(uid, name));
requestingLiveData.setValue(preData);
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 da09614..e5e8b46 100644
--- a/app/src/main/java/com/example/nemophila/viewmodels/ShopsViewModel.java
+++ b/app/src/main/java/com/example/nemophila/viewmodels/ShopsViewModel.java
@@ -81,6 +81,10 @@
return ShopToMarker.get(shop);
}
+ public Collection getPreShoplist() {
+ return this.shopsPreData;
+ }
+
// TimerViewModelを利用して、定期的にMainActivityに呼び出してもらう
@Override
public void update() {
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で検索してフレンド申請を送る"/>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ android:layout_weight="0.05"
+ android:text=" フレンド申請中のユーザー"/>
-
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ android:layout_weight="0.73"/>
+
+
+ app:layout_constraintVertical_bias="0.772" />
+
+
+
+
+
+
+
\ No newline at end of file