package com.amaze.filemanager.fragments.preference_fragments; import android.content.Context; import android.content.SharedPreferences; import android.graphics.drawable.GradientDrawable; import android.os.Build; import android.os.Bundle; import android.preference.Preference; import android.preference.PreferenceFragment; import android.preference.PreferenceManager; import android.support.annotation.ColorInt; import android.support.annotation.ColorRes; import android.support.annotation.NonNull; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.GridView; import android.widget.ImageView; import android.widget.Toast; import com.afollestad.materialdialogs.MaterialDialog; import com.amaze.filemanager.R; import com.amaze.filemanager.activities.PreferencesActivity; import com.amaze.filemanager.ui.views.CheckBox; import com.amaze.filemanager.utils.Utils; import com.amaze.filemanager.utils.color.ColorPreference; import com.amaze.filemanager.utils.color.ColorUsage; import java.util.List; /** * Created by Arpit on 21-06-2015. */ public class ColorPref extends PreferenceFragment implements Preference.OnPreferenceClickListener { private MaterialDialog dialog; SharedPreferences sharedPref; PreferencesActivity activity; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Load the preferences from an XML resource addPreferencesFromResource(R.xml.color_prefs); activity = (PreferencesActivity) getActivity(); sharedPref = PreferenceManager.getDefaultSharedPreferences(getActivity()); final CheckBox checkBoxPreference = (CheckBox) findPreference("random_checkbox"); checkBoxPreference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { if (activity != null) activity.setChanged(); Toast.makeText(getActivity(), R.string.setRandom, Toast.LENGTH_LONG).show(); return true; } }); CheckBox preference8 = (CheckBox) findPreference("colorednavigation"); preference8.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { if (activity != null) activity.setChanged(); return true; } }); if (Build.VERSION.SDK_INT >= 21) preference8.setEnabled(true); findPreference(ColorUsage.PRIMARY.asString()).setOnPreferenceClickListener(this); findPreference(ColorUsage.PRIMARY_TWO.asString()).setOnPreferenceClickListener(this); findPreference(ColorUsage.ACCENT.asString()).setOnPreferenceClickListener(this); findPreference(ColorUsage.ICON_SKIN.asString()).setOnPreferenceClickListener(this); } @Override public void onPause() { if (dialog != null){ dialog.dismiss(); } super.onPause(); } @Override public boolean onPreferenceClick(final Preference preference) { if (activity != null) activity.setChanged(); final ColorUsage usage = ColorUsage.fromString(preference.getKey()); if (usage != null) { ColorAdapter adapter = new ColorAdapter(getActivity(), ColorPreference.availableColors, usage); GridView v = (GridView) getActivity().getLayoutInflater().inflate(R.layout.dialog_grid, null); v.setAdapter(adapter); v.setOnItemClickListener(adapter); int fab_skin = activity.getColorPreference().getColor(ColorUsage.ACCENT); dialog = new MaterialDialog.Builder(getActivity()) .positiveText(R.string.cancel) .title(R.string.choose_color) .theme(activity.getAppTheme().getMaterialDialogTheme()) .autoDismiss(true) .positiveColor(fab_skin) .neutralColor(fab_skin) .neutralText(R.string.defualt) .callback(new MaterialDialog.ButtonCallback() { @Override public void onNeutral(MaterialDialog dialog) { super.onNeutral(dialog); activity.getColorPreference() .setRes(usage, usage.getDefaultColor()) .saveToPreferences(sharedPref); } }) .customView(v, false) .build(); adapter.setDialog(dialog); dialog.show(); } return false; } private class ColorAdapter extends ArrayAdapter<Integer> implements AdapterView.OnItemClickListener { private String prefKey; private ColorUsage usage; @ColorInt private int selectedColor; private MaterialDialog dialog; public void setDialog(MaterialDialog b) { this.dialog = b; } /** * Constructor for adapter that handles the view creation of color chooser dialog in preferences * * @param context the context * @param colors array list of color hex values in form of string; for the views * @param usage the preference usage for setting new selected color preference value */ ColorAdapter(Context context, List<Integer> colors, ColorUsage usage) { super(context, R.layout.rowlayout, colors); this.prefKey = usage.asString(); this.usage = usage; this.selectedColor = activity.getColorPreference().getColor(usage); } @ColorInt private int getColor(@ColorRes int colorRes) { return Utils.getColor(getContext(), colorRes); } @ColorRes private int getColorResAt(int position) { Integer item = getItem(position); if (item == null) { return usage.getDefaultColor(); } else { return item; } } @NonNull @Override public View getView(final int position, View convertView, @NonNull ViewGroup parent) { LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); //TODO solve unconditional layout inflation View rowView = inflater.inflate(R.layout.dialog_grid_item, parent, false); int color = getColor(getColorResAt(position)); ImageView imageView = (ImageView) rowView.findViewById(R.id.icon); if (color == selectedColor) imageView.setImageResource(R.drawable.ic_checkmark_selected); GradientDrawable gradientDrawable = (GradientDrawable) imageView.getBackground(); gradientDrawable.setColor(color); return rowView; } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { int selectedColorRes = getColorResAt(position); activity.getColorPreference().setRes(usage, selectedColorRes).saveToPreferences(sharedPref); if (dialog != null) dialog.dismiss(); } } }