package com.sabdroidex.activity; import android.content.SharedPreferences; import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.preference.Preference; import android.view.Gravity; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup.LayoutParams; import android.widget.TextView; import com.android.actionbarcompat.ActionBarPreferencesActivity; import com.sabdroidex.R; import com.sabdroidex.controllers.sabnzbd.SABnzbdController; import com.sabdroidex.data.sabnzbd.SabnzbdConfig; import com.sabdroidex.utils.Preferences; import com.sabdroidex.utils.SABDroidConstants; public class ServerSettingsActivity extends ActionBarPreferencesActivity { /** * Instantiating the Handler associated with the main thread. */ private final Handler messageHandler = new Handler() { @Override public void handleMessage(Message msg) { if (msg.what == SABnzbdController.MESSAGE.GET_CONFIG.hashCode()) { SabnzbdConfig config = (SabnzbdConfig) msg.obj; if (config != null) { setPreferenceValue(Preferences.SERVER_BANDWITH, config.getMisc().getBanwidthLimit()); setPreferenceValue(Preferences.SERVER_CACHE_DIR, config.getMisc().getCacheDir()); setPreferenceValue(Preferences.SERVER_CACHE_LIMIT, config.getMisc().getCacheLimit()); setPreferenceValue(Preferences.SERVER_DIRSCAN_DIR, config.getMisc().getDirscanDir()); setPreferenceValue(Preferences.SERVER_DIRSCAN_SPEED, config.getMisc().getDirscanSpeed()); setPreferenceValue(Preferences.SERVER_DOWNLOAD_DIR, config.getMisc().getDownloadDir()); setPreferenceValue(Preferences.SERVER_COMPLETE_DIR, config.getMisc().getCompleteDir()); onPostHandler(); } else { ((TextView) findViewById(1337)).setText(R.string.setting_cannot_retrieve); } } } }; private SharedPreferences preferences; private TextView empty; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { getActionBar().setDisplayHomeAsUpEnabled(true); } preferences = getSharedPreferences(SABDroidConstants.PREFERENCES_KEY, MODE_PRIVATE); empty = new TextView(getApplicationContext()); empty.setText(R.string.setting_empty); empty.setGravity(Gravity.CENTER); empty.setId(1337); getWindow().addContentView(empty, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); } @Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); getValuesFromServer(); } @SuppressWarnings("deprecation") private void onPostHandler() { getWindow().findViewById(empty.getId()).setVisibility(View.GONE); getPreferenceManager().setSharedPreferencesName(SABDroidConstants.PREFERENCES_KEY); addPreferencesFromResource(R.xml.server_settings); setChangeListener(Preferences.SERVER_BANDWITH); setChangeListener(Preferences.SERVER_CACHE_DIR); setChangeListener(Preferences.SERVER_CACHE_LIMIT); setChangeListener(Preferences.SERVER_DIRSCAN_DIR); setChangeListener(Preferences.SERVER_DIRSCAN_SPEED); setChangeListener(Preferences.SERVER_DOWNLOAD_DIR); setChangeListener(Preferences.SERVER_COMPLETE_DIR); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: onBackPressed(); break; } return true; } /** * This is an asynchronous method to get the Sabnzbd server bandwidth */ private void getValuesFromServer() { SABnzbdController.getAllConfigs(messageHandler); } /** * This method sets the settings value retrieved from the server to it's counterpart in the application. * * @param prefKey The key of the preference * @param value The value to set. */ private void setPreferenceValue(String prefKey, Object value) { SharedPreferences.Editor editor = preferences.edit(); editor.remove(prefKey); editor.commit(); editor.putString(prefKey, String.valueOf(value)); editor.commit(); } /** * Sets a change listener on a setting in order to send the change to the server when the user changes one of the values. * * @param prefKey */ @SuppressWarnings("deprecation") private void setChangeListener(String prefKey) { final Preference preference = findPreference(prefKey); preference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { public boolean onPreferenceChange(Preference preference, Object newValue) { SABnzbdController.setConfig(messageHandler, new Object[]{"misc", preference.getKey(), newValue}); return true; } }); } }