From 8be98509f9f41e7a785a4ee170946560cd74b8c2 Mon Sep 17 00:00:00 2001 From: niushuai233 Date: Mon, 15 Apr 2024 18:42:58 +0800 Subject: [PATCH] feat: :tada: add --- .../1.json | 24 ++++++-- .../niushuai/dididone/biz/entity/Project.java | 32 ++++++++--- .../niushuai/dididone/biz/entity/Record.java | 25 +++++++- .../niushuai/dididone/biz/vo/ProjectIcon.java | 22 +++++-- .../project/GridViewAdapter4Project.java | 2 +- .../ui/setting/project/ProjectFragment.java | 57 +++++++++++++++++-- 6 files changed, 137 insertions(+), 25 deletions(-) diff --git a/app/schemas/cc.niushuai.dididone.biz.roomx.Database/1.json b/app/schemas/cc.niushuai.dididone.biz.roomx.Database/1.json index b22c0ac..44f9b2c 100644 --- a/app/schemas/cc.niushuai.dididone.biz.roomx.Database/1.json +++ b/app/schemas/cc.niushuai.dididone.biz.roomx.Database/1.json @@ -2,11 +2,11 @@ "formatVersion": 1, "database": { "version": 1, - "identityHash": "966ac67768ec0c8feefb2e843474d8c7", + "identityHash": "3b066031a2741d47363ad506910e0a80", "entities": [ { "tableName": "t_record", - "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER, `name` TEXT, `check_date` INTEGER, `description` TEXT, `create_date` INTEGER, `deleted` INTEGER, PRIMARY KEY(`id`))", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER, `name` TEXT, `check_date` TEXT, `project_id` INTEGER, `description` TEXT, `create_date` INTEGER, `deleted` INTEGER, PRIMARY KEY(`id`))", "fields": [ { "fieldPath": "id", @@ -23,6 +23,12 @@ { "fieldPath": "checkDate", "columnName": "check_date", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "projectId", + "columnName": "project_id", "affinity": "INTEGER", "notNull": false }, @@ -56,7 +62,7 @@ }, { "tableName": "t_project", - "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER, `name` TEXT, `project_icon_id` INTEGER, `create_date` INTEGER, `deleted` INTEGER, PRIMARY KEY(`id`))", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER, `name` TEXT, `icon` TEXT, `icon_color` INTEGER, `create_date` INTEGER, `deleted` INTEGER, PRIMARY KEY(`id`))", "fields": [ { "fieldPath": "id", @@ -71,8 +77,14 @@ "notNull": false }, { - "fieldPath": "projectIconId", - "columnName": "project_icon_id", + "fieldPath": "icon", + "columnName": "icon", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "iconColor", + "columnName": "icon_color", "affinity": "INTEGER", "notNull": false }, @@ -152,7 +164,7 @@ "views": [], "setupQueries": [ "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", - "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '966ac67768ec0c8feefb2e843474d8c7')" + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '3b066031a2741d47363ad506910e0a80')" ] } } \ No newline at end of file diff --git a/app/src/main/java/cc/niushuai/dididone/biz/entity/Project.java b/app/src/main/java/cc/niushuai/dididone/biz/entity/Project.java index 08f2b72..9b320c9 100644 --- a/app/src/main/java/cc/niushuai/dididone/biz/entity/Project.java +++ b/app/src/main/java/cc/niushuai/dididone/biz/entity/Project.java @@ -4,17 +4,28 @@ import androidx.room.ColumnInfo; import androidx.room.Entity; import androidx.room.PrimaryKey; +import cc.niushuai.dididone.util.Snowflake; + @Entity(tableName = "t_project") public class Project { + public Project() { + this.id = Snowflake.next_id(); + this.deleted = 0; + this.createDate = System.currentTimeMillis(); + } + @PrimaryKey private Long id; @ColumnInfo(name = "name") private String name; - @ColumnInfo(name = "project_icon_id") - private Long projectIconId; + @ColumnInfo(name = "icon") + private String icon; + + @ColumnInfo(name = "icon_color") + private Integer iconColor; @ColumnInfo(name = "create_date") private Long createDate; @@ -22,7 +33,6 @@ public class Project { @ColumnInfo(name = "deleted") private Integer deleted; - public Long getId() { return id; } @@ -39,12 +49,20 @@ public class Project { this.name = name; } - public Long getProjectIconId() { - return projectIconId; + public String getIcon() { + return icon; + } + + public void setIcon(String icon) { + this.icon = icon; + } + + public Integer getIconColor() { + return iconColor; } - public void setProjectIconId(Long projectIconId) { - this.projectIconId = projectIconId; + public void setIconColor(Integer iconColor) { + this.iconColor = iconColor; } public Long getCreateDate() { diff --git a/app/src/main/java/cc/niushuai/dididone/biz/entity/Record.java b/app/src/main/java/cc/niushuai/dididone/biz/entity/Record.java index 12822bf..0383c68 100644 --- a/app/src/main/java/cc/niushuai/dididone/biz/entity/Record.java +++ b/app/src/main/java/cc/niushuai/dididone/biz/entity/Record.java @@ -4,9 +4,17 @@ import androidx.room.ColumnInfo; import androidx.room.Entity; import androidx.room.PrimaryKey; +import cc.niushuai.dididone.util.Snowflake; + @Entity(tableName = "t_record") public class Record { + public Record() { + this.id = Snowflake.next_id(); + this.deleted = 0; + this.createDate = System.currentTimeMillis(); + } + @PrimaryKey private Long id; @@ -14,7 +22,10 @@ public class Record { private String name; @ColumnInfo(name = "check_date") - private Long checkDate; + private String checkDate; + + @ColumnInfo(name = "project_id") + private Long projectId; @ColumnInfo(name = "description") private String description; @@ -41,14 +52,22 @@ public class Record { this.name = name; } - public Long getCheckDate() { + public String getCheckDate() { return checkDate; } - public void setCheckDate(Long checkDate) { + public void setCheckDate(String checkDate) { this.checkDate = checkDate; } + public Long getProjectId() { + return projectId; + } + + public void setProjectId(Long projectId) { + this.projectId = projectId; + } + public String getDescription() { return description; } diff --git a/app/src/main/java/cc/niushuai/dididone/biz/vo/ProjectIcon.java b/app/src/main/java/cc/niushuai/dididone/biz/vo/ProjectIcon.java index 8e75bba..9fab975 100644 --- a/app/src/main/java/cc/niushuai/dididone/biz/vo/ProjectIcon.java +++ b/app/src/main/java/cc/niushuai/dididone/biz/vo/ProjectIcon.java @@ -1,5 +1,9 @@ package cc.niushuai.dididone.biz.vo; +import java.util.ArrayList; +import java.util.List; + +import cc.niushuai.dididone.biz.entity.Project; import cc.niushuai.dididone.util.Snowflake; public class ProjectIcon { @@ -7,9 +11,9 @@ public class ProjectIcon { private Long id = Snowflake.next_id(); private String projectName; private String icon; - private String color; + private Integer color; - public ProjectIcon(Long id, String projectName, String icon, String color) { + public ProjectIcon(Long id, String projectName, String icon, Integer color) { this.id = id; this.projectName = projectName; this.icon = icon; @@ -40,11 +44,21 @@ public class ProjectIcon { this.icon = icon; } - public String getColor() { + public Integer getColor() { return color; } - public void setColor(String color) { + public void setColor(Integer color) { this.color = color; } + + + public static List trans(List projectList) { + + ArrayList list = new ArrayList<>(projectList.size()); + for (Project project : projectList) { + list.add(new ProjectIcon(project.getId(), project.getName(), project.getIcon(), project.getIconColor())); + } + return list; + } } diff --git a/app/src/main/java/cc/niushuai/dididone/ui/setting/project/GridViewAdapter4Project.java b/app/src/main/java/cc/niushuai/dididone/ui/setting/project/GridViewAdapter4Project.java index 9bf12f1..4f8bbc7 100644 --- a/app/src/main/java/cc/niushuai/dididone/ui/setting/project/GridViewAdapter4Project.java +++ b/app/src/main/java/cc/niushuai/dididone/ui/setting/project/GridViewAdapter4Project.java @@ -48,7 +48,7 @@ public class GridViewAdapter4Project extends BaseAdapter { view = LayoutInflater.from(context).inflate(R.layout.project_grid_item, parent, false); } ImageView icon = view.findViewById(R.id.grid_project_item_icon); - icon.setImageDrawable(new IconicsDrawable(context).icon(iconData.getIcon()).color(Integer.parseInt(iconData.getColor())).sizeDp(50)); + icon.setImageDrawable(new IconicsDrawable(context).icon(iconData.getIcon()).color(iconData.getColor()).sizeDp(50)); TextView txt = view.findViewById(R.id.grid_project_item_txt); txt.setText(iconData.getProjectName()); diff --git a/app/src/main/java/cc/niushuai/dididone/ui/setting/project/ProjectFragment.java b/app/src/main/java/cc/niushuai/dididone/ui/setting/project/ProjectFragment.java index 38a5575..b51cd52 100644 --- a/app/src/main/java/cc/niushuai/dididone/ui/setting/project/ProjectFragment.java +++ b/app/src/main/java/cc/niushuai/dididone/ui/setting/project/ProjectFragment.java @@ -3,6 +3,7 @@ package cc.niushuai.dididone.ui.setting.project; import android.content.Intent; import android.graphics.Color; import android.os.Bundle; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -20,13 +21,21 @@ import java.util.ArrayList; import java.util.List; import cc.niushuai.dididone.biz.BizGlobal; +import cc.niushuai.dididone.biz.entity.Project; import cc.niushuai.dididone.biz.roomx.DBManager; import cc.niushuai.dididone.biz.vo.ProjectIcon; import cc.niushuai.dididone.databinding.FragmentProjectBinding; import cc.niushuai.dididone.ui.base.InitAndSetListener; +import cc.niushuai.dididone.util.Snowflake; import cc.niushuai.dididone.util.Toasts; import cc.niushuai.dididone.util.XLog; import cn.hutool.core.util.StrUtil; +import io.reactivex.Completable; +import io.reactivex.CompletableObserver; +import io.reactivex.Flowable; +import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.disposables.Disposable; +import io.reactivex.schedulers.Schedulers; public class ProjectFragment extends Fragment implements InitAndSetListener { @@ -62,6 +71,16 @@ public class ProjectFragment extends Fragment implements InitAndSetListener { private List getDataList() { ArrayList list = new ArrayList<>(); + Flowable> listFlowable = DBManager.INSTANCE.projectDao().listAll(); + listFlowable.subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(projectList -> { + XLog.d("reset... project 查询到" + projectList.size()); + + list.clear(); + list.addAll(ProjectIcon.trans(projectList)); + list.add(defaultAddProject()); + }); // 最后一个要添加 + 符号 list.add(defaultAddProject()); @@ -69,7 +88,7 @@ public class ProjectFragment extends Fragment implements InitAndSetListener { } private ProjectIcon defaultAddProject() { - return new ProjectIcon(0L, "添加", "faw_plus", String.valueOf(Color.BLACK)); + return new ProjectIcon(0L, "添加", "faw_plus", Color.BLACK); } /** @@ -158,10 +177,40 @@ public class ProjectFragment extends Fragment implements InitAndSetListener { } // 名称 - XLog.d(BizGlobal.PROJECT_NAME + ": {}", data.getStringExtra(BizGlobal.PROJECT_NAME)); + String projectName = data.getStringExtra(BizGlobal.PROJECT_NAME); + XLog.d(BizGlobal.PROJECT_NAME + ": {}", projectName); // 图标 - XLog.d(BizGlobal.PROJECT_ICON + ": {}", data.getStringExtra(BizGlobal.PROJECT_ICON)); + String projectIcon = data.getStringExtra(BizGlobal.PROJECT_ICON); + XLog.d(BizGlobal.PROJECT_ICON + ": {}", projectIcon); // 颜色 - XLog.d(BizGlobal.PROJECT_ICON_COLOR + ": {}", data.getIntExtra(BizGlobal.PROJECT_ICON_COLOR, Color.RED)); + int projectIconColor = data.getIntExtra(BizGlobal.PROJECT_ICON_COLOR, Color.RED); + XLog.d(BizGlobal.PROJECT_ICON_COLOR + ": {}", projectIconColor); + + Project project = new Project(); + project.setName(projectName); + project.setIcon(projectIcon); + project.setIconColor(projectIconColor); + Completable completable = DBManager.INSTANCE.projectDao().insertAll(project); + completable.subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new CompletableObserver() { + @Override + public void onSubscribe(Disposable d) { + } + + @Override + public void onComplete() { + Log.i("SettingsFragment", "新增打卡项[" + project.getName() + "]成功"); + Toasts.shortShow(getActivity(), "新增打卡项[{}]成功", project.getName()); + } + + @Override + public void onError(Throwable e) { + Log.e("SettingsFragment", "新增打卡项[" + project.getName() + "]失败", e); + Toasts.shortShow(getActivity(), "新增打卡项[{}]失败, {}", project.getName(), e.getMessage()); + } + }); + + } }