Merge pull request 'feature/calendar' (#160) from feature/calendar into main

Reviewed-on: #160
This commit is contained in:
Fujimatsu 2024-07-09 01:04:56 +00:00
commit e4c36e6971
3 changed files with 65 additions and 3 deletions

View File

@ -1,11 +1,20 @@
package one.nem.kidshift.data;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import one.nem.kidshift.model.HistoryModel;
public interface RewardData {
/**
* 現時点の合計報酬額を取得する
* @return Integer 合計報酬額
*/
CompletableFuture<Integer> getTotalReward(String childId);
CompletableFuture<List<HistoryModel>> getRewardHistoryList();
CompletableFuture<List<HistoryModel>> getRewardHistoryList(String childId);
}

View File

@ -1,13 +1,17 @@
package one.nem.kidshift.data.impl;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import javax.inject.Inject;
import one.nem.kidshift.data.ChildData;
import one.nem.kidshift.data.KSActions;
import one.nem.kidshift.data.RewardData;
import one.nem.kidshift.data.UserSettings;
import one.nem.kidshift.data.room.utils.CacheWrapper;
import one.nem.kidshift.model.ChildModel;
import one.nem.kidshift.model.HistoryModel;
import one.nem.kidshift.utils.KSLogger;
import one.nem.kidshift.utils.factory.KSLoggerFactory;
@ -18,13 +22,15 @@ public class RewardDataImpl implements RewardData {
private final KSActions ksActions;
private final CacheWrapper cacheWrapper;
private final KSLogger logger;
private final ChildData childData;
@Inject
public RewardDataImpl(KSLoggerFactory ksLoggerFactory, CacheWrapper cacheWrapper, UserSettings userSettings, KSActions ksActions) {
public RewardDataImpl(KSLoggerFactory ksLoggerFactory, CacheWrapper cacheWrapper, UserSettings userSettings, KSActions ksActions, ChildData childData) {
this.userSettings = userSettings;
this.ksActions = ksActions;
this.cacheWrapper = cacheWrapper;
this.childData = childData;
this.logger = ksLoggerFactory.create("RewardDataImpl");
}
@ -32,4 +38,19 @@ public class RewardDataImpl implements RewardData {
public CompletableFuture<Integer> getTotalReward(String childId) { // TODO: localCacheを使う
return CompletableFuture.supplyAsync(() -> ksActions.syncHistory(childId).join().stream().mapToInt(HistoryModel::getReward).sum());
}
@Override
public CompletableFuture<List<HistoryModel>> getRewardHistoryList() { // TODO: localCacheを使う
List<HistoryModel> historyModels = new ArrayList<>();
return childData.getChildListDirect().thenAccept(childModels -> {
childModels.forEach(childModel -> {
historyModels.addAll(ksActions.syncHistory(childModel.getId()).join());
});
}).thenApply(v -> historyModels);
}
@Override
public CompletableFuture<List<HistoryModel>> getRewardHistoryList(String childId) { // TODO: localCacheを使う
return CompletableFuture.supplyAsync(() -> ksActions.syncHistory(childId).join());
}
}

View File

@ -1,6 +1,7 @@
package one.nem.kidshift.feature.common;
import android.annotation.SuppressLint;
import android.graphics.Color;
import android.os.Bundle;
import androidx.fragment.app.Fragment;
@ -11,10 +12,13 @@ import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
import com.github.sundeepk.compactcalendarview.CompactCalendarView;
import com.github.sundeepk.compactcalendarview.domain.Event;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import java.util.Date;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.atomic.AtomicBoolean;
@ -23,6 +27,7 @@ import javax.inject.Inject;
import dagger.hilt.android.AndroidEntryPoint;
import one.nem.kidshift.data.ChildData;
import one.nem.kidshift.data.RewardData;
import one.nem.kidshift.data.TaskData;
import one.nem.kidshift.feature.common.adapter.ChildListItemAdapter;
import one.nem.kidshift.feature.common.adapter.TaskListItemAdapter;
@ -47,6 +52,9 @@ public class CommonHomeFragment extends Fragment {
ChildData childData;
@Inject
FabManager fabManager;
@Inject
RewardData rewardData;
private boolean isChildMode;
private String childId;
@ -114,6 +122,8 @@ public class CommonHomeFragment extends Fragment {
swipeRefreshLayout = view.findViewById(R.id.swipeRefreshLayout);
swipeRefreshLayout.setOnRefreshListener(this::updateData);
initCalender();
return view;
}
@ -235,8 +245,30 @@ public class CommonHomeFragment extends Fragment {
* @return CompletableFuture<Void>
*/
private CompletableFuture<Void> updateCalender() {
// TODO: タスクの完了状況をカレンダーに表示
return CompletableFuture.completedFuture(null);
return rewardData.getRewardHistoryList().thenAccept(historyModels -> {
historyModels.forEach(historyModel -> {
compactCalendarView.addEvent(new Event(Color.RED, historyModel.getRegisteredAt().getTime(), historyModel.getTaskName())); // debug
});
});
}
private void initCalender() {
compactCalendarView.setListener(new CompactCalendarView.CompactCalendarViewListener() {
@Override
public void onDayClick(Date date) { // Test
List<Event> events = compactCalendarView.getEvents(date);
new MaterialAlertDialogBuilder(requireContext())
.setTitle(date.toString())
.setMessage(events.toString())
.setPositiveButton("OK", (dialog, which) -> dialog.dismiss())
.show();
}
@Override
public void onMonthScroll(Date date) {
// Do nothing
}
});
}
/**