Browse Source

feat: 🌓 : project 可更新

master
niushuai233 1 year ago
parent
commit
860881486d
  1. 4
      app/src/main/java/cc/niushuai/dididone/biz/BizGlobal.java
  2. 6
      app/src/main/java/cc/niushuai/dididone/biz/dao/ProjectDao.java
  3. 3
      app/src/main/java/cc/niushuai/dididone/biz/dao/RecordDao.java
  4. 52
      app/src/main/java/cc/niushuai/dididone/ui/setting/project/NewProjectActivity.java
  5. 92
      app/src/main/java/cc/niushuai/dididone/ui/setting/project/ProjectFragment.java

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

@ -38,6 +38,8 @@ import kotlin.jvm.functions.Function1; @@ -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 { @@ -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";

6
app/src/main/java/cc/niushuai/dididone/biz/dao/ProjectDao.java

@ -4,6 +4,7 @@ import androidx.room.Dao; @@ -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 { @@ -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);
}

3
app/src/main/java/cc/niushuai/dididone/biz/dao/RecordDao.java

@ -59,4 +59,7 @@ public interface RecordDao { @@ -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);
}

52
app/src/main/java/cc/niushuai/dididone/ui/setting/project/NewProjectActivity.java

@ -1,5 +1,6 @@ @@ -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; @@ -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; @@ -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; @@ -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 { @@ -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 { @@ -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 { @@ -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();
});
}

92
app/src/main/java/cc/niushuai/dididone/ui/setting/project/ProjectFragment.java

@ -1,5 +1,6 @@ @@ -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 { @@ -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 { @@ -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 { @@ -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 { @@ -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());
}
});
}
}
}

Loading…
Cancel
Save