From 61827e617069fa3a1da8d822c9767a558b2a54e6 Mon Sep 17 00:00:00 2001 From: niushuai233 Date: Sat, 9 Dec 2023 12:22:06 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20:fire:=20=E8=AE=BE=E7=BD=AE=E9=A1=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../didicheck/biz/dao/CheckProjectDao.java | 2 + .../didicheck/biz/room/DBManager.java | 1 + .../ui/main/settings/SettingsFragment.java | 73 ++++++++++++++++++- app/src/main/res/values/arrays.xml | 2 + app/src/main/res/values/strings.xml | 2 + app/src/main/res/xml/root_preferences.xml | 16 ++-- 6 files changed, 86 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/cc/niushuai/didicheck/biz/dao/CheckProjectDao.java b/app/src/main/java/cc/niushuai/didicheck/biz/dao/CheckProjectDao.java index 925bd8f..8a7cb4e 100644 --- a/app/src/main/java/cc/niushuai/didicheck/biz/dao/CheckProjectDao.java +++ b/app/src/main/java/cc/niushuai/didicheck/biz/dao/CheckProjectDao.java @@ -29,4 +29,6 @@ public interface CheckProjectDao { @Delete void delete(CheckProject project); + @Query("delete from t_check_project where id = :id") + void deleteById(Long id); } diff --git a/app/src/main/java/cc/niushuai/didicheck/biz/room/DBManager.java b/app/src/main/java/cc/niushuai/didicheck/biz/room/DBManager.java index 49a9b18..3222dd2 100644 --- a/app/src/main/java/cc/niushuai/didicheck/biz/room/DBManager.java +++ b/app/src/main/java/cc/niushuai/didicheck/biz/room/DBManager.java @@ -26,6 +26,7 @@ public class DBManager { public static RoomDatabase buildDatabase(Context context, Class clazz, String dbName) { RoomDatabase.Builder databaseBuilder = Room.databaseBuilder(context, clazz, dbName); databaseBuilder.setJournalMode(RoomDatabase.JournalMode.AUTOMATIC); + databaseBuilder.allowMainThreadQueries(); return databaseBuilder.build(); } diff --git a/app/src/main/java/cc/niushuai/didicheck/ui/main/settings/SettingsFragment.java b/app/src/main/java/cc/niushuai/didicheck/ui/main/settings/SettingsFragment.java index 5654cc1..cb23b09 100644 --- a/app/src/main/java/cc/niushuai/didicheck/ui/main/settings/SettingsFragment.java +++ b/app/src/main/java/cc/niushuai/didicheck/ui/main/settings/SettingsFragment.java @@ -5,10 +5,12 @@ import android.util.Log; import androidx.annotation.NonNull; import androidx.preference.EditTextPreference; +import androidx.preference.MultiSelectListPreference; import androidx.preference.Preference; import androidx.preference.PreferenceCategory; import androidx.preference.PreferenceFragmentCompat; +import java.util.HashSet; import java.util.List; import cc.niushuai.didicheck.R; @@ -16,7 +18,6 @@ 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; @@ -27,15 +28,20 @@ import io.reactivex.schedulers.Schedulers; public class SettingsFragment extends PreferenceFragmentCompat { + private static final String TAG = SettingsFragment.class.getSimpleName(); + @Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { setPreferencesFromResource(R.xml.root_preferences, rootKey); addNewProjectListener(); addRemoveProjectListener(); + + resetRemoveProject(); resetCheckProjectList(); } + private void resetCheckProjectList() { // 重置选项卡 @@ -97,8 +103,66 @@ public class SettingsFragment extends PreferenceFragmentCompat { }); } + private void addRemoveProjectListener() { + MultiSelectListPreference preference = findPreference(getString(R.string.remove_old_check_record)); + preference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { + @Override + public boolean onPreferenceClick(@NonNull Preference preference) { + return true; + } + }); + + preference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { + @Override + public boolean onPreferenceChange(@NonNull Preference preference, Object newValue) { + + // newValue 选择的数据id 要更新这些数据id的delete 为0 + Log.d(TAG, "onPreferenceChange: " + newValue.toString()); + + HashSet arr = (HashSet) newValue; + + for (String id : arr) { + DBManager.INSTANCE.checkProjectDao().deleteById(Long.valueOf(id)); + } + + // 重置项目列表 + resetCheckProjectList(); + + return false; + } + }); + + + } + + private void resetRemoveProject() { // 使用ListPreference + MultiSelectListPreference preference = findPreference(getString(R.string.remove_old_check_record)); + preference.setEntries(new CharSequence[0]); + preference.setEntryValues(new CharSequence[0]); + + Flowable> listFlowable = DBManager.INSTANCE.checkProjectDao().listAll(); + listFlowable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Consumer>() { + @Override + public void accept(List checkProjects) throws Exception { + + String[] entries = new String[checkProjects.size()]; + String[] entryValues = new String[checkProjects.size()]; + + for (int i = 0; i < checkProjects.size(); i++) { + CheckProject item = checkProjects.get(i); + entries[i] = item.getName(); + entryValues[i] = item.getId().toString(); + } + + preference.setEntries(entries); + preference.setEntryValues(entryValues); + } + }); + + } private void dynamicAddCheckProjects(List checkProjects) { @@ -121,24 +185,25 @@ public class SettingsFragment extends PreferenceFragmentCompat { preference.setTitle(item.getName()); preference.setSummary(item.getId().toString()); preference.setDefaultValue(item.getName()); + preference.setEnabled(false); preference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(@NonNull Preference preference, Object newValue) { - return true; + return false; } }); preference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(@NonNull Preference preference) { - Log.d("SettingsFragment", "clicked" + preference.getSummary()); + Log.d("SettingsFragment", "clicked " + preference.getKey()); Flowable> listFlowable = DBManager.INSTANCE.checkProjectDao().testListAll(); listFlowable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()) .subscribe(new Consumer>() { @Override public void accept(List checkProjects) throws Exception { - Log.d("SettingsFragment", ":" + checkProjects.size()); + Log.d("SettingsFragment", "每个item的onPreferenceClick: " + checkProjects.size()); } }); diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index 6cf9ed4..2410f2c 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -9,4 +9,6 @@ reply reply_all + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c706cc9..eb16e85 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -13,6 +13,8 @@ 导出数据 添加新项目 删除旧项目 + 选择删除项目 check_project_category_list + \ No newline at end of file diff --git a/app/src/main/res/xml/root_preferences.xml b/app/src/main/res/xml/root_preferences.xml index 89d6874..fc552f8 100644 --- a/app/src/main/res/xml/root_preferences.xml +++ b/app/src/main/res/xml/root_preferences.xml @@ -17,16 +17,20 @@ + android:title="@string/add_new_check_record" + app:defaultValue="@string/empty_string" + /> - - + android:title="@string/remove_old_check_record" + app:defaultValue="@array/empty_array" + app:dialogTitle="@string/select_to_remove_project" + />