diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml
index 78b143c..7bd27ea 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 961a5e2..4343ab5 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -15,10 +15,12 @@
+
+
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 0407368..b19b47f 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -26,7 +26,8 @@
+ android:label="Map"
+ android:windowSoftInputMode="adjustPan">
@@ -63,12 +64,12 @@
android:exported="true"
android:label="@string/title_activity_sign_up">
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
+
+
+
+
-
+
listData;
+ ListView list;
+ boolean isGenre;
+ String genreData[];
+ String friendsData[];
+
@Override
protected void onCreate(Bundle savedInstanceState) {
+
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
+ nemophila = (Nemophila) this.getApplication();
+
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayShowTitleEnabled(false);
- // ナビゲーションホストを取得する
- NavHostFragment navHostFragment =
- (NavHostFragment)getSupportFragmentManager()
- .findFragmentById(R.id.navHostFragment);
+ // DrawerToggle
+ DrawerLayout drawer =
+ (DrawerLayout) findViewById(R.id.drawer_layout);
+ ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
+ this, drawer, toolbar,
+ R.string.drawer_open,
+ R.string.drawer_close);
+ drawer.addDrawerListener(toggle);
+ toggle.syncState();
- // navHostFragmentのナビゲーションコントローラを取得する
- NavController navController = navHostFragment.getNavController();
+ // NavigationView Listener
+ NavigationView navigationView = (NavigationView) findViewById(R.id.navView);
+ navigationView.setNavigationItemSelectedListener(this);
- // アップバーのコンフィグレーションをビルドする
- AppBarConfiguration appBarConfiguration =
- new AppBarConfiguration.Builder(navController.getGraph())
- .setOpenableLayout((DrawerLayout)findViewById(R.id.drawer_layout))
- .build();
+ // geocode Test
+ handler = new Handler();
- // ナビゲーションUIをセットアップする
- NavigationUI.setupWithNavController(toolbar, navController, appBarConfiguration);
+// // 検索バーの処理
+// 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;
+// }
+// });
+
+ //filterDialog = new FilterDialog();
+
+ // サイドメニューのボタン
+ Button genreButton = findViewById(R.id.filter_genre_button);
+ Button friendButton = findViewById(R.id.filter_friends_button);
+
+ // 押したボタンを灰色にし、listを作成
+ genreButton.setOnClickListener(view -> {
+ genreButton.setBackgroundColor(Color.parseColor("#afafb0"));
+ friendButton.setBackgroundColor(Color.WHITE);
+ prepareGenreList(null);
+ });
+ friendButton.setOnClickListener(view -> {
+ friendButton.setBackgroundColor(Color.parseColor("#afafb0"));
+ genreButton.setBackgroundColor(Color.WHITE);
+ prepareFriendList(null);
+ });
+
+ // サイドメニューのフィルターのリストの準備
+ genreData = new String[5];
+ friendsData = new String[5];
+ genreData[0] = "和食";
+ genreData[1] = "中華";
+ genreData[2] = "イタリアン";
+ genreData[3] = "洋食";
+ genreData[4] = "ジャンクフード";
+
+ friendsData[0] = "iyo";
+ friendsData[1] = "iyo2";
+ friendsData[2] = "superiyo";
+ friendsData[3] = "perfectiyo";
+ friendsData[4] = "finaliyo";
+
+ listData = new ArrayList<>();
+ list = findViewById(R.id.drawer_list);
+ prepareGenreList(null);
+
+ // フィルターを有効にする
+ list.setTextFilterEnabled(true);
+
+ //サイドメニューの検索バー
+ SearchView listSearch = findViewById(R.id.drawer_search);
+ listSearch.setOnQueryTextListener(
+ new SearchView.OnQueryTextListener() {
+ // 入力テキストに変更があったとき
+ @Override
+ public boolean onQueryTextChange(String s) {
+ if(isGenre){
+ if(s.equals("")){
+ prepareGenreList(null);
+ } else {
+ prepareGenreList(s);
+ }
+ } else {
+ if(s.equals("")){
+ prepareFriendList(null);
+ } else {
+ prepareFriendList(s);
+ }
+ }
+ return false;
+ }
+
+ // 検索ボタンを押したとき
+ @Override
+ public boolean onQueryTextSubmit(String s) {
+ return false;
+ }
+ }
+ );
+
}
+ //右上のメニューを用意、マイページ画面への遷移
@Override
public boolean onCreateOptionsMenu(@NonNull Menu menu) {
getMenuInflater().inflate(R.menu.tool_menu, menu);
@@ -58,4 +184,145 @@
return super.onOptionsItemSelected(item);
}
+
+ public void prepareGenreList(String s){
+ // 現在表示されているリストがジャンルのリストかどうかを設定
+ isGenre = true;
+
+ // 一度リストのデータを取り除いてから追加する
+ listData.clear();
+ for(int i = 0; i < genreData.length; i++){
+ if(s == null) {
+ FilterDataModel fd = new FilterDataModel();
+ fd.setText(genreData[i]);
+ listData.add(fd);
+ } else {
+ if(genreData[i].contains(s)){
+ FilterDataModel fd = new FilterDataModel();
+ fd.setText(genreData[i]);
+ listData.add(fd);
+ }
+ }
+ }
+
+ // ListViewにデータをセットする
+ list.setAdapter(new MyAdapter(
+ this,
+ R.layout.filter_layout,
+ listData
+ ));
+ list.deferNotifyDataSetChanged();
+ }
+
+ public void prepareFriendList(String s){
+ // 現在表示されているリストがジャンルのリストかどうかを設定
+ isGenre = false;
+
+ // 一度リストのデータを取り除いてから追加する
+ listData.clear();
+ for(int i = 0; i < friendsData.length; i++){
+ if(s == null) {
+ FilterDataModel fd = new FilterDataModel();
+ fd.setText(friendsData[i]);
+ listData.add(fd);
+ } else {
+ if(friendsData[i].contains(s)){
+ FilterDataModel fd = new FilterDataModel();
+ fd.setText(friendsData[i]);
+ listData.add(fd);
+ }
+ }
+ }
+
+ // ListViewにデータをセットする
+ list.setAdapter(new MyAdapter(
+ this,
+ R.layout.filter_layout,
+ listData
+ ));
+ list.deferNotifyDataSetChanged();
+ }
+
+ @Override
+ public boolean onNavigationItemSelected(@NonNull MenuItem item) {
+ return false;
+ }
+
+ // 内部クラス
+ private class MyAdapter extends ArrayAdapter {
+ private LayoutInflater layoutInflater;
+ public MyAdapter(Context context, int resourceId, List objects){
+ super(context, resourceId, objects);
+
+ layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+ }
+
+ // 画面外に行ったときにチェックがずれないようにする
+ @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);
+ }
+
+ 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) {
+ checkBox.setChecked(nemophila.getSelectGenres().contains(item.getText()));
+ } else {
+ checkBox.setChecked(nemophila.getSelectFriends().contains(item.getText()));
+ }
+
+ // チェックボックスを押したときの処理
+ checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
+ @Override
+ 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;
+ }
+ });
+
+ return convertView;
+ }
+ }
+
+ private static class FilterDataModel{
+ private String text;
+ private boolean isChecked;
+
+ public String getText() {
+ return text;
+ }
+
+ public boolean isChecked() {
+ return isChecked;
+ }
+
+ public void setText(String text) {
+ this.text = 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 a1c429c..0ed3186 100644
--- a/app/src/main/java/com/example/nemophila/MapsFragment.java
+++ b/app/src/main/java/com/example/nemophila/MapsFragment.java
@@ -78,6 +78,7 @@
nemophila = (Nemophila) getActivity().getApplication();
mMap = googleMap;
+
//ViewModelへのアクセス
shopsViewModel = new ViewModelProvider(getActivity()).get(ShopsViewModel.class);
@@ -265,29 +266,6 @@
//2回目移行
currentMarker.setPosition(current_location);
}
-//
-// // マップに貼り付ける BitmapDescriptor生成
-// BitmapDescriptor descriptor = BitmapDescriptorFactory.fromResource(R.drawable.icon_current);
-// //Drawable ic_current = ResourcesCompat.getDrawable(getResources(),R.drawable.ic_current_location,null);
-//
-// // 貼り付設定
-// GroundOverlayOptions overlayOptions = new GroundOverlayOptions();
-// overlayOptions.image(descriptor);
-//
-// //public GroundOverlayOptions anchor (float u, float v)
-// // (0,0):top-left, (0,1):bottom-left, (1,0):top-right, (1,1):bottom-right
-// overlayOptions.anchor(0.5f, 0.5f);
-//
-// // 張り付け画像の大きさ メートル単位
-// // public GroundOverlayOptions position(LatLng location, float width, float height)
-// overlayOptions.position(current_location, 200f, 200f);
-//
-// // マップに貼り付け・アルファを設定
-// currentOverlay = mMap.addGroundOverlay(overlayOptions);
-//
-// // 透明度
-// assert currentOverlay != null;
-// currentOverlay.setTransparency(0.8F);
}
diff --git a/app/src/main/java/com/example/nemophila/Nemophila.java b/app/src/main/java/com/example/nemophila/Nemophila.java
index 37d9e2b..14f1aed 100644
--- a/app/src/main/java/com/example/nemophila/Nemophila.java
+++ b/app/src/main/java/com/example/nemophila/Nemophila.java
@@ -30,7 +30,7 @@
//フィルターのデータ
private HashSet selectGenres = new HashSet<>();
private HashSet selectFriends = new HashSet<>();
- private HashSet favoriteFriends = new HashSet<>();
+ private HashSet favoriteFriends;
//Account関連のGetter
public String getName() {
@@ -100,11 +100,11 @@
return selectFriends;
}
public HashSet getFavoriteFriends() {
- if(favoriteFriends.isEmpty()){
+ if(favoriteFriends == null){
SharedPreferences preferences = getSharedPreferences("prefData", MODE_PRIVATE);
- favoriteFriends = (HashSet) preferences.getStringSet("favoriteFriends", new HashSet<>());
+ favoriteFriends = new HashSet<>(preferences.getStringSet("favoriteFriends", new HashSet<>()));
}
- return new HashSet<>(favoriteFriends);
+ return favoriteFriends;
}
//Setter
@@ -146,18 +146,21 @@
SharedPreferences.Editor editor = preferences.edit();
editor.putFloat("cameraLatitude", (float) cameraLatitude);
this.cameraLatitude = cameraLatitude;
+ editor.commit();
}
public void setCameraLongitude(double cameraLongitude) {
SharedPreferences preferences = getSharedPreferences("prefData", MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putFloat("cameraLongitude", (float) cameraLongitude);
this.cameraLongitude = cameraLongitude;
+ editor.commit();
}
public void setZoom(float zoom) {
SharedPreferences preferences = getSharedPreferences("prefData", MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putFloat("zoom", zoom);
this.zoom = zoom;
+ editor.commit();
}
//フィルター関連のSetter
@@ -170,8 +173,9 @@
public void setFavoriteFriends(String favoriteFriend) {
SharedPreferences preferences = getSharedPreferences("prefData", MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
- editor.putStringSet("favoriteFriends", favoriteFriends);
this.favoriteFriends.add(favoriteFriend);
+ editor.putStringSet("favoriteFriends", favoriteFriends);
+ editor.commit();
}
//フィルターを取り除く
@@ -182,6 +186,6 @@
this.selectFriends.remove(selectFriend);
}
public void removeFavoriteFriends(String favoriteFriend){
- this.selectFriends.remove(favoriteFriend);
+ this.favoriteFriends.remove(favoriteFriend);
}
}
diff --git a/app/src/main/java/com/example/nemophila/RequestedActivity.java b/app/src/main/java/com/example/nemophila/RequestedActivity.java
index 5203dee..19e1515 100644
--- a/app/src/main/java/com/example/nemophila/RequestedActivity.java
+++ b/app/src/main/java/com/example/nemophila/RequestedActivity.java
@@ -4,9 +4,12 @@
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;
@@ -14,6 +17,7 @@
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
+import android.widget.Toast;
import com.example.nemophila.entities.Account;
import com.example.nemophila.entities.AccountNameJson;
@@ -24,10 +28,11 @@
import java.util.List;
public class RequestedActivity extends AppCompatActivity {
-
-
@Override
protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_requested);
+
//初期化
FriendViewModel friendViewModel = new ViewModelProvider(this).get(FriendViewModel.class);
Nemophila nemophila = (Nemophila) this.getApplication();
@@ -36,9 +41,6 @@
String uid = nemophila.getUid();
String token = nemophila.getToken();
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_requested);
-
Button returnButton = (Button)findViewById(R.id.CancelButton);
returnButton.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
@@ -48,11 +50,50 @@
});
RecyclerView rv = findViewById(R.id.requestedList);
- RequestedAdapter adapter = new RequestedAdapter(requestedDataSet);
+ RequestedAdapter adapter = new RequestedAdapter(requestedDataSet) {
+ @Override
+ void onOkButtonClick(View view, int position, RequestedUserModel userModel) {
+ new AlertDialog.Builder(RequestedActivity.this)
+ .setTitle("確認")
+ .setMessage("フレンド申請を承諾します")
+ .setPositiveButton("OK", new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialogInterface, int i) {
+ Toast.makeText(RequestedActivity.this, userModel.getName(), Toast.LENGTH_SHORT).show();
+ System.out.println("承諾ボタンが押されました: " + userModel.getName());
+ friendViewModel.putFriend(uid, userModel.getName() ,userModel.getId(), token);
+ }
+ })
+ .setNegativeButton("Cancel", null)
+ .create()
+ .show();
+ }
+ @Override
+ void onNoButtonClick(View view, int position, RequestedUserModel userModel) {
+ new AlertDialog.Builder(RequestedActivity.this)
+ .setTitle("警告")
+ .setMessage("フレンド申請を拒否します")
+ .setPositiveButton("OK", new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialogInterface, int i) {
+ Toast.makeText(RequestedActivity.this, userModel.getName(), Toast.LENGTH_SHORT).show();
+ System.out.println("拒否ボタンが押されました: " + userModel.getName());
+ friendViewModel.deleteRequested(uid, userModel.getId(), token);
+ }
+ })
+ .setNegativeButton("Cancel", null)
+ .create()
+ .show();
+ }
+ };
+
+ RecyclerView.ItemDecoration itemDecoration =
+ new DividerItemDecoration(this, DividerItemDecoration.VERTICAL);
+
+ rv.addItemDecoration(itemDecoration);
rv.setHasFixedSize(true);
rv.setLayoutManager(llm);
- rv.setAdapter(adapter);
friendViewModel.getRequested(uid);
friendViewModel.getRequestedLiveData().observe(this, new Observer>() {
@@ -72,7 +113,7 @@
}
//Adapter
- public class RequestedAdapter extends RecyclerView.Adapter {
+ abstract public class RequestedAdapter extends RecyclerView.Adapter {
private List list;
public RequestedAdapter(List list) {
this.list = list;
@@ -86,6 +127,23 @@
public RequestedViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View inflate = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_requested_activity, parent,false);
RequestedViewHolder vh = new RequestedViewHolder(inflate);
+
+ vh.okButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ int position = vh.getBindingAdapterPosition();
+ onOkButtonClick(view, position, list.get(position));
+ }
+ });
+
+ vh.noButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ int position = vh.getBindingAdapterPosition();
+ onNoButtonClick(view, position, list.get(position));
+ }
+ });
+
return vh;
}
@@ -98,15 +156,22 @@
public int getItemCount() {
return list.size();
}
+
+ abstract void onOkButtonClick(View view, int position, RequestedUserModel userModel);
+ abstract void onNoButtonClick(View view, int position, RequestedUserModel userModel);
}
//ViewHolder
public class RequestedViewHolder extends RecyclerView.ViewHolder {
public TextView nameView;
+ public Button okButton;
+ public Button noButton;
public RequestedViewHolder(@NonNull View view) {
super(view);
nameView = (TextView) view.findViewById(R.id.textView3);
+ okButton = view.findViewById(R.id.okButton);
+ noButton = view.findViewById(R.id.noButton);
}
}
diff --git a/app/src/main/java/com/example/nemophila/RequestingActivity.java b/app/src/main/java/com/example/nemophila/RequestingActivity.java
index 692dd76..988fadd 100644
--- a/app/src/main/java/com/example/nemophila/RequestingActivity.java
+++ b/app/src/main/java/com/example/nemophila/RequestingActivity.java
@@ -8,6 +8,8 @@
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;
@@ -17,9 +19,12 @@
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.Post;
+import com.example.nemophila.viewmodels.AccountViewModel;
import com.example.nemophila.viewmodels.FriendViewModel;
import com.example.nemophila.viewmodels.PostsViewModel;
@@ -29,14 +34,22 @@
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を取得
- String uid = ((Nemophila)getApplication()).getUid();
- String token = ((Nemophila)getApplication()).getToken();
- String requestingId;
+ uid = ((Nemophila)getApplication()).getUid();
+ token = ((Nemophila)getApplication()).getToken();
+
+
//左上のボタンでマイページへ遷移
Button returnButton = (Button)findViewById(R.id.requestingAcReturnButton);
@@ -47,6 +60,9 @@
}
});
+ //idからアカウント名を検索するためのAccountViewModelを宣言しておく
+ AccountViewModel accountViewModel = new ViewModelProvider(this).get(AccountViewModel.class);
+
//フレンド検索ボタン
Button requestingButton = (Button)findViewById(R.id.requestingSearchButton);
requestingButton.setOnClickListener(new View.OnClickListener(){
@@ -54,22 +70,61 @@
public void onClick(View v){
//入力されたIDを取得
EditText editSearchId = (EditText) findViewById(R.id.inputRequestingId);
- String searchingId = editSearchId.getText().toString();
- //取得したIDのユーザー名を受け取り、OKならreqyestingIdに入れる
- String requestingName;
- //申請を送るダイアログを表示
- RequestingDialogFragment dialog = new RequestingDialogFragment();
- dialog.show(getSupportFragmentManager(), "Requesting_dialog");
- //OK押したら申請するメソッドにuid、requestingId、tokenを渡す
+ searchingId = editSearchId.getText().toString();
+
+ //IDが存在しなければ落ちるのでその処理を書く
+ //取得したIDからアカウントを読み込んでおく
+ accountViewModel.fetchAccount(searchingId);
+ //検索用LiveDataへの購読
+ accountViewModel.getAccountLiveData().observe(RequestingActivity.this, new Observer() {
+
+ //ViewModelからアカウントが返ってくれば(データ変更があれば)実行
+ @Override
+ public void onChanged(Account user) {
+ requestingName = (user.getName());
+
+ //申請を送るダイアログ
+ RequestingDialogFragment dialog = new RequestingDialogFragment(RequestingActivity.this);
+ //名前を渡す
+ Bundle args = new Bundle();
+ args.putString("message", requestingName);
+ dialog.setArguments(args);
+
+ //ダイアログの表示
+ dialog.show(getSupportFragmentManager(), "Requesting_dialog");
+ //OK押したら申請するメソッドにuid、requestingId、tokenを渡す
+ }
+ });
+
}
});
- //RecyclerView(表示の設定、直接表示するところはLivedataを購読しているonChanged内にしたい)
+
+ //RecyclerView(表示の設定、直接表示するところはLivedataを購読しているonChanged内に)
List requestingDataList = new ArrayList<>();
- //xmlからrvにRecyclerViewを取得、アダプターを宣言
+ //xmlからrvにRecyclerViewを取得
RecyclerView rv = (RecyclerView) findViewById(R.id.requestingList);
- RequestingAdapter adapter = new RequestingAdapter(requestingDataList);
+
+ //アダプターを宣言し、削除ボタンを押したときの処理をオーバーライド
+ 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);
@@ -81,12 +136,11 @@
rv.setHasFixedSize(true);
rv.setLayoutManager(llm);
- //ViewModelを宣言し、申請先のデータをロードしておく
- FriendViewModel friendViewModel = new ViewModelProvider(this).get(FriendViewModel.class);
+ //FriendViewModelを初期化し、申請先のデータをロードしておく
+ friendViewModel = new ViewModelProvider(this).get(FriendViewModel.class);
friendViewModel.getRequesting(uid);
//申請先の一覧のLiveDataへの購読
-
friendViewModel.getRequestingLiveData().observe(this, new Observer>() {
//データに変更があった時実行
@Override
@@ -110,27 +164,16 @@
rv.setAdapter(adapter);
}
});
-
-
-// //表示テスト用に仮データ
-// List testDataSet = new ArrayList<>();
-// for (int i = 0; i < 15; i++) {
-// RequestingDataModel data = new RequestingDataModel();
-// data.setName("ネモフィラ太郎"+ i + "号(テスト)");
-//
-// testDataSet.add(data);
-// }
-// //onChange内に書くべき表示部分
-// adapter.setList(testDataSet);
-// rv.setAdapter(adapter);
-
-
}
+ //ダイアログでOKを押した時に呼び出される フレンド申請を送るメソッド
+ public void putRequesting(){
+ requestingId = searchingId;
+ friendViewModel.putRequesting(uid, requestingId, requestingName, token);
+ }
//RecyclerViewのための内部クラス
-
//Adapter
public class RequestingAdapter extends RecyclerView.Adapter {
@@ -151,13 +194,13 @@
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();
- // 処理はonItemClickに
- onItemClick(v, position, list.get(position));
+ // 処理はonDeleteClickに
+ onDeleteClick(v, position, list.get(position));
}
});
@@ -174,7 +217,7 @@
return list.size();
}
- void onItemClick(View view, int position, RequestingDataModel requesting) {
+ void onDeleteClick(View view, int position, RequestingDataModel requesting) {
// このメソッドをActivity内でオーバーライドして、クリックイベントの処理を設定する
}
}
diff --git a/app/src/main/java/com/example/nemophila/RequestingDialogFragment.java b/app/src/main/java/com/example/nemophila/RequestingDialogFragment.java
index 03fa52f..22a3c07 100644
--- a/app/src/main/java/com/example/nemophila/RequestingDialogFragment.java
+++ b/app/src/main/java/com/example/nemophila/RequestingDialogFragment.java
@@ -10,16 +10,25 @@
import androidx.fragment.app.DialogFragment;
public class RequestingDialogFragment extends DialogFragment {
+ private RequestingActivity requestingActivity;
+
+ public RequestingDialogFragment(RequestingActivity requestingActivity) {
+ this.requestingActivity = requestingActivity;
+ }
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
+
+ String message = getArguments().getString("message", "");
+
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("フレンド申請")
- .setMessage("IDにあったユーザー")
+ .setMessage(message + "さんに申請しますか?")
.setPositiveButton("申請を送る", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
- // ボタンを押した時の処理
+ // ボタンを押した時にフレンド申請を送る
+ requestingActivity.putRequesting();
}
})
.setNegativeButton("キャンセル", null);
diff --git a/app/src/main/java/com/example/nemophila/TestActivity.java b/app/src/main/java/com/example/nemophila/TestActivity.java
index 6a9c2e7..3ff993a 100644
--- a/app/src/main/java/com/example/nemophila/TestActivity.java
+++ b/app/src/main/java/com/example/nemophila/TestActivity.java
@@ -69,7 +69,7 @@
"和食", "辛いね", "", "", "");
break;
case 3:
- friendViewModel.putRequesting("1111", "1112", "a95d68cc-4efb-49e2-8f55-799f768a5c09");
+// friendViewModel.putRequesting("1111", "1112", "a95d68cc-4efb-49e2-8f55-799f768a5c09");
}
}
});
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 aec3547..8cc8f52 100644
--- a/app/src/main/java/com/example/nemophila/viewmodels/AccountViewModel.java
+++ b/app/src/main/java/com/example/nemophila/viewmodels/AccountViewModel.java
@@ -164,7 +164,7 @@
}
//idからアカウント情報を取得するメソッド
- private void fetchAccount(String id) {
+ public void fetchAccount(String id) {
Call call = accountsRest.getAccount(id);
call.enqueue(new Callback() {
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 3676d3f..a7493ca 100644
--- a/app/src/main/java/com/example/nemophila/viewmodels/FriendViewModel.java
+++ b/app/src/main/java/com/example/nemophila/viewmodels/FriendViewModel.java
@@ -9,6 +9,7 @@
import com.example.nemophila.resources.AccountsRest;
import com.example.nemophila.resources.FriendsRest;
+import java.util.ArrayList;
import java.util.Collection;
import retrofit2.Call;
@@ -56,34 +57,34 @@
public void onResponse(Call> call, Response> response) {
if (response.isSuccessful()) {
System.out.println("Successful");
- Collection accountNameJson = response.body();
- friendsLiveData.setValue(accountNameJson);
-
+ friendsLiveData.setValue(response.body());
} else {
- System.out.println("ResponseError");
+ System.out.println("ResponseError: " + response.code());
}
}
@Override
public void onFailure(Call> call, Throwable t) {
- System.out.println(" NetworkError" + t);
+ System.out.println(" NetworkError: " + t);
}
});
}
- public void putFriend(String uid,String fid, String token) {
+ public void putFriend(String uid, String fid, String name, String token) {
Call call = friendsRest.putFriend(uid,fid,token);
call.enqueue(new Callback() {
@Override
public void onResponse(Call call, Response response) {
if (response.isSuccessful()) {
+ addFriendLiveData(fid, name);
+ removeRequestedLiveData(fid);
System.out.println("Successful");
} else {
- System.out.println("ResponseError");
+ System.out.println("ResponseError: " + response.code());
}
}
@Override
public void onFailure(Call call, Throwable t) {
- System.out.println(" NetworkError" + t);
+ System.out.println(" NetworkError: " + t);
}
});
}
@@ -94,14 +95,15 @@
@Override
public void onResponse(Call call, Response response) {
if (response.isSuccessful()) {
+ removeFriendLiveData(fid);
System.out.println("Successful");
} else {
- System.out.println("ResponseError");
+ System.out.println("ResponseError: " + response.code());
}
}
@Override
public void onFailure(Call call, Throwable t) {
- System.out.println(" NetworkError" + t);
+ System.out.println(" NetworkError: " + t);
}
});
}
@@ -112,34 +114,34 @@
@Override
public void onResponse(Call> call, Response> response) {
if (response.isSuccessful()) {
+ requestingLiveData.setValue(response.body());
System.out.println("Successful");
- Collection accountNameJson = response.body();
- requestingLiveData.setValue(accountNameJson);
} else {
- System.out.println("ResponseError" + response.code());
+ System.out.println("ResponseError: " + response.code());
}
}
@Override
public void onFailure(Call> call, Throwable t) {
- System.out.println(" NetworkError" + t);
+ System.out.println(" NetworkError: " + t);
}
});
}
- public void putRequesting(String uid,String requesting_id, String token) {
+ public void putRequesting(String uid, String requesting_id, String name, String token) {
Call call = friendsRest.putRequesting(uid,requesting_id,token);
call.enqueue(new Callback() {
@Override
public void onResponse(Call call, Response response) {
if (response.isSuccessful()) {
System.out.println("Successful");
+ addRequestingLiveData(requesting_id, name);
} else {
- System.out.println("ResponseError" + response.code());
+ System.out.println("ResponseError: " + response.code());
}
}
@Override
public void onFailure(Call call, Throwable t) {
- System.out.println(" NetworkError" + t);
+ System.out.println(" NetworkError: " + t);
}
});
}
@@ -150,14 +152,15 @@
@Override
public void onResponse(Call call, Response response) {
if (response.isSuccessful()) {
+ removeRequestingLiveData(requesting_id);
System.out.println("Successful");
} else {
- System.out.println("ResponseError");
+ System.out.println("ResponseError: " + response.code());
}
}
@Override
public void onFailure(Call call, Throwable t) {
- System.out.println(" NetworkError" + t);
+ System.out.println(" NetworkError: " + t);
}
});
}
@@ -172,12 +175,12 @@
Collection accountNameJson = response.body();
requestedLiveData.setValue(accountNameJson);
} else {
- System.out.println("ResponseError");
+ System.out.println("ResponseError: " + response.code());
}
}
@Override
public void onFailure(Call> call, Throwable t) {
- System.out.println(" NetworkError" + t);
+ System.out.println(" NetworkError: " + t);
}
});
}
@@ -189,14 +192,73 @@
public void onResponse(Call call, Response response) {
if (response.isSuccessful()) {
System.out.println("Successful");
+ removeRequestedLiveData(fid);
} else {
- System.out.println("ResponseError");
+ System.out.println("ResponseError: " + response.code());
}
}
@Override
public void onFailure(Call call, Throwable t) {
- System.out.println(" NetworkError" + t);
+ System.out.println(" NetworkError: " + t);
}
});
}
+
+ private AccountNameJson createAccountNameJson(String uid, String name) {
+ AccountNameJson anj = new AccountNameJson();
+ anj.setUid(uid);
+ anj.setName(name);
+ return anj;
+ }
+
+ private void addFriendLiveData(String uid, String name) {
+ ArrayList preData = new ArrayList<>();
+ for (AccountNameJson anj: friendsLiveData.getValue()) {
+ preData.add(anj);
+ }
+ preData.add(createAccountNameJson(uid, name));
+ friendsLiveData.setValue(preData);
+ }
+
+ private void addRequestingLiveData(String uid, String name) {
+ ArrayList preData = new ArrayList<>();
+ for (AccountNameJson anj: requestingLiveData.getValue()) {
+ preData.add(anj);
+ }
+ preData.add(createAccountNameJson(uid, name));
+ requestedLiveData.setValue(preData);
+ }
+
+ private void removeFriendLiveData(String id) {
+ ArrayList preData = new ArrayList<>();
+ for (AccountNameJson anj: friendsLiveData.getValue()) {
+ if (anj.getUid().equals(id)) {
+ continue;
+ }
+ preData.add(anj);
+ friendsLiveData.setValue(preData);
+ }
+ }
+
+ private void removeRequestingLiveData(String id) {
+ ArrayList preData = new ArrayList<>();
+ for (AccountNameJson anj: requestingLiveData.getValue()) {
+ if (anj.getUid().equals(id)) {
+ continue;
+ }
+ preData.add(anj);
+ requestingLiveData.setValue(preData);
+ }
+ }
+
+ private void removeRequestedLiveData(String id) {
+ ArrayList preData = new ArrayList<>();
+ for (AccountNameJson anj: requestedLiveData.getValue()) {
+ if (anj.getUid().equals(id)) {
+ continue;
+ }
+ preData.add(anj);
+ requestedLiveData.setValue(preData);
+ }
+ }
}
diff --git a/app/src/main/res/layout/activity_maps.xml b/app/src/main/res/layout/activity_maps.xml
index 7636d4b..df097a4 100644
--- a/app/src/main/res/layout/activity_maps.xml
+++ b/app/src/main/res/layout/activity_maps.xml
@@ -29,9 +29,10 @@
app:menu="@menu/tool_menu">
+ android:layout_height="wrap_content"
+ app:queryHint="地名検索"/>
@@ -68,6 +69,61 @@
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
- app:menu="@menu/navdrawer_menu" />
+ >
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ 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 956e605..9dcff08 100644
--- a/app/src/main/res/layout/activity_mypage.xml
+++ b/app/src/main/res/layout/activity_mypage.xml
@@ -127,10 +127,10 @@
android:layout_marginBottom="20dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
- app:layout_constraintHorizontal_bias="0.5"
+ app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/myPageEdit"
- app:layout_constraintVertical_bias="0">
+ app:layout_constraintVertical_bias="1.0">
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/filter_layout.xml b/app/src/main/res/layout/filter_layout.xml
new file mode 100644
index 0000000..166c128
--- /dev/null
+++ b/app/src/main/res/layout/filter_layout.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/layout_friends_activity.xml b/app/src/main/res/layout/layout_friends_activity.xml
index 210313a..a0353d9 100644
--- a/app/src/main/res/layout/layout_friends_activity.xml
+++ b/app/src/main/res/layout/layout_friends_activity.xml
@@ -46,7 +46,7 @@
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
- android:layout_gravity="center"
+ android:gravity="center"
android:text="TextView" />
Button
+ Drawer Open
+ Drawer Close
+
\ No newline at end of file