Browse Source

feat: 🔥 添加新项目

master
niushuai233 1 year ago
parent
commit
498d06896a
  1. 12
      app/schemas/cc.niushuai.didicheck.biz.room.DiDiCheckDataBase/3.json
  2. 114
      app/schemas/cc.niushuai.didicheck.biz.room.DiDiCheckDataBase/4.json
  3. 3
      app/src/main/java/cc/niushuai/didicheck/biz/dao/CheckProjectDao.java
  4. 2
      app/src/main/java/cc/niushuai/didicheck/biz/room/DBManager.java
  5. 2
      app/src/main/java/cc/niushuai/didicheck/biz/room/DiDiCheckDataBase.java
  6. 116
      app/src/main/java/cc/niushuai/didicheck/ui/main/settings/SettingsFragment.java
  7. 4
      app/src/main/java/cc/niushuai/didicheck/util/Toasts.java
  8. 4
      app/src/main/res/values/strings.xml
  9. 40
      app/src/main/res/xml/root_preferences.xml
  10. BIN
      keystore/key.jks

12
app/schemas/cc.niushuai.didicheck.biz.room.DiDiCheckDataBase/3.json

@ -2,7 +2,7 @@ @@ -2,7 +2,7 @@
"formatVersion": 1,
"database": {
"version": 3,
"identityHash": "f2ca61f32434b82ab65889a8d915a3c6",
"identityHash": "8a123aa9c9eab77aec672727765b01ce",
"entities": [
{
"tableName": "t_check_record",
@ -62,7 +62,7 @@ @@ -62,7 +62,7 @@
},
{
"tableName": "t_check_project",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER, `name` TEXT, `create_date` INTEGER, `deleted` INTEGER, PRIMARY KEY(`id`))",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER, `name` TEXT, `icon` INTEGER, `create_date` INTEGER, `deleted` INTEGER, PRIMARY KEY(`id`))",
"fields": [
{
"fieldPath": "id",
@ -76,6 +76,12 @@ @@ -76,6 +76,12 @@
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "icon",
"columnName": "icon",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "createDate",
"columnName": "create_date",
@ -102,7 +108,7 @@ @@ -102,7 +108,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, 'f2ca61f32434b82ab65889a8d915a3c6')"
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '8a123aa9c9eab77aec672727765b01ce')"
]
}
}

114
app/schemas/cc.niushuai.didicheck.biz.room.DiDiCheckDataBase/4.json

@ -0,0 +1,114 @@ @@ -0,0 +1,114 @@
{
"formatVersion": 1,
"database": {
"version": 4,
"identityHash": "8a123aa9c9eab77aec672727765b01ce",
"entities": [
{
"tableName": "t_check_record",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER, `check_type` TEXT, `name` TEXT, `check_date` INTEGER, `description` TEXT, `create_date` INTEGER, `deleted` INTEGER, PRIMARY KEY(`id`))",
"fields": [
{
"fieldPath": "id",
"columnName": "id",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "checkType",
"columnName": "check_type",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "name",
"columnName": "name",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "checkDate",
"columnName": "check_date",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "description",
"columnName": "description",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "createDate",
"columnName": "create_date",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "deleted",
"columnName": "deleted",
"affinity": "INTEGER",
"notNull": false
}
],
"primaryKey": {
"autoGenerate": false,
"columnNames": [
"id"
]
},
"indices": [],
"foreignKeys": []
},
{
"tableName": "t_check_project",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER, `name` TEXT, `icon` INTEGER, `create_date` INTEGER, `deleted` INTEGER, PRIMARY KEY(`id`))",
"fields": [
{
"fieldPath": "id",
"columnName": "id",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "name",
"columnName": "name",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "icon",
"columnName": "icon",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "createDate",
"columnName": "create_date",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "deleted",
"columnName": "deleted",
"affinity": "INTEGER",
"notNull": false
}
],
"primaryKey": {
"autoGenerate": false,
"columnNames": [
"id"
]
},
"indices": [],
"foreignKeys": []
}
],
"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, '8a123aa9c9eab77aec672727765b01ce')"
]
}
}

3
app/src/main/java/cc/niushuai/didicheck/biz/dao/CheckProjectDao.java

@ -14,6 +14,9 @@ import io.reactivex.Flowable; @@ -14,6 +14,9 @@ import io.reactivex.Flowable;
@Dao
public interface CheckProjectDao {
@Query("SELECT * FROM t_check_project")
Flowable<List<CheckProject>> testListAll();
@Query("SELECT * FROM t_check_project where deleted = 0 order by create_date desc")
Flowable<List<CheckProject>> listAll();

2
app/src/main/java/cc/niushuai/didicheck/biz/room/DBManager.java

@ -31,7 +31,7 @@ public class DBManager { @@ -31,7 +31,7 @@ public class DBManager {
public DiDiCheckDataBase getDiDiCheckDataBase() {
if (null == diDiCheckDataBase) {
diDiCheckDataBase = (DiDiCheckDataBase) buildDatabase(context, DiDiCheckDataBase.class, "didi_check");
diDiCheckDataBase = (DiDiCheckDataBase) buildDatabase(context, DiDiCheckDataBase.class, "didi_check.db");
}
return diDiCheckDataBase;
}

2
app/src/main/java/cc/niushuai/didicheck/biz/room/DiDiCheckDataBase.java

@ -8,7 +8,7 @@ import cc.niushuai.didicheck.biz.dao.CheckRecordDao; @@ -8,7 +8,7 @@ import cc.niushuai.didicheck.biz.dao.CheckRecordDao;
import cc.niushuai.didicheck.biz.entity.CheckProject;
import cc.niushuai.didicheck.biz.entity.CheckRecord;
@Database(entities = {CheckRecord.class, CheckProject.class}, version = 3)
@Database(entities = {CheckRecord.class, CheckProject.class}, version = 4)
public abstract class DiDiCheckDataBase extends RoomDatabase {
public abstract CheckRecordDao checkRecordDao();

116
app/src/main/java/cc/niushuai/didicheck/ui/main/settings/SettingsFragment.java

@ -2,16 +2,28 @@ package cc.niushuai.didicheck.ui.main.settings; @@ -2,16 +2,28 @@ package cc.niushuai.didicheck.ui.main.settings;
import android.os.Bundle;
import android.util.Log;
import android.widget.EditText;
import androidx.annotation.NonNull;
import androidx.preference.CheckBoxPreference;
import androidx.preference.EditTextPreference;
import androidx.preference.Preference;
import androidx.preference.PreferenceCategory;
import androidx.preference.PreferenceFragmentCompat;
import java.util.List;
import cc.niushuai.didicheck.R;
import cc.niushuai.didicheck.biz.entity.CheckProject;
import cc.niushuai.didicheck.biz.room.DBManager;
import cc.niushuai.didicheck.util.Toasts;
import cn.hutool.core.collection.CollUtil;
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.functions.Consumer;
import io.reactivex.schedulers.Schedulers;
public class SettingsFragment extends PreferenceFragmentCompat {
@ -20,11 +32,29 @@ public class SettingsFragment extends PreferenceFragmentCompat { @@ -20,11 +32,29 @@ public class SettingsFragment extends PreferenceFragmentCompat {
setPreferencesFromResource(R.xml.root_preferences, rootKey);
addNewProjectListener();
addRemoveProjectListener();
resetCheckProjectList();
}
private void resetCheckProjectList() {
// 重置选项卡
Flowable<List<CheckProject>> listFlowable = DBManager.INSTANCE.checkProjectDao().listAll();
listFlowable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(checkProjects -> {
Log.d("SettingsFragment", "reset... checkProject查询到" + checkProjects.size());
// 移除所有内容
removeExtraProject();
dynamicAddCheckProjects(checkProjects);
});
}
private void removeExtraProject() {
PreferenceCategory preference = findPreference(getResources().getString(R.string.check_project_category_list));
preference.removeAll();
}
private void addNewProjectListener() {
@ -32,36 +62,90 @@ public class SettingsFragment extends PreferenceFragmentCompat { @@ -32,36 +62,90 @@ public class SettingsFragment extends PreferenceFragmentCompat {
addNewCheckProject.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(@NonNull Preference preference, Object newValue) {
Log.d("onPreferenceChange", newValue.toString());
Log.d("SettingsFragment", newValue.toString());
CheckProject checkProject = new CheckProject();
checkProject.setId(System.currentTimeMillis());
checkProject.setName(newValue.toString());
checkProject.setDeleted(0);
checkProject.setCreateDate(System.currentTimeMillis());
Completable completable = DBManager.INSTANCE.checkProjectDao().insertAll(checkProject);
completable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new CompletableObserver() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onComplete() {
Log.i("SettingsFragment", "新增打卡项[" + newValue.toString() + "]成功");
Toasts.shortShow(getActivity(), "新增打卡项[{}]成功", newValue.toString());
}
@Override
public void onError(Throwable e) {
Log.e("SettingsFragment", "新增打卡项[" + newValue.toString() + "]失败", e);
Toasts.shortShow(getActivity(), "新增打卡项[{}]失败, {}", newValue.toString(), e.getMessage());
}
});
// addOneProject(checkProject);
return true;
}
});
}
private void dynamicAddCheckProjects() {
private void addRemoveProjectListener() {
// 使用ListPreference
}
private void dynamicAddCheckProjects(List<CheckProject> checkProjects) {
if (CollUtil.isEmpty(checkProjects)) {
return;
}
PreferenceCategory projectCategoryList = findPreference("check_project_category_list");
for (CheckProject project : checkProjects) {
addOneProject(project);
}
}
private void addOneProject(CheckProject item) {
PreferenceCategory projectCategoryList = findPreference(getResources().getString(R.string.check_project_category_list));
for (int i = 0; i < 3; i++) {
EditTextPreference preference = new EditTextPreference(getActivity());
preference.setKey(item.getId().toString());
preference.setTitle(item.getName());
preference.setSummary(item.getId().toString());
preference.setDefaultValue(item.getName());
CheckBoxPreference checkBoxPreference = new CheckBoxPreference(getActivity());
checkBoxPreference.setTitle("test cb" + i);
checkBoxPreference.setSummary("都说了是测试" + i);
checkBoxPreference.setDefaultValue(true);
checkBoxPreference.setSummary(i + "");
checkBoxPreference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
preference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(@NonNull Preference preference, Object newValue) {
return true;
}
});
preference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(@NonNull Preference preference) {
Log.d("checkbox", "clicked" + preference.getSummary());
Log.d("SettingsFragment", "clicked" + preference.getSummary());
projectCategoryList.removePreference(preference);
return true;
Flowable<List<CheckProject>> listFlowable = DBManager.INSTANCE.checkProjectDao().testListAll();
listFlowable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<List<CheckProject>>() {
@Override
public void accept(List<CheckProject> checkProjects) throws Exception {
Log.d("SettingsFragment", ":" + checkProjects.size());
}
});
projectCategoryList.addPreference(checkBoxPreference);
return true;
}
});
projectCategoryList.addPreference(preference);
}
}

4
app/src/main/java/cc/niushuai/didicheck/util/Toasts.java

@ -8,7 +8,7 @@ import cn.hutool.core.util.StrUtil; @@ -8,7 +8,7 @@ import cn.hutool.core.util.StrUtil;
public class Toasts {
public static void shortShow(Context context, String msg) {
shortShow(context, msg);
shortShow(context, msg, null);
}
public static void shortShow(Context context, String msg, String... params) {
@ -16,7 +16,7 @@ public class Toasts { @@ -16,7 +16,7 @@ public class Toasts {
}
public static void longShow(Context context, String msg) {
longShow(context, msg);
longShow(context, msg, null);
}
public static void longShow(Context context, String msg, String... params) {

4
app/src/main/res/values/strings.xml

@ -6,11 +6,13 @@ @@ -6,11 +6,13 @@
<string name="tab_settings">Settings</string>
<!-- Preference Titles -->
<string name="setting_title">设置</string>
<string name="check_project">打卡项目</string>
<string name="check_project">打卡项目列表</string>
<!-- Messages Preferences -->
<string name="data_import">导入数据</string>
<string name="data_export">导出数据</string>
<string name="add_new_check_record">添加新项目</string>
<string name="remove_old_check_record">删除旧项目</string>
<string name="check_project_category_list">check_project_category_list</string>
</resources>

40
app/src/main/res/xml/root_preferences.xml

@ -3,28 +3,42 @@ @@ -3,28 +3,42 @@
<PreferenceCategory app:title="@string/setting_title">
<EditTextPreference
<CheckBoxPreference
app:key="data_import"
app:title="@string/data_import"
app:useSimpleSummaryProvider="true" />
android:selectAllOnFocus="true"
android:singleLine="true"
app:title="@string/data_import" />
<EditTextPreference
<CheckBoxPreference
app:key="data_export"
app:title="@string/data_export"
app:useSimpleSummaryProvider="true" />
android:selectAllOnFocus="true"
android:singleLine="true"
app:title="@string/data_export" />
<EditTextPreference
android:key="@string/add_new_check_record"
android:selectAllOnFocus="true"
android:singleLine="true"
android:title="@string/add_new_check_record" />
<EditTextPreference
android:key="@string/remove_old_check_record"
android:selectAllOnFocus="true"
android:singleLine="true"
android:title="@string/remove_old_check_record" />
</PreferenceCategory>
<PreferenceCategory
app:key="check_project_category_list"
app:title="@string/check_project"
app:initialExpandedChildrenCount="1"
/>
>
</PreferenceCategory>
<EditTextPreference
android:key="@string/add_new_check_record"
android:selectAllOnFocus="true"
android:singleLine="true"
android:title="@string/add_new_check_record" />
</PreferenceScreen>

BIN
keystore/key.jks

Binary file not shown.
Loading…
Cancel
Save