package org.dodgybits.shuffle.android.preference.activity; import static org.dodgybits.shuffle.android.preference.model.Preferences.TRACKS_INTERVAL; import static org.dodgybits.shuffle.android.preference.model.Preferences.TRACKS_PASSWORD; import static org.dodgybits.shuffle.android.preference.model.Preferences.TRACKS_URL; import static org.dodgybits.shuffle.android.preference.model.Preferences.TRACKS_USER; import java.net.URI; import java.net.URISyntaxException; import org.apache.http.HttpStatus; import org.dodgybits.android.shuffle.R; import org.dodgybits.shuffle.android.core.activity.flurry.FlurryEnabledActivity; import org.dodgybits.shuffle.android.preference.model.Preferences; import org.dodgybits.shuffle.android.synchronisation.tracks.ApiException; import org.dodgybits.shuffle.android.synchronisation.tracks.WebClient; import org.dodgybits.shuffle.android.synchronisation.tracks.WebResult; import roboguice.inject.InjectView; import android.content.SharedPreferences; import android.graphics.Color; import android.os.Bundle; import android.view.KeyEvent; import android.view.View; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.CompoundButton; import android.widget.EditText; import android.widget.Spinner; import android.widget.Toast; /** * Activity that changes the options set for synchronization */ public class SynchronizationSettingsActivity extends FlurryEnabledActivity { @InjectView(R.id.url) EditText mUrlTextbox; @InjectView(R.id.user) EditText mUserTextbox; @InjectView(R.id.pass) EditText mPassTextbox; @InjectView(R.id.checkSettings) Button mCheckSettings; @InjectView(R.id.sync_interval) Spinner mInterval; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.synchronize_settings); String[] options = new String[] { getText(R.string.sync_interval_none).toString(), getText(R.string.sync_interval_30min).toString(), getText(R.string.sync_interval_1h).toString(), getText(R.string.sync_interval_2h).toString(), getText(R.string.sync_interval_3h).toString() }; ArrayAdapter<CharSequence> adapter = new ArrayAdapter<CharSequence>( this, android.R.layout.simple_list_item_1, options); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); mInterval.setAdapter(adapter); mInterval.setSelection(Preferences.getTracksInterval(this)); String tracksUrl = Preferences.getTracksUrl(this); mUrlTextbox.setText(tracksUrl); // select server portion of URL int startIndex = 0; int index = tracksUrl.indexOf("://"); if (index > 0) { startIndex = index + 3; } mUrlTextbox.setSelection(startIndex, tracksUrl.length()); mUserTextbox.setText(Preferences.getTracksUser(this)); mPassTextbox.setText(Preferences.getTracksPassword(this)); CompoundButton.OnClickListener checkSettings = new CompoundButton.OnClickListener() { @Override public void onClick(View view) { if(checkSettings()){ int duration = Toast.LENGTH_SHORT; Toast toast = Toast.makeText(getApplicationContext(), R.string.tracks_settings_valid, duration); toast.show(); } else { int duration = Toast.LENGTH_SHORT; Toast toast = Toast.makeText(getApplicationContext(), R.string.tracks_failed_to_check_url, duration); toast.show(); } } }; CompoundButton.OnClickListener saveClick = new CompoundButton.OnClickListener() { @Override public void onClick(View view) { savePrefs(); finish(); } }; CompoundButton.OnClickListener cancelClick = new CompoundButton.OnClickListener() { @Override public void onClick(View view) { finish(); } }; final int color = mUrlTextbox.getCurrentTextColor(); verifyUrl(color); // Setup the bottom buttons View view = findViewById(R.id.saveButton); view.setOnClickListener(saveClick); view = findViewById(R.id.discardButton); view.setOnClickListener(cancelClick); view = findViewById(R.id.checkSettings); view.setOnClickListener(checkSettings); View url = findViewById(R.id.url); url.setOnKeyListener(new View.OnKeyListener() { @Override public boolean onKey(View view, int i, KeyEvent keyEvent) { verifyUrl(color); return false; } }); } private boolean verifyUrl(int color) { try { new URI(mUrlTextbox.getText().toString()); mUrlTextbox.setTextColor(color); return true; } catch (URISyntaxException e) { mUrlTextbox.setTextColor(Color.RED); return false; } } private boolean savePrefs() { SharedPreferences.Editor ed = Preferences.getEditor(this); URI uri = null; try { uri = new URI(mUrlTextbox.getText().toString()); } catch (URISyntaxException ignored) { } ed.putString(TRACKS_URL, uri.toString()); ed.putInt(TRACKS_INTERVAL, mInterval.getSelectedItemPosition()); ed.putString(TRACKS_USER, mUserTextbox.getText().toString()); ed.putString(TRACKS_PASSWORD, mPassTextbox.getText().toString()); ed.commit(); return true; } private boolean checkSettings() { URI uri = null; try { uri = new URI(mUrlTextbox.getText().toString()); } catch (URISyntaxException ignored) { } try { WebClient client = new WebClient(this, mUserTextbox.getText() .toString(), mPassTextbox.getText().toString()); if (uri != null && uri.isAbsolute()) { WebResult result = client.getUrlContent(uri.toString() + "/contexts.xml"); if(result.getStatus().getStatusCode() != HttpStatus.SC_OK) return false; } } catch (ApiException e) { return false; } return true; } }