package pasta.music.fragments;
import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.databinding.DataBindingUtil;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.annotation.ColorInt;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.app.AlertDialog;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.afollestad.materialdialogs.color.ColorChooserDialog;
import butterknife.Bind;
import butterknife.ButterKnife;
import butterknife.OnCheckedChanged;
import butterknife.OnClick;
import pasta.music.Pasta;
import pasta.music.R;
import pasta.music.activities.HomeActivity;
import pasta.music.utils.PreferenceUtils;
import pasta.music.views.CustomImageView;
public class SettingsFragment extends FabFragment {
@Bind(R.id.primary_color)
CustomImageView primary;
@Bind(R.id.accent_color)
CustomImageView accent;
private View rootView;
private int selectedLimit, selectedQuality, selectedOrder;
private SharedPreferences prefs;
private Pasta pasta;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
rootView = DataBindingUtil.inflate(inflater, R.layout.fragment_settings, container, false).getRoot();
ButterKnife.bind(this, rootView);
pasta = (Pasta) getContext().getApplicationContext();
prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
return rootView;
}
@Override
public void onDestroyView() {
super.onDestroyView();
ButterKnife.unbind(this);
}
@OnCheckedChanged(R.id.preload)
public void changePreload(boolean preload) {
if (prefs != null && preload != PreferenceUtils.isPreload(getContext())) {
prefs.edit().putBoolean(PreferenceUtils.PRELOAD, preload).apply();
}
}
@OnCheckedChanged(R.id.debug)
public void changeDebug(boolean debug) {
if (prefs != null && debug != PreferenceUtils.isDebug(getContext())) {
prefs.edit().putBoolean(PreferenceUtils.DEBUG, debug).apply();
}
}
@OnClick(R.id.limit)
public void changeLimit() {
new AlertDialog.Builder(getContext()).setTitle(R.string.limit).setSingleChoiceItems(R.array.limits, PreferenceUtils.getLimit(getContext()), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
selectedLimit = which;
}
}).setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
prefs.edit().putInt(PreferenceUtils.LIMIT, selectedLimit).apply();
pasta.showToast(getString(R.string.restart_msg));
dialog.dismiss();
}
}).setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
}).create().show();
}
@OnCheckedChanged(R.id.darkmode)
public void changeDarkMode(boolean dark) {
if (prefs != null && dark != PreferenceUtils.isDarkTheme(getContext())) {
prefs.edit().putBoolean(PreferenceUtils.DARK_THEME, dark).apply();
pasta.showToast(getString(R.string.restart_msg));
}
}
@OnCheckedChanged(R.id.thumbnails)
public void changeThumbnails(boolean thumbnails) {
if (prefs != null && thumbnails != PreferenceUtils.isThumbnails(getContext())) {
prefs.edit().putBoolean(PreferenceUtils.THUMBNAILS, thumbnails).apply();
pasta.showToast(getString(R.string.restart_msg));
}
}
@OnCheckedChanged(R.id.cards)
public void changeCards(boolean cards) {
if (prefs != null && cards != PreferenceUtils.isCards(getContext())) {
prefs.edit().putBoolean(PreferenceUtils.CARDS, cards).apply();
}
}
@OnCheckedChanged(R.id.lists)
public void changeListTracks(boolean listTracks) {
if (prefs != null && listTracks != PreferenceUtils.isListTracks(getContext())) {
prefs.edit().putBoolean(PreferenceUtils.LIST_TRACKS, listTracks).apply();
}
}
@OnCheckedChanged(R.id.palette)
public void changePalette(boolean palette) {
if (prefs != null && palette != PreferenceUtils.isPalette(getContext())) {
prefs.edit().putBoolean(PreferenceUtils.PALETTE, palette).apply();
pasta.showToast(getString(R.string.restart_msg));
}
}
@OnClick(R.id.primary)
public void setPrimary() {
new ColorChooserDialog.Builder((HomeActivity) getActivity(), R.string.primary_color)
.titleSub(R.string.primary_color)
.doneButton(R.string.save)
.cancelButton(R.string.cancel)
.backButton(R.string.md_back_label)
.preselect(PreferenceUtils.getPrimaryColor(getContext()))
.show();
}
@OnClick(R.id.accent)
public void setAccent() {
new ColorChooserDialog.Builder((HomeActivity) getActivity(), R.string.accent_color)
.titleSub(R.string.accent_color)
.doneButton(R.string.save)
.cancelButton(R.string.cancel)
.backButton(R.string.md_back_label)
.accentMode(true)
.preselect(PreferenceUtils.getAccentColor(getContext()))
.show();
}
public void onColorSelection(@NonNull ColorChooserDialog dialog, @ColorInt int selectedColor) {
switch (dialog.getTitle()) {
case R.string.primary_color:
if (PreferenceUtils.getPrimaryColor(getContext()) == selectedColor) return;
prefs.edit().putInt(PreferenceUtils.PRIMARY, selectedColor).apply();
primary.transition(new ColorDrawable(selectedColor));
break;
case R.string.accent_color:
if (PreferenceUtils.getAccentColor(getContext()) == selectedColor) return;
prefs.edit().putInt(PreferenceUtils.ACCENT, selectedColor).apply();
accent.transition(new ColorDrawable(selectedColor));
break;
default:
return;
}
pasta.showToast(getString(R.string.restart_msg));
}
@OnClick(R.id.quality)
public void setQuality() {
new AlertDialog.Builder(getContext())
.setTitle(R.string.quality)
.setSingleChoiceItems(R.array.qualities, PreferenceUtils.getQuality(getContext()), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
selectedQuality = which;
}
}).setPositiveButton(R.string.save, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface d, int id) {
switch (selectedQuality) {
case 0:
prefs.edit().putInt(PreferenceUtils.QUALITY, 0).apply();
break;
case 1:
prefs.edit().putInt(PreferenceUtils.QUALITY, 1).apply();
break;
case 2:
prefs.edit().putInt(PreferenceUtils.QUALITY, 2).apply();
break;
}
pasta.showToast(getString(R.string.restart_msg));
d.dismiss();
}
}).setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface d, int id) {
d.dismiss();
}
}).create().show();
}
@OnClick(R.id.organize)
public void setOrganization() {
PreferenceUtils.getOrderingDialog(getContext(), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
selectedOrder = which;
}
}, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface d, int which) {
PreferenceManager.getDefaultSharedPreferences(getContext()).edit().putInt(PreferenceUtils.ORDER, selectedOrder).apply();
d.dismiss();
}
}).show();
}
}