package st.alr.mqttitude.preferences;
import st.alr.mqttitude.services.ServiceMqtt;
import st.alr.mqttitude.support.Defaults;
import st.alr.mqttitude.support.Events;
import st.alr.mqttitude.R;
import android.annotation.TargetApi;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.os.Build;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceChangeListener;
import android.preference.PreferenceActivity;
import android.preference.PreferenceFragment;
import android.preference.PreferenceManager;
import android.util.Log;
import android.view.Menu;
import de.greenrobot.event.EventBus;
public class ActivityPreferences extends PreferenceActivity {
private static Preference serverPreference;
private static Preference backgroundUpdatesIntervall;
private static Preference version;
private static PreferenceActivity activity;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
activity = this;
// Thanks Google for not providing a support version of the PreferenceFragment for older API versions
if (supportsFragment())
onCreatePreferenceFragment();
else
onCreatePreferenceActivity();
}
private boolean supportsFragment() {
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB;
}
@SuppressWarnings("deprecation")
private void onCreatePreferenceActivity() {
addPreferencesFromResource(R.xml.preferences);
onSetupPreferenceActivity();
}
@SuppressWarnings("deprecation")
private void onSetupPreferenceActivity() {
version = findPreference("versionReadOnly");
serverPreference = findPreference("brokerPreference");
backgroundUpdatesIntervall = findPreference(Defaults.SETTINGS_KEY_BACKGROUND_UPDATES_INTERVAL);
onSetupCommon();
}
@TargetApi(11)
private void onCreatePreferenceFragment() {
getFragmentManager().beginTransaction()
.replace(android.R.id.content, new CustomPreferencesFragment()).commit();
}
@TargetApi(11)
private static void onSetupPreferenceFragment(PreferenceFragment f) {
version = f.findPreference("versionReadOnly");
serverPreference = f.findPreference("brokerPreference");
backgroundUpdatesIntervall = f
.findPreference(Defaults.SETTINGS_KEY_BACKGROUND_UPDATES_INTERVAL);
onSetupCommon();
}
private static void onSetupCommon() {
PackageManager pm = activity.getPackageManager();
backgroundUpdatesIntervall.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
public boolean onPreferenceChange(Preference preference, Object newValue) {
Log.v(this.toString(), newValue.toString());
if (newValue.toString().equals("0")) {
SharedPreferences.Editor editor = PreferenceManager
.getDefaultSharedPreferences(activity).edit();
editor.putString(preference.getKey(), "1");
editor.commit();
return false;
}
return true;
}
});
try {
version.setSummary(pm.getPackageInfo(activity.getPackageName(), 0).versionName);
} catch (NameNotFoundException e) {
version.setSummary(activity.getString(R.string.na));
}
setServerPreferenceSummary();
// Register for connection changed events
EventBus.getDefault().register(activity);
}
@TargetApi(11)
public static class CustomPreferencesFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
onSetupPreferenceFragment(this);
}
}
@Override
protected void onDestroy() {
super.onDestroy();
}
public void onEventMainThread(Events.MqttConnectivityChanged event) {
setServerPreferenceSummary();
}
private static void setServerPreferenceSummary() {
serverPreference.setSummary(ServiceMqtt.getConnectivityText());
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
return true;
}
@Override
public boolean onIsMultiPane() {
return false;
}
}