diff --git a/app/src/main/java/com/example/tampopo_client/Tampopo.java b/app/src/main/java/com/example/tampopo_client/Tampopo.java index 735dada..4708cbd 100644 --- a/app/src/main/java/com/example/tampopo_client/Tampopo.java +++ b/app/src/main/java/com/example/tampopo_client/Tampopo.java @@ -3,6 +3,10 @@ import android.app.Application; public class Tampopo extends Application { + //いらないので下記2つをコメントアウトしました + //public String getUserId; + + //public String getToken; private String token; private String userId; private String password; diff --git a/app/src/main/java/com/example/tampopo_client/models/FriendPair.java b/app/src/main/java/com/example/tampopo_client/models/FriendPair.java index 4f9c35f..3ba71cd 100644 --- a/app/src/main/java/com/example/tampopo_client/models/FriendPair.java +++ b/app/src/main/java/com/example/tampopo_client/models/FriendPair.java @@ -10,6 +10,7 @@ this.user1Id = user1Id; } + public Integer getId() { return id; } diff --git a/app/src/main/java/com/example/tampopo_client/resources/ActivitiesResource.java b/app/src/main/java/com/example/tampopo_client/resources/ActivitiesResource.java index 7df8292..c30407e 100644 --- a/app/src/main/java/com/example/tampopo_client/resources/ActivitiesResource.java +++ b/app/src/main/java/com/example/tampopo_client/resources/ActivitiesResource.java @@ -31,8 +31,8 @@ Call getText(@Path("user_id") String userId, @Path("activity_id") String activityId); @GET("users/{user_id}/activities/{activity_id}/updated-time") - Call getUpdatedTime(@Path("user_id") String userId, @Path("activity_id") String activityId); + Call getUpdatedTime(@Path("user_id") String userId, @Path("activity_id") String activityId); @GET("users/{user_id}/activities/last-updated-time") - Call getLastUpdatedTime(@Path("user_id") String userId, @Path("activity_id") String activityId); + Call getLastUpdatedTime(@Path("user_id") String userId, @Path("activity_id") String activityId); } diff --git a/app/src/main/java/com/example/tampopo_client/resources/FriendsResource.java b/app/src/main/java/com/example/tampopo_client/resources/FriendsResource.java index d323d6c..7c91307 100644 --- a/app/src/main/java/com/example/tampopo_client/resources/FriendsResource.java +++ b/app/src/main/java/com/example/tampopo_client/resources/FriendsResource.java @@ -2,6 +2,8 @@ import com.example.tampopo_client.models.FriendPair; +import java.util.List; + import retrofit2.Call; import retrofit2.http.DELETE; import retrofit2.http.Field; @@ -20,6 +22,13 @@ @Field("user1-id") String user1Id ); +// @GET("friends/{pair_id}/") +// Call getFriend( +// @Query("token") String token, +// @Path("pair_id") String pairId +// ); + + // @GET("friends/{pair_id}/") Call getFriend( @Query("token") String token, @@ -31,4 +40,11 @@ @Query("token") String token, @Path("pair_id") String pair_id ); + + //新しくサーバーで定義したので追加しました + @GET("friends/users/{user-id}") + Call> getFriends( + @Path("user-id") String userId, + @Query("token") String token + ); } diff --git a/app/src/main/java/com/example/tampopo_client/viewmodels/ActivitiesFetchCallback.java b/app/src/main/java/com/example/tampopo_client/viewmodels/ActivitiesFetchCallback.java new file mode 100644 index 0000000..ad6ca5f --- /dev/null +++ b/app/src/main/java/com/example/tampopo_client/viewmodels/ActivitiesFetchCallback.java @@ -0,0 +1,11 @@ +package com.example.tampopo_client.viewmodels; + +import com.example.tampopo_client.models.Activity; + +import java.util.List; + +public interface ActivitiesFetchCallback { + void onSuccess(List activities); + + void onFailure(Throwable throwable); +} diff --git a/app/src/main/java/com/example/tampopo_client/viewmodels/ActivityViewModel.java b/app/src/main/java/com/example/tampopo_client/viewmodels/ActivityViewModel.java index 2c455f2..08364f9 100644 --- a/app/src/main/java/com/example/tampopo_client/viewmodels/ActivityViewModel.java +++ b/app/src/main/java/com/example/tampopo_client/viewmodels/ActivityViewModel.java @@ -9,6 +9,9 @@ import com.example.tampopo_client.resources.ActivitiesResource; import com.example.tampopo_client.resources.UserResource; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -28,16 +31,24 @@ private final ActivitiesResource activitiesResource; private final UserResource userResource; - private final Map>> friendToActivitiesLiveData; // key=userId - private final MutableLiveData> friendUserIdsLiveData; // フレンドのユーザーIDのリスト private final MutableLiveData myLatestActivityLiveData; // 自分の最新のアクティビティ + private final Map>> friendToActivitiesLiveData; // <フレンドのユーザーID, フレンドのアクティビティのリスト> + private final MutableLiveData> friendUserIdsLiveData; // フレンドのユーザーIDのリスト - private final String userId; - private final String token; + private final String myUserId; + private final String myToken; - public ActivityViewModel(String userId, String token) { - this.userId = userId; - this.token = token; + private final List userActivityStatusChangeListeners; + + /** + * ActivityのViewModelを作成する。 + * + * @param myUserId 自身のユーザーID + * @param myToken 自身の認証用トークン + */ + public ActivityViewModel(String myUserId, String myToken) { + this.myUserId = myUserId; + this.myToken = myToken; // Retrofitの初期化 final Retrofit retrofit = new Retrofit.Builder().baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/tampopo/").addConverterFactory(JacksonConverterFactory.create()).build(); @@ -46,7 +57,9 @@ friendToActivitiesLiveData = Map.of(); friendUserIdsLiveData = new MutableLiveData<>(List.of()); - myLatestActivityLiveData = new MutableLiveData<>(); + myLatestActivityLiveData = new MutableLiveData<>(null); + + userActivityStatusChangeListeners = new ArrayList<>(); } @Override @@ -56,23 +69,97 @@ return; } - // 最新のアクティビティを取得して更新する + // 自分の最新のアクティビティを取得する + pullLatestActivity(myUserId, activitiesResource, new ActivityFetchCallback() { + @Override + public void onSuccess(Activity activity) { + Activity prevActivity = myLatestActivityLiveData.getValue(); + + // アクティビティが更新されていない場合 + LocalDateTime now = LocalDateTime.now(); + LocalDateTime lastUpdatedTime = getDateTimeFromString(activity.getUpdateTime()); + + if (now.isAfter(lastUpdatedTime.plusSeconds(5))) { + for (UserActivityStatusChangeListener observer : userActivityStatusChangeListeners) { + // アクティビティのステータス変更をリスナーに通知する + if (activity.equals(prevActivity)) { + observer.onUserStatusChanged(myUserId, UserActivityStatusChangeListener.Status.INACTIVE); + } else { + observer.onUserStatusChanged(myUserId, UserActivityStatusChangeListener.Status.ACTIVE); + } + } + } + + // 自分の新しいアクティビティをLiveDataに反映する + myLatestActivityLiveData.postValue(activity); + } + + @Override + public void onFailure(Throwable throwable) { + Log.e(ActivityViewModel.class.getSimpleName(), "An error has occurred while fetching my latest activity."); + } + }); + + // 自分のフレンドの最新のアクティビティを取得して更新する if (friendUserIdsLiveData.isInitialized() && friendUserIdsLiveData.getValue() != null) { for (String userId : friendUserIdsLiveData.getValue()) { - pullLatestActivity(userId, activitiesResource, friendToActivitiesLiveData); + pullLatestActivity(userId, activitiesResource, new ActivityFetchCallback() { + @Override + public void onSuccess(Activity activity) { + updateFriendToActivitiesLiveData(activity, userId); + } + + @Override + public void onFailure(Throwable throwable) { + Log.e(ActivityViewModel.class.getSimpleName(), "An error has occurred while fetching friend's latest activity.", throwable); + } + }); } } // 最新のフレンドのユーザーIDを取得して更新する if (friendUserIdsLiveData.isInitialized()) { - pullLatestFriendUserIds(userId, token); + pullLatestFriendUserIds(myUserId, myToken); } - - // Logging - Log.d(ActivityViewModel.class.getSimpleName(), "Polling data from the server."); }; } + /** + * ユーザIDからそのユーザーのアクティビティのリストのライブデータを取得し、最新のアクティビティに更新する + * + * @param latestActivity 最新のアクティビティ + * @param userId 更新対象のユーザーID + */ + private void updateFriendToActivitiesLiveData(Activity latestActivity, String userId) { + if (friendToActivitiesLiveData.get(userId) == null) { + friendToActivitiesLiveData.put(userId, new MutableLiveData<>(List.of())); + } + MutableLiveData> userActivitiesLiveData = friendToActivitiesLiveData.get(userId); + assert userActivitiesLiveData != null; + + List userActivities = userActivitiesLiveData.getValue(); + if (userActivities == null) { + return; + } + + if (userActivities.isEmpty()) { + userActivitiesLiveData.postValue(List.of(latestActivity)); + } else { + if (userActivities.equals(List.of(latestActivity))) { + return; + } + + userActivitiesLiveData.postValue(List.of(latestActivity)); + } + } + + /** + * 自身のアクティビティを新しく作成する + * + * @param userId 自身のユーザーID + * @param token 自身の認証用トークン + * @param newActivity 新しいアクティビティのテキスト + */ public void createActivity(String userId, String token, String newActivity) { if (!myLatestActivityLiveData.isInitialized()) { return; @@ -85,7 +172,6 @@ if (response.isSuccessful()) { String createdActivityId = response.body(); - // TODO: 仮作成なので改善したい Call getActivityCall = activitiesResource.getActivity(userId, createdActivityId); getActivityCall.enqueue(new Callback() { @Override @@ -117,54 +203,47 @@ /** * 最新のユーザーのアクティビティを取得・更新する * - * @param userId 取得対象のユーザーのID - * @param resource アクティビティのリソース - * @param friendToActivitiesLiveData フレンドのユーザーIDからアクティビティへの写像のライブデータ + * @param userId 取得対象のユーザーのID + * @param resource アクティビティのリソース + * @param callback アクティビティが取得された後に呼び出されるコールバック */ - private void pullLatestActivity(String userId, ActivitiesResource resource, Map>> friendToActivitiesLiveData) { + private void pullLatestActivity(String userId, ActivitiesResource resource, ActivityFetchCallback callback) { Call> fetchActivityCall = resource.getActivities(userId, "LATEST"); fetchActivityCall.enqueue(new Callback>() { @Override public void onResponse(@NonNull Call> call, @NonNull Response> response) { if (response.isSuccessful()) { - List fetchedActivities = response.body(); // アクティビティが存在しない場合は空のリスト - if (fetchedActivities == null) { + List activities = response.body(); // アクティビティが存在しない場合は空のリスト + if (activities == null || activities.isEmpty()) { return; } - if (friendToActivitiesLiveData.get(userId) == null) { - friendToActivitiesLiveData.put(userId, new MutableLiveData<>(List.of())); - } - MutableLiveData> userActivitiesLiveData = friendToActivitiesLiveData.get(userId); - assert userActivitiesLiveData != null; - - List userActivities = userActivitiesLiveData.getValue(); - if (userActivities == null) { - return; - } - if (fetchedActivities.isEmpty()) { - return; - } - - if (userActivities.isEmpty()) { - userActivitiesLiveData.postValue(fetchedActivities); - } else { - if (userActivities.equals(fetchedActivities)) { - return; - } - userActivitiesLiveData.postValue(fetchedActivities); - } + Activity latestActivity = activities.get(0); + callback.onSuccess(latestActivity); } } @Override public void onFailure(@NonNull Call> call, @NonNull Throwable t) { Log.e(ActivityViewModel.class.getSimpleName(), "An error has occurred while fetching the latest activity.", t); + + callback.onFailure(t); } }); } /** + * String型の日時をLocalDateTime型に変換する + * + * @param dateTime 変換対象の日時(文字列) + * @return 変換後の日時(LocalDateTime) + */ + private LocalDateTime getDateTimeFromString(String dateTime) { + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm"); + return LocalDateTime.parse(dateTime, formatter); + } + + /** * 最新の自分のフレンドのユーザーIDをすべて取得・更新する。 * * @param userId 自分のユーザーID @@ -187,10 +266,23 @@ }); } + /** + * + */ + private void sortFriendsByLatestUpdateTime() { + + } + public MutableLiveData getMyLatestActivityLiveData() { return myLatestActivityLiveData; } + /** + * ユーザIDからそのユーザーのアクティビティのリストのライブデータを取得する + * + * @param userId 取得対象のユーザーID + * @return 取得対象のユーザーのアクティビティのリストのライブデータ + */ public MutableLiveData> getActivitiesLiveDataFromUserId(String userId) { return friendToActivitiesLiveData.get(userId); } @@ -199,11 +291,25 @@ return friendUserIdsLiveData; } - public String getUserId() { - return userId; + public String getMyUserId() { + return myUserId; } - public String getToken() { - return token; + public String getMyToken() { + return myToken; + } + + public void addActivityStatusChangeObserver(UserActivityStatusChangeListener observer) { + userActivityStatusChangeListeners.add(observer); + } + + public void clearActivityStatusChangeObservers() { + userActivityStatusChangeListeners.clear(); + } + + private interface ActivityFetchCallback { + void onSuccess(Activity activity); + + void onFailure(Throwable throwable); } } 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 91b8021..6e958c5 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 @@ -45,7 +45,8 @@ } public void loadFriends(String userId, String token){ - Call> call = usersResource.getFriends(userId, token); + //userResourceではなくfriendResourceに書き換え + Call> call = friendsResource.getFriends(userId, token); call.enqueue(new Callback>() { @Override diff --git a/app/src/main/java/com/example/tampopo_client/viewmodels/UserActivityStatusChangeListener.java b/app/src/main/java/com/example/tampopo_client/viewmodels/UserActivityStatusChangeListener.java new file mode 100644 index 0000000..30724cc --- /dev/null +++ b/app/src/main/java/com/example/tampopo_client/viewmodels/UserActivityStatusChangeListener.java @@ -0,0 +1,10 @@ +package com.example.tampopo_client.viewmodels; + +public interface UserActivityStatusChangeListener { + void onUserStatusChanged(String userId, Status activityStatus); + + enum Status { + INACTIVE, + ACTIVE + } +} 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 index 4fe101d..1ddbd4b 100644 --- a/app/src/main/java/com/example/tampopo_client/viewmodels/UserViewModel.java +++ b/app/src/main/java/com/example/tampopo_client/viewmodels/UserViewModel.java @@ -43,6 +43,7 @@ private final UserResource userResource; private final MutableLiveData user = new MutableLiveData<>(); private final MutableLiveData token = new MutableLiveData<>(); + private final MutableLiveData icon = new MutableLiveData<>(); private final MutableLiveDataloading = new MutableLiveData<>(false); private final MutableLiveData error = new MutableLiveData<>(); @@ -58,6 +59,7 @@ public LiveData getUser() { return user; } public LiveData getToken() { return token; } + public LiveData getIcon() { return icon; } public LiveDataisLoading() { return loading;} public LiveData getError() { return error; } @@ -104,5 +106,43 @@ }); } + //アイコン + public void getIcon(String id) { + Call call = userResource.getIcon(id); + call.enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (response.isSuccessful()) { + icon.setValue(response.body()); + System.out.println(response.code()); + } else { + System.out.println(response.code()); + } + } + @Override public void onFailure(Call call, Throwable t) { + System.out.println("エラー: " + t.getMessage()); + } + }); + } + + public void updateIcon(String id, String newIcon, String token) { + Call call = userResource.updateIcon(id, newIcon, token); + call.enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (response.isSuccessful()) { + icon.setValue(response.body()); + System.out.println(response.code()); + + } else { + System.out.println(response.code()); + } + } + @Override public void onFailure(Call call, Throwable t) { + System.out.println("エラー: " + 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 1d68ef5..17730c5 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 @@ -14,6 +14,7 @@ import android.view.ViewGroup; import com.example.tampopo_client.R; +import com.example.tampopo_client.Tampopo; import com.example.tampopo_client.viewmodels.FriendViewModel; import com.example.tampopo_client.views.placeholder.FriendContent; @@ -21,7 +22,7 @@ import androidx.lifecycle.Observer; /** - * A fragment representing a list of Items. + * フレンド一覧を表示するフラグメント */ public class FriendListFragment extends Fragment { @@ -30,6 +31,8 @@ // TODO: Customize parameters private int mColumnCount = 1; + private MyFriendRecyclerViewAdapter adapter; + /** * Mandatory empty constructor for the fragment manager to instantiate the * fragment (e.g. upon screen orientation changes). @@ -38,7 +41,15 @@ } // TODO: Customize parameter initialization - @SuppressWarnings("unused") +// @SuppressWarnings("unused") +// public static FriendListFragment newInstance(int columnCount) { +// FriendListFragment fragment = new FriendListFragment(); +// Bundle args = new Bundle(); +// args.putInt(ARG_COLUMN_COUNT, columnCount); +// fragment.setArguments(args); +// return fragment; +// } + public static FriendListFragment newInstance(int columnCount) { FriendListFragment fragment = new FriendListFragment(); Bundle args = new Bundle(); @@ -56,44 +67,113 @@ } } +// @Override +// public View onCreateView(LayoutInflater inflater, ViewGroup container, +// Bundle savedInstanceState) { +// View view = inflater.inflate(R.layout.fragment_friend_list_list, container, false); +// +// RecyclerView recyclerView = view.findViewById(R.id.list); +// Context context = view.getContext(); +// +// // Add some sample items. +// //for (int i = 1; i <= 30; i++) { +// // FriendContent.addItem(new FriendContent.FriendItem(Integer.toString(i), "ユーザ" + i)); +// //} +// +// // Set the adapter +// if (view instanceof RecyclerView) { +// Context context = view.getContext(); +// RecyclerView recyclerView = (RecyclerView) view; +// if (mColumnCount <= 1) { +// recyclerView.setLayoutManager(new LinearLayoutManager(context)); +// } else { +// recyclerView.setLayoutManager(new GridLayoutManager(context, mColumnCount)); +// } +// recyclerView.setAdapter(new MyFriendRecyclerViewAdapter(FriendContent.ITEMS)); +// } +// adapter = new MyFriendRecyclerViewAdapter(FriendContent.ITEMS); +// recyclerView.setAdapter(adapter); +// return view; +// } + @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_friend_list_list, container, false); - // Add some sample items. - //for (int i = 1; i <= 30; i++) { - // FriendContent.addItem(new FriendContent.FriendItem(Integer.toString(i), "ユーザ" + i)); - //} + RecyclerView recyclerView = view.findViewById(R.id.list); + Context context = view.getContext(); - // Set the adapter - if (view instanceof RecyclerView) { - Context context = view.getContext(); - RecyclerView recyclerView = (RecyclerView) view; - if (mColumnCount <= 1) { - recyclerView.setLayoutManager(new LinearLayoutManager(context)); - } else { - recyclerView.setLayoutManager(new GridLayoutManager(context, mColumnCount)); - } - recyclerView.setAdapter(new MyFriendRecyclerViewAdapter(FriendContent.ITEMS)); + if (mColumnCount <= 1) { + recyclerView.setLayoutManager(new LinearLayoutManager(context)); + } else { + recyclerView.setLayoutManager(new GridLayoutManager(context, mColumnCount)); } + + // adapterをここで初期化 + adapter = new MyFriendRecyclerViewAdapter(FriendContent.ITEMS); + recyclerView.setAdapter(adapter); + return view; } + +// @Override +// public void onViewCreated(View view, Bundle savedInstanceState) { +// super.onViewCreated(view, savedInstanceState); +// FriendViewModel friendViewModel = new ViewModelProvider(this).get(FriendViewModel.class); +// +// String userId = ((Tampopo) ((FriendActivity) view.getContext()).getApplication()).getUserId; +// String token = ((Tampopo) ((FriendActivity) view.getContext()).getApplication()).getToken; +// friendViewModel.loadFriends(userId, token); +// +// friendViewModel.getFriendIdsLiveData().observe(getViewLifecycleOwner(), new Observer>() { +// +// @Override +// public void onChanged(List friendIds) { +// for (String i : friendIds) { +// FriendContent.addItem(new FriendContent.FriendItem(i, "")); +// } +// adapter.notifyDataSetChanged(); +// } +// }); +// } + @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); FriendViewModel friendViewModel = new ViewModelProvider(this).get(FriendViewModel.class); - friendViewModel.getFriendIdsLiveData().observe(getViewLifecycleOwner(), new Observer>() { +//自分の情報を取得する + Tampopo app = (Tampopo) requireActivity().getApplication(); + String userId = app.getUserId(); + String token = app.getToken(); - @Override - public void onChanged(List friendIds) { - for (String i : friendIds) { - FriendContent.addItem(new FriendContent.FriendItem(i, "")); +//サーバーからフレンド一覧を取得する + friendViewModel.loadFriends(userId, token); + +//一旦旧コードをコメントアウトしました。 +// friendViewModel.getFriendIdsLiveData().observe(getViewLifecycleOwner(), new Observer>() { +// @Override +// public void onChanged(List friendIds) { +// // 一度リセットして新しいリストを追加 +// FriendContent.clear(); +// for (String id : friendIds) { +// FriendContent.addItem(new FriendContent.FriendItem(id, "")); +// } +// // adapterがクラス変数なのでここで使える +// adapter.notifyDataSetChanged(); +// } +// }); + friendViewModel.getFriendIdsLiveData().observe(getViewLifecycleOwner(), friendIds -> { + FriendContent.clear(); + if (friendIds != null) { + for (String id : friendIds) { + FriendContent.addItem(new FriendContent.FriendItem(id, "")); } } + adapter.notifyDataSetChanged(); }); } } \ No newline at end of file diff --git a/app/src/main/java/com/example/tampopo_client/views/MyFragmentAdapter.java b/app/src/main/java/com/example/tampopo_client/views/MyFragmentAdapter.java index 5786821..bdde5e5 100644 --- a/app/src/main/java/com/example/tampopo_client/views/MyFragmentAdapter.java +++ b/app/src/main/java/com/example/tampopo_client/views/MyFragmentAdapter.java @@ -28,3 +28,4 @@ return 2; } } + 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 22ef86b..e2a231d 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,40 +1,105 @@ +//旧コードは念の為コメントアウトしています。 +//package com.example.tampopo_client.views; +// +//import android.view.LayoutInflater; +//import android.view.ViewGroup; +//import android.widget.TextView; +// +//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 FriendContent.FriendItem}. +// * TODO: Replace the implementation with code for your data type. +// */ +//public class MyFriendRecyclerViewAdapter extends RecyclerView.Adapter { +// +// private final List mValues; +// +// public MyFriendRecyclerViewAdapter(List items) { +// mValues = items; +// } +// +// @Override +// public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { +// +// return new ViewHolder(FragmentFriendListBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false)); +// +// } +// +// @Override +// public void onBindViewHolder(final ViewHolder holder, int position) { +// holder.mItem = mValues.get(position); +// //holder.mIdView.setText(mValues.get(position).id); +// holder.mContentView.setText(mValues.get(position).name); +// } +// +// @Override +// public int getItemCount() { +// return mValues.size(); +// } +// +// public class ViewHolder extends RecyclerView.ViewHolder { +// //public final TextView mIdView; +// public final TextView mContentView; +// public FriendContent.FriendItem mItem; +// +// public ViewHolder(FragmentFriendListBinding binding) { +// super(binding.getRoot()); +// //mIdView = binding.itemNumber; +// mContentView = binding.content; +// } +// +// @Override +// public String toString() { +// return super.toString() + " '" + mContentView.getText() + "'"; +// } +// } +//} + package com.example.tampopo_client.views; import android.view.LayoutInflater; +import android.view.View; import android.view.ViewGroup; +import android.widget.ImageView; import android.widget.TextView; -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 FriendContent.FriendItem}. - * TODO: Replace the implementation with code for your data type. - */ +import com.example.tampopo_client.R; +import com.example.tampopo_client.views.placeholder.FriendContent.FriendItem; + +import java.util.List; + public class MyFriendRecyclerViewAdapter extends RecyclerView.Adapter { - private final List mValues; + private final List mValues; - public MyFriendRecyclerViewAdapter(List items) { + public MyFriendRecyclerViewAdapter(List items) { mValues = items; } + //各行のビューを作成する @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - - return new ViewHolder(FragmentFriendListBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false)); - + View view = LayoutInflater.from(parent.getContext()) + .inflate(R.layout.fragment_friend_list, parent, false); + return new ViewHolder(view); } + + //データをビューに紐付ける @Override public void onBindViewHolder(final ViewHolder holder, int position) { - holder.mItem = mValues.get(position); - //holder.mIdView.setText(mValues.get(position).id); - holder.mContentView.setText(mValues.get(position).name); + FriendItem item = mValues.get(position); + holder.userIdView.setText(item.id); + holder.contentView.setText(item.name); + holder.userIcon.setImageResource(R.drawable.friend); } @Override @@ -43,19 +108,15 @@ } public class ViewHolder extends RecyclerView.ViewHolder { - //public final TextView mIdView; - public final TextView mContentView; - public FriendContent.FriendItem mItem; + public final ImageView userIcon; + public final TextView contentView; + public final TextView userIdView; - public ViewHolder(FragmentFriendListBinding binding) { - super(binding.getRoot()); - //mIdView = binding.itemNumber; - mContentView = binding.content; - } - - @Override - public String toString() { - return super.toString() + " '" + mContentView.getText() + "'"; + public ViewHolder(View view) { + super(view); + userIcon = view.findViewById(R.id.usericon); + contentView = view.findViewById(R.id.content); + userIdView = view.findViewById(R.id.userId); } } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/tampopo_client/views/ProfileActivity.java b/app/src/main/java/com/example/tampopo_client/views/ProfileActivity.java index 8f5a336..075b7ff 100644 --- a/app/src/main/java/com/example/tampopo_client/views/ProfileActivity.java +++ b/app/src/main/java/com/example/tampopo_client/views/ProfileActivity.java @@ -48,32 +48,24 @@ //決定ボタンを押したときにidとニックネームを保存 - Button dicisionbutton = (Button) findViewById(R.id.dicisionbutton); - + Button dicisionbutton = findViewById(R.id.dicisionbutton); dicisionbutton.setOnClickListener(new View.OnClickListener() { - - private Object getApplication; - public void onClick(View v) { - //ニックネームの変更 - EditText usernicknameInput = (EditText) findViewById(R.id.nicknamebutton); + EditText usernicknameInput = findViewById(R.id.nicknamebutton); String usernickname = usernicknameInput.getText().toString(); - ((Tampopo) ProfileActivity.this.getApplication()).setNickname(usernickname); - //idの変更 - EditText useridInput = (EditText) findViewById(R.id.idbutton); + EditText useridInput = findViewById(R.id.idbutton); String userid = useridInput.getText().toString(); - ((Tampopo) ProfileActivity.this.getApplication()).setUserId(userid); - //アイコンの変更 + // Application(Tampopo)に保存(→SharedPreferencesにも自動保存される) + Tampopo app = (Tampopo) getApplication(); + app.setNickname(usernickname); + app.setUserId(userid); - - //決定を押したら設定画面に遷移 + // 設定画面に戻る Intent intent = new Intent(ProfileActivity.this, SettingActivity.class); startActivity(intent); - - } }); 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 index 3c48f8e..f399d6f 100644 --- 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 @@ -40,6 +40,11 @@ ITEM_MAP.put(item.id, item); } + public static void clear() { + ITEMS.clear(); + ITEM_MAP.clear(); + } + //private static FriendItem createPlaceholderItem(int position) { // return new FriendItem(String.valueOf(position), "ユーザー名 " , makeDetails(position)); diff --git a/app/src/main/res/layout/activity_launch.xml b/app/src/main/res/layout/activity_launch.xml index cc3237c..0bbb192 100644 --- a/app/src/main/res/layout/activity_launch.xml +++ b/app/src/main/res/layout/activity_launch.xml @@ -6,7 +6,8 @@ android:id="@+id/main" android:layout_width="match_parent" android:layout_height="match_parent" - tools:context=".views.LaunchActivity"> + tools:context=".views.LaunchActivity" + android:background="#E0F7FA"> + tools:context=".views.RegisterActivity" + android:background="#E0F7FA">