/* * Copyright (C) 2016 Jorge Ruesga * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.ruesga.android.wallpapers.photophase.preferences; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.preference.CheckBoxPreference; import android.preference.Preference; import android.preference.Preference.OnPreferenceChangeListener; import android.preference.PreferenceCategory; import android.preference.PreferenceFragment; import android.support.v7.app.AlertDialog; import android.util.Log; import com.ruesga.android.wallpapers.photophase.R; import su.litvak.chromecast.api.v2.ChromeCast; /** * A settings preference to configure casting options */ public class CastPreferenceFragment extends PreferenceFragment { private static final String TAG = "CastPrefFragment"; private static final boolean DEBUG = false; private PreferenceCategory mDiscoveryCategory; private PreferenceCategory mSlideshowCategory; private PreferenceCategory mVisualizationCategory; private PreferenceCategory mUiCategory; private final OnPreferenceChangeListener mOnChangeListener = new OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(final Preference preference, Object newValue) { String key = preference.getKey(); if (DEBUG) Log.d(TAG, "Preference changed: " + key + "=" + newValue); boolean isNeedSendConfiguration = false; if (key.compareTo("cast_ui_show_time") == 0 || key.compareTo("cast_ui_show_weather") == 0 || key.compareTo("cast_ui_show_logo") == 0 || key.compareTo("cast_ui_show_track") == 0 || key.compareTo("cast_aspect_ratio") == 0 || key.compareTo("cast_blurred_background") == 0 || key.compareTo("cast_slideshow_time") == 0 || key.compareTo("cast_slideshow_repeat") == 0 || key.compareTo("cast_slideshow_shuffle") == 0) { isNeedSendConfiguration = true; } else if (key.compareTo("cast_enabled") == 0) { setEnabledDependencies((Boolean) newValue); isNeedSendConfiguration = true; } if (isNeedSendConfiguration) { sendConfigurationChangedEvent(key); } return true; } }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); final String formatSeconds = getString(R.string.format_seconds); // Change the preference manager getPreferenceManager().setSharedPreferencesName(PreferencesProvider.PREFERENCES_FILE); getPreferenceManager().setSharedPreferencesMode(Context.MODE_PRIVATE); // Add the preferences addPreferencesFromResource(R.xml.preferences_cast); mDiscoveryCategory = (PreferenceCategory) findPreference("category_cast_discovery"); mSlideshowCategory = (PreferenceCategory) findPreference("category_cast_slideshow"); mVisualizationCategory = (PreferenceCategory) findPreference("category_cast_visualization"); mUiCategory = (PreferenceCategory) findPreference("category_cast_ui"); // Enabled CheckBoxPreference castEnabled = (CheckBoxPreference) findPreference("cast_enabled"); castEnabled.setOnPreferenceChangeListener(mOnChangeListener); //- Discovery settings final Preference lastConnectedDevice = findPreference("cast_last_connected_device"); ChromeCast device = PreferencesProvider.Preferences.Cast.getLastConnectedDevice(getActivity()); if (device == null) { lastConnectedDevice.setSummary(R.string.pref_cast_no_connected_device); lastConnectedDevice.setSelectable(false); } else { lastConnectedDevice.setSummary( getActivity().getString(R.string.pref_cast_connected_device, device.getName(), device.getAddress() + ":" + device.getPort())); lastConnectedDevice.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()) .setTitle(R.string.pref_cast_last_connected_device_title) .setMessage(R.string.pref_cast_clear_connected_device) .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { PreferencesProvider.Preferences.Cast.setLastConnectedDevice( getActivity(), null); PreferencesProvider.Preferences.Cast.setLastDiscoveredDevices( getActivity(), null); lastConnectedDevice.setSummary(R.string.pref_cast_no_connected_device); lastConnectedDevice.setSelectable(false); dialogInterface.dismiss(); } }) .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { dialogInterface.cancel(); } }); AlertDialog dialog = builder.create(); dialog.show(); return true; } }); } DiscreteSeekBarProgressPreference discoveryTime = (DiscreteSeekBarProgressPreference) findPreference("cast_discovery_time"); discoveryTime.setFormat(formatSeconds); discoveryTime.setOnPreferenceChangeListener(mOnChangeListener); discoveryTime.setMin(8); discoveryTime.setMax(15); //- Slideshow settings DiscreteSeekBarProgressPreference slideshowTime = (DiscreteSeekBarProgressPreference) findPreference("cast_slideshow_time"); slideshowTime.setFormat(formatSeconds); slideshowTime.setOnPreferenceChangeListener(mOnChangeListener); slideshowTime.setMin(20); slideshowTime.setMax(120); CheckBoxPreference slideShowRepeat = (CheckBoxPreference) findPreference("cast_slideshow_repeat"); slideShowRepeat.setOnPreferenceChangeListener(mOnChangeListener); CheckBoxPreference slideShowShuffle = (CheckBoxPreference) findPreference("cast_slideshow_shuffle"); slideShowShuffle.setOnPreferenceChangeListener(mOnChangeListener); //- Visualization settings CheckBoxPreference aspectRatio = (CheckBoxPreference) findPreference("cast_aspect_ratio"); aspectRatio.setOnPreferenceChangeListener(mOnChangeListener); CheckBoxPreference blurredBackground = (CheckBoxPreference) findPreference("cast_blurred_background"); blurredBackground.setOnPreferenceChangeListener(mOnChangeListener); //- Ui settings CheckBoxPreference showTime = (CheckBoxPreference) findPreference("cast_ui_show_time"); showTime.setOnPreferenceChangeListener(mOnChangeListener); CheckBoxPreference showWeather = (CheckBoxPreference) findPreference("cast_ui_show_weather"); showWeather.setOnPreferenceChangeListener(mOnChangeListener); CheckBoxPreference showLogo = (CheckBoxPreference) findPreference("cast_ui_show_logo"); showLogo.setOnPreferenceChangeListener(mOnChangeListener); CheckBoxPreference showTrack = (CheckBoxPreference) findPreference("cast_ui_show_track"); showTrack.setOnPreferenceChangeListener(mOnChangeListener); setEnabledDependencies(PreferencesProvider.Preferences.Cast.isEnabled(getActivity())); } private void sendConfigurationChangedEvent(String key) { Intent intent = new Intent(PreferencesProvider.ACTION_SETTINGS_CHANGED); intent.putExtra(PreferencesProvider.EXTRA_FLAG_CAST_CONFIGURATION_CHANGE, Boolean.TRUE); intent.putExtra(PreferencesProvider.EXTRA_PREF_KEY, key); getActivity().sendBroadcast(intent); } private void setEnabledDependencies(boolean state) { mDiscoveryCategory.setEnabled(state); mSlideshowCategory.setEnabled(state); mVisualizationCategory.setEnabled(state); mUiCategory.setEnabled(state); } }