feature/calendar #160
|
@ -1,11 +1,20 @@
|
||||||
package one.nem.kidshift.data;
|
package one.nem.kidshift.data;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
|
||||||
|
import one.nem.kidshift.model.HistoryModel;
|
||||||
|
|
||||||
public interface RewardData {
|
public interface RewardData {
|
||||||
/**
|
/**
|
||||||
* 現時点の合計報酬額を取得する
|
* 現時点の合計報酬額を取得する
|
||||||
* @return Integer 合計報酬額
|
* @return Integer 合計報酬額
|
||||||
*/
|
*/
|
||||||
CompletableFuture<Integer> getTotalReward(String childId);
|
CompletableFuture<Integer> getTotalReward(String childId);
|
||||||
|
|
||||||
|
CompletableFuture<List<HistoryModel>> getRewardHistoryList();
|
||||||
|
|
||||||
|
CompletableFuture<List<HistoryModel>> getRewardHistoryList(String childId);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,13 +1,17 @@
|
||||||
package one.nem.kidshift.data.impl;
|
package one.nem.kidshift.data.impl;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
|
|
||||||
|
import one.nem.kidshift.data.ChildData;
|
||||||
import one.nem.kidshift.data.KSActions;
|
import one.nem.kidshift.data.KSActions;
|
||||||
import one.nem.kidshift.data.RewardData;
|
import one.nem.kidshift.data.RewardData;
|
||||||
import one.nem.kidshift.data.UserSettings;
|
import one.nem.kidshift.data.UserSettings;
|
||||||
import one.nem.kidshift.data.room.utils.CacheWrapper;
|
import one.nem.kidshift.data.room.utils.CacheWrapper;
|
||||||
|
import one.nem.kidshift.model.ChildModel;
|
||||||
import one.nem.kidshift.model.HistoryModel;
|
import one.nem.kidshift.model.HistoryModel;
|
||||||
import one.nem.kidshift.utils.KSLogger;
|
import one.nem.kidshift.utils.KSLogger;
|
||||||
import one.nem.kidshift.utils.factory.KSLoggerFactory;
|
import one.nem.kidshift.utils.factory.KSLoggerFactory;
|
||||||
|
@ -18,13 +22,15 @@ public class RewardDataImpl implements RewardData {
|
||||||
private final KSActions ksActions;
|
private final KSActions ksActions;
|
||||||
private final CacheWrapper cacheWrapper;
|
private final CacheWrapper cacheWrapper;
|
||||||
private final KSLogger logger;
|
private final KSLogger logger;
|
||||||
|
private final ChildData childData;
|
||||||
|
|
||||||
|
|
||||||
@Inject
|
@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.userSettings = userSettings;
|
||||||
this.ksActions = ksActions;
|
this.ksActions = ksActions;
|
||||||
this.cacheWrapper = cacheWrapper;
|
this.cacheWrapper = cacheWrapper;
|
||||||
|
this.childData = childData;
|
||||||
this.logger = ksLoggerFactory.create("RewardDataImpl");
|
this.logger = ksLoggerFactory.create("RewardDataImpl");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -32,4 +38,19 @@ public class RewardDataImpl implements RewardData {
|
||||||
public CompletableFuture<Integer> getTotalReward(String childId) { // TODO: localCacheを使う
|
public CompletableFuture<Integer> getTotalReward(String childId) { // TODO: localCacheを使う
|
||||||
return CompletableFuture.supplyAsync(() -> ksActions.syncHistory(childId).join().stream().mapToInt(HistoryModel::getReward).sum());
|
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());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package one.nem.kidshift.feature.common;
|
package one.nem.kidshift.feature.common;
|
||||||
|
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
|
import android.graphics.Color;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
|
||||||
import androidx.fragment.app.Fragment;
|
import androidx.fragment.app.Fragment;
|
||||||
|
@ -11,10 +12,13 @@ import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
import com.github.sundeepk.compactcalendarview.CompactCalendarView;
|
import com.github.sundeepk.compactcalendarview.CompactCalendarView;
|
||||||
|
import com.github.sundeepk.compactcalendarview.domain.Event;
|
||||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
@ -23,6 +27,7 @@ import javax.inject.Inject;
|
||||||
|
|
||||||
import dagger.hilt.android.AndroidEntryPoint;
|
import dagger.hilt.android.AndroidEntryPoint;
|
||||||
import one.nem.kidshift.data.ChildData;
|
import one.nem.kidshift.data.ChildData;
|
||||||
|
import one.nem.kidshift.data.RewardData;
|
||||||
import one.nem.kidshift.data.TaskData;
|
import one.nem.kidshift.data.TaskData;
|
||||||
import one.nem.kidshift.feature.common.adapter.ChildListItemAdapter;
|
import one.nem.kidshift.feature.common.adapter.ChildListItemAdapter;
|
||||||
import one.nem.kidshift.feature.common.adapter.TaskListItemAdapter;
|
import one.nem.kidshift.feature.common.adapter.TaskListItemAdapter;
|
||||||
|
@ -47,6 +52,9 @@ public class CommonHomeFragment extends Fragment {
|
||||||
ChildData childData;
|
ChildData childData;
|
||||||
@Inject
|
@Inject
|
||||||
FabManager fabManager;
|
FabManager fabManager;
|
||||||
|
@Inject
|
||||||
|
RewardData rewardData;
|
||||||
|
|
||||||
|
|
||||||
private boolean isChildMode;
|
private boolean isChildMode;
|
||||||
private String childId;
|
private String childId;
|
||||||
|
@ -114,6 +122,8 @@ public class CommonHomeFragment extends Fragment {
|
||||||
swipeRefreshLayout = view.findViewById(R.id.swipeRefreshLayout);
|
swipeRefreshLayout = view.findViewById(R.id.swipeRefreshLayout);
|
||||||
swipeRefreshLayout.setOnRefreshListener(this::updateData);
|
swipeRefreshLayout.setOnRefreshListener(this::updateData);
|
||||||
|
|
||||||
|
initCalender();
|
||||||
|
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -235,8 +245,30 @@ public class CommonHomeFragment extends Fragment {
|
||||||
* @return CompletableFuture<Void>
|
* @return CompletableFuture<Void>
|
||||||
*/
|
*/
|
||||||
private CompletableFuture<Void> updateCalender() {
|
private CompletableFuture<Void> updateCalender() {
|
||||||
// TODO: タスクの完了状況をカレンダーに表示
|
return rewardData.getRewardHistoryList().thenAccept(historyModels -> {
|
||||||
return CompletableFuture.completedFuture(null);
|
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
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue
Block a user