diff --git a/app/src/main/java/cc/niushuai/dididone/biz/BizGlobal.java b/app/src/main/java/cc/niushuai/dididone/biz/BizGlobal.java index 5a2a77c..0309d8e 100644 --- a/app/src/main/java/cc/niushuai/dididone/biz/BizGlobal.java +++ b/app/src/main/java/cc/niushuai/dididone/biz/BizGlobal.java @@ -38,6 +38,8 @@ import kotlin.jvm.functions.Function1; * 业务全局对象 */ public class BizGlobal { + public static final String REQUEST_CODE = "REQUEST_CODE"; + public static final String PROJECT_ID = "projectId"; public static final String PROJECT_NAME = "projectName"; public static final String PROJECT_ICON = "projectIcon"; public static final String PROJECT_ICON_COLOR = "projectIconColor"; @@ -46,6 +48,8 @@ public class BizGlobal { 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; + public static final int REQUEST_CODE_PROJECT_NEW = 10011; + public static final int REQUEST_CODE_PROJECT_UPDATE = 10012; public static final Integer REQUEST_CODE_BACKUP = 10005; public static final Integer REQUEST_CODE_RESTORE = 10006; private static final String URI_SCHEMA_FILE = "file"; diff --git a/app/src/main/java/cc/niushuai/dididone/biz/dao/ProjectDao.java b/app/src/main/java/cc/niushuai/dididone/biz/dao/ProjectDao.java index 8485c28..71474d3 100644 --- a/app/src/main/java/cc/niushuai/dididone/biz/dao/ProjectDao.java +++ b/app/src/main/java/cc/niushuai/dididone/biz/dao/ProjectDao.java @@ -4,6 +4,7 @@ import androidx.room.Dao; import androidx.room.Delete; import androidx.room.Insert; import androidx.room.Query; +import androidx.room.Update; import java.util.List; @@ -37,4 +38,9 @@ public interface ProjectDao { @Query("delete from t_project where id = :id") void physicsDeleteById(Long id); + + @Query("update t_project set name = :name, icon = :icon, icon_color = :color where id = :id") + void update(Long id, String name, String icon, Integer color); + @Update + int update(Project project); } 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 cef646b..5349fe3 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 @@ -59,4 +59,7 @@ public interface RecordDao { @Query("update t_record set deleted = 1 where project_id = :projectId") void deleteByProjectId(Long projectId); + + @Query("update t_record set name = :name where project_id = :projectId") + int updateName(String name, Long projectId); } diff --git a/app/src/main/java/cc/niushuai/dididone/ui/setting/project/NewProjectActivity.java b/app/src/main/java/cc/niushuai/dididone/ui/setting/project/NewProjectActivity.java index ab3ffe2..51ce29d 100644 --- a/app/src/main/java/cc/niushuai/dididone/ui/setting/project/NewProjectActivity.java +++ b/app/src/main/java/cc/niushuai/dididone/ui/setting/project/NewProjectActivity.java @@ -1,5 +1,6 @@ package cc.niushuai.dididone.ui.setting.project; +import android.app.Activity; import android.content.Intent; import android.graphics.Color; import android.os.Bundle; @@ -7,9 +8,6 @@ import android.text.Editable; import android.text.TextWatcher; import android.view.Gravity; import android.view.View; -import android.widget.AdapterView; -import android.widget.ArrayAdapter; -import android.widget.Spinner; import android.widget.TextView; import androidx.appcompat.app.AlertDialog; @@ -18,7 +16,6 @@ import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; -import com.mikepenz.community_material_typeface_library.CommunityMaterial; import com.mikepenz.iconics.IconicsDrawable; import com.mikepenz.ionicons_typeface_library.Ionicons; import com.skydoves.colorpickerview.ColorEnvelope; @@ -27,14 +24,9 @@ import com.skydoves.colorpickerview.ColorPickerView; import com.skydoves.colorpickerview.listeners.ColorEnvelopeListener; import com.skydoves.colorpickerview.listeners.ColorListener; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Set; -import java.util.function.Predicate; - import cc.niushuai.dididone.R; import cc.niushuai.dididone.biz.BizGlobal; -import cc.niushuai.dididone.biz.entity.SavedIcon; +import cc.niushuai.dididone.biz.vo.ProjectIcon; import cc.niushuai.dididone.databinding.ActivityNewProjectBinding; import cc.niushuai.dididone.ui.base.BaseActivity; import cc.niushuai.dididone.ui.setting.icon.recycle.IconRecycleAdapter; @@ -49,6 +41,9 @@ public class NewProjectActivity extends BaseActivity { private int selectedColor = Color.RED; private String selectedIcon = Ionicons.Icon.ion_ios_heart.name(); + private Long projectId; + private Integer requestCode; + /** * icon 展示 recycleViewAdapter */ @@ -63,11 +58,37 @@ public class NewProjectActivity extends BaseActivity { setContentView(binding.getRoot()); } + + @Override protected void init() { + // 是否需要restore数据 + boolean update = restore(); // 设置标题 - setTitle("添加新打卡项"); + setTitle(update ? "更新打卡项" : "添加打卡项"); + + } + + private boolean restore() { + + Bundle extras = getIntent().getExtras(); + requestCode = extras.getInt(BizGlobal.REQUEST_CODE); + long id = extras.getLong(BizGlobal.PROJECT_ID); + String name = extras.getString(BizGlobal.PROJECT_NAME); + String icon = extras.getString(BizGlobal.PROJECT_ICON); + int iconColor = extras.getInt(BizGlobal.PROJECT_ICON_COLOR); + + // 重新赋值 + projectId = id; + selectedIcon = icon; + selectedColor = iconColor; + + // 修改text内容 + binding.npProjectNameTxt.setText(name); + changeIcon(icon, iconColor); + + return BizGlobal.REQUEST_CODE_PROJECT_NEW == requestCode ? false : true; } private void initIconDialogView(View iconDialogView) { @@ -162,13 +183,20 @@ public class NewProjectActivity extends BaseActivity { Toasts.shortShow(this, "{}未填", getResources().getString(R.string.np_project_name)); return; } + // id + if (null != projectId) { + data.putExtra(BizGlobal.PROJECT_ID, projectId); + } + // 名称 data.putExtra(BizGlobal.PROJECT_NAME, projectName); // 图标 data.putExtra(BizGlobal.PROJECT_ICON, selectedIcon); // 颜色 data.putExtra(BizGlobal.PROJECT_ICON_COLOR, selectedColor); + // requestCode + data.putExtra(BizGlobal.REQUEST_CODE, requestCode); // 放置结果数据 - setResult(BizGlobal.REQUEST_CODE_GENERAL, data); + setResult(Activity.RESULT_OK, data); finish(); }); } 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 becca67..b0c5ced 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 @@ -1,5 +1,6 @@ package cc.niushuai.dididone.ui.setting.project; +import android.app.Activity; import android.content.Intent; import android.graphics.Color; import android.os.Bundle; @@ -108,13 +109,15 @@ public class ProjectFragment extends Fragment implements InitAndSetListener { public void onItemClick(AdapterView parent, View view, int position, long id) { if (id == 0) { - addProjectClick(); + addProjectClick(BizGlobal.REQUEST_CODE_PROJECT_NEW, null); return; } // 其他的被点击 ProjectIcon item = gridViewAdapter4Project.getItem(position); - Toasts.shortShow(getContext(), item.getProjectName()); +// Toasts.shortShow(getContext(), item.getProjectName()); + + addProjectClick(BizGlobal.REQUEST_CODE_PROJECT_UPDATE, item); } }); @@ -153,7 +156,7 @@ public class ProjectFragment extends Fragment implements InitAndSetListener { return true; } - private void confirmDeleteProjectRecord( ProjectIcon item) { + private void confirmDeleteProjectRecord(ProjectIcon item) { // 再次弹出是否级联删除选项 AlertDialog projectItemAlertDialog = new AlertDialog.Builder(getContext()) .setTitle(StrUtil.format("是否要删除 [{}] 已打卡记录?", item.getProjectName())) @@ -186,18 +189,37 @@ public class ProjectFragment extends Fragment implements InitAndSetListener { /** * 添加 被点击 */ - private void addProjectClick() { + private void addProjectClick(int requestCode, ProjectIcon clickItem) { // 打开添加新项页面 - startActivityForResult(new Intent(getContext(), NewProjectActivity.class), BizGlobal.REQUEST_CODE_GENERAL); + Intent intent = new Intent(getContext(), NewProjectActivity.class); + Bundle data = new Bundle(); + if (null != clickItem) { + // requestCode + intent.putExtra(BizGlobal.REQUEST_CODE, requestCode); + // id + intent.putExtra(BizGlobal.PROJECT_ID, clickItem.getId()); + // 名称 + intent.putExtra(BizGlobal.PROJECT_NAME, clickItem.getProjectName()); + // 图标 + intent.putExtra(BizGlobal.PROJECT_ICON, clickItem.getIcon()); + // 颜色 + intent.putExtra(BizGlobal.PROJECT_ICON_COLOR, clickItem.getColor()); + } + startActivityForResult(intent, requestCode, data); } @Override public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { - if (null == data) { + if (resultCode != Activity.RESULT_OK || null == data) { return; } + boolean update = requestCode == BizGlobal.REQUEST_CODE_PROJECT_UPDATE ? true : false; + + // id + long projectId = data.getLongExtra(BizGlobal.PROJECT_ID, -1L); + XLog.d(BizGlobal.PROJECT_ID + ": {}", projectId); // 名称 String projectName = data.getStringExtra(BizGlobal.PROJECT_NAME); XLog.d(BizGlobal.PROJECT_NAME + ": {}", projectName); @@ -212,27 +234,45 @@ public class ProjectFragment extends Fragment implements InitAndSetListener { 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()); - } - }); + // 是否要添加id选项 + if (update) { + project.setId(projectId); + } + + XLog.d("update ? {}", update); + if (update) { + // 更新 + int rows = DBManager.INSTANCE.projectDao().update(project); + Toasts.shortShow(getContext(), "rows = " + rows); + XLog.d("update project rows == " + rows); + if (rows == 1) { + rows = DBManager.INSTANCE.recordDao().updateName(project.getName(), project.getId()); + XLog.d("update record rows == " + rows); + } + } else { + // 新增 + 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()); + } + }); + } } }