package org.itxtech.daedalus.fragment;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.preference.EditTextPreference;
import android.preference.Preference;
import android.support.design.widget.Snackbar;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import org.itxtech.daedalus.Daedalus;
import org.itxtech.daedalus.R;
import org.itxtech.daedalus.activity.ConfigActivity;
import org.itxtech.daedalus.util.CustomDnsServer;
import org.itxtech.daedalus.util.DnsServer;
/**
* Daedalus Project
*
* @author iTX Technologies
* @link https://itxtech.org
* <p>
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*/
public class DnsServerConfigFragment extends ConfigFragment {
private View view;
private int index;
@Override
public void onDestroy() {
super.onDestroy();
view = null;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.perf_server);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
view = super.onCreateView(inflater, container, savedInstanceState);
EditTextPreference serverName = (EditTextPreference) findPreference("serverName");
serverName.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
preference.setSummary((String) newValue);
return true;
}
});
EditTextPreference serverAddress = (EditTextPreference) findPreference("serverAddress");
serverAddress.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
preference.setSummary((String) newValue);
return true;
}
});
EditTextPreference serverPort = (EditTextPreference) findPreference("serverPort");
serverPort.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
preference.setSummary((String) newValue);
return true;
}
});
index = intent.getIntExtra(ConfigActivity.LAUNCH_ACTION_ID, ConfigActivity.ID_NONE);
if (index != ConfigActivity.ID_NONE) {
CustomDnsServer server = Daedalus.configurations.getCustomDnsServers().get(index);
serverName.setText(server.getName());
serverName.setSummary(server.getName());
serverAddress.setText(server.getAddress());
serverAddress.setSummary(server.getAddress());
serverPort.setText(String.valueOf(server.getPort()));
serverPort.setSummary(String.valueOf(server.getPort()));
} else {
serverName.setText("");
serverAddress.setText("");
String port = String.valueOf(DnsServer.DNS_SERVER_DEFAULT_PORT);
serverPort.setText(port);
serverPort.setSummary(port);
}
return view;
}
@Override
public boolean onMenuItemClick(MenuItem item) {
int id = item.getItemId();
switch (id) {
case R.id.action_apply:
String serverName = ((EditTextPreference) findPreference("serverName")).getText();
String serverAddress = ((EditTextPreference) findPreference("serverAddress")).getText();
String serverPort = ((EditTextPreference) findPreference("serverPort")).getText();
if (serverName.equals("") | serverAddress.equals("") | serverPort.equals("")) {
Snackbar.make(view, R.string.notice_fill_in_all, Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
break;
}
if (index == ConfigActivity.ID_NONE) {
Daedalus.configurations.getCustomDnsServers().add(new CustomDnsServer(serverName, serverAddress, Integer.parseInt(serverPort)));
} else {
CustomDnsServer server = Daedalus.configurations.getCustomDnsServers().get(index);
server.setName(serverName);
server.setAddress(serverAddress);
server.setPort(Integer.parseInt(serverPort));
}
getActivity().finish();
break;
case R.id.action_delete:
if (index != ConfigActivity.ID_NONE) {
new AlertDialog.Builder(getActivity())
.setTitle(R.string.notice_delete_confirm_prompt)
.setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Daedalus.configurations.getCustomDnsServers().remove(index);
getActivity().finish();
}
})
.setNegativeButton(R.string.no, null)
.create()
.show();
} else {
getActivity().finish();
}
break;
}
return true;
}
}