/* * Copyright (C) 2012 Andrew Neal * Copyright (C) 2014 The CyanogenMod Project * 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.cyanogenmod.eleven.utils; import android.content.Context; import android.content.SharedPreferences; import android.os.AsyncTask; import android.preference.PreferenceManager; import com.cyanogenmod.eleven.R; import com.cyanogenmod.eleven.ui.fragments.AlbumFragment; import com.cyanogenmod.eleven.ui.fragments.ArtistFragment; import com.cyanogenmod.eleven.ui.fragments.SongFragment; import com.cyanogenmod.eleven.ui.fragments.phone.MusicBrowserPhoneFragment; /** * A collection of helpers designed to get and set various preferences across * Apollo. * * @author Andrew Neal (andrewdneal@gmail.com) */ public final class PreferenceUtils { /* Default start page (Artist page) */ public static final int DEFFAULT_PAGE = 2; /* Saves the last page the pager was on in {@link MusicBrowserPhoneFragment} */ public static final String START_PAGE = "start_page"; // Sort order for the artist list public static final String ARTIST_SORT_ORDER = "artist_sort_order"; // Sort order for the artist song list public static final String ARTIST_SONG_SORT_ORDER = "artist_song_sort_order"; // Sort order for the artist album list public static final String ARTIST_ALBUM_SORT_ORDER = "artist_album_sort_order"; // Sort order for the album list public static final String ALBUM_SORT_ORDER = "album_sort_order"; // Sort order for the album song list public static final String ALBUM_SONG_SORT_ORDER = "album_song_sort_order"; // Sort order for the song list public static final String SONG_SORT_ORDER = "song_sort_order"; // Key used to download images only on Wi-Fi public static final String ONLY_ON_WIFI = "only_on_wifi"; // Key that gives permissions to download missing album covers public static final String DOWNLOAD_MISSING_ARTWORK = "download_missing_artwork"; // Key that gives permissions to download missing artist images public static final String DOWNLOAD_MISSING_ARTIST_IMAGES = "download_missing_artist_images"; // Key used to set the overall theme color public static final String DEFAULT_THEME_COLOR = "default_theme_color"; // datetime cutoff for determining which songs go in last added playlist public static final String LAST_ADDED_CUTOFF = "last_added_cutoff"; // show lyrics option public static final String SHOW_LYRICS = "show_lyrics"; // show visualizer flag public static final String SHOW_VISUALIZER = "music_visualization"; private static PreferenceUtils sInstance; private final SharedPreferences mPreferences; /** * Constructor for PreferenceUtils * * @param context The {@link Context} to use. */ public PreferenceUtils(final Context context) { mPreferences = PreferenceManager.getDefaultSharedPreferences(context); } /** * @param context The {@link Context} to use. * @return A singleton of this class */ public static final PreferenceUtils getInstance(final Context context) { if (sInstance == null) { sInstance = new PreferenceUtils(context.getApplicationContext()); } return sInstance; } /** * Saves the current page the user is on when they close the app. * * @param value The last page the pager was on when the onDestroy is called * in {@link MusicBrowserPhoneFragment}. */ public void setStartPage(final int value) { ApolloUtils.execute(false, new AsyncTask() { @Override protected Void doInBackground(final Void... unused) { final SharedPreferences.Editor editor = mPreferences.edit(); editor.putInt(START_PAGE, value); editor.apply(); return null; } }, (Void[])null); } /** * Returns the last page the user was on when the app was exited. * * @return The page to start on when the app is opened. */ public final int getStartPage() { return mPreferences.getInt(START_PAGE, DEFFAULT_PAGE); } /** * Sets the new theme color. * * @param value The new theme color to use. */ public void setDefaultThemeColor(final int value) { ApolloUtils.execute(false, new AsyncTask() { @Override protected Void doInBackground(final Void... unused) { final SharedPreferences.Editor editor = mPreferences.edit(); editor.putInt(DEFAULT_THEME_COLOR, value); editor.apply(); return null; } }, (Void[])null); } /** * Returns the current theme color. * * @param context The {@link Context} to use. * @return The default theme color. */ public final int getDefaultThemeColor(final Context context) { return mPreferences.getInt(DEFAULT_THEME_COLOR, context.getResources().getColor(R.color.holo_blue_light)); } /** * @return True if the user has checked to only download images on Wi-Fi, * false otherwise */ public final boolean onlyOnWifi() { return mPreferences.getBoolean(ONLY_ON_WIFI, true); } /** * @return True if the user has checked to download missing album covers, * false otherwise. */ public final boolean downloadMissingArtwork() { return mPreferences.getBoolean(DOWNLOAD_MISSING_ARTWORK, true); } /** * @return True if the user has checked to download missing artist images, * false otherwise. */ public final boolean downloadMissingArtistImages() { return mPreferences.getBoolean(DOWNLOAD_MISSING_ARTIST_IMAGES, true); } /** * Saves the sort order for a list. * * @param key Which sort order to change * @param value The new sort order */ private void setSortOrder(final String key, final String value) { ApolloUtils.execute(false, new AsyncTask() { @Override protected Void doInBackground(final Void... unused) { final SharedPreferences.Editor editor = mPreferences.edit(); editor.putString(key, value); editor.apply(); return null; } }, (Void[])null); } /** * Sets the sort order for the artist list. * * @param value The new sort order */ public void setArtistSortOrder(final String value) { setSortOrder(ARTIST_SORT_ORDER, value); } /** * @return The sort order used for the artist list in {@link ArtistFragment} */ public final String getArtistSortOrder() { return mPreferences.getString(ARTIST_SORT_ORDER, SortOrder.ArtistSortOrder.ARTIST_A_Z); } /** * Sets the sort order for the artist song list. * * @param value The new sort order */ public void setArtistSongSortOrder(final String value) { setSortOrder(ARTIST_SONG_SORT_ORDER, value); } /** * @return The sort order used for the artist song list in * {@link ArtistDetailSongAdapter} */ public final String getArtistSongSortOrder() { return mPreferences.getString(ARTIST_SONG_SORT_ORDER, SortOrder.ArtistSongSortOrder.SONG_A_Z); } /** * Sets the sort order for the artist album list. * * @param value The new sort order */ public void setArtistAlbumSortOrder(final String value) { setSortOrder(ARTIST_ALBUM_SORT_ORDER, value); } /** * @return The sort order used for the artist album list in * {@link com.cyanogenmod.eleven.ui.fragments.ArtistDetailFragment} */ public final String getArtistAlbumSortOrder() { return mPreferences.getString(ARTIST_ALBUM_SORT_ORDER, SortOrder.ArtistAlbumSortOrder.ALBUM_A_Z); } /** * Sets the sort order for the album list. * * @param value The new sort order */ public void setAlbumSortOrder(final String value) { setSortOrder(ALBUM_SORT_ORDER, value); } /** * @return The sort order used for the album list in {@link AlbumFragment} */ public final String getAlbumSortOrder() { return mPreferences.getString(ALBUM_SORT_ORDER, SortOrder.AlbumSortOrder.ALBUM_A_Z); } /** * Sets the sort order for the album song list. * * @param value The new sort order */ public void setAlbumSongSortOrder(final String value) { setSortOrder(ALBUM_SONG_SORT_ORDER, value); } /** * @return The sort order used for the album song in * {@link AlbumSongFragment} */ public final String getAlbumSongSortOrder() { return mPreferences.getString(ALBUM_SONG_SORT_ORDER, SortOrder.AlbumSongSortOrder.SONG_TRACK_LIST); } /** * Sets the sort order for the song list. * * @param value The new sort order */ public void setSongSortOrder(final String value) { setSortOrder(SONG_SORT_ORDER, value); } /** * @return The sort order used for the song list in {@link SongFragment} */ public final String getSongSortOrder() { return mPreferences.getString(SONG_SORT_ORDER, SortOrder.SongSortOrder.SONG_A_Z); } /** @parm lastAddedMillis timestamp in millis used as a cutoff for last added playlist */ public void setLastAddedCutoff(long lastAddedMillis) { mPreferences.edit().putLong(LAST_ADDED_CUTOFF, lastAddedMillis).commit(); } public long getLastAddedCutoff() { return mPreferences.getLong(LAST_ADDED_CUTOFF, 0L); } /** * @return Whether we want to show lyrics */ public final boolean getShowLyrics() { return mPreferences.getBoolean(SHOW_LYRICS, true); } public boolean getShowVisualizer() { return mPreferences.getBoolean(SHOW_VISUALIZER, true); } }