Added support for dynamic reload rules
This commit is contained in:
parent
f6cc1219dc
commit
6abe3cd734
@ -167,6 +167,13 @@ public class Daedalus extends Application {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void setRulesChanged() {
|
||||||
|
if (instance.isServiceActivated() &&
|
||||||
|
getPrefs().getBoolean("settings_allow_dynamic_rule_reload", false)) {
|
||||||
|
initHostsResolver();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static SharedPreferences getPrefs() {
|
public static SharedPreferences getPrefs() {
|
||||||
return getInstance().prefs;
|
return getInstance().prefs;
|
||||||
}
|
}
|
||||||
|
@ -65,7 +65,7 @@ public class ConfigActivity extends AppCompatActivity {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
toolbar.setOnMenuItemClickListener(fragment);
|
toolbar.setOnMenuItemClickListener(fragment);
|
||||||
toolbar.inflateMenu(R.menu.custom_dns_server_menu);
|
toolbar.inflateMenu(R.menu.custom_config);
|
||||||
|
|
||||||
FragmentManager manager = getFragmentManager();
|
FragmentManager manager = getFragmentManager();
|
||||||
fragment.setIntent(getIntent());
|
fragment.setIntent(getIntent());
|
||||||
|
@ -111,6 +111,7 @@ public class DNSServerConfigFragment extends ConfigFragment {
|
|||||||
server.setAddress(serverAddress);
|
server.setAddress(serverAddress);
|
||||||
server.setPort(Integer.parseInt(serverPort));
|
server.setPort(Integer.parseInt(serverPort));
|
||||||
}
|
}
|
||||||
|
Daedalus.setRulesChanged();
|
||||||
getActivity().finish();
|
getActivity().finish();
|
||||||
break;
|
break;
|
||||||
case R.id.action_delete:
|
case R.id.action_delete:
|
||||||
@ -128,6 +129,7 @@ public class DNSServerConfigFragment extends ConfigFragment {
|
|||||||
.create()
|
.create()
|
||||||
.show();
|
.show();
|
||||||
} else {
|
} else {
|
||||||
|
Daedalus.setRulesChanged();
|
||||||
getActivity().finish();
|
getActivity().finish();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -59,12 +59,12 @@ public class RulesFragment extends ToolbarFragment implements Toolbar.OnMenuItem
|
|||||||
ItemTouchHelper itemTouchHelper = new ItemTouchHelper(new ItemTouchHelper.Callback() {
|
ItemTouchHelper itemTouchHelper = new ItemTouchHelper(new ItemTouchHelper.Callback() {
|
||||||
@Override
|
@Override
|
||||||
public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
|
public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
|
||||||
if (viewHolder instanceof RulesFragment.ViewHolder) {
|
if (!Daedalus.getPrefs().getBoolean("settings_allow_dynamic_rule_reload", false)) {
|
||||||
Rule rule = Rule.getRuleById(((ViewHolder) viewHolder).getId());
|
if (viewHolder instanceof RulesFragment.ViewHolder) {
|
||||||
if (rule != null && rule.isServiceAndUsing()) {
|
Rule rule = Rule.getRuleById(((ViewHolder) viewHolder).getId());
|
||||||
/*Snackbar.make(getView(), R.string.notice_after_stop, Snackbar.LENGTH_LONG)
|
if (rule != null && rule.isServiceAndUsing()) {
|
||||||
.setAction("Action", null).show();*/
|
return 0;
|
||||||
return 0;
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return makeMovementFlags(0, ItemTouchHelper.START | ItemTouchHelper.END);
|
return makeMovementFlags(0, ItemTouchHelper.START | ItemTouchHelper.END);
|
||||||
@ -122,6 +122,15 @@ public class RulesFragment extends ToolbarFragment implements Toolbar.OnMenuItem
|
|||||||
toolbar.getMenu().findItem(R.id.action_change_type).setTitle(Rule.getTypeById(currentType));
|
toolbar.getMenu().findItem(R.id.action_change_type).setTitle(Rule.getTypeById(currentType));
|
||||||
adapter.notifyDataSetChanged();
|
adapter.notifyDataSetChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (id == R.id.action_reload) {
|
||||||
|
if (!Daedalus.getPrefs().getBoolean("settings_allow_dynamic_rule_reload", false)) {
|
||||||
|
Snackbar.make(getView(), R.string.notice_check_dynamic_rule_reload, Snackbar.LENGTH_SHORT)
|
||||||
|
.setAction("Action", null).show();
|
||||||
|
} else {
|
||||||
|
Daedalus.setRulesChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -223,30 +232,29 @@ public class RulesFragment extends ToolbarFragment implements Toolbar.OnMenuItem
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
if (!Daedalus.getInstance().isServiceActivated()) {
|
if ((!Daedalus.getPrefs().getBoolean("settings_allow_dynamic_rule_reload", false) &&
|
||||||
|
!Daedalus.getInstance().isServiceActivated()) ||
|
||||||
|
Daedalus.getPrefs().getBoolean("settings_allow_dynamic_rule_reload", false)) {
|
||||||
Rule rule = Rule.getRuleById(id);
|
Rule rule = Rule.getRuleById(id);
|
||||||
if (rule != null) {
|
if (rule != null) {
|
||||||
rule.setUsing(!v.isSelected());
|
rule.setUsing(!v.isSelected());
|
||||||
v.setSelected(!v.isSelected());
|
v.setSelected(!v.isSelected());
|
||||||
|
Daedalus.setRulesChanged();
|
||||||
}
|
}
|
||||||
}/* else {
|
}
|
||||||
Snackbar.make(view, R.string.notice_after_stop, Snackbar.LENGTH_LONG)
|
|
||||||
.setAction("Action", null).show();
|
|
||||||
}*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onLongClick(View v) {
|
public boolean onLongClick(View v) {
|
||||||
Rule rule = Rule.getRuleById(id);
|
Rule rule = Rule.getRuleById(id);
|
||||||
if (rule != null && !rule.isServiceAndUsing()) {
|
if (rule != null &&
|
||||||
|
(Daedalus.getPrefs().getBoolean("settings_allow_dynamic_rule_reload", false) ||
|
||||||
|
!rule.isServiceAndUsing())) {
|
||||||
Daedalus.getInstance().startActivity(new Intent(Daedalus.getInstance(), ConfigActivity.class)
|
Daedalus.getInstance().startActivity(new Intent(Daedalus.getInstance(), ConfigActivity.class)
|
||||||
.putExtra(ConfigActivity.LAUNCH_ACTION_ID, Integer.parseInt(id))
|
.putExtra(ConfigActivity.LAUNCH_ACTION_ID, Integer.parseInt(id))
|
||||||
.putExtra(ConfigActivity.LAUNCH_ACTION_FRAGMENT, ConfigActivity.LAUNCH_FRAGMENT_RULE)
|
.putExtra(ConfigActivity.LAUNCH_ACTION_FRAGMENT, ConfigActivity.LAUNCH_FRAGMENT_RULE)
|
||||||
.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
|
.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
|
||||||
}/* else {
|
}
|
||||||
Snackbar.make(view, R.string.notice_after_stop, Snackbar.LENGTH_LONG)
|
|
||||||
.setAction("Action", null).show();
|
|
||||||
}*/
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,4 +6,10 @@
|
|||||||
android:alphabeticShortcut="c"
|
android:alphabeticShortcut="c"
|
||||||
android:numericShortcut="1"
|
android:numericShortcut="1"
|
||||||
app:showAsAction="always"/>
|
app:showAsAction="always"/>
|
||||||
|
<item android:id="@+id/action_reload"
|
||||||
|
android:title="@string/action_reload"
|
||||||
|
android:alphabeticShortcut="r"
|
||||||
|
android:numericShortcut="2"
|
||||||
|
android:icon="@drawable/ic_refresh"
|
||||||
|
app:showAsAction="always"/>
|
||||||
</menu>
|
</menu>
|
||||||
|
@ -77,4 +77,7 @@
|
|||||||
<string name="action_refresh">刷新</string>
|
<string name="action_refresh">刷新</string>
|
||||||
<string name="settings_log_size">日志大小限制</string>
|
<string name="settings_log_size">日志大小限制</string>
|
||||||
<string name="server_cutedns_south_china">CuteDNS 华南</string>
|
<string name="server_cutedns_south_china">CuteDNS 华南</string>
|
||||||
|
<string name="settings_allow_dynamic_rule_reload">允许动态更新规则</string>
|
||||||
|
<string name="action_reload">重新加载规则</string>
|
||||||
|
<string name="notice_check_dynamic_rule_reload">请在设置中勾选“允许动态更新规则”</string>
|
||||||
</resources>
|
</resources>
|
@ -77,4 +77,7 @@
|
|||||||
<string name="action_refresh">刷新</string>
|
<string name="action_refresh">刷新</string>
|
||||||
<string name="settings_log_size">日誌大小限制</string>
|
<string name="settings_log_size">日誌大小限制</string>
|
||||||
<string name="server_cutedns_south_china">CuteDNS 華南</string>
|
<string name="server_cutedns_south_china">CuteDNS 華南</string>
|
||||||
|
<string name="settings_allow_dynamic_rule_reload">允许动态更新规则</string>
|
||||||
|
<string name="action_reload">重新加载规则</string>
|
||||||
|
<string name="notice_check_dynamic_rule_reload">请在设置中勾选“允许动态更新规则”</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
<string name="notice_fill_in_all">Please fill in all configuration items.</string>
|
<string name="notice_fill_in_all">Please fill in all configuration items.</string>
|
||||||
<string name="notice_delete_confirm_prompt">Are you sure you want to remove this configuration?</string>
|
<string name="notice_delete_confirm_prompt">Are you sure you want to remove this configuration?</string>
|
||||||
<string name="notice_after_stop">Please modify activated rules after stopping service.</string>
|
<string name="notice_after_stop">Please modify activated rules after stopping service.</string>
|
||||||
|
<string name="notice_check_dynamic_rule_reload">Please enable "Allow dynamic rule reload" in Settings</string>
|
||||||
|
|
||||||
<string name="action_settings">Settings</string>
|
<string name="action_settings">Settings</string>
|
||||||
<string name="action_about">About</string>
|
<string name="action_about">About</string>
|
||||||
@ -25,6 +26,7 @@
|
|||||||
<string name="action_undo">Undo</string>
|
<string name="action_undo">Undo</string>
|
||||||
<string name="action_log">Log</string>
|
<string name="action_log">Log</string>
|
||||||
<string name="action_refresh">Refresh</string>
|
<string name="action_refresh">Refresh</string>
|
||||||
|
<string name="action_reload">Reload</string>
|
||||||
|
|
||||||
<string name="delete">Delete</string>
|
<string name="delete">Delete</string>
|
||||||
<string name="apply">Apply</string>
|
<string name="apply">Apply</string>
|
||||||
@ -56,6 +58,7 @@
|
|||||||
<string name="settings_log_size">Log size limit</string>
|
<string name="settings_log_size">Log size limit</string>
|
||||||
<string name="settings_manual">Manual</string>
|
<string name="settings_manual">Manual</string>
|
||||||
<string name="settings_manual_summary">Visit GitHub wiki page.</string>
|
<string name="settings_manual_summary">Visit GitHub wiki page.</string>
|
||||||
|
<string name="settings_allow_dynamic_rule_reload">Allow dynamic rule reload</string>
|
||||||
|
|
||||||
<string name="settings_rule_name">Rule Name</string>
|
<string name="settings_rule_name">Rule Name</string>
|
||||||
<string name="settings_rule_type">Rule Type</string>
|
<string name="settings_rule_type">Rule Type</string>
|
||||||
|
@ -61,6 +61,11 @@
|
|||||||
android:title="@string/settings_local_rules_resolution"
|
android:title="@string/settings_local_rules_resolution"
|
||||||
android:defaultValue="false"
|
android:defaultValue="false"
|
||||||
android:enabled="false"/>
|
android:enabled="false"/>
|
||||||
|
<SwitchPreference
|
||||||
|
android:key="settings_allow_dynamic_rule_reload"
|
||||||
|
android:title="@string/settings_allow_dynamic_rule_reload"
|
||||||
|
android:defaultValue="false"
|
||||||
|
android:enabled="false"/>
|
||||||
<SwitchPreference
|
<SwitchPreference
|
||||||
android:key="settings_dns_over_tcp"
|
android:key="settings_dns_over_tcp"
|
||||||
android:title="@string/settings_dns_over_tcp"
|
android:title="@string/settings_dns_over_tcp"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user