Browse Source

feat: 🔥 设置页

master
niushuai233 1 year ago
parent
commit
61827e6170
  1. 2
      app/src/main/java/cc/niushuai/didicheck/biz/dao/CheckProjectDao.java
  2. 1
      app/src/main/java/cc/niushuai/didicheck/biz/room/DBManager.java
  3. 73
      app/src/main/java/cc/niushuai/didicheck/ui/main/settings/SettingsFragment.java
  4. 2
      app/src/main/res/values/arrays.xml
  5. 2
      app/src/main/res/values/strings.xml
  6. 16
      app/src/main/res/xml/root_preferences.xml

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

@ -29,4 +29,6 @@ public interface CheckProjectDao { @@ -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);
}

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

@ -26,6 +26,7 @@ public class DBManager { @@ -26,6 +26,7 @@ public class DBManager {
public static RoomDatabase buildDatabase(Context context, Class<? extends RoomDatabase> clazz, String dbName) {
RoomDatabase.Builder<? extends RoomDatabase> databaseBuilder = Room.databaseBuilder(context, clazz, dbName);
databaseBuilder.setJournalMode(RoomDatabase.JournalMode.AUTOMATIC);
databaseBuilder.allowMainThreadQueries();
return databaseBuilder.build();
}

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

@ -5,10 +5,12 @@ import android.util.Log; @@ -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; @@ -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; @@ -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 { @@ -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<String> 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<List<CheckProject>> listFlowable = DBManager.INSTANCE.checkProjectDao().listAll();
listFlowable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<List<CheckProject>>() {
@Override
public void accept(List<CheckProject> 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<CheckProject> checkProjects) {
@ -121,24 +185,25 @@ public class SettingsFragment extends PreferenceFragmentCompat { @@ -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<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());
Log.d("SettingsFragment", "每个item的onPreferenceClick: " + checkProjects.size());
}
});

2
app/src/main/res/values/arrays.xml

@ -9,4 +9,6 @@ @@ -9,4 +9,6 @@
<item>reply</item>
<item>reply_all</item>
</string-array>
<string-array name="empty_array"/>
</resources>

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

@ -13,6 +13,8 @@ @@ -13,6 +13,8 @@
<string name="data_export">导出数据</string>
<string name="add_new_check_record">添加新项目</string>
<string name="remove_old_check_record">删除旧项目</string>
<string name="select_to_remove_project">选择删除项目</string>
<string name="check_project_category_list">check_project_category_list</string>
<string name="empty_string"></string>
</resources>

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

@ -17,16 +17,20 @@ @@ -17,16 +17,20 @@
<EditTextPreference
android:key="@string/add_new_check_record"
app:key="@string/add_new_check_record"
android:selectAllOnFocus="true"
android:singleLine="true"
android:title="@string/add_new_check_record" />
android:title="@string/add_new_check_record"
app:defaultValue="@string/empty_string"
/>
<EditTextPreference
<MultiSelectListPreference
app:key="@string/remove_old_check_record"
android:key="@string/remove_old_check_record"
android:selectAllOnFocus="true"
android:singleLine="true"
android:title="@string/remove_old_check_record" />
android:title="@string/remove_old_check_record"
app:defaultValue="@array/empty_array"
app:dialogTitle="@string/select_to_remove_project"
/>
</PreferenceCategory>

Loading…
Cancel
Save