diff --git a/app/src/main/java/cc/niushuai/dididone/biz/dao/RecordDao.java b/app/src/main/java/cc/niushuai/dididone/biz/dao/RecordDao.java index 30be2c7..1654152 100644 --- a/app/src/main/java/cc/niushuai/dididone/biz/dao/RecordDao.java +++ b/app/src/main/java/cc/niushuai/dididone/biz/dao/RecordDao.java @@ -35,4 +35,7 @@ public interface RecordDao { @Query("select b.id, b.name, count(a.id) as count from t_record a left join t_project b on b.id = a.project_id and b.deleted = 0 where a.deleted = 0 group by b.id, b.name") Flowable> groupCountProject(); + + @Query("select check_date from t_record where deleted = 0 and create_date >= :startTime and create_date <= :endTime order by check_date asc") + Flowable> queryPointByDate(long startTime, long endTime); } diff --git a/app/src/main/java/cc/niushuai/dididone/ui/calendar/CalendarFragment.java b/app/src/main/java/cc/niushuai/dididone/ui/calendar/CalendarFragment.java index 73cf1a0..83495b4 100644 --- a/app/src/main/java/cc/niushuai/dididone/ui/calendar/CalendarFragment.java +++ b/app/src/main/java/cc/niushuai/dididone/ui/calendar/CalendarFragment.java @@ -1,6 +1,10 @@ package cc.niushuai.dididone.ui.calendar; +import android.app.Instrumentation; import android.content.Context; +import android.graphics.Canvas; +import android.graphics.RectF; +import android.graphics.drawable.Drawable; import android.os.Bundle; import android.util.Log; import android.view.Gravity; @@ -18,22 +22,23 @@ import androidx.lifecycle.ViewModelProvider; import com.github.clans.fab.FloatingActionButton; import com.github.clans.fab.FloatingActionMenu; import com.lxj.xpopup.XPopup; -import com.lxj.xpopup.interfaces.OnSelectListener; -import com.mikepenz.community_material_typeface_library.CommunityMaterial; import com.mikepenz.iconics.IconicsDrawable; import com.mikepenz.iconics.view.IconicsImageView; import com.necer.calendar.BaseCalendar; import com.necer.entity.Lunar; import com.necer.enumeration.DateChangeBehavior; import com.necer.listener.OnCalendarChangedListener; +import com.necer.painter.CalendarPainter; import com.necer.painter.InnerPainter; import com.necer.utils.CalendarUtil; import org.joda.time.LocalDate; import org.reactivestreams.Subscription; -import java.util.Collection; +import java.lang.reflect.Method; +import java.lang.reflect.Proxy; import java.util.List; +import java.util.stream.Collectors; import cc.niushuai.dididone.R; import cc.niushuai.dididone.biz.BizGlobal; @@ -48,7 +53,6 @@ import cc.niushuai.dididone.util.XLog; import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; -import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.util.StrUtil; import io.reactivex.Completable; import io.reactivex.CompletableObserver; @@ -62,6 +66,7 @@ public class CalendarFragment extends Fragment { private FragmentCalendarBinding binding; + // 默认当天 private String lastDate; // private List floatingActionProjectList; @@ -81,7 +86,7 @@ public class CalendarFragment extends Fragment { } private void init() { -// initPointList(); + initPointList(); // 构建弹出框内容 // fetchNewestActionButtonData(); @@ -89,9 +94,32 @@ public class CalendarFragment extends Fragment { // check entry } - private void initPointList(List pointList) { - InnerPainter painter = (InnerPainter) binding.miui10Calendar.getCalendarPainter(); - painter.addPointList(pointList); + private void initPointList() { + + // 获取当前月视图中存在record的日期 + DateTime currMonth; + if (null == lastDate) { + currMonth = DateUtil.date(); + } else { + currMonth = DateUtil.parseDate(lastDate); + } + + long startTime = DateUtil.beginOfMonth(currMonth).getTime(); + long endTime = DateUtil.endOfMonth(currMonth).getTime(); + + Flowable> listFlowable = DBManager.INSTANCE.recordDao().queryPointByDate(startTime, endTime); + listFlowable.subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(recordList -> { + List checkDateList = recordList.stream() + .map(Record::getCheckDate) + .map(item -> DateUtil.date(item).toDateStr()) + .collect(Collectors.toList()); + + InnerPainter painter = (InnerPainter) binding.miui10Calendar.getCalendarPainter(); + painter.setPointList(checkDateList); + }); + } private void setListeners() {