Improved rules activate

This commit is contained in:
PeratX 2017-05-20 12:56:46 +08:00
parent 9f54c54205
commit 9ea61b0b95
4 changed files with 34 additions and 13 deletions

View File

@ -206,7 +206,7 @@ public class RuleConfigFragment extends ConfigFragment {
return view; return view;
} }
private void save() { private boolean save() {
String ruleName = ((EditTextPreference) findPreference("ruleName")).getText(); String ruleName = ((EditTextPreference) findPreference("ruleName")).getText();
String ruleType = ((ListPreference) findPreference("ruleType")).getValue(); String ruleType = ((ListPreference) findPreference("ruleType")).getValue();
String ruleFilename = ((EditTextPreference) findPreference("ruleFilename")).getText(); String ruleFilename = ((EditTextPreference) findPreference("ruleFilename")).getText();
@ -215,7 +215,7 @@ public class RuleConfigFragment extends ConfigFragment {
if (ruleName.equals("") | ruleType.equals("") | ruleFilename.equals("") | ruleDownloadUrl.equals("")) { if (ruleName.equals("") | ruleType.equals("") | ruleFilename.equals("") | ruleDownloadUrl.equals("")) {
Snackbar.make(view, R.string.notice_fill_in_all, Snackbar.LENGTH_LONG) Snackbar.make(view, R.string.notice_fill_in_all, Snackbar.LENGTH_LONG)
.setAction("Action", null).show(); .setAction("Action", null).show();
return; return false;
} }
if (id == ConfigActivity.ID_NONE) { if (id == ConfigActivity.ID_NONE) {
@ -231,6 +231,7 @@ public class RuleConfigFragment extends ConfigFragment {
rule.setDownloadUrl(ruleDownloadUrl); rule.setDownloadUrl(ruleDownloadUrl);
} }
} }
return true;
} }
@Override @Override
@ -239,8 +240,9 @@ public class RuleConfigFragment extends ConfigFragment {
switch (id) { switch (id) {
case R.id.action_apply: case R.id.action_apply:
save(); if (save()) {
getActivity().finish(); getActivity().finish();
}
break; break;
case R.id.action_delete: case R.id.action_delete:
if (this.id != ConfigActivity.ID_NONE) { if (this.id != ConfigActivity.ID_NONE) {

View File

@ -19,6 +19,7 @@ import org.itxtech.daedalus.util.Rule;
import java.io.File; import java.io.File;
import java.text.DecimalFormat; import java.text.DecimalFormat;
import java.util.concurrent.CopyOnWriteArrayList;
/** /**
* Daedalus Project * Daedalus Project
@ -119,6 +120,8 @@ public class RulesFragment extends Fragment {
} }
private class RuleAdapter extends RecyclerView.Adapter<ViewHolder> { private class RuleAdapter extends RecyclerView.Adapter<ViewHolder> {
private CopyOnWriteArrayList<ViewHolder> selectedItems = new CopyOnWriteArrayList<>();
@Override @Override
public void onBindViewHolder(ViewHolder holder, int position) { public void onBindViewHolder(ViewHolder holder, int position) {
Rule rule = Daedalus.configurations.getRules().get(position); Rule rule = Daedalus.configurations.getRules().get(position);
@ -147,13 +150,17 @@ public class RulesFragment extends Fragment {
return new ViewHolder(view); return new ViewHolder(view);
} }
void checkType(Rule rule) { void checkType(Rule rule, ViewHolder holder) {
for (Rule check : Daedalus.configurations.getRules()) { for (ViewHolder viewHolder : selectedItems) {
if (check.getType() != rule.getType()) { Rule check = Rule.getRuleById(viewHolder.getId());
if (check != null && check.getType() != rule.getType()) {
viewHolder.view.setSelected(false);
check.setUsing(false); check.setUsing(false);
selectedItems.remove(viewHolder);
notifyItemChanged(viewHolder.getLayoutPosition());
} }
} }
notifyDataSetChanged(); selectedItems.add(holder);
} }
} }
@ -180,6 +187,9 @@ public class RulesFragment extends Fragment {
Rule rule = Rule.getRuleById(id); Rule rule = Rule.getRuleById(id);
if (rule != null) { if (rule != null) {
view.setSelected(rule.isUsing()); view.setSelected(rule.isUsing());
if (view.isSelected()) {
adapter.selectedItems.add(this);
}
} }
} }
@ -189,11 +199,18 @@ public class RulesFragment extends Fragment {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
Rule rule = Rule.getRuleById(id); if (!Daedalus.getInstance().isServiceActivated()) {
if (rule != null) { Rule rule = Rule.getRuleById(id);
rule.setUsing(!v.isSelected()); if (rule != null && !rule.isUsing()) {
v.setSelected(!v.isSelected()); rule.setUsing(!v.isSelected());
//adapter.checkType(rule); v.setSelected(!v.isSelected());
if (v.isSelected()) {
adapter.checkType(rule, this);
}
}
} else {
Snackbar.make(view, R.string.notice_after_stop, Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
} }
} }

View File

@ -80,4 +80,5 @@
<string name="settings_rule_filename">规则文件名</string> <string name="settings_rule_filename">规则文件名</string>
<string name="settings_rule_import">导入</string> <string name="settings_rule_import">导入</string>
<string name="settings_rule_import_build_in">从内置规则导入</string> <string name="settings_rule_import_build_in">从内置规则导入</string>
<string name="notice_after_stop">请在服务停止后更改启用的规则。</string>
</resources> </resources>

View File

@ -80,4 +80,5 @@
<string name="settings_rule_filename">Rule Filename</string> <string name="settings_rule_filename">Rule Filename</string>
<string name="settings_rule_import">Import</string> <string name="settings_rule_import">Import</string>
<string name="settings_rule_import_build_in">Import from build in rules</string> <string name="settings_rule_import_build_in">Import from build in rules</string>
<string name="notice_after_stop">Please modify activated rules after stopping service.</string>
</resources> </resources>