diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml index 8aaaa2c..498ac9e 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 54ed16b..743778d 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -10,9 +10,12 @@ + + + diff --git a/app/src/main/java/com/example/nemophila/FriendActivity.java b/app/src/main/java/com/example/nemophila/FriendActivity.java index 89066d2..d611634 100644 --- a/app/src/main/java/com/example/nemophila/FriendActivity.java +++ b/app/src/main/java/com/example/nemophila/FriendActivity.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; @@ -53,9 +55,19 @@ // getFriendsの通信が呼び出されて、フレンドの一覧をfriendsDatasetに格納し、Adapterにセットする FriendActivityAdapter adapter = new FriendActivityAdapter(friendsDataset) { @Override - void onItemClick(View view, int position, FriendDataModel friend) { - Toast.makeText(FriendActivity.this, friend.getName(), Toast.LENGTH_SHORT).show(); -// friendViewModel.deleteFriend(myUid, friend.getId(), myToken); + void onDeleteClick(View view, int position, FriendDataModel friend) { + new AlertDialog.Builder(FriendActivity.this) + .setTitle("フレンドから" + friend.getName() + "を削除しますか?") + .setPositiveButton("OK", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + Toast.makeText(FriendActivity.this, friend.getName(), Toast.LENGTH_SHORT).show(); +// friendViewModel.deleteFriend(myUid, friend.getId(), myToken); + } + }) + .setNegativeButton("キャンセル", null) + .create() + .show(); } }; friendViewModel.getFriends(myUid); // 自身のフレンドの一覧を取得するメソッドを呼び出す @@ -89,7 +101,7 @@ // ----------- RecyclerView用の内部クラス ------------// // Adapter - public class FriendActivityAdapter extends RecyclerView.Adapter { + abstract public class FriendActivityAdapter extends RecyclerView.Adapter { private List friendDatas; public FriendActivityAdapter(List friendDatas) { @@ -114,7 +126,7 @@ public void onClick(View v) { int position = vh.getBindingAdapterPosition(); // 処理はonItemClick()に丸投げ - onItemClick(v, position, friendDatas.get(position)); + onDeleteClick(v, position, friendDatas.get(position)); } }); @@ -132,9 +144,7 @@ return friendDatas.size(); } - void onItemClick(View view, int position, FriendDataModel friend) { - // このメソッドをActivity内でオーバーライドして、クリックイベントの処理を設定する - } + abstract void onDeleteClick(View view, int position, FriendDataModel friend); } // ViewHolder diff --git a/app/src/main/java/com/example/nemophila/LoginActivity.java b/app/src/main/java/com/example/nemophila/LoginActivity.java index 18169eb..033fa07 100644 --- a/app/src/main/java/com/example/nemophila/LoginActivity.java +++ b/app/src/main/java/com/example/nemophila/LoginActivity.java @@ -35,7 +35,7 @@ nemophila = (Nemophila) this.getApplication(); //Nemophilaにtokenとuidがある場合ログイン画面をスキップ if ((nemophila.getUid() != null) && (nemophila.getToken() != null)){ - Intent intent = new Intent(LoginActivity.this,MainActivity.class); + Intent intent = new Intent(LoginActivity.this,MapsActivity.class); startActivity(intent); return; } @@ -72,7 +72,7 @@ nemophila.setToken(response.body().getToken()); //mainに画面遷移 - Intent intent = new Intent(LoginActivity.this,MainActivity.class); + Intent intent = new Intent(LoginActivity.this,MapsActivity.class); startActivity(intent); } else { System.out.println("通信可能:changeBelongsAndMaster: " + response.code()); diff --git a/app/src/main/java/com/example/nemophila/Nemophila.java b/app/src/main/java/com/example/nemophila/Nemophila.java index b48eb3c..37d9e2b 100644 --- a/app/src/main/java/com/example/nemophila/Nemophila.java +++ b/app/src/main/java/com/example/nemophila/Nemophila.java @@ -11,8 +11,6 @@ import java.util.HashSet; public class Nemophila extends Application { - private final int MAX_FILTER = 5; - //アカウントのデータ private String name; private String uid; @@ -32,6 +30,7 @@ //フィルターのデータ private HashSet selectGenres = new HashSet<>(); private HashSet selectFriends = new HashSet<>(); + private HashSet favoriteFriends = new HashSet<>(); //Account関連のGetter public String getName() { @@ -100,6 +99,13 @@ public HashSet getSelectFriends() { return selectFriends; } + public HashSet getFavoriteFriends() { + if(favoriteFriends.isEmpty()){ + SharedPreferences preferences = getSharedPreferences("prefData", MODE_PRIVATE); + favoriteFriends = (HashSet) preferences.getStringSet("favoriteFriends", new HashSet<>()); + } + return new HashSet<>(favoriteFriends); + } //Setter public void setName(String name) { @@ -161,6 +167,12 @@ public void setSelectFriends(String selectFriend) { this.selectFriends.add(selectFriend); } + public void setFavoriteFriends(String favoriteFriend) { + SharedPreferences preferences = getSharedPreferences("prefData", MODE_PRIVATE); + SharedPreferences.Editor editor = preferences.edit(); + editor.putStringSet("favoriteFriends", favoriteFriends); + this.favoriteFriends.add(favoriteFriend); + } //フィルターを取り除く public void removeSelectGenres(String selectGenre){ @@ -169,4 +181,7 @@ public void removeSelectFriends(String selectFriend) { this.selectFriends.remove(selectFriend); } + public void removeFavoriteFriends(String favoriteFriend){ + this.selectFriends.remove(favoriteFriend); + } } diff --git a/app/src/main/java/com/example/nemophila/PostActivity.java b/app/src/main/java/com/example/nemophila/PostActivity.java index cf0b6b2..fb9ed9b 100644 --- a/app/src/main/java/com/example/nemophila/PostActivity.java +++ b/app/src/main/java/com/example/nemophila/PostActivity.java @@ -6,6 +6,7 @@ import android.content.Intent; import android.os.Bundle; +import android.provider.MediaStore; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; @@ -73,7 +74,7 @@ nemophila.setDummyShop(null); nemophila.setCurrentShop(null); - Intent intent = new Intent(getApplication(), MainActivity.class); + Intent intent = new Intent(getApplication(), MapsActivity.class); startActivity(intent); } }); @@ -106,7 +107,7 @@ nemophila.setDummyShop(null); nemophila.setCurrentShop(null); //画面遷移 - Intent intent = new Intent(getApplication(), MainActivity.class); + Intent intent = new Intent(getApplication(), MapsActivity.class); startActivity(intent); } }); @@ -159,18 +160,53 @@ }); - //コメント入力 + //製作途中 +// +// Intent intent = new Intent(MediaStore.AC); +// intent.setType("image/*"); +// +// Button selectPictureButton = (Button)findViewById(R.id.selectpicturebutton); +// selectPictureButton.setOnClickListener(new View.OnClickListener(){ +// public void onClick(View v) { +//// 画像選択(3枚) +// +// intent.setAction(Intent.ACTION_OPEN_DOCUMENT); +// intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true); +// String title = "Select multiple images"; +// Intent chooser = Intent.createChooser(intent, title); +// startActivityForResult(chooser, REQ_CODE_CHOOSE_FILES_URI); +// } +// }); +// +// public void onActivityResult(int requestCode, int resultCode, final Intent data) { +// super.onActivityResult(requestCode, resultCode, intent); +// +// if (resultCode != Activity.RESULT_OK) { +// // Handle error +// return; +// } +// +// switch(requestCode) { +// case REQUEST_PHOTO_PICKER_SINGLE_SELECT: +// // Get photo picker response for single select. +// Uri currentUri = data.getData(); +// +// // Do stuff with the photo/video URI. +// return; +// case REQUEST_PHOTO_PICKER_MULTI_SELECT: +// // Get photo picker response for multi select +// for (int i = 0; i < data.getClipData().getItemCount(); i++) { +// Uri currentUri = data.getClipData().getItemAt(i).getUri(); +// +// // Do stuff with each photo/video URI. +// } +// return; +// } +// } +// +// +// - Button selectPictureButton = (Button)findViewById(R.id.selectpicturebutton); - selectPictureButton.setOnClickListener(new View.OnClickListener(){ - public void onClick(View v) { - //画像選択(3枚) -// final int maxNumPhotosAndVideos = 10; -// Intent intent = new Intent(MediaStore.ACTION_PICK_IMAGES); -// intent.putExtra(MediaStore.EXTRA_PICK_IMAGES_MAX, maxNumPhotosAndVideos); -// startActivityForResult(intent, PHOTO_PICKER_MULTI_SELECT_REQUEST_CODE); - } - }); //投稿ボタンの処理 @@ -206,7 +242,7 @@ nemophila.setDummyShop(null); nemophila.setCurrentShop(null); - Intent intent = new Intent(getApplication(), MainActivity.class); + Intent intent = new Intent(getApplication(), MapsActivity.class); startActivity(intent); } } diff --git a/app/src/main/java/com/example/nemophila/RequestedActivity.java b/app/src/main/java/com/example/nemophila/RequestedActivity.java index 6f075f9..7ef5534 100644 --- a/app/src/main/java/com/example/nemophila/RequestedActivity.java +++ b/app/src/main/java/com/example/nemophila/RequestedActivity.java @@ -1,15 +1,126 @@ package com.example.nemophila; +import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import android.content.Intent; import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.TextView; + +import com.example.nemophila.entities.Account; +import com.example.nemophila.entities.AccountNameJson; +import com.example.nemophila.viewmodels.FriendViewModel; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; public class RequestedActivity extends AppCompatActivity { - private RequestedAdapter adapter = null; + + FriendViewModel friendViewModel = new ViewModelProvider(this).get(FriendViewModel.class); + Nemophila nemophila = (Nemophila) this.getApplication(); + List requestedDataSet = new ArrayList<>(); + LinearLayoutManager llm = new LinearLayoutManager(this); + String uid = nemophila.getUid(); + String token = nemophila.getToken(); @Override protected void onCreate(Bundle savedInstanceState) { 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){ + Intent intent = new Intent(getApplication(), MyPageActivity.class); + startActivity(intent); + } + }); + + RecyclerView rv = findViewById(R.id.requestedList); + RequestedAdapter adapter = new RequestedAdapter(requestedDataSet); + + rv.setHasFixedSize(true); + rv.setLayoutManager(llm); + rv.setAdapter(adapter); + + friendViewModel.getRequested(uid); + friendViewModel.getRequestedLiveData().observe(this, new Observer>() { + @Override + public void onChanged(Collection accountNameJsons) { + requestedDataSet.clear(); + for (AccountNameJson acj: accountNameJsons) { + RequestedUserModel data = new RequestedUserModel(); + data.setId(acj.getUid()); + data.setName(acj.getName()); + requestedDataSet.add(data); + } + } + }); + } + + //Adapter + public class RequestedAdapter extends RecyclerView.Adapter { + private List list; + public RequestedAdapter(List list) { + this.list = list; + } + public void setList(List list) { + this.list = list; + } + + @NonNull + @Override + 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); + return vh; + } + + @Override + public void onBindViewHolder(@NonNull RequestedViewHolder holder, int position) { + holder.nameView.setText(list.get(position).getName()); + } + + @Override + public int getItemCount() { + return list.size(); + } + } + + //ViewHolder + public class RequestedViewHolder extends RecyclerView.ViewHolder { + public TextView nameView; + + public RequestedViewHolder(@NonNull View view) { + super(view); + nameView = (TextView) view.findViewById(R.id.textView3); + } + } + + // DataModel + public static class RequestedUserModel { + private String name; + private String id; + + public String getName() { + return name; + } + public String getId() { + return id; + } + + public void setName(String name) { + this.name = name; + } + public void setId(String id) { this.id = id;} } } \ No newline at end of file diff --git a/app/src/main/java/com/example/nemophila/RequestedAdapter.java b/app/src/main/java/com/example/nemophila/RequestedAdapter.java deleted file mode 100644 index be91550..0000000 --- a/app/src/main/java/com/example/nemophila/RequestedAdapter.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.example.nemophila; - -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.example.nemophila.entities.Account; -import com.example.nemophila.viewmodels.AccountViewModel; - -import java.util.List; - -public class RequestedAdapter extends RecyclerView.Adapter { - private List list; - public RequestedAdapter(List list) { - this.list = list; - } - public void setList(List list) { - this.list = list; - } - - @NonNull - @Override - 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); - return vh; - } - - @Override - public void onBindViewHolder(@NonNull RequestedViewHolder holder, int position) { - holder.nameView.setText(list.get(position).getName()); - } - - @Override - public int getItemCount() { - return list.size(); - } -} diff --git a/app/src/main/java/com/example/nemophila/RequestedViewHolder.java b/app/src/main/java/com/example/nemophila/RequestedViewHolder.java deleted file mode 100644 index e4ed3cc..0000000 --- a/app/src/main/java/com/example/nemophila/RequestedViewHolder.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.example.nemophila; - -import android.view.View; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -public class RequestedViewHolder extends RecyclerView.ViewHolder { - public TextView nameView; - - public RequestedViewHolder(@NonNull View view) { - super(view); - nameView = (TextView) view.findViewById(R.id.textView3); - } -} diff --git a/app/src/main/java/com/example/nemophila/ShopActivity.java b/app/src/main/java/com/example/nemophila/ShopActivity.java index b99788f..1f155ee 100644 --- a/app/src/main/java/com/example/nemophila/ShopActivity.java +++ b/app/src/main/java/com/example/nemophila/ShopActivity.java @@ -72,7 +72,7 @@ Button returnButton = (Button)findViewById(R.id.shopAcReturnButton); returnButton.setOnClickListener(new View.OnClickListener(){ public void onClick(View v){ - Intent intent = new Intent(getApplication(), MainActivity.class); + Intent intent = new Intent(getApplication(), MapsActivity.class); startActivity(intent); } }); diff --git a/app/src/main/java/com/example/nemophila/ShopCreateActivity.java b/app/src/main/java/com/example/nemophila/ShopCreateActivity.java index c6d2a90..aa4a9d4 100644 --- a/app/src/main/java/com/example/nemophila/ShopCreateActivity.java +++ b/app/src/main/java/com/example/nemophila/ShopCreateActivity.java @@ -55,7 +55,7 @@ Button cancelButton = findViewById(R.id.buttonCancel); cancelButton.setOnClickListener(v -> { cancelButton.setEnabled(false); - Intent intent = new Intent(getApplication(), MainActivity.class); + Intent intent = new Intent(getApplication(), MapsActivity.class); startActivity(intent); }); } diff --git a/app/src/main/java/com/example/nemophila/SignUpActivity.java b/app/src/main/java/com/example/nemophila/SignUpActivity.java index b867654..e561fe7 100644 --- a/app/src/main/java/com/example/nemophila/SignUpActivity.java +++ b/app/src/main/java/com/example/nemophila/SignUpActivity.java @@ -36,7 +36,7 @@ //Nemophilaにtokenとuidがある場合サインアップ画面をスキップ if ((nemophila.getUid() != null) && (nemophila.getToken() != null)){ - Intent intent = new Intent(SignUpActivity.this,MainActivity.class); + Intent intent = new Intent(SignUpActivity.this,MapsActivity.class); startActivity(intent); System.out.println("サインアップ処理をスキップ"); return; @@ -75,7 +75,7 @@ nemophila.setToken(response.body().getToken()); //mainに画面遷移 - Intent intent = new Intent(SignUpActivity.this, MainActivity.class); + Intent intent = new Intent(SignUpActivity.this, MapsActivity.class); startActivity(intent); } else { System.out.println("通信可能:changeBelongsAndMaster: " + response.code()); diff --git a/app/src/main/java/com/example/nemophila/TestActivity.java b/app/src/main/java/com/example/nemophila/TestActivity.java index 0fe08d0..6a9c2e7 100644 --- a/app/src/main/java/com/example/nemophila/TestActivity.java +++ b/app/src/main/java/com/example/nemophila/TestActivity.java @@ -12,11 +12,12 @@ import android.widget.Spinner; import com.example.nemophila.viewmodels.AccountViewModel; +import com.example.nemophila.viewmodels.FriendViewModel; import com.example.nemophila.viewmodels.PostsViewModel; import com.example.nemophila.viewmodels.ShopsViewModel; public class TestActivity extends AppCompatActivity { - int position; //テスト用 + int position; @Override protected void onCreate(Bundle savedInstanceState) { @@ -30,10 +31,11 @@ ShopsViewModel shopsViewModel = new ViewModelProvider(this).get(ShopsViewModel.class); AccountViewModel accountViewModel = new ViewModelProvider(this).get(AccountViewModel.class); PostsViewModel postsViewModel = new ViewModelProvider(this).get(PostsViewModel.class); + FriendViewModel friendViewModel = new ViewModelProvider(this).get(FriendViewModel.class); //テスト用のspinner Spinner spinner = findViewById(R.id.testspinner); - String[] spinnerItems = {"ShopsViewModel", "AccountViewModel", "PostsViewModel"}; //ここに名前を追加 + String[] spinnerItems = {"ShopsViewModel", "AccountViewModel", "PostsViewModel", "FriendsViewModel"}; //ここに名前を追加 ArrayAdapter adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, spinnerItems); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner.setAdapter(adapter); @@ -65,10 +67,11 @@ case 2: postsViewModel.createPost("1114", "dbfd3740-8dcc-4b9c-b3b0-42c908da1c65", "151347fa-2c90-44d7-ba48-f23f475b910d", 1, "和食", "辛いね", "", "", ""); -// postsViewModel.loadShopPost("151347fa-2c90-44d7-ba48-f23f475b910d"); break; + case 3: + friendViewModel.putRequesting("1111", "1112", "a95d68cc-4efb-49e2-8f55-799f768a5c09"); } } }); } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/nemophila/resources/FriendsRest.java b/app/src/main/java/com/example/nemophila/resources/FriendsRest.java index 52b4fbf..d590f56 100644 --- a/app/src/main/java/com/example/nemophila/resources/FriendsRest.java +++ b/app/src/main/java/com/example/nemophila/resources/FriendsRest.java @@ -40,7 +40,7 @@ ); @FormUrlEncoded - @PUT("accounts/{uid}/reqesting/{requesting_id}") + @PUT("accounts/{uid}/requesting/{requesting_id}") Call putRequesting( @Path("uid") String uid, @Path("requesting_id") String requesting_id, @@ -48,20 +48,20 @@ ); @FormUrlEncoded - @DELETE("accounts/{uid}/reqesting/{requesting_id}") + @DELETE("accounts/{uid}/requesting/{requesting_id}") Call deleteRequesting( @Path("uid") String uid, @Path("requesting_id") String requesting_id, @Field("token") String token ); - @GET("accounts/{uid}/reqested") + @GET("accounts/{uid}/requested") Call> getRequested( @Path("uid") String uid ); @FormUrlEncoded - @DELETE("accounts/{uid}/reqested/{reqested_id}") + @DELETE("accounts/{uid}/requested/{requested_id}") Call deleteRequested( @Path("uid") String uid, @Path("requested_id") String requested_id, 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 2be6f58..4749334 100644 --- a/app/src/main/java/com/example/nemophila/viewmodels/FriendViewModel.java +++ b/app/src/main/java/com/example/nemophila/viewmodels/FriendViewModel.java @@ -132,7 +132,7 @@ if (response.isSuccessful()) { System.out.println("Successful"); } else { - System.out.println("ResponseError"); + System.out.println("ResponseError" + response.code()); } } @Override diff --git a/app/src/main/res/layout/activity_requested.xml b/app/src/main/res/layout/activity_requested.xml index 32ff931..67eceed 100644 --- a/app/src/main/res/layout/activity_requested.xml +++ b/app/src/main/res/layout/activity_requested.xml @@ -34,6 +34,7 @@ app:layout_constraintVertical_bias="0.049" /> @@ -52,8 +52,13 @@ android:id="@+id/LoginTrans" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:layout_marginTop="72dp" + android:background="@color/teal_200" + android:backgroundTint="@color/teal_200" android:text="I have an Account" app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintHorizontal_bias="0.497" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@+id/SignUpButton" /> + app:layout_constraintTop_toBottomOf="@+id/SignUpButton" + app:rippleColor="#3F51B5" /> \ 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 d891315..7635bd4 100644 --- a/app/src/main/res/layout/layout_friends_activity.xml +++ b/app/src/main/res/layout/layout_friends_activity.xml @@ -25,4 +25,5 @@ android:layout_height="wrap_content" android:layout_weight="1" android:text="削除" /> + \ No newline at end of file