@SuppressWarnings("deprecation")
  @Override
  protected void onCreate(Bundle savedInstanceState) {

    // Context.
    mContext = this;
    mSettingsActivity = this;
    mApp = (Common) mContext.getApplicationContext();

    // Initialize SharedPreferences.
    sharedPreferences = this.getSharedPreferences("com.jams.music.player", Context.MODE_PRIVATE);

    // Set the UI theme.
    if (mApp.getCurrentTheme() == Common.DARK_THEME) {
      this.setTheme(R.style.AppThemeNoActionBar);
    } else {
      this.setTheme(R.style.AppThemeNoActionBarLight);
    }

    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.preferences);
    applyLollipopActionBar();
    preferenceManager = this.getPreferenceManager();

    // Retrieve the preferences based on their unique keys.
    upgradePreference = preferenceManager.findPreference("preference_key_upgrade");

    appThemePreference = preferenceManager.findPreference("preference_key_app_theme");
    playerColorSchemePreference =
        preferenceManager.findPreference("preference_key_player_color_scheme");
    trackChangeAnimationPreference =
        preferenceManager.findPreference("preference_key_track_change_animation");
    defaultScreenPreference = preferenceManager.findPreference("preference_key_startup_screen");
    artistsLayoutPreference = preferenceManager.findPreference("preference_key_artists_layout");
    albumArtistsLayoutPreference =
        preferenceManager.findPreference("preference_key_album_artists_layout");
    albumsLayoutPreference = preferenceManager.findPreference("preference_key_albums_layout");
    lockscreenControlsPreference =
        preferenceManager.findPreference("preference_key_lockscreen_controls");

    albumArtStylePreference = preferenceManager.findPreference("preference_key_album_art_style");
    albumArtSourcesPreference =
        preferenceManager.findPreference("preference_key_album_art_sources");
    albumArtScanDownloadPreference =
        preferenceManager.findPreference("preference_key_scan_download_album_art");

    defaultFolderPreference = preferenceManager.findPreference("preference_key_default_folder");

    addMusicLibraryPreference =
        preferenceManager.findPreference("preference_key_add_music_library");
    editMusicLibraryPreference =
        preferenceManager.findPreference("preference_key_edit_music_library");
    deleteMusicLibraryPreference =
        preferenceManager.findPreference("preference_key_delete_music_library");

    selectFoldersPreference = preferenceManager.findPreference("preference_key_select_folders");
    rescanFoldersPreference = preferenceManager.findPreference("preference_key_rescan_folders");
    scanFrequencyPreference = preferenceManager.findPreference("preference_key_scan_frequency");

    blacklistManagerPreference =
        preferenceManager.findPreference("preference_key_blacklist_manager");
    unblacklistAllPreference = preferenceManager.findPreference("preference_key_unblacklist_all");

    scrobblingPreference = preferenceManager.findPreference("preference_key_scrobbling");

    headphonesUnplugActionPreference =
        preferenceManager.findPreference("preference_key_headphones_unplug_action");
    crossfadeTracksPreference = preferenceManager.findPreference("preference_key_crossfade_tracks");
    crossfadeTracksDurationPreference =
        preferenceManager.findPreference("preference_key_crossfade_tracks_duration");
    equalizerPreference = preferenceManager.findPreference("preference_key_equalizer_toggle");

    licensesPreference = preferenceManager.findPreference("preference_key_licenses");
    contactUsPreference = preferenceManager.findPreference("preference_key_contact_us");

    // Set the preference icons.
    upgradePreference.setIcon(UIElementsHelper.getIcon(mContext, "checkmark"));

    appThemePreference.setIcon(UIElementsHelper.getIcon(mContext, "color_palette"));
    playerColorSchemePreference.setIcon(UIElementsHelper.getIcon(mContext, "color_palette_play"));
    trackChangeAnimationPreference.setIcon(UIElementsHelper.getIcon(mContext, "customize_screens"));
    defaultScreenPreference.setIcon(UIElementsHelper.getIcon(mContext, "default_screen"));
    artistsLayoutPreference.setIcon(UIElementsHelper.getIcon(mContext, "mic"));
    albumArtistsLayoutPreference.setIcon(UIElementsHelper.getIcon(mContext, "album_artists"));
    albumsLayoutPreference.setIcon(UIElementsHelper.getIcon(mContext, "albums"));
    lockscreenControlsPreference.setIcon(UIElementsHelper.getIcon(mContext, "lockscreen_controls"));

    addMusicLibraryPreference.setIcon(UIElementsHelper.getIcon(mContext, "add_new_library"));
    editMusicLibraryPreference.setIcon(UIElementsHelper.getIcon(mContext, "edit_library"));
    deleteMusicLibraryPreference.setIcon(UIElementsHelper.getIcon(mContext, "delete_library"));

    albumArtStylePreference.setIcon(UIElementsHelper.getIcon(mContext, "cover_art_icon"));
    albumArtSourcesPreference.setIcon(UIElementsHelper.getIcon(mContext, "album_art_source"));
    albumArtScanDownloadPreference.setIcon(UIElementsHelper.getIcon(mContext, "auto_cover_fetch"));

    defaultFolderPreference.setIcon(UIElementsHelper.getIcon(mContext, "folders_settings"));

    selectFoldersPreference.setIcon(UIElementsHelper.getIcon(mContext, "folders_settings"));
    rescanFoldersPreference.setIcon(UIElementsHelper.getIcon(mContext, "rescan"));
    scanFrequencyPreference.setIcon(UIElementsHelper.getIcon(mContext, "scan_frequency"));

    blacklistManagerPreference.setIcon(UIElementsHelper.getIcon(mContext, "manage_blacklists"));
    unblacklistAllPreference.setIcon(UIElementsHelper.getIcon(mContext, "unblacklist_all"));

    scrobblingPreference.setIcon(UIElementsHelper.getIcon(mContext, "scrobbling"));

    headphonesUnplugActionPreference.setIcon(UIElementsHelper.getIcon(mContext, "headphones"));
    crossfadeTracksPreference.setIcon(UIElementsHelper.getIcon(mContext, "crossfade_tracks"));
    crossfadeTracksDurationPreference.setIcon(
        UIElementsHelper.getIcon(mContext, "crossfade_tracks_duration"));
    equalizerPreference.setIcon(UIElementsHelper.getIcon(mContext, "equalizer_settings"));

    licensesPreference.setIcon(UIElementsHelper.getIcon(mContext, "licenses"));
    contactUsPreference.setIcon(UIElementsHelper.getIcon(mContext, "contact_us"));

    if (sharedPreferences.getBoolean("TRIAL", true) == false) {
      PreferenceScreen screen = getPreferenceScreen();
      PreferenceCategory upgradePrefCategory =
          (PreferenceCategory) preferenceManager.findPreference("upgrade_pref_category");
      screen.removePreference(upgradePrefCategory);
    }

    upgradePreference.setOnPreferenceClickListener(
        new OnPreferenceClickListener() {

          @Override
          public boolean onPreferenceClick(Preference preference) {
            // initInAppBilling();
            Intent intent =
                new Intent(mContext, com.alium.ALMPlayer.LauncherActivity.LauncherActivity.class);
            intent.putExtra("UPGRADE", true);
            startActivity(intent);
            finish();
            return false;
          }
        });

    // Set click listeners on each preference.
    appThemePreference.setOnPreferenceClickListener(
        new OnPreferenceClickListener() {

          @Override
          public boolean onPreferenceClick(Preference arg0) {

            Intent intent = new Intent(mContext, PreferenceDialogLauncherActivity.class);
            intent.putExtra("INDEX", 0);
            startActivity(intent);

            return false;
          }
        });

    playerColorSchemePreference.setOnPreferenceClickListener(
        new OnPreferenceClickListener() {

          @Override
          public boolean onPreferenceClick(Preference arg0) {

            Intent intent = new Intent(mContext, PreferenceDialogLauncherActivity.class);
            intent.putExtra("INDEX", 1);
            startActivity(intent);

            return false;
          }
        });

    trackChangeAnimationPreference.setOnPreferenceClickListener(
        new OnPreferenceClickListener() {

          @Override
          public boolean onPreferenceClick(Preference preference) {

            int selectedIndex = sharedPreferences.getInt("TRACK_CHANGE_ANIMATION", 0);

            AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
            builder.setTitle(R.string.track_change_animation);
            View layoutView =
                mSettingsActivity
                    .getLayoutInflater()
                    .inflate(R.layout.generic_message_listview_dialog_layout, null);

            TextView message = (TextView) layoutView.findViewById(R.id.generic_message);
            ListView listView = (ListView) layoutView.findViewById(R.id.generic_listview);

            message.setTypeface(TypefaceHelper.getTypeface(mContext, "RobotoCondensed-Light"));
            message.setPaintFlags(
                message.getPaintFlags() | Paint.ANTI_ALIAS_FLAG | Paint.SUBPIXEL_TEXT_FLAG);
            message.setText(R.string.track_change_animation_info);

            String[] values = {
              mSettingsActivity.getResources().getString(R.string.slide_away),
              mSettingsActivity.getResources().getString(R.string.zoom_out_and_slide_away),
              mSettingsActivity.getResources().getString(R.string.depth_transformer)
            };

            ArrayAdapter<String> adapter =
                new ArrayAdapter<String>(
                    mSettingsActivity,
                    android.R.layout.simple_list_item_single_choice,
                    android.R.id.text1,
                    values);
            listView.setAdapter(adapter);
            listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
            listView.setItemChecked(selectedIndex, true);
            listView.setOnItemClickListener(
                new OnItemClickListener() {

                  @Override
                  public void onItemClick(AdapterView<?> arg0, View arg1, int which, long arg3) {
                    Toast.makeText(mContext, R.string.changes_saved, Toast.LENGTH_SHORT).show();
                    sharedPreferences.edit().putInt("TRACK_CHANGE_ANIMATION", which).commit();
                    mTrackChangeAnimationDialog.dismiss();
                  }
                });

            builder.setView(layoutView);
            mTrackChangeAnimationDialog = builder.create();
            mTrackChangeAnimationDialog.show();

            return false;
          }
        });

    defaultScreenPreference.setOnPreferenceClickListener(
        new OnPreferenceClickListener() {

          @Override
          public boolean onPreferenceClick(Preference preference) {

            // Get the current preference.
            int currentPreference = sharedPreferences.getInt("STARTUP_SCREEN", 0);

            AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
            // builder.setTitle(R.string.startup_screen);
            builder.setSingleChoiceItems(
                R.array.startup_screen_items,
                currentPreference,
                new OnClickListener() {

                  @Override
                  public void onClick(DialogInterface dialog, int which) {
                    sharedPreferences.edit().putInt("STARTUP_SCREEN", which).commit();
                    dialog.dismiss();
                    Toast.makeText(mContext, R.string.changes_saved, Toast.LENGTH_SHORT).show();
                  }
                });

            builder.create().show();
            return false;
          }
        });

    artistsLayoutPreference.setOnPreferenceClickListener(
        new OnPreferenceClickListener() {

          @Override
          public boolean onPreferenceClick(Preference preference) {

            // Get the current preference.
            int currentPreference = sharedPreferences.getInt("ARTISTS_LAYOUT_PREF", 0);

            AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
            builder.setTitle(R.string.artists_layout);
            builder.setSingleChoiceItems(
                R.array.layout_preference_items,
                currentPreference,
                new OnClickListener() {

                  @Override
                  public void onClick(DialogInterface dialog, int which) {
                    sharedPreferences.edit().putInt("ARTISTS_LAYOUT_PREF", which).commit();
                    dialog.dismiss();
                    Toast.makeText(mContext, R.string.changes_saved, Toast.LENGTH_SHORT).show();
                  }
                });

            builder.create().show();
            return false;
          }
        });

    albumArtistsLayoutPreference.setOnPreferenceClickListener(
        new OnPreferenceClickListener() {

          @Override
          public boolean onPreferenceClick(Preference preference) {

            // Get the current preference.
            int currentPreference = sharedPreferences.getInt("ALBUM_ARTISTS_LAYOUT_PREF", 0);

            AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
            builder.setTitle(R.string.album_artists_layout);
            builder.setSingleChoiceItems(
                R.array.layout_preference_items,
                currentPreference,
                new OnClickListener() {

                  @Override
                  public void onClick(DialogInterface dialog, int which) {
                    sharedPreferences.edit().putInt("ALBUM_ARTISTS_LAYOUT_PREF", which).commit();
                    dialog.dismiss();
                    Toast.makeText(mContext, R.string.changes_saved, Toast.LENGTH_SHORT).show();
                  }
                });

            builder.create().show();
            return false;
          }
        });

    albumsLayoutPreference.setOnPreferenceClickListener(
        new OnPreferenceClickListener() {

          @Override
          public boolean onPreferenceClick(Preference preference) {

            // Get the current preference.
            int currentPreference = sharedPreferences.getInt("ALBUMS_LAYOUT_PREF", 0);

            AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
            builder.setTitle(R.string.albums_layout);
            builder.setSingleChoiceItems(
                R.array.layout_preference_items,
                currentPreference,
                new OnClickListener() {

                  @Override
                  public void onClick(DialogInterface dialog, int which) {
                    sharedPreferences.edit().putInt("ALBUMS_LAYOUT_PREF", which).commit();
                    dialog.dismiss();
                    Toast.makeText(mContext, R.string.changes_saved, Toast.LENGTH_SHORT).show();
                  }
                });

            builder.create().show();
            return false;
          }
        });

    lockscreenControlsPreference.setOnPreferenceClickListener(
        new OnPreferenceClickListener() {

          @Override
          public boolean onPreferenceClick(Preference preference) {

            // Get the current preference.
            int currentPreference = sharedPreferences.getInt(Common.SHOW_LOCKSCREEN_CONTROLS, 0);

            AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
            // builder.setTitle(R.string.lockscreen_controls);
            builder.setSingleChoiceItems(
                R.array.enable_disable,
                currentPreference,
                new OnClickListener() {

                  @Override
                  public void onClick(DialogInterface dialog, int which) {
                    sharedPreferences
                        .edit()
                        .putInt(Common.SHOW_LOCKSCREEN_CONTROLS, which)
                        .commit();
                    dialog.dismiss();

                    // Enable/disable the lockscreen controls for this session.
                    try {
                      if (which == 0) {
                        Toast.makeText(mContext, R.string.changes_saved, Toast.LENGTH_SHORT).show();
                        if (sharedPreferences.getBoolean("SERVICE_RUNNING", false) == true) {
                          mApp.getService().initRemoteControlClient();
                          mApp.getService()
                              .updateRemoteControlClients(mApp.getService().getCurrentSong());
                        }

                      } else if (which == 1) {
                        if (sharedPreferences.getBoolean("SERVICE_RUNNING", false) == true) {
                          Toast.makeText(
                                  mContext,
                                  R.string.lockscreen_controls_disabled_next_run,
                                  Toast.LENGTH_LONG)
                              .show();
                        } else {
                          Toast.makeText(mContext, R.string.changes_saved, Toast.LENGTH_SHORT)
                              .show();
                        }
                      }

                    } catch (Exception e) {
                      e.printStackTrace();
                    }
                  }
                });

            builder.create().show();
            return false;
          }
        });

    defaultFolderPreference.setOnPreferenceClickListener(
        new OnPreferenceClickListener() {

          @Override
          public boolean onPreferenceClick(Preference preference) {
            AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
            builder.setTitle(R.string.default_folder_for_folders_view);
            builder.setMessage(R.string.default_folder_for_folders_view_info);

            builder.setPositiveButton(
                R.string.ok,
                new OnClickListener() {

                  @Override
                  public void onClick(DialogInterface dialog, int which) {
                    dialog.dismiss();
                  }
                });

            builder.create().show();
            return false;
          }
        });

    addMusicLibraryPreference.setOnPreferenceClickListener(
        new OnPreferenceClickListener() {

          @Override
          public boolean onPreferenceClick(Preference arg0) {

            Intent intent = new Intent(mContext, PreferenceDialogLauncherActivity.class);
            intent.putExtra("INDEX", 13);
            startActivity(intent);

            return false;
          }
        });

    editMusicLibraryPreference.setOnPreferenceClickListener(
        new OnPreferenceClickListener() {

          @Override
          public boolean onPreferenceClick(Preference preference) {
            Intent intent = new Intent(mContext, PreferenceDialogLauncherActivity.class);
            intent.putExtra("INDEX", 14);
            intent.putExtra("OPERATION", "EDIT");
            startActivity(intent);

            return false;
          }
        });

    deleteMusicLibraryPreference.setOnPreferenceClickListener(
        new OnPreferenceClickListener() {

          @Override
          public boolean onPreferenceClick(Preference arg0) {
            Intent intent = new Intent(mContext, PreferenceDialogLauncherActivity.class);
            intent.putExtra("INDEX", 14);
            intent.putExtra("OPERATION", "DELETE");
            startActivity(intent);

            return false;
          }
        });

    albumArtStylePreference.setOnPreferenceClickListener(
        new OnPreferenceClickListener() {

          @Override
          public boolean onPreferenceClick(Preference arg0) {

            Intent intent = new Intent(mContext, PreferenceDialogLauncherActivity.class);
            intent.putExtra("INDEX", 3);
            startActivity(intent);

            return false;
          }
        });

    albumArtSourcesPreference.setOnPreferenceClickListener(
        new OnPreferenceClickListener() {

          @Override
          public boolean onPreferenceClick(Preference arg0) {

            Intent intent = new Intent(mContext, PreferenceDialogLauncherActivity.class);
            intent.putExtra("INDEX", 4);
            startActivity(intent);

            return false;
          }
        });

    albumArtScanDownloadPreference.setOnPreferenceClickListener(
        new OnPreferenceClickListener() {

          @Override
          public boolean onPreferenceClick(Preference arg0) {

            // Start the service that will download album art.
            mContext.startService(new Intent(mContext, AutoFetchAlbumArtService.class));

            return false;
          }
        });

    selectFoldersPreference.setOnPreferenceClickListener(
        new OnPreferenceClickListener() {

          @Override
          public boolean onPreferenceClick(Preference arg0) {

            Intent intent = new Intent(mContext, PreferenceDialogLauncherActivity.class);
            intent.putExtra("INDEX", 5);
            startActivity(intent);

            return false;
          }
        });

    rescanFoldersPreference.setOnPreferenceClickListener(
        new OnPreferenceClickListener() {

          @Override
          public boolean onPreferenceClick(Preference arg0) {

            // Seting the "REBUILD_LIBRARY" flag to true will force MainActivity to rescan the
            // folders.
            sharedPreferences.edit().putBoolean("REBUILD_LIBRARY", true).commit();

            // Restart the app.
            final Intent i =
                getBaseContext()
                    .getPackageManager()
                    .getLaunchIntentForPackage(getBaseContext().getPackageName());

            i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            finish();
            startActivity(i);

            return false;
          }
        });

    scanFrequencyPreference.setOnPreferenceClickListener(
        new OnPreferenceClickListener() {

          @Override
          public boolean onPreferenceClick(Preference arg0) {

            Intent intent = new Intent(mContext, PreferenceDialogLauncherActivity.class);
            intent.putExtra("INDEX", 7);
            startActivity(intent);

            return false;
          }
        });

    blacklistManagerPreference.setOnPreferenceClickListener(
        new OnPreferenceClickListener() {

          @Override
          public boolean onPreferenceClick(Preference arg0) {

            Intent intentPDL = new Intent(mContext, PreferenceDialogLauncherActivity.class);
            intentPDL.putExtra("INDEX", 8);
            startActivity(intentPDL);

            String[] blacklistManagerChoices = {
              mContext.getResources().getString(R.string.manage_blacklisted_artists),
              mContext.getResources().getString(R.string.manage_blacklisted_albums),
              mContext.getResources().getString(R.string.manage_blacklisted_songs),
              mContext.getResources().getString(R.string.manage_blacklisted_playlists)
            };

            AlertDialog.Builder builder = new AlertDialog.Builder(mContext);

            // Set the dialog title.
            builder.setTitle(R.string.blacklist_manager);
            builder.setItems(
                blacklistManagerChoices,
                new OnClickListener() {

                  @Override
                  public void onClick(DialogInterface dialog, int which) {
                    Bundle bundle = new Bundle();

                    if (which == 0) {
                      bundle.putString("MANAGER_TYPE", "ARTISTS");
                    } else if (which == 1) {
                      bundle.putString("MANAGER_TYPE", "ALBUMS");
                    } else if (which == 2) {
                      bundle.putString("MANAGER_TYPE", "SONGS");
                    } else if (which == 3) {
                      bundle.putString("MANAGER_TYPE", "PLAYLISTS");
                    }

                    dialog.dismiss();
                    Intent intent = new Intent(mContext, BlacklistManagerActivity.class);
                    intent.putExtras(bundle);
                    startActivity(intent);
                  }
                });

            builder.create().show();

            Intent intent = new Intent(mContext, BlacklistManagerActivity.class);
            startActivity(intent);

            return false;
          }
        });

    unblacklistAllPreference.setOnPreferenceClickListener(
        new OnPreferenceClickListener() {

          @Override
          public boolean onPreferenceClick(Preference arg0) {
            AsyncUnblacklistAllSongsTask task = new AsyncUnblacklistAllSongsTask();
            task.execute();

            return false;
          }
        });

    /*    	bluetoothControlsPreference.setOnPreferenceClickListener(new OnPreferenceClickListener() {

    @Override
    public boolean onPreferenceClick(Preference arg0) {
    	// TODO Auto-generated method stub
    	return false;
    }

     	});

     	headphonesUnplugActionPreference.setOnPreferenceClickListener(new OnPreferenceClickListener() {

    @Override
    public boolean onPreferenceClick(Preference arg0) {
    	// TODO Auto-generated method stub
    	return false;
    }

     	});*/

    scrobblingPreference.setOnPreferenceClickListener(
        new OnPreferenceClickListener() {

          @Override
          public boolean onPreferenceClick(Preference preference) {

            int currentSelection = 0;
            if (sharedPreferences.getInt("SCROBBLING", 0) == 0) {
              currentSelection = 0;
            } else if (sharedPreferences.getInt("SCROBBLING", 0) == 1) {
              currentSelection = 1;
            } else if (sharedPreferences.getInt("SCROBBLING", 0) == 2) {
              currentSelection = 2;
            }

            AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
            builder.setTitle(R.string.scrobbling);
            builder.setSingleChoiceItems(
                R.array.scrobbling_options,
                currentSelection,
                new OnClickListener() {

                  @Override
                  public void onClick(DialogInterface dialog, int which) {
                    dialog.dismiss();
                    Toast.makeText(mContext, R.string.changes_saved, Toast.LENGTH_SHORT).show();
                    sharedPreferences.edit().putInt("SCROBBLING", which).commit();
                  }
                });

            builder.create().show();
            return false;
          }
        });

    headphonesUnplugActionPreference.setOnPreferenceClickListener(
        new OnPreferenceClickListener() {

          @Override
          public boolean onPreferenceClick(Preference arg0) {

            // Get the current selection.
            int currentSelection;
            if (sharedPreferences.getString("UNPLUG_ACTION", "DO_NOTHING").equals("DO_NOTHING")) {
              currentSelection = 0;
            } else {
              currentSelection = 1;
            }

            String[] unplugActionsArray =
                mContext.getResources().getStringArray(R.array.headphones_unplug_actions);

            AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
            builder.setTitle(R.string.headphones_unplug_action);
            builder.setSingleChoiceItems(
                unplugActionsArray,
                currentSelection,
                new OnClickListener() {

                  @Override
                  public void onClick(DialogInterface dialog, int which) {

                    dialog.dismiss();
                    Toast.makeText(mContext, R.string.changes_saved, Toast.LENGTH_SHORT).show();
                    if (which == 0) {
                      sharedPreferences.edit().putString("UNPLUG_ACTION", "DO_NOTHING").commit();
                      if (sharedPreferences.getBoolean("SERVICE_RUNNING", false) == true) {
                        mApp.getService()
                            .unregisterReceiver(mApp.getService().getHeadsetPlugReceiver());
                      }
                    } else {
                      sharedPreferences
                          .edit()
                          .putString("UNPLUG_ACTION", "PAUSE_MUSIC_PLAYBACK")
                          .commit();
                      if (sharedPreferences.getBoolean("SERVICE_RUNNING", false) == true) {
                        mApp.getService().registerHeadsetPlugReceiver();
                      }
                    }
                  }
                });

            builder.create().show();

            return false;
          }
        });

    crossfadeTracksPreference.setOnPreferenceClickListener(
        new OnPreferenceClickListener() {

          @Override
          public boolean onPreferenceClick(Preference preference) {

            int currentSelection;
            if (sharedPreferences.getBoolean(Common.CROSSFADE_ENABLED, false) == true) {
              currentSelection = 0;
            } else {
              currentSelection = 1;
            }

            String[] enableDisableArray =
                mContext.getResources().getStringArray(R.array.enable_disable);

            AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
            builder.setTitle(R.string.crossfade_tracks);
            builder.setSingleChoiceItems(
                enableDisableArray,
                currentSelection,
                new OnClickListener() {

                  @Override
                  public void onClick(DialogInterface dialog, int which) {

                    dialog.dismiss();
                    Toast.makeText(mContext, R.string.changes_saved, Toast.LENGTH_SHORT).show();
                    if (which == 0) {
                      sharedPreferences.edit().putBoolean(Common.CROSSFADE_ENABLED, true).commit();

                      // Enable crossfade for the current queue.
                      if (mApp.isServiceRunning() && mApp.getService().getHandler() != null) {
                        mApp.getService()
                            .getHandler()
                            .post(mApp.getService().startCrossFadeRunnable);
                      }

                    } else {
                      sharedPreferences.edit().putBoolean(Common.CROSSFADE_ENABLED, false).commit();

                      // Disable crossfade for the current queue.
                      if (mApp.isServiceRunning() && mApp.getService().getHandler() != null) {
                        mApp.getService()
                            .getHandler()
                            .removeCallbacks(mApp.getService().startCrossFadeRunnable);
                        mApp.getService()
                            .getHandler()
                            .removeCallbacks(mApp.getService().crossFadeRunnable);
                      }
                    }
                  }
                });

            builder.create().show();
            return false;
          }
        });

    crossfadeTracksDurationPreference.setOnPreferenceClickListener(
        new OnPreferenceClickListener() {

          @Override
          public boolean onPreferenceClick(Preference preference) {
            AlertDialog.Builder builder = new AlertDialog.Builder(mSettingsActivity);
            builder.setTitle(R.string.crossfade_duration);

            RelativeLayout dialogView =
                (RelativeLayout)
                    mSettingsActivity
                        .getLayoutInflater()
                        .inflate(R.layout.dialog_crossfade_duration, null);
            final TextView durationText =
                (TextView) dialogView.findViewById(R.id.crossfade_duration_text);
            final SeekBar durationSeekBar =
                (SeekBar) dialogView.findViewById(R.id.crossfade_duration_seekbar);

            int currentSeekBarDuration = sharedPreferences.getInt(Common.CROSSFADE_DURATION, 5);
            durationSeekBar.setMax(14);
            durationSeekBar.setProgress(currentSeekBarDuration);
            durationText.setText(currentSeekBarDuration + " secs");

            durationSeekBar.setOnSeekBarChangeListener(
                new OnSeekBarChangeListener() {

                  @Override
                  public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                    sharedPreferences
                        .edit()
                        .putInt(Common.CROSSFADE_DURATION, (progress + 1))
                        .commit();
                    durationText.setText((progress + 1) + " secs");
                  }

                  @Override
                  public void onStartTrackingTouch(SeekBar seekBar) {
                    // TODO Auto-generated method stub

                  }

                  @Override
                  public void onStopTrackingTouch(SeekBar seekBar) {
                    // TODO Auto-generated method stub

                  }
                });

            builder.setView(dialogView);
            builder.setPositiveButton(
                R.string.ok,
                new OnClickListener() {

                  @Override
                  public void onClick(DialogInterface dialog, int arg1) {
                    dialog.dismiss();
                    Toast.makeText(mContext, R.string.changes_saved, Toast.LENGTH_SHORT).show();
                  }
                });

            builder.create().show();
            return false;
          }
        });

    equalizerPreference.setOnPreferenceClickListener(
        new OnPreferenceClickListener() {

          @Override
          public boolean onPreferenceClick(Preference preference) {

            boolean currentSetting = sharedPreferences.getBoolean("EQUALIZER_ENABLED", true);
            int intCurrentSetting = -1;
            if (currentSetting == true) intCurrentSetting = 0;
            else intCurrentSetting = 1;

            AlertDialog.Builder builder = new AlertDialog.Builder(mSettingsActivity);
            builder.setTitle(R.string.equalizer);
            builder.setSingleChoiceItems(
                R.array.enable_disable,
                intCurrentSetting,
                new OnClickListener() {

                  @Override
                  public void onClick(DialogInterface dialog, int which) {

                    boolean isEnabled;
                    if (which == 0) isEnabled = true;
                    else isEnabled = false;

                    sharedPreferences.edit().putBoolean("EQUALIZER_ENABLED", isEnabled).commit();
                    Toast.makeText(mContext, R.string.changes_saved, Toast.LENGTH_SHORT).show();

                    if (Build.PRODUCT.contains("HTC") && which == 0) {
                      showHTCEqualizerIssueDialog();
                    }

                    if (sharedPreferences.getBoolean("SERVICE_RUNNING", false) == true
                        && which == 0) {
                      mApp.getService().initAudioFX();
                    } else if (sharedPreferences.getBoolean("SERVICE_RUNNING", false) == true
                        && which == 1) {
                      try {
                        mApp.getService().getEqualizerHelper().releaseEQObjects();
                      } catch (Exception e) {
                        e.printStackTrace();
                      }
                    }

                    dialog.dismiss();
                  }

                  private void showHTCEqualizerIssueDialog() {
                    AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
                    builder.setTitle(R.string.htc_devices);
                    builder.setMessage(R.string.htc_devices_equalizer_issue);
                    builder.setPositiveButton(
                        R.string.ok,
                        new OnClickListener() {

                          @Override
                          public void onClick(DialogInterface dialog, int which) {
                            dialog.dismiss();
                          }
                        });

                    builder.create().show();
                  }
                });

            builder.create().show();
            return false;
          }
        });

    licensesPreference.setOnPreferenceClickListener(
        new OnPreferenceClickListener() {

          @Override
          public boolean onPreferenceClick(Preference arg0) {

            Intent intent = new Intent(mContext, PreferenceDialogLauncherActivity.class);
            intent.putExtra("INDEX", 12);
            startActivity(intent);

            return false;
          }
        });

    contactUsPreference.setOnPreferenceClickListener(
        new OnPreferenceClickListener() {

          @Override
          public boolean onPreferenceClick(Preference arg0) {

            Intent emailIntent =
                new Intent(
                    Intent.ACTION_SENDTO,
                    Uri.fromParts("mailto", "*****@*****.**", null));
            emailIntent.putExtra(Intent.EXTRA_SUBJECT, "ALMusic Player Support");
            startActivity(Intent.createChooser(emailIntent, "Send email"));

            return false;
          }
        });
  }
  @SuppressWarnings("unchecked")
  @Override
  public void onCreate(Bundle savedInstanceState) {

    // Initialize Context and SharedPreferences.
    mContext = this;
    mApp = (Common) mContext.getApplicationContext();

    // Retrieve the name/icon of the library from the arguments.
    libraryName = getIntent().getExtras().getString("LIBRARY_NAME");
    libraryIconName = getIntent().getExtras().getString("LIBRARY_ICON");

    if (getIntent().getExtras().getSerializable("SONG_IDS_HASH_SET") != null) {
      songDBIdsList =
          (HashSet<String>) getIntent().getExtras().getSerializable("SONG_IDS_HASH_SET");
    }

    // Set the UI theme.
    if (mApp.getCurrentTheme() == Common.DARK_THEME) {
      setTheme(R.style.AppTheme);
    } else {
      setTheme(R.style.AppThemeLight);
    }
    super.onCreate(savedInstanceState);

    // Initialize the database helper.
    dbHelper = new DBAccessHelper(mContext.getApplicationContext());

    // Create a set of options to optimize the bitmap memory usage.
    final BitmapFactory.Options options = new BitmapFactory.Options();
    options.inJustDecodeBounds = true;
    options.inJustDecodeBounds = false;
    options.inPurgeable = true;

    // Display Image Options.
    int defaultArt = UIElementsHelper.getIcon(mContext, "default_album_art_padded");
    displayImageOptions =
        new DisplayImageOptions.Builder()
            .showImageForEmptyUri(R.drawable.default_album_art)
            .showImageOnFail(R.drawable.default_album_art)
            .showStubImage(R.drawable.transparent_drawable)
            .cacheInMemory(false)
            .cacheOnDisc(true)
            .decodingOptions(options)
            .imageScaleType(ImageScaleType.EXACTLY)
            .bitmapConfig(Bitmap.Config.RGB_565)
            .displayer(new FadeInBitmapDisplayer(400))
            .delayBeforeLoading(100)
            .build();

    // Attach tabs to the ActionBar.
    ActionBar actionBar = getActionBar();
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

    // Add the artists tab.
    String artistsLabel = getResources().getString(R.string.artists);
    Tab tab = actionBar.newTab();
    tab.setText(artistsLabel);
    TabListener<ArtistsPickerFragment> artistsTabListener =
        new TabListener<ArtistsPickerFragment>(this, artistsLabel, ArtistsPickerFragment.class);

    tab.setTabListener(artistsTabListener);
    actionBar.addTab(tab);

    // Add the albums tab.
    String albumsLabel = getResources().getString(R.string.albums);
    tab = actionBar.newTab();
    tab.setText(albumsLabel);
    TabListener<AlbumsPickerFragment> albumsTabListener =
        new TabListener<AlbumsPickerFragment>(this, albumsLabel, AlbumsPickerFragment.class);

    tab.setTabListener(albumsTabListener);
    actionBar.addTab(tab);

    // Add the songs tab.
    String songsLabel = getResources().getString(R.string.songs);
    tab = actionBar.newTab();
    tab.setText(songsLabel);
    TabListener<SongsPickerFragment> songsTabListener =
        new TabListener<SongsPickerFragment>(this, songsLabel, SongsPickerFragment.class);

    tab.setTabListener(songsTabListener);
    actionBar.addTab(tab);

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
      getWindow().setBackgroundDrawable(UIElementsHelper.getGeneralActionBarBackground(mContext));
      int topPadding = Common.getStatusBarHeight(mContext);
      View activityView = (View) findViewById(android.R.id.content);

      // Calculate ActionBar height
      TypedValue tv = new TypedValue();
      int actionBarHeight = 0;
      if (getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true)) {
        actionBarHeight =
            TypedValue.complexToDimensionPixelSize(tv.data, getResources().getDisplayMetrics());
      }

      if (activityView != null) {
        activityView.setPadding(0, topPadding + actionBarHeight, 0, 0);
      }
    }
  }