package it.angelic.soulissclient.preferences; import android.content.Intent; import android.content.pm.PackageInfo; import android.content.pm.PackageManager.NameNotFoundException; import android.net.Uri; import android.os.Bundle; import android.preference.Preference; import android.preference.Preference.OnPreferenceChangeListener; import android.preference.Preference.OnPreferenceClickListener; import android.preference.PreferenceFragment; import android.util.Log; import android.widget.Toast; import it.angelic.soulissclient.Constants; import it.angelic.soulissclient.R; import it.angelic.soulissclient.SoulissApp; import it.angelic.soulissclient.helpers.SoulissPreferenceHelper; public class NetSettingsFragment extends PreferenceFragment { private SoulissPreferenceHelper opzioni; private Preference userIndex; private Preference nodeIndex; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); opzioni = SoulissApp.getOpzioni(); PackageInfo packageInfo; String strVersionName; addPreferencesFromResource(R.xml.settings_net); Preference privateIP = findPreference("edittext_IP"); Preference publicIP = findPreference("edittext_IP_pubb"); Preference bCast = findPreference("advbroadcastKey"); userIndex = findPreference("userindexIC"); Preference udpport = findPreference("udpportIC"); nodeIndex = findPreference("nodeindexIC"); String summar = getResources().getString(R.string.summary_edittext_IP); privateIP.setSummary(opzioni.getPrefIPAddress().compareToIgnoreCase("") == 0 ? summar : opzioni .getPrefIPAddress()); // listener cambio IP String summarP = getResources().getString(R.string.summary_edittext_IP_pubb); publicIP.setSummary(opzioni.getIPPreferencePublic().compareToIgnoreCase("") == 0 ? summarP : opzioni .getIPPreferencePublic()); OnPreferenceChangeListener ipChanger = new IpChangerListener(getActivity()); privateIP.setOnPreferenceChangeListener(ipChanger); publicIP.setOnPreferenceChangeListener(ipChanger); try { packageInfo = getActivity().getPackageManager().getPackageInfo(getActivity().getPackageName(), 0); // strVersionCode = "Version Code: " // + String.valueOf(packageInfo.versionCode); strVersionName = packageInfo.versionName; } catch (NameNotFoundException e) { Log.e(Constants.TAG, "Cannot load Version!", e); strVersionName = "Cannot load Version!"; } //BROADCAST Settings bCast.setOnPreferenceClickListener(new BroadcastSettingsPreferenceListener(getActivity())); // Github contrib link Preference creditsPref = findPreference("credits"); creditsPref.setTitle(getResources().getString(R.string.souliss_app_name) + " Version " + strVersionName); creditsPref.setOnPreferenceClickListener(new OnPreferenceClickListener() { public boolean onPreferenceClick(Preference preference) { // open browser or intent here startActivity(new Intent(Intent.ACTION_VIEW, Uri .parse("https://github.com/orgs/souliss/people"))); return true; } }); /* * generale automaticamente l'ultimo byte (tra 0x01 e 0xFE) e * permettendone la variazione manuale, questo byte sarebbe da * identificare come "Node Index", mentre il primo byte "User Index" può * essere impostato ad un valore di default, modificabile manualmente * tra 0x01 e 0x64. * * In questo modo, l'User Index non verrebbe mai toccato a meno che non * vengano generati due "Node Index" uguali, a quel punto l'utente dovrà * intervenire manualmente per modificarli. * * ATTENZIONE CODICE DUPLICATO NELLA PREF ACTIVITY */ String stdrMeatFormat = getActivity().getString(R.string.opt_userindex_desc); userIndex.setSummary(String.format(stdrMeatFormat, opzioni.getUserIndex())); //udpport.setSummary(String.format(stdrMeatFormat, opzioni.getUDPPort())); udpport.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { Log.w(Constants.Net.TAG, "CHANGING UDP PORT:" + newValue); try { String ics = (String) newValue; Integer rete = Integer.parseInt(ics); // enforce 0 < x < 0xfe if (rete >= 65535 || rete < 1) throw new IllegalArgumentException(); opzioni.setUDPPort(rete); String stdrMeatFormat = getString(R.string.opt_udpport); } catch (Exception e) { Toast.makeText(getActivity(), getString(R.string.udphint), Toast.LENGTH_SHORT) .show(); } return true; } }); userIndex.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { Log.w(Constants.TAG, "CHANGING USER INDEX:" + newValue); try { String ics = (String) newValue; Integer rete = Integer.parseInt(ics); if (rete >= it.angelic.soulissclient.Constants.MAX_USER_IDX || rete < 1)// enforce 0 < x < 64 throw new IllegalArgumentException(); opzioni.setUserIndex(rete); String stdrMeatFormat = getActivity().getString(R.string.opt_userindex_desc); userIndex.setSummary(String.format(stdrMeatFormat, opzioni.getUserIndex())); } catch (Exception e) { Toast.makeText(getActivity(), getString(R.string.useridxhint), Toast.LENGTH_SHORT).show(); } return true; } }); String strMeatFormat = getActivity().getString(R.string.opt_nodeindex_desc); nodeIndex.setSummary(String.format(strMeatFormat, opzioni.getNodeIndex())); nodeIndex.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { Log.w(Constants.TAG, "CHANGING NODE INDEX:" + newValue); try { String ics = (String) newValue; if (Integer.parseInt(ics) >= it.angelic.soulissclient.Constants.MAX_NODE_IDX || Integer.parseInt(ics) < 1) throw new IllegalArgumentException(); opzioni.setNodeIndex(Integer.parseInt(ics)); String strMeatFormat = getActivity().getString(R.string.opt_nodeindex_desc); nodeIndex.setSummary(String.format(strMeatFormat, opzioni.getNodeIndex())); } catch (Exception e) { Toast.makeText(getActivity(), getString(R.string.nodeidxhint), Toast.LENGTH_SHORT).show(); } return true; } }); } @Override public void onStart() { String nodeFormat = getActivity().getString(R.string.opt_nodeindex_desc); String userFormat = getActivity().getString(R.string.opt_userindex_desc); super.onStart(); userIndex.setSummary(String.format(userFormat, opzioni.getUserIndex())); nodeIndex.setSummary(String.format(nodeFormat, opzioni.getNodeIndex())); } }