/* * Copyright 2008-2013, ETH Zürich, Samuel Welten, Michael Kuhn, Tobias Langner, * Sandro Affentranger, Lukas Bossard, Michael Grob, Rahul Jain, * Dominic Langenegger, Sonia Mayor Alonso, Roger Odermatt, Tobias Schlueter, * Yannick Stucki, Sebastian Wendland, Samuel Zehnder, Samuel Zihlmann, * Samuel Zweifel * * This file is part of Jukefox. * * Jukefox 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 any later version. Jukefox 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 * Jukefox. If not, see <http://www.gnu.org/licenses/>. */ package ch.ethz.dcg.pancho3.commons.settings; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import android.content.Context; import android.content.SharedPreferences; import android.content.SharedPreferences.OnSharedPreferenceChangeListener; import android.content.pm.ActivityInfo; import android.preference.PreferenceManager; import ch.ethz.dcg.jukefox.commons.utils.Log; import ch.ethz.dcg.pancho3.R; public class AndroidSettings implements ISettingsEditor, ISettingsReader, OnSharedPreferenceChangeListener { private final static String TAG = AndroidSettings.class.getSimpleName(); public enum FbSendInterval { WEEKLY, DAILY } public enum ScrobblingType { NONE(1), SCROBBLE_DROID(2), INTERNAL(3); private final int value; private ScrobblingType(int value) { this.value = value; } public int getValue() { return value; } } private Context ctx; private SharedPreferences preferences; private SharedPreferences.Editor editor; private List<SharedPreferences.OnSharedPreferenceChangeListener> changeListeners; public AndroidSettings(Context ctx) { this.ctx = ctx; preferences = PreferenceManager.getDefaultSharedPreferences(ctx); editor = preferences.edit(); changeListeners = new ArrayList<SharedPreferences.OnSharedPreferenceChangeListener>(); preferences.registerOnSharedPreferenceChangeListener(this); addLogFileEnabledSettingListener(); } private void addLogFileEnabledSettingListener() { this.addSettingsChangeListener(new OnSharedPreferenceChangeListener() { @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { if (!ctx.getString(R.string.KEY_ENABLE_LOG_FILE).equals(key)) { return; } Log.setLogToFile(isLogFileEnabled()); } }); } @Override public boolean isFullScreen() { return false; } @Override public boolean isGapless() { return preferences.getBoolean(ctx.getString(R.string.KEY_GAPLESS), Boolean.parseBoolean(ctx .getString(R.string.DEFAULT_GAPLESS))); } @Override public int getGaplessGapRemoveTime() { return preferences.getInt(ctx.getString(R.string.KEY_GAPLESS_OFFSET), Integer.parseInt(ctx .getString(R.string.DEFAULT_GAPLESS_OFFSET))); } @Override public void setGaplessGapRemoveTime(int time) { editor.putInt(ctx.getString(R.string.KEY_GAPLESS_OFFSET), time); } @Override public boolean isFirstStart() { return preferences.getBoolean(ctx.getString(R.string.KEY_IS_FIRST_START), true); } @Override public String getLastFmPassword() { return preferences.getString(ctx.getString(R.string.KEY_SCROBBLE_PWD), ""); } @Override public String getLastFmUserName() { return preferences.getString(ctx.getString(R.string.KEY_SCROBBLE_USERNAME), ""); } @Override public int getScrobbleInterval() { return preferences.getInt(ctx.getString(R.string.KEY_SCROBBLE_INTERVAL), Integer.parseInt(ctx .getString(R.string.DEFAULT_SCROBBLE_INTERVAL))); } @Override public boolean isScrobblingPaused() { return preferences.getBoolean(ctx.getString(R.string.KEY_SCROBBLE_PAUSED), Boolean.parseBoolean(ctx .getString(R.string.DEFAULT_SCROBBLE_PAUSED))); } @Override public boolean isScrobblingEnabled() { return preferences.getBoolean(ctx.getString(R.string.KEY_SCROBBLE_ENABLED), Boolean.parseBoolean(ctx .getString(R.string.DEFAULT_SCROBBLE_ENABLED))); } @Override public boolean areNotificationsShown() { return preferences.getBoolean(ctx.getString(R.string.KEY_SHOW_NOTIFICATIONS), Boolean.parseBoolean(ctx .getString(R.string.DEFAULT_SHOW_NOTIFICATIONS))); } @Override public boolean isCurrentAlbumHighlighted() { return preferences.getBoolean(ctx.getString(R.string.KEY_HIGHLIGHT_CUR_ALBUM), Boolean.parseBoolean(ctx .getString(R.string.DEFAULT_HIGHLIGHT_CUR_ALBUM))); } @Override public void setFirstStart(boolean b) { editor.putBoolean(ctx.getString(R.string.KEY_IS_FIRST_START), b); editor.commit(); } @Override public boolean isAutomaticallyShowCover() { return preferences.getBoolean(ctx.getString(R.string.KEY_AUTO_SHOW_COVER), Boolean.parseBoolean(ctx .getString(R.string.DEFAULT_AUTO_SHOW_COVER))); } @Override public boolean isAutomaticallyResumeOnHeadsetPlugged() { return preferences.getBoolean(ctx.getString(R.string.KEY_RESUME_ON_HEADSET_PLUG), Boolean.parseBoolean(ctx .getString(R.string.DEFAULT_RESUME_ON_HEADSET_PLUG))); } @Override public boolean isCommittingServerData() { return preferences.getBoolean(ctx.getString(R.string.KEY_IS_COMMITTING_SERVER_DATA), false); } @Override public void setCommittingServerData(boolean b) { editor.putBoolean(ctx.getString(R.string.KEY_IS_COMMITTING_SERVER_DATA), b); editor.commit(); } @Override public void setRandomUserHash(Long randomNr) { editor.putLong(ctx.getString(R.string.KEY_RANDOM_USER_HASH), randomNr); editor.commit(); } @Override public Long getRandomUserHash() { if (!preferences.contains(ctx.getString(R.string.KEY_RANDOM_USER_HASH))) { return null; } return preferences.getLong(ctx.getString(R.string.KEY_RANDOM_USER_HASH), 0L); } @Override public int getSimilarArtistAvoidanceNumber() { return preferences.getInt(ctx.getString(R.string.KEY_SIMILAR_MODE_ARTIST_AVOIDANCE_NUMBER), 0); } @Override public boolean isHapticFeedback() { return preferences.getBoolean(ctx.getString(R.string.KEY_HAPTIC_FEEDBACK), Boolean.parseBoolean(ctx .getString(R.string.DEFAULT_HAPTIC_FEEDBACK))); } @Override public void setSimilarArtistAvoidanceNumber(int numberOfSubsequentArtists) { editor.putInt(ctx.getString(R.string.KEY_SIMILAR_MODE_ARTIST_AVOIDANCE_NUMBER), numberOfSubsequentArtists); editor.commit(); } @Override public boolean isUseIconLists() { return preferences.getBoolean(ctx.getString(R.string.KEY_ICON_LISTS), Boolean.parseBoolean(ctx .getString(R.string.DEFAULT_ICON_LISTS))); } @Override public boolean isUseAlbumArtFiles() { return preferences.getBoolean(ctx.getString(R.string.KEY_USE_COVER_FILES), true); } @Override public boolean isKineticMovement() { return preferences.getBoolean(ctx.getString(R.string.KEY_KINETIC_MOVEMENT), Boolean.parseBoolean(ctx .getString(R.string.DEFAULT_KINETIC_MOVEMENT))); } @Override public boolean isSearchWhileTyping() { return preferences.getBoolean(ctx.getString(R.string.KEY_SEARCH_WHILE_TYPING), Boolean.parseBoolean(ctx .getString(R.string.DEFAULT_SEARCH_WHILE_TYPING))); } @Override public void setLastPositionInPcaMapX(float posX) { editor.putFloat(ctx.getString(R.string.KEY_LASTPOS_IN_PCA_X), posX); editor.commit(); } @Override public void setLastPositionInPcaMapY(float posY) { editor.putFloat(ctx.getString(R.string.KEY_LASTPOS_IN_PCA_Y), posY); editor.commit(); } @Override public float getLastPositionInPcaMapX() { return preferences.getFloat(ctx.getString(R.string.KEY_LASTPOS_IN_PCA_X), -1); } @Override public float getLastPositionInPcaMapY() { return preferences.getFloat(ctx.getString(R.string.KEY_LASTPOS_IN_PCA_X), -1); } public int getSharedPreferencesVersion() { return preferences.getInt(ctx.getString(R.string.KEY_SHARED_PREF_VERSION), 0); } @Override public void setDontShowAgain(String key, boolean b) { Log.v(TAG, "set don't show again for key '" + key + "' to: " + b); editor.putBoolean(key, b); editor.commit(); } @Override public boolean isDontShowAgain(String key) { return preferences.getBoolean(key, false); } @Override public void addSettingsChangeListener(OnSharedPreferenceChangeListener listener) { changeListeners.add(listener); } @Override public void removeSettingsChangeListener(OnSharedPreferenceChangeListener listener) { changeListeners.remove(listener); } @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { // Log.v(TAG, "Shared Pref changed"); for (SharedPreferences.OnSharedPreferenceChangeListener listener : changeListeners) { listener.onSharedPreferenceChanged(preferences, key); } } @Override public boolean isShowZoomBar() { return preferences.getBoolean(ctx.getString(R.string.KEY_SHOW_ZOOM_BAR), Boolean.parseBoolean(ctx .getString(R.string.DEFAULT_SHOW_ZOOM_BAR))); } public long getLastSentPlayLogId() { return preferences.getInt(ctx.getString(R.string.KEY_LAST_SENT_PLAY_LOG_ID), -1); } public void setLastSentPlayLogId(int id) { editor.putInt(ctx.getString(R.string.KEY_LAST_SENT_PLAY_LOG_ID), id); editor.commit(); } @Override public boolean isLockScreenControls() { return preferences.getBoolean(ctx.getString(R.string.KEY_LOCK_SCREEN_CONTROLS), Boolean.parseBoolean(ctx .getString(R.string.DEFAULT_LOCK_SCREEN_CONTROLS))); } @Override public int getPreferredScreenOrientation() { return preferences.getInt(ctx.getString(R.string.KEY_SCREEN_ORIENTATION), ActivityInfo.SCREEN_ORIENTATION_SENSOR); } public int getLastApplicationVersion() { return preferences.getInt(ctx.getString(R.string.KEY_LAST_APP_VERSION), -1); } public void setLastApplicationVersion(int currentAppVersion) { editor.putInt(ctx.getString(R.string.KEY_LAST_APP_VERSION), currentAppVersion); editor.commit(); } public void setCurrentLogFileNumber(int logFileNumber) { editor.putInt(ctx.getString(R.string.KEY_CURRENT_LOG_FILE_NR), logFileNumber); editor.commit(); } public int getCurrentLogFileNumber() { return preferences.getInt(ctx.getString(R.string.KEY_CURRENT_LOG_FILE_NR), 1); } public void setFbAccessToken(String token) { editor.putString(ctx.getString(R.string.KEY_FB_ACCESS_TOKEN), token); editor.commit(); } public String getFbAccessToken() { return preferences.getString(ctx.getString(R.string.KEY_FB_ACCESS_TOKEN), ""); } public void setFbExpiryDate(long expiryDate) { editor.putLong(ctx.getString(R.string.KEY_FB_EXPIRY_DATE), expiryDate); editor.commit(); } public long getFbExpiryDate() { return preferences.getLong(ctx.getString(R.string.KEY_FB_EXPIRY_DATE), 0); } public void removeFbAccessToken() { editor.remove(ctx.getString(R.string.KEY_FB_ACCESS_TOKEN)); editor.commit(); } public void removeFbExpiryDate() { editor.remove(ctx.getString(R.string.KEY_FB_EXPIRY_DATE)); editor.commit(); } public boolean isAutoSendToFacebook() { return preferences.getBoolean(ctx.getString(R.string.KEY_FACEBOOK_AUTOSEND_ENABLED), false); } public FbSendInterval getFacbookAutoSendInterval() { String interval = preferences.getString(ctx.getString(R.string.KEY_FACEBOOK_AUTOSEND_INTERVAL), ctx .getString(R.string.DEFAULT_FACEBOOK_AUTOSEND_INTERVAL)); if (interval.equals("weekly")) { return FbSendInterval.WEEKLY; } return FbSendInterval.DAILY; } public void setFbLastSendTime(long collageSendedTime) { editor.putLong(ctx.getString(R.string.KEY_FB_LAST_SEND_TIME), collageSendedTime); editor.commit(); } public Long getFbLastSendTime() { return preferences.getLong(ctx.getString(R.string.KEY_FB_LAST_SEND_TIME), 0); } public void setEnableLogFile(boolean enableLogFile) { editor.putBoolean(ctx.getString(R.string.KEY_ENABLE_LOG_FILE), enableLogFile); editor.commit(); } @Override public boolean isLogFileEnabled() { return preferences.getBoolean(ctx.getString(R.string.KEY_ENABLE_LOG_FILE), Boolean.parseBoolean(ctx .getString(R.string.DEFAULT_ENABLE_LOG_FILE))); } public boolean isGotoCurrentAlbumEnabled() { return preferences.getBoolean(ctx.getString(R.string.KEY_GOTO_CUR_ALBUM), Boolean.parseBoolean(ctx .getString(R.string.DEFAULT_GOTO_CUR_ALBUM))); } @Override public void setNumberOfCompletedImports(int numberOfCompletedImports) { editor.putInt(ctx.getString(R.string.KEY_NUMBER_OF_COMPLETED_IMPORTS), numberOfCompletedImports); editor.commit(); } @Override public int getNumberOfCompletedImports() { return preferences.getInt(ctx.getString(R.string.KEY_NUMBER_OF_COMPLETED_IMPORTS), 0); } private HashSet<String> parseSemicolonSeparatedStringValues(String csv) throws Exception { HashSet<String> ret = new HashSet<String>(); if (csv == null) { return ret; } char[] characters = csv.toCharArray(); StringBuilder token = new StringBuilder(); for (int i = 0; i < characters.length; i++) { if (characters[i] == '\\') { i++; if (characters[i] == '\\') { token.append('\\'); } else if (characters[i] == ';') { token.append(';'); } else { throw new Exception("Error parsing string: " + csv); } } else if (characters[i] == ';') { ret.add(token.toString()); token = new StringBuilder(); } else { token.append(characters[i]); } } // add remainder if there is no trailing semicolon if (token.length() != 0) { ret.add(token.toString()); } return ret; } @Override public int getAutoGaplessGapRemoveTime() { return preferences.getInt(ctx.getString(R.string.KEY_GAPLESS_AUTO_REMOVE_TIME), Integer.parseInt(ctx .getString(R.string.DEFAULT_GAPLESS_AUTO_REMOVE_TIME))); } @Override public void setAutoGaplessGapRemoveTime(int currentGapTime) { editor.putInt(ctx.getString(R.string.KEY_GAPLESS_AUTO_REMOVE_TIME), currentGapTime); editor.commit(); } @Override public void setAlbumListPosition(int listPosition) { editor.putInt(ctx.getString(R.string.KEY_ALBUM_LIST_POSITION), listPosition); editor.commit(); } @Override public int getAlbumListPosition() { return preferences.getInt(ctx.getString(R.string.KEY_ALBUM_LIST_POSITION), Integer.parseInt(ctx .getString(R.string.DEFAULT_ALBUM_LIST_POSITION))); } @Override public void setArtistListPosition(int listPosition) { editor.putInt(ctx.getString(R.string.KEY_ARTIST_LIST_POSITION), listPosition); editor.commit(); } @Override public int getArtistListPosition() { return preferences.getInt(ctx.getString(R.string.KEY_ARTIST_LIST_POSITION), Integer.parseInt(ctx .getString(R.string.DEFAULT_ARTIST_LIST_POSITION))); } public boolean isUseWallpaperBackground() { return preferences.getBoolean(ctx.getString(R.string.KEY_USE_WALLPAPER_BACKGROUND), Boolean.parseBoolean(ctx .getString(R.string.DEFAULT_USE_WALLPAPER_BACKGROUND))); } public boolean isUseGalleryBackground() { return preferences.getBoolean(ctx.getString(R.string.KEY_PICK_BACKGROUND_FROM_GALLERY), Boolean .parseBoolean(ctx.getString(R.string.DEFAULT_PICK_BACKGROUND_FROM_GALLERY))); } public String getGalleryBackgroundPath() { return preferences.getString(ctx.getString(R.string.KEY_GALLERY_BACKGROUND_PATH), ""); } public boolean isShakeSkip() { return preferences.getBoolean(ctx.getString(R.string.KEY_SHAKE_SKIP), Boolean.parseBoolean(ctx .getString(R.string.DEFAULT_SHAKE_SKIP))); } @Override public void setCoverHintCountPlayer(int number) { editor.putInt(ctx.getString(R.string.KEY_COVER_HINT_COUNTER_PLAYER), number); editor.commit(); } @Override public int getCoverHintCountPlayer() { return preferences.getInt(ctx.getString(R.string.KEY_COVER_HINT_COUNTER_PLAYER), 0); } @Override public void setCoverHintCountAlbum(int number) { editor.putInt(ctx.getString(R.string.KEY_COVER_HINT_COUNTER_ALBUM), number); editor.commit(); } @Override public int getCoverHintCountAlbum() { return preferences.getInt(ctx.getString(R.string.KEY_COVER_HINT_COUNTER_ALBUM), 0); } @Override public float getShakeSkipThreshhold() { return preferences.getInt(ctx.getString(R.string.KEY_SHAKE_SKIP_THRESHHOLD), Integer.parseInt(ctx .getString(R.string.DEFAULT_SHAKE_SKIP_THRESHHOLD))); } @Override public boolean isTwitterEnabled() { return preferences.getBoolean(ctx.getString(R.string.KEY_TWITTER_NOWPLAYING_ENABLED), Boolean.parseBoolean(ctx .getString(R.string.DEFAULT_TWITTER_NOWPLAYING_ENABLED))); } @Override public boolean isScrobbledroidEnabled() { String type = preferences.getString(ctx.getString(R.string.KEY_SCROBBLE_TYPE), ctx .getString(R.string.DEFAULT_SCROBBLE_TYPE)); Log.v(TAG, "type: " + type); if (Integer.parseInt(type) == 2) { return true; } return false; } @Override public boolean isInternalScrobblingEnabled() { String type = preferences.getString(ctx.getString(R.string.KEY_SCROBBLE_TYPE), ctx .getString(R.string.DEFAULT_SCROBBLE_TYPE)); Log.v(TAG, "type: " + type); if (Integer.parseInt(type) == 3) { return true; } return false; } // @Override // public void setScrobblingType(ScrobblingType type) { // editor.putInt(ctx.getString(R.string.KEY_SCROBBLE_TYPE), // type.getValue()); // editor.commit(); // } @Override public void updateScrobblingEnabledPref() { editor.putString(ctx.getString(R.string.KEY_SCROBBLE_TYPE), "" + ScrobblingType.INTERNAL.getValue()); editor.putBoolean(ctx.getString(R.string.KEY_SCROBBLE_ENABLED), false); editor.commit(); } @Override public boolean isIgnoreLeadingThe() { return preferences.getBoolean(ctx.getString(R.string.KEY_IGNORE_LEADING_THE), Boolean.parseBoolean(ctx .getString(R.string.DEFAULT_IGNORE_LEADING_THE))); } @Override public boolean isAutomaticImports() { return preferences.getBoolean(ctx.getString(R.string.KEY_AUTOMATIC_IMPORTS), Boolean.parseBoolean(ctx .getString(R.string.DEFAULT_AUTOMATIC_IMPORTS))); } @Override public boolean isDirectlyShowAlbumSongList() { return preferences.getBoolean(ctx.getString(R.string.KEY_DIRECTLY_SHOW_ALBUM_LIST), Boolean.parseBoolean(ctx .getString(R.string.DEFAULT_DIRECTLY_SHOW_ALBUM_LIST))); } @Override public boolean isCrossfadingEnabled() { return preferences.getBoolean(ctx.getString(R.string.KEY_CROSSFADING), Boolean.parseBoolean(ctx .getString(R.string.DEFAULT_CROSSFADING))); } @Override public boolean isBeatMatchingEnabled() { return preferences.getBoolean(ctx.getString(R.string.KEY_BEAT_MATCHING), Boolean.parseBoolean(ctx .getString(R.string.DEFAULT_BEAT_MATCHING))); } public String getLogString() { StringBuilder sb = new StringBuilder(); sb.append("isFullScreen: " + isFullScreen() + "\n"); sb.append("isGapless: " + isGapless() + "\n"); sb.append("getGaplessGapRemoveTime: " + getGaplessGapRemoveTime() + "\n"); sb.append("isFirstStart: " + isFirstStart() + "\n"); sb.append("getScrobbleInterval: " + getScrobbleInterval() + "\n"); sb.append("isScrobblingPaused: " + isScrobblingPaused() + "\n"); sb.append("isScrobblingEnabled: " + isScrobblingEnabled() + "\n"); sb.append("areNotificationsShown: " + areNotificationsShown() + "\n"); sb.append("isCurrentAlbumHighlighted: " + isCurrentAlbumHighlighted() + "\n"); sb.append("isAutomaticallyShowCover: " + isAutomaticallyShowCover() + "\n"); sb.append("isAutomaticallyResumeOnHeadsetPlugged: " + isAutomaticallyResumeOnHeadsetPlugged() + "\n"); sb.append("isCommittingServerData: " + isCommittingServerData() + "\n"); sb.append("getRandomUserHash: " + getRandomUserHash() + "\n"); sb.append("getSimilarArtistAvoidanceNumber: " + getSimilarArtistAvoidanceNumber() + "\n"); sb.append("isHapticFeedback: " + isHapticFeedback() + "\n"); sb.append("isUseIconLists: " + isUseIconLists() + "\n"); sb.append("isUseAlbumArtFiles: " + isUseAlbumArtFiles() + "\n"); sb.append("isKineticMovement: " + isKineticMovement() + "\n"); sb.append("isSearchWhileTyping: " + isSearchWhileTyping() + "\n"); // sb.append("isFamousArtistsInserted: " + isFamousArtistsInserted() + // "\n"); sb.append("getLastPositionInPcaMapX: " + getLastPositionInPcaMapX() + "\n"); sb.append("getLastPositionInPcaMapY: " + getLastPositionInPcaMapY() + "\n"); sb.append("getSharedPreferencesVersion: " + getSharedPreferencesVersion() + "\n"); sb.append("isShowZoomBar: " + isShowZoomBar() + "\n"); sb.append("getLastSentPlayLogId: " + getLastSentPlayLogId() + "\n"); // sb.append("isHelpImproveJukefox: " + isHelpImproveJukefox() + "\n"); sb.append("isLockScreenControls: " + isLockScreenControls() + "\n"); sb.append("getPreferredScreenOrientation: " + getPreferredScreenOrientation() + "\n"); sb.append("getLastApplicationVersion: " + getLastApplicationVersion() + "\n"); sb.append("getCurrentLogFileNumber: " + getCurrentLogFileNumber() + "\n"); sb.append("isGotoCurrentAlbumEnabled: " + isGotoCurrentAlbumEnabled() + "\n"); // sb.append("getNumberOfStartedImports: " + getNumberOfStartedImports() // + "\n"); sb.append("getNumberOfCompletedImports: " + getNumberOfCompletedImports() + "\n"); sb.append("getAutoGaplessGapRemoveTime: " + getAutoGaplessGapRemoveTime() + "\n"); sb.append("getAlbumListPosition: " + getAlbumListPosition() + "\n"); sb.append("getArtistListPosition: " + getArtistListPosition() + "\n"); sb.append("isUseWallpaperBackground: " + isUseWallpaperBackground() + "\n"); sb.append("isUseGalleryBackground: " + isUseGalleryBackground() + "\n"); sb.append("isShakeSkip: " + isShakeSkip() + "\n"); sb.append("getCoverHintCountPlayer: " + getCoverHintCountPlayer() + "\n"); sb.append("getCoverHintCountAlbum: " + getCoverHintCountAlbum() + "\n"); sb.append("getShakeSkipThreshhold: " + getShakeSkipThreshhold() + "\n"); sb.append("isTwitterEnabled: " + isTwitterEnabled() + "\n"); sb.append("isScrobbledroidEnabled: " + isScrobbledroidEnabled() + "\n"); sb.append("isInternalScrobblingEnabled: " + isInternalScrobblingEnabled() + "\n"); sb.append("isIgnoreLeadingThe: " + isIgnoreLeadingThe() + "\n"); sb.append("isAutomaticImports: " + isAutomaticImports() + "\n"); sb.append("isDirectlyShowAlbumSongList: " + isDirectlyShowAlbumSongList() + "\n"); return sb.toString(); } }