/* * This file is part of Sensorium. * * Sensorium is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Sensorium is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with Sensorium. If not, see * <http://www.gnu.org/licenses/>. * * */ package at.univie.sensorium.preferences; import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.preference.DialogPreference; import android.util.AttributeSet; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.AdapterView; import android.widget.AdapterView.OnItemSelectedListener; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.CheckBox; import android.widget.EditText; import android.widget.Spinner; import at.univie.sensorium.SensorRegistry; import at.univie.sensorium.R; public class HTTPSUploaderDialogPreference extends DialogPreference { private EditText url; private Spinner intervalSel; private CheckBox automatic; private CheckBox wifi; public HTTPSUploaderDialogPreference(Context context, AttributeSet attrs) { super(context, attrs); setDialogLayoutResource(R.layout.upload_dialogpreference); setTitle("HTTPS Upload"); } @Override protected void onBindDialogView(View view) { super.onBindDialogView(view); url = (EditText) view.findViewById(R.id.uploadurl_text); intervalSel = (Spinner) view.findViewById(R.id.upload_interval_selection); ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(view.getContext(), R.array.upload_intervals, android.R.layout.simple_spinner_item); intervalSel.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { String selected = parent.getItemAtPosition(pos).toString(); Log.d(SensorRegistry.TAG, "new http upload interval selected: " + selected); } @Override public void onNothingSelected(AdapterView<?> arg0) { // this shouldn't happen } }); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); intervalSel.setAdapter(adapter); automatic = (CheckBox) view.findViewById(R.id.upload_automatic_toggle); wifi = (CheckBox) view.findViewById(R.id.upload_automatic_require_wifi); Button button = (Button) view.findViewById(R.id.uploadpref_button); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { SensorRegistry.getInstance().getJSONLogger().upload(url.getText().toString()); } }); populateDialog(); } @Override protected void onDialogClosed(boolean positiveResult) { Log.d(SensorRegistry.TAG, "dialog closed"); super.onDialogClosed(positiveResult); // if (positiveResult) { // save it even on cancel, to be on the safe side Editor editor = getEditor(); editor.putString(Preferences.UPLOAD_URL_PREF, url.getText().toString()); editor.putBoolean(Preferences.UPLOAD_AUTOMATIC_PREF, automatic.isChecked()); editor.putBoolean(Preferences.UPLOAD_WIFI_PREF, wifi.isChecked()); editor.putInt(Preferences.UPLOAD_INTERVAL_PREF, intervalSel.getSelectedItemPosition()); editor.commit(); // alternative var storing Preferences prefs = SensorRegistry.getInstance().getPreferences(); prefs.putString(Preferences.UPLOAD_URL_PREF, url.getText().toString()); prefs.putBoolean(Preferences.UPLOAD_AUTOMATIC_PREF, automatic.isChecked()); prefs.putBoolean(Preferences.UPLOAD_WIFI_PREF, wifi.isChecked()); prefs.putInt(Preferences.UPLOAD_INTERVAL_PREF, intervalSel.getSelectedItemPosition()); // } } protected void populateDialog() { SharedPreferences sPref = getSharedPreferences(); String sUrl = sPref.getString(Preferences.UPLOAD_URL_PREF, ""); Boolean bAuto = sPref.getBoolean(Preferences.UPLOAD_AUTOMATIC_PREF, true); Boolean bWifi = sPref.getBoolean(Preferences.UPLOAD_WIFI_PREF, false); Integer lInterval = sPref.getInt(Preferences.UPLOAD_INTERVAL_PREF, 3600); url.setText(sUrl); automatic.setChecked(bAuto); wifi.setChecked(bWifi); intervalSel.setSelection(getSpinnerPosForInterval(lInterval)); } protected int retrieveInterval() { int interval; if (intervalSel.getSelectedItem().equals("1h")) { interval = 3600; } else if (intervalSel.getSelectedItem().equals("1d")) { interval = 86400; // 24*3600s } else { // default value interval = 86400; } return interval; } protected int getSpinnerPosForInterval(int interval) { int pos; if (interval == 3600) { pos = ((ArrayAdapter<String>) intervalSel.getAdapter()).getPosition("1h"); } else if (interval == 86400) { pos = ((ArrayAdapter<String>) intervalSel.getAdapter()).getPosition("1d"); } else { pos = 0; } return pos; } @Override protected void onSetInitialValue(boolean restorePersistedValue, Object defaultValue) { populateDialog(); } @Override public void onClick(DialogInterface dialog, int which) { super.onClick(); // TODO: update persisted values only when OK button pressed if (which == Dialog.BUTTON_POSITIVE) { Log.d(SensorRegistry.TAG, "OK pressed"); if (automatic.isChecked()) { // update the prefs first SensorRegistry.getInstance().getJSONLogger().autoupload(url.getText().toString(), retrieveInterval(), wifi.isChecked()); } else { SensorRegistry.getInstance().getJSONLogger().cancelautoupload(); } } else if (which == Dialog.BUTTON_NEGATIVE) { // don't change anything } getDialog().dismiss(); } }