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 e2ad02a..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 @@ -10,6 +10,7 @@ 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; @@ -37,7 +38,7 @@ private final String myUserId; private final String myToken; - private final List userActivityStatusChangeObservers; + private final List userActivityStatusChangeListeners; /** * ActivityのViewModelを作成する。 @@ -58,7 +59,7 @@ friendUserIdsLiveData = new MutableLiveData<>(List.of()); myLatestActivityLiveData = new MutableLiveData<>(null); - userActivityStatusChangeObservers = new ArrayList<>(); + userActivityStatusChangeListeners = new ArrayList<>(); } @Override @@ -74,10 +75,19 @@ public void onSuccess(Activity activity) { Activity prevActivity = myLatestActivityLiveData.getValue(); - // アクティビティが更新されていない場合は、経過時間を追加する - if (activity.equals(prevActivity)) { - // TODO: 実装する必要がある - return; + // アクティビティが更新されていない場合 + 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に反映する @@ -222,9 +232,15 @@ }); } + /** + * String型の日時をLocalDateTime型に変換する + * + * @param dateTime 変換対象の日時(文字列) + * @return 変換後の日時(LocalDateTime) + */ private LocalDateTime getDateTimeFromString(String dateTime) { - // TODO: 実装する必要がある - return null; + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm"); + return LocalDateTime.parse(dateTime, formatter); } /** @@ -250,6 +266,13 @@ }); } + /** + * + */ + private void sortFriendsByLatestUpdateTime() { + + } + public MutableLiveData getMyLatestActivityLiveData() { return myLatestActivityLiveData; } @@ -276,12 +299,12 @@ return myToken; } - public void addActivityStatusChangeObserver(UserActivityStatusChangeObserver observer) { - userActivityStatusChangeObservers.add(observer); + public void addActivityStatusChangeObserver(UserActivityStatusChangeListener observer) { + userActivityStatusChangeListeners.add(observer); } public void clearActivityStatusChangeObservers() { - userActivityStatusChangeObservers.clear(); + userActivityStatusChangeListeners.clear(); } private interface ActivityFetchCallback {