diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml
index e58179e..63e623f 100644
--- a/.idea/deploymentTargetDropDown.xml
+++ b/.idea/deploymentTargetDropDown.xml
@@ -12,6 +12,6 @@
-
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 87dc5c1..1adffca 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -39,7 +39,7 @@
-
+
@@ -49,9 +49,10 @@
+
-
+
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 9d1c6dc..b682eed 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -5,6 +5,7 @@
+
NameToId;
// フィルターのリスト用
@@ -61,7 +55,7 @@
ListView list;
boolean isGenre;
String genreData[];
- ArrayList friendsData;
+ ArrayList UsersData;
@Override
@@ -95,24 +89,37 @@
// geocode Test
handler = new Handler();
-// // 検索バーの処理
-// SearchView searchView = findViewById(R.id.tool_search);
-// searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
-// @Override
-// public boolean onQueryTextSubmit(String query) {
-// new Thread(() -> {
-// geoCode(query);
-// }).start();
-// return false;
-// }
-//
-// @Override
-// public boolean onQueryTextChange(String newText) {
-// return false;
-// }
-// });
+ // 検索バーの処理
+ SearchView searchView = findViewById(R.id.tool_search);
+ searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
- //filterDialog = new FilterDialog();
+ //文字列を入力後にEnterなど、検索確定したとき
+ @Override
+ public boolean onQueryTextSubmit(String query) {
+ if(query == null) {
+ Toast.makeText(MapsActivity.this,
+ String.format("住所や施設名を入力してください"),
+ Toast.LENGTH_SHORT)
+ .show();
+ } else {
+ System.out.println("------検索内容---------");
+ System.out.println(query);
+ System.out.println("----------------------");
+ //mapsFragment側で地名検索,見つかった場合はその地点に画面移動
+ mapsFragment.SeachLocation(query);
+ }
+ return false;
+ }
+
+ //検索文字に変化があったとき
+ @Override
+ public boolean onQueryTextChange(String newText) {
+ System.out.println("------文字列変化検出------");
+ System.out.println(newText);
+ System.out.println("----------------------");
+ return false;
+ }
+ });
// サイドメニューのボタン
Button genreButton = findViewById(R.id.filter_genre_button);
@@ -131,15 +138,11 @@
});
// サイドメニューのフィルターのリストの準備
- genreData = new String[]{"中華", "和食", "イタリアン", "フレンチ", "カフェ", "バー", "居酒屋", "ラーメン", "うどん・そば", "その他 海外料理"};
- friendsData = new ArrayList<>();
- //NameToId = new HashMap<>();
+ genreData = new String[]{"和食", "洋食", "中華", "イタリアン", "フレンチ", "その他海外料理", "カフェ", "バー", "居酒屋", "焼肉", "鍋", "カレー", "丼", "ラーメン", "うどん", "そば", "その他"};
+ UsersData = new ArrayList<>();
-// friendsData[0] = "iyo";
-// friendsData[1] = "iyo2";
-// friendsData[2] = "superiyo";
-// friendsData[3] = "perfectiyo";
-// friendsData[4] = "finaliyo";
+ //自分自身をfilterにかけられるように追加しておく
+ UsersData.add(nemophila.getUid());
//フレンド一覧を取得
friendViewModel.getFriends(nemophila.getUid());
@@ -147,8 +150,7 @@
@Override
public void onChanged(Collection friends) {
for (AccountNameJson friend : friends) {
- friendsData.add(friend.getUid());
- //NameToId.put(friend.getName(), friend.getUid());
+ UsersData.add(friend.getUid());
}
}
});
@@ -209,7 +211,7 @@
return super.onOptionsItemSelected(item);
}
-
+ //ジャンルfilter設定画面になったとき
public void prepareGenreList(String s){
//sは検索欄に入力された文字列
@@ -241,6 +243,7 @@
list.deferNotifyDataSetChanged();
}
+ //ユーザーfilter設定画面になったとき
public void prepareFriendList(String s){
//sは検索欄に入力された文字列
@@ -249,20 +252,25 @@
// 一度リストのデータを取り除いてから追加する
listData.clear();
+
+ FilterDataModel fd = new FilterDataModel();
+ fd.setText(nemophila.getUid());
+ fd.setNameText(nemophila.getName());
+ listData.add(fd);
for (AccountNameJson friend : nemophila.getFriends()) {
if(s == null) {
- FilterDataModel fd = new FilterDataModel();
- fd.setText(friend.getUid());
- fd.setNameText(friend.getName());
- listData.add(fd);
+ FilterDataModel fd2 = new FilterDataModel();
+ fd2.setText(friend.getUid());
+ fd2.setNameText(friend.getName());
+ listData.add(fd2);
} else {
//検索にヒットしたフレンドのみのリストにする
if(friend.getName().contains(s)){
- FilterDataModel fd = new FilterDataModel();
- fd.setText(friend.getUid());
- fd.setNameText(friend.getName());
- listData.add(fd);
+ FilterDataModel fd2 = new FilterDataModel();
+ fd2.setText(friend.getUid());
+ fd2.setNameText(friend.getName());
+ listData.add(fd2);
}
}
}
@@ -281,6 +289,10 @@
return false;
}
+ public void setMapsFragment(MapsFragment mapsFragment) {
+ this.mapsFragment = mapsFragment;
+ }
+
// 内部クラス
private class MyAdapter extends ArrayAdapter {
private LayoutInflater layoutInflater;
@@ -290,7 +302,7 @@
layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
- // 画面外に行ったときにチェックがずれないようにする
+ // 画面外に行ったときにチェックがはずれないようにする
@Override
public View getView(int position, View convertView, ViewGroup parent) {
CheckBox checkBox;
@@ -330,67 +342,76 @@
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
if(b) {
if(isGenre) {
- //Toast.makeText(MapsActivity.this, listData.get(position).getText(), Toast.LENGTH_SHORT).show();
nemophila.setSelectGenres(listData.get(position).getText());
} else {
nemophila.setSelectFriends(listData.get(position).getText());
}
} else {
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;
+ //shopsViewModelのPreShoplistは、現在取得した全てのshopを持っている
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);
- }
+ ArrayList userIdSet = (ArrayList)shop.getUserIdSet().clone();
+ UsersData.add(nemophila.getUid());
+ userIdSet.retainAll(UsersData);
+
+ //自分とそのフレンド以外の投稿は確認しない
+ if( userIdSet.size() > 0) {
+ //場合分け
+ //フィルターを一切かけていないとき
+ if(nemophila.getSelectGenres().isEmpty() && nemophila.getSelectFriends().isEmpty()){
+ setMarker.setVisible(true);
}
- }
- //フレンドのみフィルターをかけているとき
- 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)) {
+ //ジャンルのみフィルターをかけているとき
+ else if(nemophila.getSelectFriends().isEmpty()) {
+ for(String genre : nemophila.getSelectGenres()) {
+ if(shop.getGenreSet().contains(genre)) {
setMarker.setVisible(true);
+ break;
} else {
setMarker.setVisible(false);
}
}
}
+ //フレンドのみフィルターをかけているとき
+ else if(nemophila.getSelectGenres().isEmpty()) {
+ for(String friendId : nemophila.getSelectFriends()) {
+ if(shop.getUserIdSet().contains(friendId)) {
+ setMarker.setVisible(true);
+ break;
+ } 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);
+ break;
+ } else {
+ setMarker.setVisible(false);
+ }
+ }
+ }
+ }
+ } else {
+ setMarker.setVisible(false);
}
}
}
@@ -410,13 +431,6 @@
public String getText() {
return text;
}
- public String getNameText() {
- return nameText;
- }
-
- public boolean isChecked() {
- return isChecked;
- }
public void setText(String text) {
this.text = text;
@@ -425,9 +439,6 @@
this.nameText = text;
}
- public void setChecked(boolean checked) {
- isChecked = checked;
- }
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/nemophila/MapsFragment.java b/app/src/main/java/com/example/nemophila/MapsFragment.java
index 053faca..ce1422c 100644
--- a/app/src/main/java/com/example/nemophila/MapsFragment.java
+++ b/app/src/main/java/com/example/nemophila/MapsFragment.java
@@ -24,6 +24,7 @@
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
+import android.os.AsyncTask;
import android.os.Bundle;
import android.provider.Settings;
import android.util.Log;
@@ -34,7 +35,16 @@
import android.widget.TextView;
import android.widget.Toast;
+import android.content.Context;
+import android.location.Address;
+import android.location.Geocoder;
+import android.text.TextUtils;
+import java.io.IOException;
+import java.util.List;
+import java.util.Locale;
+
import com.example.nemophila.databinding.ActivityMainBinding;
+import com.example.nemophila.entities.AccountNameJson;
import com.example.nemophila.entities.Post;
import com.example.nemophila.entities.Shop;
import com.example.nemophila.viewmodels.FriendViewModel;
@@ -42,6 +52,8 @@
import com.example.nemophila.viewmodels.ShopsViewModel;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
+import com.google.maps.*;
+import com.google.maps.model.GeocodingResult;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.BitmapDescriptor;
@@ -66,18 +78,15 @@
Nemophila nemophila;
private GoogleMap mMap;
+ private GeoApiContext geoApiContext;
private ActivityMainBinding binding;
private LatLng currentLatlng = null;
private LatLng initialLatlng;
private LatLng shopLatlng;
-// private LatLng testLatlng;
-// private LatLng testLatlng2;
private LatLng tapLatlng;
-// private CameraPosition nowCamera;
-// private LatLng nowLatlng;
private Marker currentMarker;
private BitmapDescriptor bd;
- private boolean isLongClick;
+ ArrayList friendsData;
LocationManager locationManager;
@@ -95,77 +104,94 @@
friendViewModel = new ViewModelProvider(getActivity()).get(FriendViewModel.class);
postsViewModel = new ViewModelProvider(getActivity()).get(PostsViewModel.class);
-
+ friendsData = new ArrayList<>();
//フレンドの更新が入った時の処理(LiveDataへの購読)
friendViewModel.getFriends(nemophila.getUid());
friendViewModel.getFriendsLiveData().observe(getActivity(), friends -> {
- Toast.makeText(getActivity(),
- String.format("フレンドの更新を確認しました。"),
- Toast.LENGTH_SHORT)
- .show();
//nemophilaにセットしておく
nemophila.setFriends(friends);
+ for (AccountNameJson friend : friends) {
+ friendsData.add(friend.getUid());
+ }
});
-
// 店情報の更新が入った時の処理(LiveDataへの購読)
shopsViewModel.getShopsLiveData().observe(getActivity(), shops -> {
- Toast.makeText(getActivity(),
- String.format("表示していない店を確認しました。ピンを立てます"),
- Toast.LENGTH_SHORT)
- .show();
- for (Shop shop : shops) {
- if ( shopsViewModel.getMarker(shop) == null) { //フレンド以外の投稿のピンも立てたい場合
+ for (Shop shop : shops) {
+ if (shopsViewModel.getMarker(shop) == null) { //フレンド以外の投稿のピンも立てたい場合
+ //各shopに対応するMarkerがなければMarkerを立てる
+ shopLatlng = new LatLng(shop.getLatitude(), shop.getLongitude());
+ System.out.println(shopLatlng);
+ Marker createMarker = mMap.addMarker(new MarkerOptions().position(shopLatlng).title(""));
+ //マーカーに店情報を持たせる
+ createMarker.setTag(shop);
- //各shopに対応するMarkerがなければMarkerを立てる
- shopLatlng = new LatLng(shop.getLatitude(), shop.getLongitude());
- System.out.println(shopLatlng);
- Marker createMarker = mMap.addMarker(new MarkerOptions().position(shopLatlng).title(""));
- //マーカーに店情報を持たせる
- createMarker.setTag(shop);
- //フィルター掛け
- for(String genre : nemophila.getSelectGenres()) {
- if(shop.getGenreSet().contains(genre)) {
- createMarker.setVisible(true);
- } else {
- createMarker.setVisible(false);
+ //ShopToMarkerに紐づけ
+ shopsViewModel.setShopAndMarker(shop, createMarker);
+ System.out.println(friendsData);
+
+ ArrayList userIdSet = (ArrayList) shop.getUserIdSet().clone();
+ friendsData.add(nemophila.getUid());
+ userIdSet.retainAll(friendsData);
+
+ //自分とそのフレンド以外の投稿は確認しない
+ if (userIdSet.size() > 0) {
+ //場合分け
+ //フィルターを一切かけていないとき
+ if (nemophila.getSelectGenres().isEmpty() && nemophila.getSelectFriends().isEmpty()) {
+ createMarker.setVisible(true);
+ }
+ //ジャンルのみフィルターをかけているとき
+ else if (nemophila.getSelectFriends().isEmpty()) {
+ for (String genre : nemophila.getSelectGenres()) {
+ if (shop.getGenreSet().contains(genre)) {
+ createMarker.setVisible(true);
+ break;
+ } else {
+ createMarker.setVisible(false);
+ }
}
}
-
-// if ( !nemophila.getSelectFriends().isEmpty() ) {
-// createMaker.setVisible(false);
-// }
-
- //ShopToMarkerに紐づけ
- shopsViewModel.setShopAndMarker(shop, createMarker);
+ //フレンドのみフィルターをかけているとき
+ else if (nemophila.getSelectGenres().isEmpty()) {
+ for (String friendId : nemophila.getSelectFriends()) {
+ if (shop.getUserIdSet().contains(friendId)) {
+ createMarker.setVisible(true);
+ break;
+ } else {
+ createMarker.setVisible(false);
+ }
+ }
+ }
+ //どちらもフィルターをかけているとき
+ else {
+ for (String genre : nemophila.getSelectGenres()) {
+ for (String friendId : nemophila.getSelectFriends()) {
+ if (shop.getGenreSet().contains(genre) && shop.getUserIdSet().contains(friendId)) {
+ createMarker.setVisible(true);
+ break;
+ } else {
+ createMarker.setVisible(false);
+ }
+ }
+ }
+ }
} else {
-// //すでに立っているピンをフィルター掛け
-// Marker setMaker = shopsViewModel.getMarker(shop);
-// if ( !nemophila.getSelectGenres().isEmpty() ) {
-// setMaker.setVisible(false);
-// }
-// if ( !nemophila.getSelectFriends().isEmpty() ) {
-// setMaker.setVisible(false);
-// }
+ createMarker.setVisible(false);
}
}
+ }
});
// 長押しを認識した後の処理(LiveDataへの購読)
shopsViewModel.getNearShopsLiveData().observe(getActivity(), shops -> {
- Toast.makeText(getActivity(),
- String.format("近辺の店を確認しました。ダイアログを表示します"),
- Toast.LENGTH_SHORT)
- .show();
-
- //長押し時は周辺のピンを全て取得し、ダイアログに表示する
- DialogFragment dialogFragment = new MapsDialogFragment(shops);
- dialogFragment.show(getActivity().getSupportFragmentManager(),"mapsdialog");
+ //長押し時は周辺のピンを全て取得し、ダイアログに表示する
+ DialogFragment dialogFragment = new MapsDialogFragment(shops);
+ dialogFragment.show(getActivity().getSupportFragmentManager(), "mapsdialog");
});
//初期画面の座標(現在地をロードするまで表示)
- //initialLatlng = new LatLng(39,138);
initialLatlng = new LatLng(nemophila.getCameraLatitude(), nemophila.getCameraLongitude());
//初期画面に移動
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(initialLatlng, nemophila.getZoom()));
@@ -174,7 +200,6 @@
//画面が動いたとき
mMap.setOnCameraIdleListener(() -> {
//カメラの座標とZOOM倍率を保存
- //nowCamera = mMap.getCameraPosition();
nemophila.setCameraLatitude(mMap.getCameraPosition().target.latitude);
nemophila.setCameraLongitude(mMap.getCameraPosition().target.longitude);
nemophila.setZoom(mMap.getCameraPosition().zoom);
@@ -183,26 +208,21 @@
});
- // test用 座標を確認するため
- // タップした時のリスナーをセット
- mMap.setOnMapClickListener(tapLocation -> {
- // map(ピン以外)をtapされた位置の緯度経度
- tapLatlng = new LatLng(tapLocation.latitude, tapLocation.longitude);
- Toast.makeText(getActivity(),
- String.format("%s", tapLatlng),
- Toast.LENGTH_SHORT)
- .show();
- });
+ // test用 座標を確認するため
+ // タップした時のリスナーをセット
+// mMap.setOnMapClickListener(tapLocation -> {
+// // map(ピン以外)をtapされた位置の緯度経度を取得
+// tapLatlng = new LatLng(tapLocation.latitude, tapLocation.longitude);
+// Toast.makeText(getActivity(),
+// String.format("%s", tapLatlng),
+// Toast.LENGTH_SHORT)
+// .show();
+// });
//長押し時に店を作成し、その座標にピンを立てる
//長押し時にその座標を保存し、投稿画面に移り、Shop作成完了時にはピンを立て、Shop画面に移行
mMap.setOnMapLongClickListener(longpushLocation -> {
- //長押しされた位置の緯度経度を取得
- //LatLng newlocation = new LatLng(longpushLocation.latitude, longpushLocation.longitude);
-
- //長押し座標を画面中心にしておく
- //zoomMap(longpushLocation.latitude, longpushLocation.longitude);
//Nemophilaに座標を保存
nemophila.setCurrentLatitude(longpushLocation.latitude);
nemophila.setCurrentLongitude(longpushLocation.longitude);
@@ -213,21 +233,15 @@
//テスト用
//shopsViewModel.longClickViewArea(longpushLocation.longitude+1, longpushLocation.latitude+1, longpushLocation.longitude-1, longpushLocation.latitude-1);
//本番環境は↓の範囲で
- shopsViewModel.longClickViewArea(longpushLocation.longitude+0.001, longpushLocation.latitude+0.001, longpushLocation.longitude-0.001, longpushLocation.latitude-0.001);
+ shopsViewModel.longClickViewArea(longpushLocation.longitude + 0.001, longpushLocation.latitude + 0.001, longpushLocation.longitude - 0.001, longpushLocation.latitude - 0.001);
});
// ピンをクリックした場合
mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
- //店の詳細と投稿一覧を表示
- //ここでshopActivityを呼び出す
-
- //下からクリックしたことを通知
- //Toast.makeText(getActivity(), "ピンクリック", Toast.LENGTH_SHORT).show();
-
//現在地マーカーをクリックしたときのみ例外
- if(marker.getTag() == null) {
+ if (marker.getTag() == null) {
//以下の処理をストップ
return false;
}
@@ -260,9 +274,6 @@
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
- //binding = ActivityMainBinding.inflate(getLayoutInflater());
- //getActivity().setContentView(binding.getRoot());
-
if (ActivityCompat.checkSelfPermission(
getContext(),
Manifest.permission.ACCESS_FINE_LOCATION)
@@ -270,16 +281,11 @@
requestPermissionLauncher.launch(
Manifest.permission.ACCESS_FINE_LOCATION);
- }
- else{
+ } else {
locationStart();
}
-// // Obtain the SupportMapFragment and get notified when the map is ready to be used.
-// SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
-// .findFragmentById(R.id.map);
-// assert mapFragment != null;
-// mapFragment.getMapAsync(this);
+ ((MapsActivity) getContext()).setMapsFragment(this);
SupportMapFragment mapFragment =
(SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map);
@@ -294,7 +300,7 @@
}
- private void zoomMap(double latitude, double longitude) {
+ public void zoomMap(double latitude, double longitude) {
// 表示する東西南北の緯度経度を設定
double south = latitude * (1 - 0.00005);
double west = longitude * (1 - 0.00005);
@@ -303,7 +309,6 @@
LatLng latlng = new LatLng(latitude, longitude);
- // LatLngBounds (LatLng southwest, LatLng northeast)
//左下、右上
LatLngBounds bounds = LatLngBounds.builder()
.include(new LatLng(south, west))
@@ -328,9 +333,9 @@
//初回現在地取得時
if (currentMarker == null) {
- currentMarker=mMap.addMarker(new MarkerOptions().position(current_location).title("現在地").icon(bd));
+ currentMarker = mMap.addMarker(new MarkerOptions().position(current_location).title("現在地").icon(bd));
} else {
- //2回目移行
+ //2回目以降
currentMarker.setPosition(current_location);
}
}
@@ -342,18 +347,17 @@
isGranted -> {
if (isGranted) {
locationStart();
- }
- else {
+ } else {
Toast toast = Toast.makeText(getActivity(),
- "これ以上なにもできません", Toast.LENGTH_SHORT);
+ "エラー", Toast.LENGTH_SHORT);
toast.show();
}
});
//現在地の取得
@SuppressLint("MissingPermission")
- private void locationStart(){
- Log.d("debug","locationStart()");
+ private void locationStart() {
+ Log.d("debug", "locationStart()");
// LocationManager インスタンス生成
locationManager =
@@ -389,7 +393,7 @@
@Override
public void onLocationChanged(Location location) {
//初期画面は現在地を中心にするため...
- if (currentLatlng == null){
+ if (currentLatlng == null) {
//↓現在地ロード後画面中心を現在地にする場合
//zoomMap(location.getLatitude(), location.getLongitude());
//ロード画面の終了
@@ -399,7 +403,7 @@
getView().findViewById(R.id.currentButton).setVisibility(View.VISIBLE);
ImageButton button1 = getView().findViewById(R.id.currentButton);
- button1.setOnClickListener( v -> {
+ button1.setOnClickListener(v -> {
Log.d("debug", "currentbutton, 現在地にカメラを移動");
System.out.println(shopsViewModel.getShopsLiveData().getValue());
//現在地にカメラを移動
@@ -412,7 +416,49 @@
currentLatlng = new LatLng(location.getLatitude(), location.getLongitude());
//現在地アイコンを表示.このsetIcon内にzoomMap処理もあるので注意
- setIcon(location.getLatitude(),location.getLongitude());
+ setIcon(location.getLatitude(), location.getLongitude());
+ }
+
+ //住所・施設名などから緯度経度を検索するメソッド
+ public void SeachLocation(String seachText) {
+ // Geocoderを使用して緯度経度を取得し移動
+ LatLng latLng = getLatLngFromAddress(seachText);
+ if (latLng != null) {
+ System.out.println("-------検索地点の座標取得完了!--------");
+ System.out.println("緯度: " + latLng.latitude + "\n経度: " + latLng.longitude);
+ System.out.println("-----------------------------------");
+
+ Toast.makeText(getActivity(),
+ String.format("該当の地点に移動します"),
+ Toast.LENGTH_SHORT)
+ .show();
+ nemophila.setZoom(18f);
+ zoomMap(latLng.latitude, latLng.longitude);
+ } else {
+ //緯度経度取得ミス
+ System.out.println("-------検索地点の座標取得失敗--------");
+ Toast.makeText(getActivity(),
+ String.format("該当の地点が見つかりませんでした"),
+ Toast.LENGTH_SHORT)
+ .show();
+ }
+ }
+
+ // 住所から緯度経度を取得するメソッド
+ private LatLng getLatLngFromAddress(String address) {
+ Geocoder geocoder = new Geocoder(requireContext(), Locale.getDefault());
+ try {
+ List addresses = geocoder.getFromLocationName(address, 1);
+ if (addresses != null && !addresses.isEmpty()) {
+ Address firstAddress = addresses.get(0);
+ double latitude = firstAddress.getLatitude();
+ double longitude = firstAddress.getLongitude();
+ return new LatLng(latitude, longitude);
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ return null;
}
@Override
diff --git a/app/src/main/java/com/example/nemophila/MyPageActivity.java b/app/src/main/java/com/example/nemophila/MyPageActivity.java
index d332234..c6ef3de 100644
--- a/app/src/main/java/com/example/nemophila/MyPageActivity.java
+++ b/app/src/main/java/com/example/nemophila/MyPageActivity.java
@@ -62,15 +62,6 @@
}
});
- // 「フレンド申請する」ボタンを押したときにフレンド申請画面へ遷移する
- Button requestingButton = (Button) findViewById(R.id.requesting);
- requestingButton.setOnClickListener(new View.OnClickListener() {
- public void onClick(View v) {
- Intent intent = new Intent(MyPageActivity.this, FriendActivity.class);
- startActivity(intent);
- }
- });
-
// 「フレンド許可する」ボタンを押したときにフレンド許可画面へ遷移する
Button requestedButton = (Button) findViewById(R.id.requested);
requestedButton.setOnClickListener(new View.OnClickListener() {
@@ -138,6 +129,8 @@
for (Post post: Posts){
MyPageActDataModel data = new MyPageActDataModel();
data.setDate(post.getDate());
+ data.setName(post.getName());
+ data.setGenre(post.getGenre());
//rateはintで受け取った評価に対応した星の数のStringに変換してセット
int intRate = post.getRate();
String strRate = "";
@@ -149,7 +142,6 @@
}
}
data.setRate(strRate);
- data.setGenre(post.getGenre());
data.setComment(post.getComment());
data.setPid(post.getPid());
myPageActDataset.add(data);
@@ -188,6 +180,7 @@
@Override
public void onBindViewHolder(@NonNull MyPageActViewHolder holder, int position) {
+ holder.nameView.setText(list.get(position).getName());
holder.dateView.setText(list.get(position).getDate());
holder.rateView.setText(list.get(position).getRate());
holder.genreView.setText(list.get(position).getGenre());
@@ -202,6 +195,7 @@
// ViewHolder
public class MyPageActViewHolder extends RecyclerView.ViewHolder {
+ public TextView nameView;
public TextView dateView;
public TextView rateView;
public TextView genreView;
@@ -210,6 +204,7 @@
public MyPageActViewHolder(@NonNull View view) {
super(view);
+ nameView = (TextView) view.findViewById(R.id.nameOfShop);
dateView = (TextView) view.findViewById(R.id.date);
rateView = (TextView) view.findViewById(R.id.rate);
genreView = (TextView) view.findViewById(R.id.genre);
@@ -220,12 +215,16 @@
// DataModel
public static class MyPageActDataModel {
+ private String name;
private String date;
private String rate;
private String genre;
private String comment;
private String pid;
+ public String getName() { return name; }
+ public void setName(String name) { this.name = name; }
+
public String getDate() {
return date;
}
@@ -255,6 +254,6 @@
}
public String getPid() { return pid; }
- public void setPid(String sid) { this.pid = pid; }
+ public void setPid(String pid) { this.pid = pid; }
}
}
diff --git a/app/src/main/java/com/example/nemophila/MyPageEditorActivity.java b/app/src/main/java/com/example/nemophila/MyPageEditorActivity.java
index 4ff7896..458568c 100644
--- a/app/src/main/java/com/example/nemophila/MyPageEditorActivity.java
+++ b/app/src/main/java/com/example/nemophila/MyPageEditorActivity.java
@@ -1,64 +1,174 @@
package com.example.nemophila;
+import androidx.activity.result.ActivityResultCallback;
+import androidx.activity.result.ActivityResultLauncher;
+import androidx.activity.result.contract.ActivityResultContracts;
import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider;
+import android.app.AlertDialog;
+import android.content.DialogInterface;
import android.content.Intent;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.net.Uri;
import android.os.Bundle;
+import android.os.Handler;
import android.view.Gravity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
+import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.example.nemophila.entities.Account;
import com.example.nemophila.viewmodels.AccountViewModel;
+import java.io.InputStream;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.util.Base64;
+import java.util.List;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
public class MyPageEditorActivity extends AppCompatActivity {
+ //フィールド
+ private String icon;
+ private Nemophila nemophila;
+ private String uid;
+ private String token;
+ private ImageButton iconButton;
+ private ExecutorService executor;
+ private Handler handler;
+ private String iconUrlString;
+
//マイページ編集画面の作成
+ private ActivityResultLauncher launcher = registerForActivityResult(new ActivityResultContracts.OpenDocument(), new ActivityResultCallback() {
+ @Override
+ public void onActivityResult(Uri uri) {
+ if(uri == null)return;
+ icon = new String(Base64.getEncoder().encode(uri.toString().getBytes()));
+ ImageButton changeIconButton = findViewById(R.id.changeIconButton);
+ changeIconButton.setImageURI(uri);
+ }
+ });
+
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_page_editor);
- //LiveDataへの購読
+ // 初期化
AccountViewModel accountViewModel = new ViewModelProvider(this).get(AccountViewModel.class);
- Nemophila nemophila = (Nemophila) getApplication();
- String name = nemophila.getName();
- EditText myName = (EditText) findViewById(R.id.editName);
- myName.setText(name);
+ nemophila = (Nemophila) getApplication();
+ uid = nemophila.getUid();
+ token = nemophila.getToken();
+ iconButton = findViewById(R.id.changeIconButton);
+ executor = Executors.newSingleThreadExecutor();
+ handler = new Handler();
+ iconUrlString = "http://nitta-lab-www.is.konan-u.ac.jp/nemophila-data/test01.jpg";
+
+ // アカウントのアイコンを表示
+ setIcon(iconButton);
//MyPageに戻るボタン
- ImageButton backButton = (ImageButton) findViewById(R.id.backMyPage);
- backButton.setOnClickListener(new View.OnClickListener() {
+ ImageButton backButton = findViewById(R.id.backMyPage);
+ backButton.setOnClickListener(v -> finish());
+
+ iconButton.setOnClickListener(new View.OnClickListener(){
public void onClick(View v) {
- Intent intent = new Intent(MyPageEditorActivity.this, MyPageActivity.class);
- startActivity(intent);
+ launcher.launch(new String[] {"image/*"});
}
});
- //LiveDataへの購読
+
+ //変更確定ボタンを押した場合の動き
+ Button changeDecisionButton = findViewById(R.id.changeConfirm);
+ changeDecisionButton.setOnClickListener(new View.OnClickListener() {
+ public void onClick(View v) {
+ //名前とパスワードを取り込む
+ EditText editName = findViewById(R.id.editName);
+ String newName = editName.getText().toString();
+ EditText editOldPw = findViewById(R.id.editOldPw);
+ String oldPw = editOldPw.getText().toString();
+ EditText editNewPw = findViewById(R.id.editNewPw);
+ String newPw = editNewPw.getText().toString();
+
+ // 名前が入力されているとき通信を行う
+ if(newName.length() > 0) {
+ System.out.println(newName);
+ accountViewModel.changeName(uid, newName, token);
+ }
+ // パスワードが入力されているとき通信を行う
+ if(oldPw.length() > 0 && newPw.length() > 0) {
+ accountViewModel.changePw(uid, oldPw, newPw, token);
+ }
+ // アイコンが入力されているとき通信を行う
+ if(icon != null){
+ accountViewModel.changeIcon(uid, icon, token);
+ }
+
+ }
+ });
+
+ // ログアウトボタンを押したときの処理
+ Button logoutButton = findViewById(R.id.logoutButton);
+ logoutButton.setOnClickListener(v -> {
+ new AlertDialog.Builder(this)
+ .setTitle("本当にログアウトしますか?")
+ .setPositiveButton("OK", new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialogInterface, int i) {
+ nemophila.logout();
+ Intent intent = new Intent(MyPageEditorActivity.this, LoginActivity.class);
+ intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
+ startActivity(intent);
+ }
+ })
+ .setNeutralButton("キャンセル", null)
+ .create()
+ .show();
+ });
+
+ // 削除ボタンを押したときの処理
+ Button deleteAccountButton = findViewById(R.id.deleteAccount);
+ deleteAccountButton.setOnClickListener(v -> {
+ new AlertDialog.Builder(this)
+ .setTitle("本当に削除しますか?")
+ .setPositiveButton("OK", new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialogInterface, int i) {
+// accountViewModel.deleteAccount(uid, token);
+ }
+ })
+ .setNeutralButton("キャンセル", null)
+ .create()
+ .show();
+ });
+
+ // ------------------------------ LiveDataへの購読 ------------------------------------------- //
+ // アカウントの名前を取得した際のLiveDataの購読
accountViewModel.getNameLiveData().observe(this, new Observer() {
@Override
public void onChanged(String name) {
- TextView myName = (TextView) findViewById(R.id.editName);
+ TextView myName = findViewById(R.id.editName);
myName.setText(name);
nemophila.setName(name);
}
-
});
- //LiveDataへの購読
+
+ // アカウントのパスワードを取得した際のLiveDataの購読
accountViewModel.getPwLiveData().observe(this, new Observer() {
@Override
public void onChanged(String Pw) {
- Intent intent = new Intent(MyPageEditorActivity.this, MyPageActivity.class);
- startActivity(intent);
+ finish();
}
-
});
- //LiveDataへの購読
+
+ // パスワードのエラーが発生した際のLiveDataの購読
accountViewModel.getPwErrorLiveData().observe(this, new Observer() {
@Override
public void onChanged(String name) {
@@ -66,43 +176,44 @@
ts.setGravity(Gravity.CENTER, 0, 0);
ts.show();
}
-
});
- //変更確定ボタンを押した場合の動き
- Button changeNameButton = (Button) findViewById(R.id.changeConfirm);
- changeNameButton.setOnClickListener(new View.OnClickListener() {
- public void onClick(View v) {
- //名前とパスワードを取り込む
- EditText editName = (EditText) findViewById(R.id.editName);
- String newName = editName.getText().toString();
- EditText editOldPw = (EditText) findViewById(R.id.editOldPw);
- String oldPw = editOldPw.getText().toString();
- EditText editNewPw = (EditText) findViewById(R.id.editNewPw);
- String newPw = editNewPw.getText().toString();
-
- //Nemophilaから(id)(token)をgetしてaccountViewModelに送る
- String uid = nemophila.getUid();
- String token = nemophila.getToken();
- if(newName!=null) {
- System.out.println(newName);
- accountViewModel.changeName(uid, newName, token);
- }
- if(oldPw!=null && newPw!=null) {
- accountViewModel.changePw(uid, oldPw, newPw, token);
- }
+ // アカウントの削除をした際のLiveDataの購読
+ accountViewModel.getSuccessDeleteAccountLiveData().observe(this, new Observer() {
+ @Override
+ public void onChanged(Boolean isSuccess) {
+ Intent intent = new Intent(MyPageEditorActivity.this, SignUpActivity.class);
+ intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);startActivity(intent);
}
});
- //削除ボタンを押したときの処理
- Button deleteAccountButton = (Button) findViewById(R.id.deleteAccount);
- deleteAccountButton.setOnClickListener(new View.OnClickListener() {
- public void onClick(View v) {
- String uid = nemophila.getUid();
- String token = nemophila.getToken();
- accountViewModel.deleteAccount(uid,token);
- Intent intent = new Intent(MyPageEditorActivity.this, LoginActivity.class);
- startActivity(intent);
+ // アカウントの削除をした際のエラーのLiveDataの購読
+ accountViewModel.getDelAcErrorLiveData().observe(this, new Observer() {
+ @Override
+ public void onChanged(String s) {
+ Toast ts = Toast.makeText(MyPageEditorActivity.this, s, Toast.LENGTH_SHORT);
+ ts.setGravity(Gravity.CENTER, 0, 0);
+ ts.show();
+ }
+ });
+ }
+
+ // アイコンに画像を設定
+ private void setIcon(ImageView iv) {
+ executor.execute(() -> {
+ try{
+ URL url = new URL(iconUrlString);
+ HttpURLConnection con = (HttpURLConnection) url.openConnection();
+ con.connect();
+
+ InputStream is = con.getInputStream();
+
+ Bitmap bitmap = BitmapFactory.decodeStream(is);
+ handler.post(() -> iv.setImageBitmap(bitmap));
+ is.close();
+ con.disconnect();
+ }catch (Exception e){
+ e.printStackTrace();
}
});
}
diff --git a/app/src/main/java/com/example/nemophila/Nemophila.java b/app/src/main/java/com/example/nemophila/Nemophila.java
index 00a9120..79c017d 100644
--- a/app/src/main/java/com/example/nemophila/Nemophila.java
+++ b/app/src/main/java/com/example/nemophila/Nemophila.java
@@ -207,4 +207,12 @@
return friendIds;
}
+ // tokenを削除
+ public void logout(){
+ SharedPreferences preferences = getSharedPreferences("prefData", MODE_PRIVATE);
+ SharedPreferences.Editor editor = preferences.edit();
+ editor.remove("token");
+ editor.commit();
+ token = null;
+ }
}
diff --git a/app/src/main/java/com/example/nemophila/PostActivity.java b/app/src/main/java/com/example/nemophila/PostActivity.java
index 07a4800..4bfff00 100644
--- a/app/src/main/java/com/example/nemophila/PostActivity.java
+++ b/app/src/main/java/com/example/nemophila/PostActivity.java
@@ -216,17 +216,22 @@
genreAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
genreAdapter.add("ジャンルを選択");
- genreAdapter.add("中華");
genreAdapter.add("和食");
+ genreAdapter.add("洋食");
+ genreAdapter.add("中華");
genreAdapter.add("イタリアン");
genreAdapter.add("フレンチ");
+ genreAdapter.add("その他海外料理");
genreAdapter.add("カフェ");
genreAdapter.add("バー");
genreAdapter.add("居酒屋");
+ genreAdapter.add("焼肉");
+ genreAdapter.add("鍋");
+ genreAdapter.add("カレー");
+ genreAdapter.add("丼");
genreAdapter.add("ラーメン");
- genreAdapter.add("うどん・そば");
- genreAdapter.add("その他 海外料理");
- genreAdapter.add("その他 和食");
+ genreAdapter.add("うどん");
+ genreAdapter.add("そば");
genreAdapter.add("その他");
Spinner genreSpinner = (Spinner) findViewById(R.id.inputGenre);
genreSpinner.setAdapter(genreAdapter);
diff --git a/app/src/main/java/com/example/nemophila/ShopActivity.java b/app/src/main/java/com/example/nemophila/ShopActivity.java
index d02d414..d9a9451 100644
--- a/app/src/main/java/com/example/nemophila/ShopActivity.java
+++ b/app/src/main/java/com/example/nemophila/ShopActivity.java
@@ -11,11 +11,15 @@
import androidx.recyclerview.widget.RecyclerView;
import android.content.Intent;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
import android.os.Bundle;
+import android.os.Handler;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
+import android.widget.ImageView;
import android.widget.TextView;
import com.example.nemophila.entities.Account;
@@ -24,13 +28,21 @@
import com.example.nemophila.entities.Shop;
import com.example.nemophila.viewmodels.PostsViewModel;
+import java.io.InputStream;
+import java.net.HttpURLConnection;
+import java.net.URL;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
public class ShopActivity extends AppCompatActivity {
private ShopAcAdapter adapter = null;
+ private final ExecutorService executor = Executors.newSingleThreadExecutor();
+ private final Handler handler = new Handler();
+ private String iconUrlString;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -41,6 +53,7 @@
String shopName;
String sid;
String myUid = ((Nemophila)getApplication()).getUid();
+ Bitmap iconBitmap;
//NemophilaからcurrentShopを取得、店名の表示
shop = ((Nemophila)getApplication()).getCurrentShop();
@@ -70,6 +83,29 @@
//フレンドを取得
Collection friends = ((Nemophila)getApplication()).getFriends();
+ //Nemophilaから選択中のジャンル(HashSet)を受け取る
+ HashSet selectingGenre = ((Nemophila)getApplication()).getSelectGenres();
+ //選択中のジャンルが何かあれば表示
+ if(!(selectingGenre.isEmpty())) {
+ TextView genreView = (TextView) findViewById(R.id.shopAcGenre);
+ genreView.setText("選択中のジャンル:" + selectingGenre);
+ }
+
+ //Nemophilaから選択中のフレンド(HashSet)を受け取る
+ HashSet selectingFriend = ((Nemophila)getApplication()).getSelectFriends();
+ //選択したフレンドを表示するために名前を格納するHashSetを宣言
+ HashSet selectingFriendName = new HashSet<>();
+ //フレンド選択があればフレンド名をHashSetにセットし表示する
+ if(!(selectingFriend.isEmpty())) {
+ for (AccountNameJson friendNJ : friends) {
+ if (selectingFriend.contains(friendNJ.getUid())) {
+ selectingFriendName.add(friendNJ.getName());
+ }
+ }
+ TextView friendView = (TextView) findViewById(R.id.shopAcFriend);
+ friendView.setText("選択中のフレンド:" + selectingFriendName);
+ }
+
//RecyclerViewに表示する中身を格納するリストを宣言
List postsDataset = new ArrayList<>();
@@ -78,7 +114,7 @@
RecyclerView rv = (RecyclerView) findViewById(R.id.postsList);
adapter = new ShopAcAdapter(postsDataset);
- //一行ずつを縦に(LinearLayout)表示するLayoutManagerを宣言 第三引数のtrueで降順に表示
+ //一行ずつを縦に(LinearLayout)表示するLayoutManagerを宣言
LinearLayoutManager llm = new LinearLayoutManager(this);
//
RecyclerView.ItemDecoration itemDecoration =
@@ -88,6 +124,7 @@
rv.setHasFixedSize(true);
rv.setLayoutManager(llm);
+
//PostViewModelを宣言し、currentShopから取得したsidの店舗の投稿をロード
PostsViewModel postsViewModel = new ViewModelProvider(this).get(PostsViewModel.class);
postsViewModel.loadShopPost(sid);
@@ -97,32 +134,17 @@
@Override
public void onChanged(List ShopPosts) {
- //Nemophilaから選択中のジャンル(HashSet)を受け取る
- HashSet selectingGenre = ((Nemophila)getApplication()).getSelectGenres();
-
- //選択中のジャンルが何かあれば表示
- if(!(selectingGenre.isEmpty())) {
- TextView genreView = (TextView) findViewById(R.id.shopAcGenre);
- genreView.setText("選択中のジャンル:" + selectingGenre);
- }
-
- //Nemophilaから選択中のフレンド(HashSet)を受け取る
- HashSet selectingFriend = ((Nemophila)getApplication()).getSelectFriends();
- //選択したフレンドを表示するために名前を格納するHashSetの宣言
- HashSet selectingFriendName = new HashSet<>();
-
//postsDatasetを一旦クリアし、LiveDataから受け取ったデータを一つずつセット(重複しないように)
postsDataset.clear();
int postViewFrag;
for (Post post: ShopPosts){
- //dataを宣言 dataに投稿の必要なデータをセットし、それをpostsDatasetに追加してリストを作る
+ //dataを宣言 dataに投稿の必要なデータをpostから受け取ってセットし、それをpostsDatasetに追加してリストを作る
ShopAcDataModel data = new ShopAcDataModel();
- //フィルター判定のためにgenreとuidを、表示用のセットのためにnameを先に読み込む
+ //フィルター判定のためにgenreとuidを先に読み込む
String genre = post.getGenre();
String uid = post.getUid();
- String name = post.getName();
//投稿が自分もしくはフレンドのものかチェック
postViewFrag = 0;
@@ -138,12 +160,13 @@
//表示する投稿のみdataにセット
if(postViewFrag == 1) {
-// if(friends.contains(uid)){
//選択が何もない場合は全ての投稿を、選択がある場合は一致する投稿をdataにセット
if (selectingGenre.isEmpty() || selectingGenre.contains(genre)) {
if (selectingFriend.isEmpty() || selectingFriend.contains(uid)) {
- data.setName(name);
+ data.setName(post.getName());
data.setDate(post.getDate());
+ //アイコンをURLで取得、セット
+
//rateはintで受け取った評価に対応した星の数のStringに変換してセット
int intRate = post.getRate();
String strRate = "";
@@ -158,21 +181,39 @@
data.setGenre(genre);
data.setComment(post.getComment());
+ //アイコン仮セット
+ //url作る
+ iconUrlString = "http://nitta-lab-www.is.konan-u.ac.jp/nemophila-data/test01.jpg";
+
+ executor.execute(() -> {
+ try{
+ URL url = new URL(iconUrlString);
+ HttpURLConnection con = (HttpURLConnection) url.openConnection();
+ con.connect();
+
+ InputStream is = con.getInputStream();
+
+ Bitmap bitmap = BitmapFactory.decodeStream(is);
+ handler.post(() -> {
+ data.setIcon(bitmap);
+ adapter.notifyItemChanged(adapter.getPosition(data));
+ });
+ is.close();
+ con.disconnect();
+ }catch (Exception e){
+ e.printStackTrace();
+ }
+ });
+
+ //画像がなければViewの表示をgoneに、あればvisibleにして画像をセット
+// if(post.get) {
+// }
+
//投稿一つの情報がdataに全部セットされたらDatasetに追加
postsDataset.add(0, data);
}
}
}
- //フレンド名を表示用HashSetにセット
- if(!(selectingFriend.isEmpty()) && selectingFriend.contains(uid)) {
- selectingFriendName.add(name);
- }
- }
-
- //フレンド選択があればフレンド名を表示する
- if(!(selectingFriend.isEmpty())) {
- TextView friendView = (TextView) findViewById(R.id.shopAcFriend);
- friendView.setText("表示中のフレンド:" + selectingFriendName);
}
//RecyclerViewをonChangedが呼ばれるたび表示(アダプターを更新してRecyclerViewにセット)
@@ -196,6 +237,8 @@
this.list = list;
}
+ public int getPosition(ShopAcDataModel data) { return list.indexOf(data); }
+
@NonNull
@Override
public ShopAcViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
@@ -212,6 +255,27 @@
holder.rateView.setText(list.get(position).getRate());
holder.genreView.setText(list.get(position).getGenre());
holder.commentView.setText(list.get(position).getComment());
+ holder.iconView.setImageBitmap(list.get(position).getIcon());
+// //アイコン仮セット
+// executor.execute(() -> {
+// try{
+// URL url = new URL(iconUrlString);
+// HttpURLConnection con = (HttpURLConnection) url.openConnection();
+// con.connect();
+//
+// InputStream is = con.getInputStream();
+//
+// Bitmap bitmap = BitmapFactory.decodeStream(is);
+// handler.post(() -> {
+// ImageView imageView = findViewById(R.id.shopAcIconPic);
+// imageView.setImageBitmap(bitmap);
+// });
+// is.close();
+// con.disconnect();
+// }catch (Exception e){
+// e.printStackTrace();
+// }
+// });
}
@Override
@@ -227,14 +291,22 @@
public TextView rateView;
public TextView genreView;
public TextView commentView;
+ public ImageView iconView;
+ public ImageView image1View;
+ public ImageView image2View;
+ public ImageView image3View;
public ShopAcViewHolder(@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);
+ nameView = (TextView) itemView.findViewById(R.id.shopAcUserName);
+ dateView = (TextView) itemView.findViewById(R.id.shopAcDate);
+ rateView = (TextView) itemView.findViewById(R.id.shopAcRate);
+ genreView = (TextView) itemView.findViewById(R.id.shopAcGenre);
+ commentView = (TextView) itemView.findViewById(R.id.shopAcComment);
+ iconView = (ImageView) itemView.findViewById(R.id.shopAcIconPic);
+// image1View = (ImageView) itemView.findViewById(R.id.shopAcImage1);
+// image2View = (ImageView) itemView.findViewById(R.id.shopAcImage2);
+// image3View = (ImageView) itemView.findViewById(R.id.shopAcImage3);
}
}
@@ -245,6 +317,10 @@
private String rate;
private String genre;
private String comment;
+ private Bitmap icon;
+ private String image1;
+ private String image2;
+ private String image3;
public String getName() {
return name;
@@ -280,6 +356,27 @@
public void setComment(String comment) {
this.comment = comment;
}
+
+ public Bitmap getIcon() { return icon; }
+ public void setIcon(Bitmap icon) {
+ this.icon = icon;
+ }
+
+// public String getImage() { return image1; }
+// public void setImage1(String image1) {
+// this.image1 = image1;
+// }
+//
+// public String getImage2() { return image2; }
+// public void setImage2(String image2) {
+// this.image2 = image2;
+// }
+//
+// public String getImage3() { return image3; }
+// public void setImage3(String image3) {
+// this.image3 = image3;
+// }
+
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/nemophila/entities/ErrorType.java b/app/src/main/java/com/example/nemophila/entities/ErrorType.java
index 4ab24d7..8d40df5 100644
--- a/app/src/main/java/com/example/nemophila/entities/ErrorType.java
+++ b/app/src/main/java/com/example/nemophila/entities/ErrorType.java
@@ -5,7 +5,8 @@
NetworkError("ネットワークエラー"),
InvalidToken("トークンが不一致"),
UnknownError("不明なエラー"),
- ResponseNoyFound("リソースが見つかりません");
+ ResponseNotFound("リソースが見つかりません"),
+ ServerError("サーバーエラー");
private final String text;
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 a4f9f2a..8b5aed5 100644
--- a/app/src/main/java/com/example/nemophila/viewmodels/AccountViewModel.java
+++ b/app/src/main/java/com/example/nemophila/viewmodels/AccountViewModel.java
@@ -1,12 +1,9 @@
package com.example.nemophila.viewmodels;
import android.util.Log;
-import android.widget.TextView;
-import com.example.nemophila.R;
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;
@@ -37,7 +34,9 @@
private final MutableLiveData pwErrorLiveData;
private final MutableLiveData accountLiveData;
private final MutableLiveData errorLiveData;
- private final MutableLiveData finishChangeIconLiveData;
+ private final MutableLiveData successChangeIconLiveData;
+ private final MutableLiveData successDeleteAccountLiveData;
+ private final MutableLiveData delAcErrorLiveData;
// コンストラクタ
public AccountViewModel() {
@@ -52,7 +51,9 @@
this.pwErrorLiveData = new MutableLiveData<>();
this.accountLiveData = new MutableLiveData<>();
this.errorLiveData = new MutableLiveData<>();
- this.finishChangeIconLiveData = new MutableLiveData<>();
+ this.successChangeIconLiveData = new MutableLiveData<>();
+ this.successDeleteAccountLiveData = new MutableLiveData<>();
+ this.delAcErrorLiveData = new MutableLiveData<>();
}
// ライブデータの取得(ゲッター)
@@ -72,27 +73,9 @@
public MutableLiveData getErrorLiveData() {
return errorLiveData;
}
- public MutableLiveData getFinishChangeIconLiveData() {return finishChangeIconLiveData;}
-
- // 対象のアカウント情報の削除
- public void deleteAccount(String uid, String token) {
- Call call = accountsRest.deleteAccount(uid, token);
-
- call.enqueue(new Callback() {
- @Override
- public void onResponse(Call call, Response response) {
- if (response.isSuccessful()) {
- System.out.println("DeleteAccount Successful");
- } else {
- System.out.println("DeleteAccount ResponseError");
- }
- }
- @Override
- public void onFailure(Call call, Throwable t) {
- System.out.println("DeleteAccount NetworkError" + t);
- }
- });
- }
+ public MutableLiveData getSuccessChangeIconLiveData() { return successChangeIconLiveData; }
+ public MutableLiveData getSuccessDeleteAccountLiveData() { return successDeleteAccountLiveData; }
+ public MutableLiveData getDelAcErrorLiveData() { return delAcErrorLiveData; }
// 対象のアカウントパスワードの変更
public void changePw(String uid, String oldPw, String newPw, String token) {
@@ -149,16 +132,16 @@
@Override
public void onResponse(Call call, Response response) {
if (response.isSuccessful()) {
- finishChangeIconLiveData.setValue(true);
+ successChangeIconLiveData.setValue(true);
} else {
- finishChangeIconLiveData.setValue(false);
+ successChangeIconLiveData.setValue(false);
System.out.println("response error");
}
}
@Override
public void onFailure(Call call, Throwable t) {
- finishChangeIconLiveData.setValue(false);
+ successChangeIconLiveData.setValue(false);
System.out.println("ChangeIcon NetworkError :" + t);
}
});
@@ -275,14 +258,36 @@
accountPostsLiveData.setValue(preData);
}
+ // 対象のアカウント情報の削除
+ public void deleteAccount(String uid, String token) {
+ Call call = accountsRest.deleteAccount(uid, token);
+
+ call.enqueue(new Callback() {
+ @Override
+ public void onResponse(Call call, Response response) {
+ if (response.isSuccessful()) {
+ successDeleteAccountLiveData.setValue(true);
+ } else {
+ delAcErrorLiveData.setValue(parseStatusCode(response.code()));
+ }
+ }
+ @Override
+ public void onFailure(Call call, Throwable t) {
+ delAcErrorLiveData.setValue(ErrorType.NetworkError.getText());
+ }
+ });
+ }
+
private String parseStatusCode(Integer stats) {
switch (stats) {
case 404:
- return ErrorType.ResponseNoyFound.getText();
+ return ErrorType.ResponseNotFound.getText();
case 401:
return ErrorType.InvalidToken.getText();
case 400:
return ErrorType.ResponseError.getText();
+ case 500:
+ return ErrorType.ServerError.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 13e1bf2..0f5e67a 100644
--- a/app/src/main/java/com/example/nemophila/viewmodels/FriendViewModel.java
+++ b/app/src/main/java/com/example/nemophila/viewmodels/FriendViewModel.java
@@ -5,9 +5,6 @@
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;
import com.example.nemophila.resources.FriendsRest;
import java.util.ArrayList;
@@ -279,11 +276,13 @@
private String parseStatusCode(Integer stats) {
switch (stats) {
case 404:
- return ErrorType.ResponseNoyFound.getText();
+ return ErrorType.ResponseNotFound.getText();
case 401:
return ErrorType.InvalidToken.getText();
case 400:
return ErrorType.ResponseError.getText();
+ case 500:
+ return ErrorType.ServerError.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 9229454..d418ed8 100644
--- a/app/src/main/java/com/example/nemophila/viewmodels/PostsViewModel.java
+++ b/app/src/main/java/com/example/nemophila/viewmodels/PostsViewModel.java
@@ -153,11 +153,13 @@
private String parseStatusCode(Integer stats) {
switch (stats) {
case 404:
- return ErrorType.ResponseNoyFound.getText();
+ return ErrorType.ResponseNotFound.getText();
case 401:
return ErrorType.InvalidToken.getText();
case 400:
return ErrorType.ResponseError.getText();
+ case 500:
+ return ErrorType.ServerError.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 e5e8b46..3ffbb58 100644
--- a/app/src/main/java/com/example/nemophila/viewmodels/ShopsViewModel.java
+++ b/app/src/main/java/com/example/nemophila/viewmodels/ShopsViewModel.java
@@ -2,16 +2,12 @@
import androidx.lifecycle.LiveData;
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;
-import java.io.IOError;
-import java.io.IOException;
-import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
@@ -126,6 +122,7 @@
System.out.println("response null : setViewModel");
}
} else {
+ errorLiveData.setValue(parseStatusCode(response.code()));
System.out.println("ステータスコード 不正 : setViewModel");
}
}
@@ -135,6 +132,7 @@
public void onFailure(Call> call, Throwable t) {
System.out.println("通信失敗 : setViewModel");
System.out.println(t);
+ errorLiveData.setValue(ErrorType.UnknownError.getText());
}
});
}
@@ -152,6 +150,7 @@
nearShopsLiveData.setValue(response.body());
} else {
System.out.println("ShopsViewModel : 通信失敗");
+ errorLiveData.setValue(parseStatusCode(response.code()));
}
}
@@ -160,6 +159,7 @@
public void onFailure(Call> call, Throwable t) {
System.out.println("setViewModel : 通信失敗");
System.out.println(t);
+ errorLiveData.setValue(ErrorType.UnknownError.getText());
}
});
}
@@ -173,6 +173,8 @@
public void onResponse(Call call, Response response) {
if (response.isSuccessful()) {
currentShopLiveData.setValue(response.body());
+ } else {
+ errorLiveData.setValue(parseStatusCode(response.code()));
}
}
@@ -180,6 +182,7 @@
public void onFailure(Call call, Throwable t) {
System.out.println("通信失敗 : createShop");
System.out.println(t);
+ errorLiveData.setValue(ErrorType.UnknownError.getText());
}
});
}
@@ -187,11 +190,13 @@
private String parseStatusCode(Integer stats) {
switch (stats) {
case 404:
- return ErrorType.ResponseNoyFound.getText();
+ return ErrorType.ResponseNotFound.getText();
case 401:
return ErrorType.InvalidToken.getText();
case 400:
return ErrorType.ResponseError.getText();
+ case 500:
+ return ErrorType.ServerError.getText();
default:
return ErrorType.UnknownError.getText();
}
diff --git a/app/src/main/res/drawable/ic_backpage.xml b/app/src/main/res/drawable/ic_backpage.xml
new file mode 100644
index 0000000..36421a3
--- /dev/null
+++ b/app/src/main/res/drawable/ic_backpage.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/app/src/main/res/layout/activity_friend.xml b/app/src/main/res/layout/activity_friend.xml
index e42699e..e22a6fe 100644
--- a/app/src/main/res/layout/activity_friend.xml
+++ b/app/src/main/res/layout/activity_friend.xml
@@ -53,14 +53,14 @@
android:id="@+id/friendsList"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:visibility="invisible"/>
+ android:visibility="visible"/>
+ android:visibility="invisible">
-
-
-
+ android:layout_gravity="center_horizontal" />
-
-
+ android:layout_gravity="center_horizontal" />
+ android:layout_marginTop="30dp"
+ android:layout_gravity="center_horizontal" />
+
+
+
+
-
\ No newline at end of file
+ android:text="パスワードを忘れた場合"
+ android:layout_gravity="center_horizontal" />
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_maps.xml b/app/src/main/res/layout/activity_maps.xml
index df097a4..9038d20 100644
--- a/app/src/main/res/layout/activity_maps.xml
+++ b/app/src/main/res/layout/activity_maps.xml
@@ -80,7 +80,7 @@
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="0.04"
- android:text="フィルター"
+ android:text="フィルター設定(表示投稿の絞り込み)"
android:autoSizeTextType="uniform"/>
diff --git a/app/src/main/res/layout/activity_my_page_editor.xml b/app/src/main/res/layout/activity_my_page_editor.xml
index e187d18..d2530f5 100644
--- a/app/src/main/res/layout/activity_my_page_editor.xml
+++ b/app/src/main/res/layout/activity_my_page_editor.xml
@@ -1,134 +1,215 @@
-
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ android:orientation="vertical">
-
+
-
+
-
+
-
+
-
+
+
-
+
-
+
-
+
-
+
-
\ No newline at end of file
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ 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 666129e..6ad33bc 100644
--- a/app/src/main/res/layout/activity_mypage.xml
+++ b/app/src/main/res/layout/activity_mypage.xml
@@ -63,7 +63,7 @@
-
-
-
-
+
-
+
-
+
-
+
+
+
+
+
+
+
+
+
-
\ No newline at end of file
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_sign_up.xml b/app/src/main/res/layout/activity_sign_up.xml
index 73a479a..c1915b1 100644
--- a/app/src/main/res/layout/activity_sign_up.xml
+++ b/app/src/main/res/layout/activity_sign_up.xml
@@ -1,64 +1,54 @@
-
+ android:textColorHint="#757575" />
+ android:textColorHint="#757575" />
+ android:layout_gravity="center_horizontal"
+ android:layout_marginTop="5dp"
+ android:text="新規アカウント作成" />
-
\ No newline at end of file
+
\ 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 f682c29..054645f 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
@@ -62,11 +62,11 @@
+
+
-
-
-
-
-
+
+
+
+
+
+
+
\ No newline at end of file