Browse Source

feat: 功能优化

master
niushuai233 14 hours ago
parent
commit
59f0865332
  1. 39
      app/src/main/java/cc/niushuai/dididone/biz/BizGlobal.java
  2. 7
      app/src/main/java/cc/niushuai/dididone/ui/calendar/CalendarFragment.java
  3. 28
      app/src/main/java/cc/niushuai/dididone/ui/component/ProjectPopupView.java
  4. 7
      app/src/main/java/cc/niushuai/dididone/ui/component/TimeNotePopupView.java

39
app/src/main/java/cc/niushuai/dididone/biz/BizGlobal.java

@ -26,10 +26,13 @@ import cc.niushuai.dididone.biz.roomx.DBManager; @@ -26,10 +26,13 @@ import cc.niushuai.dididone.biz.roomx.DBManager;
import cc.niushuai.dididone.biz.vo.ProjectCount;
import cc.niushuai.dididone.util.IntSnowflake;
import cc.niushuai.dididone.util.XLog;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import io.reactivex.Flowable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;
import kotlin.Unit;
import kotlin.jvm.functions.Function1;
@ -45,8 +48,7 @@ public class BizGlobal { @@ -45,8 +48,7 @@ public class BizGlobal {
public static final String PROJECT_ICON_COLOR = "projectIconColor";
public static final Map<Long, Project> CACHE_PROJECT = new HashMap<>();
public static final Map<Long, Integer> CACHE_PROJECT_COUNT = new HashMap<>();
public static final Map<Long, Integer> CACHE_PROJECT_TODAY_COUNT = new HashMap<>();
public static final Map<String, List<Record>> CACHE_RECORD_LIST = new HashMap<>();
public static final Map<String, Map<Long, List<Record>>> CACHE_RECORD_LIST = new HashMap<>();
public static final String EMPTY_PROJECT_TIPS = "先去添加打卡项吧~";
public static final String EMPTY_PROJECT_TIPS_ICON = "cmd_alert_decagram_outline";
public static final int REQUEST_CODE_GENERAL = 1;
@ -71,11 +73,39 @@ public class BizGlobal { @@ -71,11 +73,39 @@ public class BizGlobal {
// 按类别区分每一个打卡项 存在多少条打卡记录
buildProjectCountCache();
// 全部打卡项列表
buildAllRecordCache();
}
private static void buildAllRecordCache() {
Flowable<List<Record>> listFlowable = DBManager.INSTANCE.recordDao().listAll();
Disposable subscribe = listFlowable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(records -> {
XLog.d("build all record cache size: {}", records.size());
if (CollUtil.isNotEmpty(records)) {
CACHE_RECORD_LIST.clear();
for (Record record : records) {
DateTime dateTime = DateUtil.date(record.getCreateDate());
String dateStr = dateTime.toString("yyyy-MM-dd");
Map<Long, List<Record>> currDateMap = CACHE_RECORD_LIST.getOrDefault(dateStr, new HashMap<>());
List<Record> currDateList = currDateMap.getOrDefault(record.getProjectId(), new ArrayList<>());
currDateList.add(record);
currDateMap.put(record.getProjectId(), currDateList);
CACHE_RECORD_LIST.put(dateStr, currDateMap);
}
}
XLog.d("build record cache size: {}", CACHE_RECORD_LIST.size());
});
}
private static void buildProjectCountCache() {
Flowable<List<ProjectCount>> listFlowable = DBManager.INSTANCE.recordDao().groupCountProject();
listFlowable.subscribeOn(Schedulers.io())
Disposable subscribe = listFlowable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(projectCountList -> {
@ -159,7 +189,8 @@ public class BizGlobal { @@ -159,7 +189,8 @@ public class BizGlobal {
checkDateLayout.addRule(RelativeLayout.BELOW, projectNameViewId);
int checkDateViewId = IntSnowflake.next_id();
// 打卡时间文本view
TextView checkDateTextView = getTextView(context, checkDateViewId, DateUtil.date(record.getCheckDate()).toString(DatePattern.NORM_DATE_PATTERN), checkDateLayout, R.color._666666, 12, Gravity.TOP);
// TextView checkDateTextView = getTextView(context, checkDateViewId, DateUtil.date(record.getCheckDate()).toString(DatePattern.NORM_DATE_PATTERN), checkDateLayout, R.color._666666, 12, Gravity.TOP);
TextView checkDateTextView = getTextView(context, checkDateViewId, record.getDescription(), checkDateLayout, R.color._666666, 12, Gravity.TOP);
itemLayout.addView(checkDateTextView);
// 创建时间

7
app/src/main/java/cc/niushuai/dididone/ui/calendar/CalendarFragment.java

@ -36,7 +36,9 @@ import org.joda.time.format.DateTimeFormatter; @@ -36,7 +36,9 @@ import org.joda.time.format.DateTimeFormatter;
import org.joda.time.format.ISODateTimeFormat;
import org.reactivestreams.Subscription;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@ -320,6 +322,11 @@ public class CalendarFragment extends BaseFragment { @@ -320,6 +322,11 @@ public class CalendarFragment extends BaseFragment {
XLog.i("[{}]打卡成功", project.getName());
Toasts.shortShow(getActivity(), "[{}]打卡成功", project.getName());
// 更新缓存数据
// Map<Long, List<Record>> listMap = BizGlobal.CACHE_RECORD_LIST.getOrDefault(lastDate, new HashMap<>());
// List<Record> list = listMap.getOrDefault(record.getProjectId(), new ArrayList<>());
// list.add(record);
// 更新视图
add2Top(project, record);
}

28
app/src/main/java/cc/niushuai/dididone/ui/component/ProjectPopupView.java

@ -28,6 +28,7 @@ import java.util.function.Consumer; @@ -28,6 +28,7 @@ import java.util.function.Consumer;
import cc.niushuai.dididone.R;
import cc.niushuai.dididone.biz.BizGlobal;
import cc.niushuai.dididone.biz.entity.Project;
import cc.niushuai.dididone.biz.entity.Record;
import cc.niushuai.dididone.util.GsonUtil;
import cc.niushuai.dididone.util.XLog;
import cn.hutool.core.collection.CollUtil;
@ -68,16 +69,23 @@ public class ProjectPopupView extends BottomPopupView { @@ -68,16 +69,23 @@ public class ProjectPopupView extends BottomPopupView {
// data.sort(Comparator.comparing(Project::getCreateDate));
// data.sort((e1, e2) -> e2.getCreateDate().compareTo(e1.getCreateDate()));
Map<String, Integer> countMap = new HashMap<>();
for (Project item : data) {
Integer val = countMap.getOrDefault(item.getName(), 0);
countMap.put(item.getName(), val + 1);
Map<String, Map<Long, List<Record>>> cacheRecordMap = BizGlobal.CACHE_RECORD_LIST;
Map<Long, Integer> countMap = new HashMap<>();
for (Map<Long, List<Record>> value : cacheRecordMap.values()) {
for (List<Record> list : value.values()) {
for (Record record : list) {
Integer val = countMap.getOrDefault(record.getProjectId(), 0);
countMap.put(record.getProjectId(), val + 1);
}
}
}
XLog.d("构建出打卡项目: " + GsonUtil.toJson(countMap));
// 排序
data.sort((e1, e2) -> {
int diff = countMap.getOrDefault(e2.getName(), 0) - countMap.getOrDefault(e1.getName(), 0);
int diff = countMap.getOrDefault(e2.getId(), 0) - countMap.getOrDefault(e1.getId(), 0);
if (diff != 0) {
return diff;
}
@ -111,8 +119,14 @@ public class ProjectPopupView extends BottomPopupView { @@ -111,8 +119,14 @@ public class ProjectPopupView extends BottomPopupView {
TextView descView = holder.getView(R.id.ppv_item_desc);
String count = BizGlobal.CACHE_PROJECT_COUNT.getOrDefault(project.getId(), 0).toString();
Integer todayCount = BizGlobal.CACHE_PROJECT_TODAY_COUNT.getOrDefault(project.getId(), 0);
descView.setText(StrUtil.format("今日打卡{}次, 累计打卡{}次", todayCount, count));
Map<Long, Integer> selectedDayCountMap = new HashMap<>();
String dateStr = DateUtil.date().toDateStr();
Map<Long, List<Record>> recordMapOrDefault = cacheRecordMap.getOrDefault(dateStr, new HashMap<>());
recordMapOrDefault.forEach((k, v) -> selectedDayCountMap.put(k, v.size()));
Integer todayCount = selectedDayCountMap.getOrDefault(project.getId(), 0);
descView.setText(StrUtil.format("当日打卡{}次, 累计打卡{}次", todayCount, count));
}
};
commonAdapter.setOnItemClickListener(new MultiItemTypeAdapter.OnItemClickListener() {

7
app/src/main/java/cc/niushuai/dididone/ui/component/TimeNotePopupView.java

@ -41,8 +41,10 @@ public class TimeNotePopupView extends CenterPopupView { @@ -41,8 +41,10 @@ public class TimeNotePopupView extends CenterPopupView {
// 初始化时间选择器为当前时间
Calendar calendar = Calendar.getInstance();
timePicker.setIs24HourView(true);
timePicker.setHour(calendar.get(Calendar.HOUR_OF_DAY));
timePicker.setMinute(calendar.get(Calendar.MINUTE));
timePicker.setActivated(false);
btnConfirm.setOnClickListener(v -> {
// 获取选择的时间(转换为毫秒时间戳)
@ -60,5 +62,10 @@ public class TimeNotePopupView extends CenterPopupView { @@ -60,5 +62,10 @@ public class TimeNotePopupView extends CenterPopupView {
});
btnCancel.setOnClickListener(v -> dismiss());
// 让备注获取到焦点
etNote.requestFocus();
// 让确定获取到焦点
btnConfirm.requestFocus();
}
}

Loading…
Cancel
Save