diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml
index ce98f32..63e623f 100644
--- a/.idea/deploymentTargetDropDown.xml
+++ b/.idea/deploymentTargetDropDown.xml
@@ -7,11 +7,11 @@
-
+
-
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 7ad4240..539ed66 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -9,42 +9,49 @@
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
+
-
-
-
-
-
-
-
+
-
-
+
+
-
-
-
+
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;
// フィルターのリスト用
@@ -63,7 +55,7 @@
ListView list;
boolean isGenre;
String genreData[];
- ArrayList friendsData;
+ ArrayList UsersData;
@Override
@@ -97,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);
@@ -134,14 +139,10 @@
// サイドメニューのフィルターのリストの準備
genreData = new String[]{"中華", "和食", "イタリアン", "フレンチ", "カフェ", "バー", "居酒屋", "ラーメン", "うどん・そば", "その他 海外料理"};
- friendsData = new ArrayList<>();
- //NameToId = new HashMap<>();
+ 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());
@@ -149,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());
}
}
});
@@ -211,7 +211,7 @@
return super.onOptionsItemSelected(item);
}
-
+ //ジャンルfilter設定画面になったとき
public void prepareGenreList(String s){
//sは検索欄に入力された文字列
@@ -243,6 +243,7 @@
list.deferNotifyDataSetChanged();
}
+ //ユーザーfilter設定画面になったとき
public void prepareFriendList(String s){
//sは検索欄に入力された文字列
@@ -251,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);
}
}
}
@@ -296,7 +302,7 @@
layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
- // 画面外に行ったときにチェックがずれないようにする
+ // 画面外に行ったときにチェックがはずれないようにする
@Override
public View getView(int position, View convertView, ViewGroup parent) {
CheckBox checkBox;
@@ -336,34 +342,31 @@
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);
ArrayList userIdSet = (ArrayList)shop.getUserIdSet().clone();
- friendsData.add(nemophila.getUid());
- userIdSet.retainAll(friendsData);
+ UsersData.add(nemophila.getUid());
+ userIdSet.retainAll(UsersData);
//自分とそのフレンド以外の投稿は確認しない
if( userIdSet.size() > 0) {
@@ -428,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;
@@ -443,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 20e9e3d..e7b1f33 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,6 +35,14 @@
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;
@@ -43,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;
@@ -67,6 +78,7 @@
Nemophila nemophila;
private GoogleMap mMap;
+ private GeoApiContext geoApiContext;
private ActivityMainBinding binding;
private LatLng currentLatlng = null;
private LatLng initialLatlng;
@@ -108,77 +120,76 @@
});
-
// 店情報の更新が入った時の処理(LiveDataへの購読)
shopsViewModel.getShopsLiveData().observe(getActivity(), shops -> {
Toast.makeText(getActivity(),
String.format("表示していない店を確認しました。ピンを立てます"),
Toast.LENGTH_SHORT)
.show();
- 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);
+ 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);
- //ShopToMarkerに紐づけ
- shopsViewModel.setShopAndMarker(shop, createMarker);
- System.out.println(friendsData);
+ //ShopToMarkerに紐づけ
+ shopsViewModel.setShopAndMarker(shop, createMarker);
+ System.out.println(friendsData);
- ArrayList userIdSet = (ArrayList)shop.getUserIdSet().clone();
- friendsData.add(nemophila.getUid());
- userIdSet.retainAll(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);
- }
- }
- }
- //フレンドのみフィルターをかけているとき
- 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 {
- createMarker.setVisible(false);
+ //自分とそのフレンド以外の投稿は確認しない
+ 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);
+ }
+ }
+ }
+ //フレンドのみフィルターをかけているとき
+ 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 {
+ createMarker.setVisible(false);
}
}
+ }
});
// 長押しを認識した後の処理(LiveDataへの購読)
@@ -188,9 +199,9 @@
Toast.LENGTH_SHORT)
.show();
- //長押し時は周辺のピンを全て取得し、ダイアログに表示する
- DialogFragment dialogFragment = new MapsDialogFragment(shops);
- dialogFragment.show(getActivity().getSupportFragmentManager(),"mapsdialog");
+ //長押し時は周辺のピンを全て取得し、ダイアログに表示する
+ DialogFragment dialogFragment = new MapsDialogFragment(shops);
+ dialogFragment.show(getActivity().getSupportFragmentManager(), "mapsdialog");
});
//初期画面の座標(現在地をロードするまで表示)
@@ -212,16 +223,16 @@
});
- // 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();
+ });
//長押し時に店を作成し、その座標にピンを立てる
@@ -237,7 +248,7 @@
//テスト用
//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);
});
// ピンをクリックした場合
@@ -245,7 +256,7 @@
@Override
public boolean onMarkerClick(Marker marker) {
//現在地マーカーをクリックしたときのみ例外
- if(marker.getTag() == null) {
+ if (marker.getTag() == null) {
//以下の処理をストップ
return false;
}
@@ -285,8 +296,7 @@
requestPermissionLauncher.launch(
Manifest.permission.ACCESS_FINE_LOCATION);
- }
- else{
+ } else {
locationStart();
}
@@ -305,7 +315,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);
@@ -338,7 +348,7 @@
//初回現在地取得時
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回目移行
currentMarker.setPosition(current_location);
@@ -352,8 +362,7 @@
isGranted -> {
if (isGranted) {
locationStart();
- }
- else {
+ } else {
Toast toast = Toast.makeText(getActivity(),
"これ以上なにもできません", Toast.LENGTH_SHORT);
toast.show();
@@ -362,8 +371,8 @@
//現在地の取得
@SuppressLint("MissingPermission")
- private void locationStart(){
- Log.d("debug","locationStart()");
+ private void locationStart() {
+ Log.d("debug", "locationStart()");
// LocationManager インスタンス生成
locationManager =
@@ -399,7 +408,7 @@
@Override
public void onLocationChanged(Location location) {
//初期画面は現在地を中心にするため...
- if (currentLatlng == null){
+ if (currentLatlng == null) {
//↓現在地ロード後画面中心を現在地にする場合
//zoomMap(location.getLatitude(), location.getLongitude());
//ロード画面の終了
@@ -409,7 +418,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());
//現在地にカメラを移動
@@ -422,7 +431,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/MyPageEditorActivity.java b/app/src/main/java/com/example/nemophila/MyPageEditorActivity.java
index a92b444..a52e03b 100644
--- a/app/src/main/java/com/example/nemophila/MyPageEditorActivity.java
+++ b/app/src/main/java/com/example/nemophila/MyPageEditorActivity.java
@@ -7,6 +7,8 @@
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider;
+import android.app.AlertDialog;
+import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
@@ -27,18 +29,19 @@
public class MyPageEditorActivity extends AppCompatActivity {
private String icon;
- //マイページ編集画面の作成
+ private Nemophila nemophila;
+ private String uid;
+ private String token;
+ //マイページ編集画面の作成
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 = (ImageButton)findViewById(R.id.changeIconButton);
+ ImageButton changeIconButton = findViewById(R.id.changeIconButton);
changeIconButton.setImageURI(uri);
}
-
});
@Override
@@ -46,60 +49,17 @@
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();
//MyPageに戻るボタン
- ImageButton backButton = (ImageButton) findViewById(R.id.backMyPage);
- backButton.setOnClickListener(new View.OnClickListener() {
- public void onClick(View v) {
- Intent intent = new Intent(MyPageEditorActivity.this, MyPageActivity.class);
- startActivity(intent);
- }
- });
- //LiveDataへの購読
- accountViewModel.getNameLiveData().observe(this, new Observer() {
- @Override
- public void onChanged(String name) {
- TextView myName = (TextView) findViewById(R.id.editName);
- myName.setText(name);
- nemophila.setName(name);
- }
+ ImageButton backButton = findViewById(R.id.backMyPage);
+ backButton.setOnClickListener(v -> finish());
- });
- accountViewModel.getNameLiveData().observe(this, new Observer() {
- @Override
- public void onChanged(String name) {
- TextView myName = (TextView) findViewById(R.id.editName);
- myName.setText(name);
- nemophila.setName(name);
- }
-
- });
- //LiveDataへの購読
- accountViewModel.getPwLiveData().observe(this, new Observer() {
- @Override
- public void onChanged(String Pw) {
- Intent intent = new Intent(MyPageEditorActivity.this, MyPageActivity.class);
- startActivity(intent);
- }
-
- });
- //LiveDataへの購読
- accountViewModel.getPwErrorLiveData().observe(this, new Observer() {
- @Override
- public void onChanged(String name) {
- Toast ts = Toast.makeText(MyPageEditorActivity.this, "パスワードが間違っています", Toast.LENGTH_SHORT);
- ts.setGravity(Gravity.CENTER, 0, 0);
- ts.show();
- }
-
- });
- ImageButton changeIconButton = (ImageButton)findViewById(R.id.changeIconButton);
+ ImageButton changeIconButton = findViewById(R.id.changeIconButton);
changeIconButton.setOnClickListener(new View.OnClickListener(){
public void onClick(View v) {
launcher.launch(new String[] {"image/*"});
@@ -107,43 +67,114 @@
});
//変更確定ボタンを押した場合の動き
- Button changeNameButton = (Button) findViewById(R.id.changeConfirm);
+ Button changeNameButton = findViewById(R.id.changeConfirm);
changeNameButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
//名前とパスワードを取り込む
- EditText editName = (EditText) findViewById(R.id.editName);
+ EditText editName = findViewById(R.id.editName);
String newName = editName.getText().toString();
- EditText editOldPw = (EditText) findViewById(R.id.editOldPw);
+ EditText editOldPw = findViewById(R.id.editOldPw);
String oldPw = editOldPw.getText().toString();
- EditText editNewPw = (EditText) findViewById(R.id.editNewPw);
+ EditText editNewPw = 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) {
+ // 名前が入力されているとき通信を行う
+ if(newName.length() > 0) {
System.out.println(newName);
accountViewModel.changeName(uid, newName, token);
}
- if(oldPw!=null && newPw!=null) {
+ // パスワードが入力されているとき通信を行う
+ if(oldPw.length() > 0 && newPw.length() > 0) {
accountViewModel.changePw(uid, oldPw, newPw, token);
}
- if(icon!=null){
+ // アイコンが入力されているとき通信を行う
+ if(icon != null){
accountViewModel.changeIcon(uid, icon, token);
}
}
});
- //削除ボタンを押したときの処理
- 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);
+ // ログアウトボタンを押したときの処理
+ 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 = findViewById(R.id.editName);
+ myName.setText(name);
+ nemophila.setName(name);
+ }
+ });
+
+ // アカウントのパスワードを取得した際のLiveDataの購読
+ accountViewModel.getPwLiveData().observe(this, new Observer() {
+ @Override
+ public void onChanged(String Pw) {
+ finish();
+ }
+ });
+
+ // パスワードのエラーが発生した際のLiveDataの購読
+ accountViewModel.getPwErrorLiveData().observe(this, new Observer() {
+ @Override
+ public void onChanged(String name) {
+ Toast ts = Toast.makeText(MyPageEditorActivity.this, "パスワードが間違っています", Toast.LENGTH_SHORT);
+ ts.setGravity(Gravity.CENTER, 0, 0);
+ ts.show();
+ }
+ });
+
+ // アカウントの削除をした際のLiveDataの購読
+ accountViewModel.getSuccessDeleteAccountLiveData().observe(this, new Observer() {
+ @Override
+ public void onChanged(Boolean isSuccess) {
Intent intent = new Intent(MyPageEditorActivity.this, SignUpActivity.class);
- startActivity(intent);
+ intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);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();
}
});
}
diff --git a/app/src/main/java/com/example/nemophila/Nemophila.java b/app/src/main/java/com/example/nemophila/Nemophila.java
index 8408f01..79c017d 100644
--- a/app/src/main/java/com/example/nemophila/Nemophila.java
+++ b/app/src/main/java/com/example/nemophila/Nemophila.java
@@ -213,5 +213,6 @@
SharedPreferences.Editor editor = preferences.edit();
editor.remove("token");
editor.commit();
+ token = null;
}
}
diff --git a/app/src/main/java/com/example/nemophila/ShopActivity.java b/app/src/main/java/com/example/nemophila/ShopActivity.java
index e3f9aad..e2ca152 100644
--- a/app/src/main/java/com/example/nemophila/ShopActivity.java
+++ b/app/src/main/java/com/example/nemophila/ShopActivity.java
@@ -71,6 +71,31 @@
//フレンドを取得
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<>();
@@ -98,32 +123,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;
@@ -139,12 +149,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,22 +169,15 @@
data.setRate(strRate);
data.setGenre(genre);
data.setComment(post.getComment());
+ //画像がなければ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にセット)
@@ -242,9 +246,9 @@
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);
+// image1View = (ImageView) itemView.findViewById(R.id.shopAcImage1);
+// image2View = (ImageView) itemView.findViewById(R.id.shopAcImage2);
+// image3View = (ImageView) itemView.findViewById(R.id.shopAcImage3);
}
}
@@ -300,20 +304,20 @@
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;
- }
+// 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;
+// }
}
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..5f3d05b 100644
--- a/app/src/main/java/com/example/nemophila/viewmodels/AccountViewModel.java
+++ b/app/src/main/java/com/example/nemophila/viewmodels/AccountViewModel.java
@@ -37,7 +37,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 +54,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 +76,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 +135,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,6 +261,26 @@
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:
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_login.xml b/app/src/main/res/layout/activity_login.xml
index 79e37dc..b7c9dea 100644
--- a/app/src/main/res/layout/activity_login.xml
+++ b/app/src/main/res/layout/activity_login.xml
@@ -1,37 +1,24 @@
-
-
-
+ 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 b58c5f0..5cf57e7 100644
--- a/app/src/main/res/layout/activity_my_page_editor.xml
+++ b/app/src/main/res/layout/activity_my_page_editor.xml
@@ -1,159 +1,213 @@
-
+ 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_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