/* * Copyright (c) 2013, Sorokin Alexander (uas.sorokin@gmail.com) * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * 3. The names of the authors may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ package com.uas.media.aimp.mobile; import android.app.AlertDialog; import android.app.Dialog; import android.content.SharedPreferences; import android.os.Bundle; import android.preference.EditTextPreference; import android.preference.ListPreference; import android.preference.Preference; import com.actionbarsherlock.app.ActionBar; import com.actionbarsherlock.app.SherlockPreferenceActivity; import com.actionbarsherlock.view.MenuItem; import com.uas.media.aimp.AimpPlayerInstance; import com.uas.media.aimp.R; import com.uas.media.aimp.api.IPlugin; import com.uas.media.aimp.player.AimpPlayer; import com.uas.media.aimp.player.ConnectionListener; import com.uas.media.aimp.player.ConnectionListenerViaHandler; import com.uas.media.aimp.utils.Settings; /** * User: uas.sorokin@gmail.com */ public class SettingsActivity extends SherlockPreferenceActivity { private EditTextPreference vHost; private EditTextPreference vPort; private ListPreference vSyncProfile; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.settings); vHost = (EditTextPreference) findPreference(Settings.KEY_HOST); vPort = (EditTextPreference) findPreference(Settings.KEY_PORT); vSyncProfile = (ListPreference) findPreference(Settings.KEY_SYNC_PROFILE); ActionBar ab = getSupportActionBar(); ab.setDisplayHomeAsUpEnabled(true); vPort.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { try { int port = Integer.parseInt((String) newValue); if (port < 1 || port > 65535) { throw new IllegalArgumentException("Port value should be between [1,65535]"); } return true; } catch (Exception ex) { ex.printStackTrace(); showInvalidPortValue(); return false; } } }); } @Override protected void onResume() { super.onResume(); updateUi(); getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(mSharedPrefsListener); AimpPlayerInstance.get().registerConnectionListener(mConnectionListener); } @Override protected void onPause() { super.onPause(); getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(mSharedPrefsListener); AimpPlayerInstance.get().unregisterConnectionListener(mConnectionListener); } protected final ConnectionListener mConnectionListener = new ConnectionListenerViaHandler() { @Override public void onConnectionStatusChanged(IPlugin plugin, AimpPlayer.ConnectionStatus status) { updateUi(); } }; protected SharedPreferences.OnSharedPreferenceChangeListener mSharedPrefsListener = new SharedPreferences.OnSharedPreferenceChangeListener() { @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String s) { updateUi(); } }; protected void updateUi() { vHost.setSummary(Settings.getHost()); vPort.setSummary(String.valueOf(Settings.getPort())); switch (Settings.getSyncFrequency()) { case Settings.SYNC_FREQUENCY_RARELY: vSyncProfile.setSummary(getString(R.string.settings_sync_profile_rarely)); break; case Settings.SYNC_FREQUENCY_OFTEN: vSyncProfile.setSummary(getString(R.string.settings_sync_profile_often)); break; default: vSyncProfile.setSummary(getString(R.string.settings_sync_profile_optimally)); break; } if (AimpPlayerInstance.get().isConnected()) { vHost.setEnabled(false); vPort.setEnabled(false); vSyncProfile.setEnabled(false); } else { vHost.setEnabled(true); vPort.setEnabled(true); vSyncProfile.setEnabled(true); } } @Override public boolean onMenuItemSelected(int featureId, MenuItem item) { switch (item.getItemId()) { case android.R.id.home: finish(); break; } return super.onMenuItemSelected(featureId, item); } protected void showInvalidPortValue() { Dialog d = new AlertDialog.Builder(this) .setTitle(R.string.error) .setMessage(R.string.settings_invalid_port_value) .setCancelable(true) .setNeutralButton(R.string.close, null) .create(); d.show(); } }