/* * Copyright (C) 2015 Naman Dwivedi * * Licensed under the GNU General Public License v3 * * This 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 3 of the License, or (at your option) any later version. * * This software 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. */ package com.naman14.timber.fragments; import android.content.Intent; import android.content.SharedPreferences; import android.graphics.Color; import android.os.Bundle; import android.preference.ListPreference; import android.preference.Preference; import android.preference.PreferenceFragment; import android.preference.SwitchPreference; import android.view.View; import com.afollestad.appthemeengine.ATE; import com.afollestad.appthemeengine.Config; import com.afollestad.appthemeengine.prefs.ATECheckBoxPreference; import com.afollestad.appthemeengine.prefs.ATEColorPreference; import com.afollestad.materialdialogs.color.ColorChooserDialog; import com.naman14.timber.R; import com.naman14.timber.activities.DonateActivity; import com.naman14.timber.activities.SettingsActivity; import com.naman14.timber.dialogs.LastFmLoginDialog; import com.naman14.timber.lastfmapi.LastFmClient; import com.naman14.timber.utils.Constants; import com.naman14.timber.utils.NavigationUtils; import com.naman14.timber.utils.PreferencesUtility; public class SettingsFragment extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener { private static final String NOW_PLAYING_SELECTOR = "now_playing_selector"; private static final String LASTFM_LOGIN = "lastfm_login"; private static final String KEY_ABOUT = "preference_about"; private static final String KEY_SOURCE = "preference_source"; private static final String KEY_THEME = "theme_preference"; private static final String TOGGLE_ANIMATIONS = "toggle_animations"; private static final String TOGGLE_SYSTEM_ANIMATIONS = "toggle_system_animations"; private static final String KEY_START_PAGE = "start_page_preference"; private boolean lastFMlogedin; Preference nowPlayingSelector; Preference lastFMlogin; SwitchPreference toggleAnimations; ListPreference themePreference, startPagePreference; PreferencesUtility mPreferences; private String mAteKey; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preferences); mPreferences = PreferencesUtility.getInstance(getActivity()); nowPlayingSelector = findPreference(NOW_PLAYING_SELECTOR); lastFMlogin = findPreference(LASTFM_LOGIN); updateLastFM(); // themePreference = (ListPreference) findPreference(KEY_THEME); startPagePreference = (ListPreference) findPreference(KEY_START_PAGE); nowPlayingSelector.setIntent(NavigationUtils.getNavigateToStyleSelectorIntent(getActivity(), Constants.SETTINGS_STYLE_SELECTOR_NOWPLAYING)); lastFMlogin.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { if (lastFMlogedin) { LastFmClient.getInstance(getActivity()).logout(); updateLastFM(); } else { LastFmLoginDialog lastFmLoginDialog = new LastFmLoginDialog(); lastFmLoginDialog.setTargetFragment(SettingsFragment.this, 0); lastFmLoginDialog.show(getFragmentManager(), LastFmLoginDialog.FRAGMENT_NAME); } return true; } }); PreferencesUtility.getInstance(getActivity()).setOnSharedPreferenceChangeListener(this); setPreferenceClickListeners(); } @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { } private void setPreferenceClickListeners() { // themePreference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { // @Override // public boolean onPreferenceChange(Preference preference, Object newValue) { // Intent i = getActivity().getBaseContext().getPackageManager().getLaunchIntentForPackage(getActivity().getBaseContext().getPackageName()); // i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); // startActivity(i); // return true; // } // }); startPagePreference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { switch ((String) newValue) { case "last_opened": mPreferences.setLastOpenedAsStartPagePreference(true); break; case "songs": mPreferences.setLastOpenedAsStartPagePreference(false); mPreferences.setStartPageIndex(0); break; case "albums": mPreferences.setLastOpenedAsStartPagePreference(false); mPreferences.setStartPageIndex(1); break; case "artists": mPreferences.setLastOpenedAsStartPagePreference(false); mPreferences.setStartPageIndex(2); break; } return true; } }); Intent restoreIntent = new Intent(getActivity(), DonateActivity.class); restoreIntent.putExtra("title", "Restoring purchases.."); restoreIntent.setAction("restore"); findPreference("support_development").setIntent(new Intent(getActivity(), DonateActivity.class)); findPreference("restore_purchases").setIntent(restoreIntent); } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); invalidateSettings(); ATE.apply(view, mAteKey); } public void invalidateSettings() { mAteKey = ((SettingsActivity) getActivity()).getATEKey(); ATEColorPreference primaryColorPref = (ATEColorPreference) findPreference("primary_color"); primaryColorPref.setColor(Config.primaryColor(getActivity(), mAteKey), Color.BLACK); primaryColorPref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { new ColorChooserDialog.Builder((SettingsActivity) getActivity(), R.string.primary_color) .preselect(Config.primaryColor(getActivity(), mAteKey)) .show(); return true; } }); ATEColorPreference accentColorPref = (ATEColorPreference) findPreference("accent_color"); accentColorPref.setColor(Config.accentColor(getActivity(), mAteKey), Color.BLACK); accentColorPref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { new ColorChooserDialog.Builder((SettingsActivity) getActivity(), R.string.accent_color) .preselect(Config.accentColor(getActivity(), mAteKey)) .show(); return true; } }); findPreference("dark_theme").setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { // Marks both theme configs as changed so MainActivity restarts itself on return Config.markChanged(getActivity(), "light_theme"); Config.markChanged(getActivity(), "dark_theme"); // The dark_theme preference value gets saved by Android in the default PreferenceManager. // It's used in getATEKey() of both the Activities. getActivity().recreate(); return true; } }); final ATECheckBoxPreference statusBarPref = (ATECheckBoxPreference) findPreference("colored_status_bar"); final ATECheckBoxPreference navBarPref = (ATECheckBoxPreference) findPreference("colored_nav_bar"); statusBarPref.setChecked(Config.coloredStatusBar(getActivity(), mAteKey)); statusBarPref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { ATE.config(getActivity(), mAteKey) .coloredStatusBar((Boolean) newValue) .apply(getActivity()); return true; } }); navBarPref.setChecked(Config.coloredNavigationBar(getActivity(), mAteKey)); navBarPref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { ATE.config(getActivity(), mAteKey) .coloredNavigationBar((Boolean) newValue) .apply(getActivity()); return true; } }); } public void updateLastFM() { String username = LastFmClient.getInstance(getActivity()).getUsername(); if (username != null) { lastFMlogedin = true; lastFMlogin.setTitle("Logout"); lastFMlogin.setSummary("Logged in as " + username); } else { lastFMlogedin = false; lastFMlogin.setTitle("Login"); lastFMlogin.setSummary("Login to LastFM to scrobble"); } } }