/** * */ package fm.last.android.activity; import android.app.NotificationManager; import android.content.ComponentName; import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.preference.Preference; import android.preference.PreferenceActivity; import fm.last.android.LastFMApplication; import fm.last.android.R; import fm.last.android.player.RadioPlayerService; import fm.last.android.sync.AccountAuthenticatorService; /** * @author sam * */ public class Preferences extends PreferenceActivity { private boolean shouldForceSync = false; @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); addPreferencesFromResource(R.xml.preferences_scrobbler); if(RadioPlayerService.radioAvailable(this)) addPreferencesFromResource(R.xml.preferences_player); if(Integer.decode(Build.VERSION.SDK) >= 6) { addPreferencesFromResource(R.xml.preferences_sync); findPreference("sync_icons").setOnPreferenceChangeListener(syncToggle); findPreference("sync_names").setOnPreferenceChangeListener(syncToggle); findPreference("sync_taste").setOnPreferenceChangeListener(syncToggle); } addPreferencesFromResource(R.xml.preferences_about); findPreference("scrobble").setOnPreferenceChangeListener(scrobbletoggle); findPreference("scrobble_music_player").setOnPreferenceChangeListener(scrobbletoggle); findPreference("scrobble_sdroid").setOnPreferenceChangeListener(scrobbletoggle); findPreference("scrobble_sls").setOnPreferenceChangeListener(scrobbletoggle); findPreference("tos").setOnPreferenceClickListener(urlClick); findPreference("privacy").setOnPreferenceClickListener(urlClick); findPreference("changes").setOnPreferenceClickListener(urlClick); try { findPreference("version").setSummary(getPackageManager().getPackageInfo("fm.last.android", 0).versionName); } catch (NameNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override public void onPause() { super.onPause(); if(shouldForceSync) { AccountAuthenticatorService.resyncAccount(this); } } Preference.OnPreferenceChangeListener syncToggle = new Preference.OnPreferenceChangeListener() { public boolean onPreferenceChange(Preference preference, Object newValue) { shouldForceSync = true; return true; } }; Preference.OnPreferenceClickListener urlClick = new Preference.OnPreferenceClickListener() { public boolean onPreferenceClick(Preference preference) { Intent i = null; if (preference.getKey().equals("tos")) i = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.last.fm/legal/terms")); if (preference.getKey().equals("privacy")) i = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.last.fm/legal/privacy")); if (preference.getKey().equals("changes")) i = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.last.fm/group/Last.fm+Android/forum/114391/_/589152")); if (i != null) startActivity(i); return false; } }; Preference.OnPreferenceChangeListener scrobbletoggle = new Preference.OnPreferenceChangeListener() { public boolean onPreferenceChange(Preference preference, Object newValue) { if(preference.getKey().equals("scrobble")) { if((Boolean)newValue) { getPackageManager().setComponentEnabledSetting(new ComponentName("fm.last.android", "fm.last.android.scrobbler.MusicIntentReceiver"), PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, PackageManager.DONT_KILL_APP); //Re-enable the rest of the recievers to match the current preference state if(preference.getSharedPreferences().getBoolean("scrobble_music_player", true)) getPackageManager().setComponentEnabledSetting(new ComponentName("fm.last.android", "fm.last.android.scrobbler.AndroidMusicIntentReceiver"), PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, PackageManager.DONT_KILL_APP); else getPackageManager().setComponentEnabledSetting(new ComponentName("fm.last.android", "fm.last.android.scrobbler.AndroidMusicIntentReceiver"), PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); if(preference.getSharedPreferences().getBoolean("scrobble_sdroid", true)) getPackageManager().setComponentEnabledSetting(new ComponentName("fm.last.android", "fm.last.android.scrobbler.ScrobbleDroidIntentReceiver"), PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, PackageManager.DONT_KILL_APP); else getPackageManager().setComponentEnabledSetting(new ComponentName("fm.last.android", "fm.last.android.scrobbler.ScrobbleDroidIntentReceiver"), PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); if(preference.getSharedPreferences().getBoolean("scrobble_sls", true)) getPackageManager().setComponentEnabledSetting(new ComponentName("fm.last.android", "fm.last.android.scrobbler.SLSIntentReceiver"), PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, PackageManager.DONT_KILL_APP); else getPackageManager().setComponentEnabledSetting(new ComponentName("fm.last.android", "fm.last.android.scrobbler.SLSIntentReceiver"), PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); } else { getPackageManager().setComponentEnabledSetting(new ComponentName("fm.last.android", "fm.last.android.scrobbler.MusicIntentReceiver"), PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); getPackageManager().setComponentEnabledSetting(new ComponentName("fm.last.android", "fm.last.android.scrobbler.AndroidMusicIntentReceiver"), PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); getPackageManager().setComponentEnabledSetting(new ComponentName("fm.last.android", "fm.last.android.scrobbler.ScrobbleDroidIntentReceiver"), PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); getPackageManager().setComponentEnabledSetting(new ComponentName("fm.last.android", "fm.last.android.scrobbler.SLSIntentReceiver"), PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); } } else if(preference.getKey().equals("scrobble_music_player")) { if((Boolean)newValue) { getPackageManager().setComponentEnabledSetting(new ComponentName("fm.last.android", "fm.last.android.scrobbler.AndroidMusicIntentReceiver"), PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, PackageManager.DONT_KILL_APP); } else { getPackageManager().setComponentEnabledSetting(new ComponentName("fm.last.android", "fm.last.android.scrobbler.AndroidMusicIntentReceiver"), PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); } } else if(preference.getKey().equals("scrobble_sdroid")) { if((Boolean)newValue) { getPackageManager().setComponentEnabledSetting(new ComponentName("fm.last.android", "fm.last.android.scrobbler.ScrobbleDroidIntentReceiver"), PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, PackageManager.DONT_KILL_APP); } else { getPackageManager().setComponentEnabledSetting(new ComponentName("fm.last.android", "fm.last.android.scrobbler.ScrobbleDroidIntentReceiver"), PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); } } else if(preference.getKey().equals("scrobble_sls")) { if((Boolean)newValue) { getPackageManager().setComponentEnabledSetting(new ComponentName("fm.last.android", "fm.last.android.scrobbler.SLSIntentReceiver"), PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, PackageManager.DONT_KILL_APP); } else { getPackageManager().setComponentEnabledSetting(new ComponentName("fm.last.android", "fm.last.android.scrobbler.SLSIntentReceiver"), PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); } } NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); nm.cancel(1338); return true; } }; @Override public void onResume() { super.onResume(); try { LastFMApplication.getInstance().tracker.trackPageView("/Preferences"); } catch (Exception e) { //Google Analytics doesn't appear to be thread safe } } }