/***************************************************************************** * PreferencesActivity.java ***************************************************************************** * Copyright © 2011-2014 VLC authors and VideoLAN * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************/ package org.videolan.vlc.gui; import org.videolan.libvlc.LibVLC; import org.videolan.vlc.AudioService; import org.videolan.vlc.AudioServiceController; import org.videolan.vlc.BitmapCache; import org.videolan.vlc.MediaDatabase; import org.videolan.vlc.Util; import org.videolan.vlc.gui.audio.AudioUtil; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; import android.content.SharedPreferences.OnSharedPreferenceChangeListener; import android.os.Bundle; import android.preference.CheckBoxPreference; import android.preference.EditTextPreference; import android.preference.ListPreference; import android.preference.Preference; import android.preference.Preference.OnPreferenceChangeListener; import android.preference.Preference.OnPreferenceClickListener; import android.preference.PreferenceActivity; import android.preference.PreferenceManager; import android.preference.PreferenceScreen; import android.widget.Toast; import org.tribler.triblersvod.gui.R; @SuppressWarnings("deprecation") public class PreferencesActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener { public final static String TAG = "VLC/PreferencesActivity"; public final static String NAME = "VlcSharedPreferences"; public final static String VIDEO_RESUME_TIME = "VideoResumeTime"; public final static String VIDEO_SUBTITLE_FILES = "VideoSubtitleFiles"; public final static int RESULT_RESCAN = RESULT_FIRST_USER + 1; //TRIBLER public final static String KEY_LIBTORRENT_DEBUG = "libtorrent_debug"; public final static String LAST_MEDIA = "LastMedia"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preferences); // Directories Preference directoriesPref = findPreference("directories"); directoriesPref.setOnPreferenceClickListener( new OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { Intent intent = new Intent(getApplicationContext(), BrowserActivity.class); startActivity(intent); setResult(RESULT_RESCAN); return true; } }); // Screen orientation ListPreference screenOrientationPref = (ListPreference) findPreference("screen_orientation"); screenOrientationPref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { final SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(PreferencesActivity.this); SharedPreferences.Editor editor = sharedPrefs.edit(); editor.putString("screen_orientation_value", (String)newValue); editor.commit(); return true; } }); // Headset detection option CheckBoxPreference checkboxHS = (CheckBoxPreference) findPreference("enable_headset_detection"); checkboxHS.setOnPreferenceClickListener( new OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { CheckBoxPreference checkboxHS = (CheckBoxPreference) preference; AudioServiceController.getInstance().detectHeadset(checkboxHS.isChecked()); return true; } }); // Steal remote control Preference checkboxStealRC = findPreference("enable_steal_remote_control"); checkboxStealRC.setOnPreferenceClickListener( new OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { restartService(preference.getContext()); return true; } }); // Clear search history Preference clearHistoryPref = findPreference("clear_history"); clearHistoryPref.setOnPreferenceClickListener( new OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { new AlertDialog.Builder(PreferencesActivity.this) .setTitle(R.string.clear_history) .setMessage(R.string.validation) .setIcon(android.R.drawable.ic_dialog_alert) .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int whichButton) { MediaDatabase db = MediaDatabase.getInstance(getApplicationContext()); db.clearSearchhistory(); } }) .setNegativeButton(android.R.string.cancel, null).show(); return true; } }); // Clear media library Preference clearMediaPref = findPreference("clear_media_db"); clearMediaPref .setOnPreferenceClickListener(new OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { MediaDatabase.getInstance(getBaseContext()).emptyDatabase(); BitmapCache.getInstance().clear(); AudioUtil.clearCacheFolder(); Toast.makeText(getBaseContext(), R.string.media_db_cleared, Toast.LENGTH_SHORT).show(); return true; } }); // Debug log activity Preference debugLogsPref = findPreference("debug_logs"); debugLogsPref .setOnPreferenceClickListener(new OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { Intent intent = new Intent(getApplicationContext(), DebugLogActivity.class); startActivity(intent); return true; } }); /*** Attach debugging items **/ Preference quitAppPref = findPreference("quit_app"); quitAppPref.setOnPreferenceClickListener( new OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { android.os.Process.killProcess(android.os.Process.myPid()); return true; } }); // Audio output ListPreference aoutPref = (ListPreference) findPreference("aout"); int aoutEntriesId = Util.isGingerbreadOrLater() ? R.array.aouts : R.array.aouts_froyo; int aoutEntriesIdValues = Util.isGingerbreadOrLater() ? R.array.aouts_values : R.array.aouts_values_froyo; aoutPref.setEntries(aoutEntriesId); aoutPref.setEntryValues(aoutEntriesIdValues); if (aoutPref.getValue() == null) aoutPref.setValue(Util.isGingerbreadOrLater() ? "2"/*AOUT_OPENSLES*/ : "0"/*AOUT_AUDIOTRACK_JAVA*/); // Video output ListPreference voutPref = (ListPreference) findPreference("vout"); int voutEntriesId = Util.isGingerbreadOrLater() ? R.array.vouts : R.array.vouts_froyo; int voutEntriesIdValues = Util.isGingerbreadOrLater() ? R.array.vouts_values : R.array.vouts_values_froyo; voutPref.setEntries(voutEntriesId); voutPref.setEntryValues(voutEntriesIdValues); if (voutPref.getValue() == null) voutPref.setValue("0" /* VOUT_ANDROID_SURFACE */); // Set locale EditTextPreference setLocalePref = (EditTextPreference) findPreference("set_locale"); setLocalePref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { Toast.makeText(getBaseContext(), R.string.set_locale_popup, Toast.LENGTH_SHORT).show(); return true; } }); // Network caching EditTextPreference networkCachingPref = (EditTextPreference) findPreference("network_caching"); networkCachingPref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { final SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(PreferencesActivity.this); SharedPreferences.Editor editor = sharedPrefs.edit(); try { editor.putInt("network_caching_value", Integer.parseInt((String)newValue)); } catch(NumberFormatException e) { editor.putInt("network_caching_value", 0); editor.putString("network_caching", "0"); } editor.commit(); return true; } }); /*** SharedPreferences Listener to apply changes ***/ SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this); sharedPrefs.registerOnSharedPreferenceChangeListener(this); } @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { if(key.equalsIgnoreCase("hardware_acceleration") || key.equalsIgnoreCase("subtitle_text_encoding") || key.equalsIgnoreCase("aout") || key.equalsIgnoreCase("vout") || key.equalsIgnoreCase("chroma_format") || key.equalsIgnoreCase("deblocking") || key.equalsIgnoreCase("enable_frame_skip") || key.equalsIgnoreCase("enable_time_stretching_audio") || key.equalsIgnoreCase("enable_verbose_mode") || key.equalsIgnoreCase("network_caching")) { Util.updateLibVlcSettings(sharedPreferences); LibVLC.restart(this); } } @Override public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { super.onPreferenceTreeClick(preferenceScreen, preference); if (preference!=null) if (preference instanceof PreferenceScreen) if (((PreferenceScreen)preference).getDialog()!=null) ((PreferenceScreen)preference).getDialog().getWindow().getDecorView() .setBackgroundDrawable(this.getWindow().getDecorView().getBackground() .getConstantState().newDrawable()); return false; } @Override protected void onResume() { super.onResume(); AudioServiceController.getInstance().bindAudioService(this); } @Override protected void onPause() { super.onPause(); AudioServiceController.getInstance().unbindAudioService(this); } private void restartService(Context context) { Intent service = new Intent(context, AudioService.class); AudioServiceController.getInstance().unbindAudioService(PreferencesActivity.this); context.stopService(service); context.startService(service); AudioServiceController.getInstance().bindAudioService(PreferencesActivity.this); } }