diff --git a/app/src/main/java/com/example/tampopo_client/models/User.java b/app/src/main/java/com/example/tampopo_client/models/User.java new file mode 100644 index 0000000..c5092a1 --- /dev/null +++ b/app/src/main/java/com/example/tampopo_client/models/User.java @@ -0,0 +1,54 @@ +package com.example.tampopo_client.models; + +public class User { + + private Integer id; //ユーザーID + private String name; //ニックネーム + private String email; //メールアドレス + private String icon; //アイコン + private String token; //トークン + + + //コンストラクタ + public User(String name, String email, String icon) { + this.name = name; + this.email = email; + this.icon = icon; + } + + + public Integer getId() { + return id; + } + public void setId(Integer id) { + this.id = id; + } + + public String getName() { + return name; + } + public void setName(String name){ + this.name = name; + } + + public String getEmail() { + return email; + } + public void setEmail(String email) { + this.email = email; + } + + public String getIcon() { + return icon; + } + public void setIcon(String icon){ + this.icon = icon; + } + + public String getToken() { + return token; + } + public void setToken(String token){ + this.token = token; + } +} diff --git a/app/src/main/java/com/example/tampopo_client/resources/UserResource.java b/app/src/main/java/com/example/tampopo_client/resources/UserResource.java new file mode 100644 index 0000000..7db852b --- /dev/null +++ b/app/src/main/java/com/example/tampopo_client/resources/UserResource.java @@ -0,0 +1,130 @@ +package com.example.tampopo_client.resources; +import com.example.tampopo_client.models.User; +import com.example.tampopo_client.models.FriendPair; +import java.util.List; + +import retrofit2.Call; +import retrofit2.http.DELETE; +import retrofit2.http.Field; +import retrofit2.http.FormUrlEncoded; +import retrofit2.http.GET; +import retrofit2.http.POST; +import retrofit2.http.PUT; +import retrofit2.http.Path; +import retrofit2.http.Query; + +public interface UserResource { + + + // 全ユーザ取得 + @GET("users") + Call> getUsers(); + + // 新規アカウントを作る + @FormUrlEncoded + @POST("users") + Call createUser( + @Field("user-id") String userId, + @Field("password") String password + ); + + + // 単一アカウントの情報を返す + @GET("users/{user-id}") + Call getUser(@Path("user-id") String userId); + + // ユーザ削除 + @DELETE("users/{user-id}") + Call deleteUser( + @Path("user-id") String userId, + @Query("token") String token + ); + + + //ログイン + @FormUrlEncoded + @POST("users/{user-id}/login") + Call login( + @Path("user-id") String userId, + @Field("password") String password + ); + + //アカウントのニックネームの取得 + @GET("users/{user-id}/name") + Call getName(@Path("user-id") String userId); + + //ニックネームの変更 + @FormUrlEncoded + @PUT("users/{user-id}/name") + Call updateName( + @Path("user-id") String userId, + @Field("new-name") String newName, + @Field("token") String token + ); + + // 単一アカウントのパスワードの取得 + @GET("users/{user-id}/password") + Call getPassword( + @Path("user-id") String userId, + @Query("token") String token + ); + + //指定されたIDのパスワードを変更する + @FormUrlEncoded + @PUT("users/{user-id}/password") + Call updatePassword( + @Path("user-id") String userId, + @Field("new-password") String newPassword + ); + + //単一アカウントのemailの取得 + @GET("users/{user-id}/email") + Call getEmail(@Path("user-id") String userId); + + //指定されたIDのemailを変更する + @FormUrlEncoded + @PUT("users/{user-id}/email") + Call updateEmail( + @Path("user-id") String userId, + @Field("new-email") String newEmail, + @Field("token") String token + ); + + //指定されたIDのアイコンを返す + @GET("users/{user-id}/icon") + Call getIcon(@Path("user-id") String userId); + + //アイコンを変更する + @FormUrlEncoded + @PUT("users/{user-id}/icon") + Call updateIcon( + @Path("user-id") String userId, + @Field("new-icon") String newIcon, + @Field("token") String token + ); + + //フレンド関連だがuserに置いておく + //フレンド相手の情報の取得 + @GET("users/{user-id}/friends") + Call> getFriends( + @Path("user-id") String userId, + @Query("token") String token + ); + + //自分のペアのpid一覧(JSON)の取得 + @GET("users/{user-id}/friends/{pair-id}") + Call getFriendPair( + @Path("user-id") String userId, + @Path("pair-id") int pairId, + @Query("token") String token + ); + + //ペアの削除 + @DELETE("users/{user-id}/friends/{pair-id}") + Call deleteFriendPair( + @Path("user-id") String userId, + @Path("pair-id") int pairId, + @Query("token") String token + ); + +} diff --git a/app/src/main/java/com/example/tampopo_client/viewmodels/FriendViewModel.java b/app/src/main/java/com/example/tampopo_client/viewmodels/FriendViewModel.java index b85f756..5ebbfcb 100644 --- a/app/src/main/java/com/example/tampopo_client/viewmodels/FriendViewModel.java +++ b/app/src/main/java/com/example/tampopo_client/viewmodels/FriendViewModel.java @@ -1,22 +1,59 @@ package com.example.tampopo_client.viewmodels; +import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.ViewModel; import com.example.tampopo_client.resources.FriendsResource; +import com.example.tampopo_client.resources.UserResource; +import java.util.List; + +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; import retrofit2.Retrofit; import retrofit2.converter.jackson.JacksonConverterFactory; public class FriendViewModel extends ViewModel { private final Retrofit retrofit; + private final UserResource usersResource; private final FriendsResource friendsResource; + private final MutableLiveData> friendIdsLiveData; public FriendViewModel(){ this.retrofit = new Retrofit.Builder() .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/tampopo-server/") .addConverterFactory(JacksonConverterFactory.create()) .build(); + this.usersResource = retrofit.create(UserResource.class); this.friendsResource = retrofit.create(FriendsResource.class); + this.friendIdsLiveData = new MutableLiveData<>(); + } + + public MutableLiveData> getFriendIdsLiveData(){ + return this.friendIdsLiveData; + } + + public void loadFriends(String userId, String token){ + Call> call = usersResource.getFriends(userId, token); + + call.enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + if(response.isSuccessful()){ + List friendIds = response.body(); + friendIdsLiveData.setValue(friendIds); + System.out.println(response.code()); + }else{ + System.out.println(response.code()); + } + } + + @Override + public void onFailure(Call> call, Throwable t) { + System.out.println("NetWorkError" + t); + } + }); } } diff --git a/app/src/main/java/com/example/tampopo_client/viewmodels/UserViewModel.java b/app/src/main/java/com/example/tampopo_client/viewmodels/UserViewModel.java new file mode 100644 index 0000000..effcf58 --- /dev/null +++ b/app/src/main/java/com/example/tampopo_client/viewmodels/UserViewModel.java @@ -0,0 +1,72 @@ +package com.example.tampopo_client.viewmodels; + +import androidx.lifecycle.LiveData; +import androidx.lifecycle.MutableLiveData; +import androidx.lifecycle.ViewModel; + +import com.example.tampopo_client.models.User; +import com.example.tampopo_client.resources.UserResource; + +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; +import retrofit2.Retrofit; +import retrofit2.converter.jackson.JacksonConverterFactory; + +/*userだけなのでサーバーから情報を取ってくることは名前の変更 +viewModelはviewからrequestをもらってmodelに流す +88行目にviewからviewmodelをとる +viewmodelのインスタンスは1個しかなし +128 観測するという宣言をする +observeは2つ引数をもち、一つ目は固定、2つ目は 無名クラスで長い new observerとあるがこれはインスタンスを作っているわけではないここでしかない使わないローカルなクラス +observerの子クラスである。 observerの無名子クラスと生成するのとインスタンスを作成する 画面の変更をlistenしている + +viewModel側  +viewModelからsetValueで値を変えていく +updateUserName、updateEmail、login、createUserもある。それらを書いていく。viewから必要なものを出していく +*/ + +public class UserViewModel extends ViewModel { + + private final Retrofit retrofit; + private final UserResource userResource; + private final MutableLiveData user = new MutableLiveData<>(); + private final MutableLiveData token = new MutableLiveData<>(); + private final MutableLiveDataloading = new MutableLiveData<>(false); + private final MutableLiveData error = new MutableLiveData<>(); + + //コンストラクタ + public UserViewModel(){ + this.retrofit = new Retrofit.Builder() + .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/tampopo-server/") + .addConverterFactory(JacksonConverterFactory.create()) + .build(); + this.userResource = retrofit.create(UserResource.class); + } + + public LiveData getUser() { return user; } + public LiveData getToken() { return token; } + public LiveDataisLoading() { return loading;} + public LiveData getError() { return error; } + + //新規登録 + public void createUser(String id, String password) { + loading.setValue(true); + userResource.createUser(id, password).enqueue(new Callback() { + @Override public void onResponse(Call c, Response res) { + loading.setValue(false); + if (res.isSuccessful()) { + user.setValue(res.body()); + } else { + error.setValue("登録失敗: " + res.code()); + } + } + @Override public void onFailure(Call c, Throwable t) { + loading.setValue(false); + error.setValue("ネットワークエラー: " + t.getMessage()); + } + }); + } + + //viewModelのところでを呼び出すがフレンド系は西村さんの方で管理する +} diff --git a/app/src/main/java/com/example/tampopo_client/views/FriendListFragment.java b/app/src/main/java/com/example/tampopo_client/views/FriendListFragment.java index b616b19..203ab3b 100644 --- a/app/src/main/java/com/example/tampopo_client/views/FriendListFragment.java +++ b/app/src/main/java/com/example/tampopo_client/views/FriendListFragment.java @@ -13,7 +13,7 @@ import android.view.ViewGroup; import com.example.tampopo_client.R; -import com.example.tampopo_client.views.placeholder.PlaceholderContent; +import com.example.tampopo_client.views.placeholder.FriendContent; /** * A fragment representing a list of Items. @@ -65,7 +65,7 @@ } else { recyclerView.setLayoutManager(new GridLayoutManager(context, mColumnCount)); } - recyclerView.setAdapter(new MyFriendRecyclerViewAdapter(PlaceholderContent.ITEMS)); + recyclerView.setAdapter(new MyFriendRecyclerViewAdapter(FriendContent.ITEMS)); } return view; } diff --git a/app/src/main/java/com/example/tampopo_client/views/FriendReceivedFragment.java b/app/src/main/java/com/example/tampopo_client/views/FriendReceivedFragment.java index b320d46..abe19ae 100644 --- a/app/src/main/java/com/example/tampopo_client/views/FriendReceivedFragment.java +++ b/app/src/main/java/com/example/tampopo_client/views/FriendReceivedFragment.java @@ -13,7 +13,7 @@ import android.view.ViewGroup; import com.example.tampopo_client.R; -import com.example.tampopo_client.views.placeholder.PlaceholderContent; +import com.example.tampopo_client.views.placeholder.FriendRequestContent; /** * A fragment representing a list of Items. @@ -65,7 +65,7 @@ } else { recyclerView.setLayoutManager(new GridLayoutManager(context, mColumnCount)); } - recyclerView.setAdapter(new MyFriendRequestRecyclerViewAdapter(PlaceholderContent.ITEMS)); + recyclerView.setAdapter(new MyFriendRequestRecyclerViewAdapter(FriendRequestContent.ITEMS)); } return view; } diff --git a/app/src/main/java/com/example/tampopo_client/views/MyFriendRecyclerViewAdapter.java b/app/src/main/java/com/example/tampopo_client/views/MyFriendRecyclerViewAdapter.java index 5ee7ffe..bbcd4e4 100644 --- a/app/src/main/java/com/example/tampopo_client/views/MyFriendRecyclerViewAdapter.java +++ b/app/src/main/java/com/example/tampopo_client/views/MyFriendRecyclerViewAdapter.java @@ -1,26 +1,25 @@ package com.example.tampopo_client.views; -import androidx.recyclerview.widget.RecyclerView; - import android.view.LayoutInflater; -import android.view.View; import android.view.ViewGroup; import android.widget.TextView; -import com.example.tampopo_client.views.placeholder.PlaceholderContent.PlaceholderItem; import com.example.tampopo_client.databinding.FragmentFriendListBinding; +import com.example.tampopo_client.views.placeholder.FriendContent; import java.util.List; +import androidx.recyclerview.widget.RecyclerView; + /** - * {@link RecyclerView.Adapter} that can display a {@link PlaceholderItem}. + * {@link RecyclerView.Adapter} that can display a {@link FriendContent.FriendItem}. * TODO: Replace the implementation with code for your data type. */ public class MyFriendRecyclerViewAdapter extends RecyclerView.Adapter { - private final List mValues; + private final List mValues; - public MyFriendRecyclerViewAdapter(List items) { + public MyFriendRecyclerViewAdapter(List items) { mValues = items; } @@ -46,7 +45,7 @@ public class ViewHolder extends RecyclerView.ViewHolder { public final TextView mIdView; public final TextView mContentView; - public PlaceholderItem mItem; + public FriendContent.FriendItem mItem; public ViewHolder(FragmentFriendListBinding binding) { super(binding.getRoot()); diff --git a/app/src/main/java/com/example/tampopo_client/views/MyFriendRequestRecyclerViewAdapter.java b/app/src/main/java/com/example/tampopo_client/views/MyFriendRequestRecyclerViewAdapter.java index 09d6193..ebe4c76 100644 --- a/app/src/main/java/com/example/tampopo_client/views/MyFriendRequestRecyclerViewAdapter.java +++ b/app/src/main/java/com/example/tampopo_client/views/MyFriendRequestRecyclerViewAdapter.java @@ -3,24 +3,23 @@ import androidx.recyclerview.widget.RecyclerView; import android.view.LayoutInflater; -import android.view.View; import android.view.ViewGroup; import android.widget.TextView; -import com.example.tampopo_client.views.placeholder.PlaceholderContent.PlaceholderItem; +import com.example.tampopo_client.views.placeholder.FriendRequestContent.FriendRequestItem; import com.example.tampopo_client.databinding.FragmentFriendReceivedBinding; import java.util.List; /** - * {@link RecyclerView.Adapter} that can display a {@link PlaceholderItem}. + * {@link RecyclerView.Adapter} that can display a {@link FriendRequestItem}. * TODO: Replace the implementation with code for your data type. */ public class MyFriendRequestRecyclerViewAdapter extends RecyclerView.Adapter { - private final List mValues; + private final List mValues; - public MyFriendRequestRecyclerViewAdapter(List items) { + public MyFriendRequestRecyclerViewAdapter(List items) { mValues = items; } @@ -46,7 +45,7 @@ public class ViewHolder extends RecyclerView.ViewHolder { public final TextView mIdView; public final TextView mContentView; - public PlaceholderItem mItem; + public FriendRequestItem mItem; public ViewHolder(FragmentFriendReceivedBinding binding) { super(binding.getRoot()); diff --git a/app/src/main/java/com/example/tampopo_client/views/placeholder/FriendContent.java b/app/src/main/java/com/example/tampopo_client/views/placeholder/FriendContent.java new file mode 100644 index 0000000..7db3489 --- /dev/null +++ b/app/src/main/java/com/example/tampopo_client/views/placeholder/FriendContent.java @@ -0,0 +1,81 @@ +package com.example.tampopo_client.views.placeholder; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Helper class for providing sample content for user interfaces created by + * Android template wizards. + *

+ * TODO: Replace all uses of this class before publishing your app. + */ +public class FriendContent { + + /** + * An array of sample (placeholder) items. + */ + + public static final List ITEMS = new ArrayList(); + + /** + * A map of sample (placeholder) items, by ID. + */ + public static final Map ITEM_MAP = new HashMap(); + + private static final int COUNT = 25; + + static { + // Add some sample items. + for (int i = 1; i <= COUNT; i++) { + addItem(createPlaceholderItem(i)); + } + } + + + private static void addItem(FriendItem item) { + + ITEMS.add(item); + ITEM_MAP.put(item.id, item); + } + + + private static FriendItem createPlaceholderItem(int position) { + return new FriendItem(String.valueOf(position), "Item " + position, makeDetails(position)); + + } + + private static String makeDetails(int position) { + StringBuilder builder = new StringBuilder(); + builder.append("Details about Item: ").append(position); + for (int i = 0; i < position; i++) { + builder.append("\nMore details information here."); + } + return builder.toString(); + } + + /** + * A placeholder item representing a piece of content. + */ + + public static class FriendItem { + + public final String id; + public final String content; + public final String details; + + + public FriendItem(String id, String content, String details) { + + this.id = id; + this.content = content; + this.details = details; + } + + @Override + public String toString() { + return content; + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/tampopo_client/views/placeholder/FriendRequestContent.java b/app/src/main/java/com/example/tampopo_client/views/placeholder/FriendRequestContent.java new file mode 100644 index 0000000..fb43f8f --- /dev/null +++ b/app/src/main/java/com/example/tampopo_client/views/placeholder/FriendRequestContent.java @@ -0,0 +1,72 @@ +package com.example.tampopo_client.views.placeholder; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Helper class for providing sample content for user interfaces created by + * Android template wizards. + *

+ * TODO: Replace all uses of this class before publishing your app. + */ +public class FriendRequestContent { + + /** + * An array of sample (placeholder) items. + */ + public static final List ITEMS = new ArrayList(); + + /** + * A map of sample (placeholder) items, by ID. + */ + public static final Map ITEM_MAP = new HashMap(); + + private static final int COUNT = 25; + + static { + // Add some sample items. + for (int i = 1; i <= COUNT; i++) { + addItem(createPlaceholderItem(i)); + } + } + + private static void addItem(FriendRequestItem item) { + ITEMS.add(item); + ITEM_MAP.put(item.id, item); + } + + private static FriendRequestItem createPlaceholderItem(int position) { + return new FriendRequestItem(String.valueOf(position), "Item " + position, makeDetails(position)); + } + + private static String makeDetails(int position) { + StringBuilder builder = new StringBuilder(); + builder.append("Details about Item: ").append(position); + for (int i = 0; i < position; i++) { + builder.append("\nMore details information here."); + } + return builder.toString(); + } + + /** + * A placeholder item representing a piece of content. + */ + public static class FriendRequestItem { + public final String id; + public final String content; + public final String details; + + public FriendRequestItem(String id, String content, String details) { + this.id = id; + this.content = content; + this.details = details; + } + + @Override + public String toString() { + return content; + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/tampopo_client/views/placeholder/PlaceholderContent.java b/app/src/main/java/com/example/tampopo_client/views/placeholder/PlaceholderContent.java deleted file mode 100644 index 00871a5..0000000 --- a/app/src/main/java/com/example/tampopo_client/views/placeholder/PlaceholderContent.java +++ /dev/null @@ -1,72 +0,0 @@ -package com.example.tampopo_client.views.placeholder; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * Helper class for providing sample content for user interfaces created by - * Android template wizards. - *

- * TODO: Replace all uses of this class before publishing your app. - */ -public class PlaceholderContent { - - /** - * An array of sample (placeholder) items. - */ - public static final List ITEMS = new ArrayList(); - - /** - * A map of sample (placeholder) items, by ID. - */ - public static final Map ITEM_MAP = new HashMap(); - - private static final int COUNT = 25; - - static { - // Add some sample items. - for (int i = 1; i <= COUNT; i++) { - addItem(createPlaceholderItem(i)); - } - } - - private static void addItem(PlaceholderItem item) { - ITEMS.add(item); - ITEM_MAP.put(item.id, item); - } - - private static PlaceholderItem createPlaceholderItem(int position) { - return new PlaceholderItem(String.valueOf(position), "Item " + position, makeDetails(position)); - } - - private static String makeDetails(int position) { - StringBuilder builder = new StringBuilder(); - builder.append("Details about Item: ").append(position); - for (int i = 0; i < position; i++) { - builder.append("\nMore details information here."); - } - return builder.toString(); - } - - /** - * A placeholder item representing a piece of content. - */ - public static class PlaceholderItem { - public final String id; - public final String content; - public final String details; - - public PlaceholderItem(String id, String content, String details) { - this.id = id; - this.content = content; - this.details = details; - } - - @Override - public String toString() { - return content; - } - } -} \ No newline at end of file diff --git a/app/src/main/res/menu/bottom_nav_menu.xml b/app/src/main/res/menu/bottom_nav_menu.xml index 1736064..1cec7c3 100644 --- a/app/src/main/res/menu/bottom_nav_menu.xml +++ b/app/src/main/res/menu/bottom_nav_menu.xml @@ -3,7 +3,7 @@ + android:title="@string/title_friend" /> @@ -17,7 +17,7 @@ + android:title="@string/title_friend_received" /> diff --git a/app/src/main/res/navigation/mobile_navigation.xml b/app/src/main/res/navigation/mobile_navigation.xml index 4a82a18..5db87e3 100644 --- a/app/src/main/res/navigation/mobile_navigation.xml +++ b/app/src/main/res/navigation/mobile_navigation.xml @@ -7,8 +7,8 @@ \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 965d6a4..78d72ce 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -3,9 +3,9 @@ ホーム画面からフレンド一覧への画面遷移ボタン ホーム画面から通知一覧への画面遷移ボタン ホーム画面から設定画面への画面遷移ボタン - ホーム + フレンド ダッシュボード - 通知 + 保留中 友達リスト \ No newline at end of file