package com.jpardogo.android.listbuddies.ui.fragments; import android.app.Activity; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.SeekBar; import android.widget.Spinner; import android.widget.TextView; import com.jpardogo.android.listbuddies.R; import com.jpardogo.android.listbuddies.Utils.SharePreferences; import com.jpardogo.android.listbuddies.adapters.CustomizeSpinnersAdapter; import com.jpardogo.android.listbuddies.models.KeyValuePair; import com.jpardogo.android.listbuddies.provider.SharedPrefKeys; import com.jpardogo.listbuddies.lib.provider.ScrollConfigOptions; import com.jpardogo.listbuddies.lib.views.ListBuddiesLayout; import java.util.ArrayList; import java.util.List; import butterknife.ButterKnife; import butterknife.InjectView; /** * Created by jpardogo on 22/02/2014. */ public class CustomizeFragment extends Fragment { private static final String TAG = CustomizeFragment.class.getSimpleName(); @InjectView(R.id.seekBarGap) SeekBar mSeekBarGap; @InjectView(R.id.seekBarGapValue) TextView seekBarGapValue; @InjectView(R.id.seekBarSpeed) SeekBar mSeekBarSpeed; @InjectView(R.id.seekBarSpeedValue) TextView seekBarSpeedValue; @InjectView(R.id.seekBarDivHeight) SeekBar mSeekBarDivHeight; @InjectView(R.id.seekBarDivHeightValue) TextView seekBarDivHeightValue; @InjectView(R.id.fillGapSpinner) Spinner mFillGapSpinner; @InjectView(R.id.scrollSpinner) Spinner mManualScrollSpinner; @InjectView(R.id.autoScrollSpinner) Spinner mAutoScrollSpinner; @InjectView(R.id.dividerSpinner) Spinner mDividerSpinner; private OnCustomizeListener mOnCustomizeListener; private CustomizeSpinnersAdapter mSpinnerAdapter; private List<KeyValuePair> mColorSpinnerSections; private List<KeyValuePair> mScrollScrollSpinnerSections; private int[] mScrollSpinnerValues; private int mFillGapSpinnerPosition; private int mAutoScrollSpinnerPosition; private int mManualScrollSpinnerPosition; private int mDividerSpinnerPosition; private int mGapSeekBarProgress; private int mSpeedSeekBarProgress; private int mDivHeightSeekBarProgress; public static Fragment newInstance() { return new CustomizeFragment(); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mScrollSpinnerValues = getActivity().getResources().getIntArray(R.attr.scrollFaster); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_customize, container, false); ButterKnife.inject(this, rootView); startConfig(); return rootView; } private void startConfig() { restartLastConfig(); setProgressText(); initSeekBars(); initSpinners(); } private void initSeekBars() { mSeekBarGap.setProgress(mGapSeekBarProgress); mSeekBarGap.setOnSeekBarChangeListener(mSeekBarListener); mSeekBarSpeed.setProgress(mSpeedSeekBarProgress); mSeekBarSpeed.setOnSeekBarChangeListener(mSeekBarListener); mSeekBarDivHeight.setProgress(mDivHeightSeekBarProgress); mSeekBarDivHeight.setOnSeekBarChangeListener(mSeekBarListener); } private void setProgressText() { seekBarGapValue.setText(String.valueOf(mGapSeekBarProgress)); seekBarSpeedValue.setText(String.valueOf(mSpeedSeekBarProgress)); seekBarDivHeightValue.setText(String.valueOf(mDivHeightSeekBarProgress)); } private void restartLastConfig() { mGapSeekBarProgress = SharePreferences.getValue(SharedPrefKeys.GAP_PROGRESS); mSpeedSeekBarProgress = SharePreferences.getValue(SharedPrefKeys.SPEED_PROGRESS); mDivHeightSeekBarProgress = SharePreferences.getValue(SharedPrefKeys.DIV_HEIGHT_PROGRESS); } private void initSpinners() { initFillGatSpinner(); initScrollSpinner(); initAutoScrollSpinner(); initDividerSpinner(); } private void initFillGatSpinner() { mColorSpinnerSections = getFillGapSpinnerItems(); setSpinner(mFillGapSpinner, mColorSpinnerSections, getString(R.string.fillgap)).setSelection(SharePreferences.getValue(SharedPrefKeys.FILL_GAP_POSITION)); } private void initScrollSpinner() { mScrollScrollSpinnerSections = getScrollItems(); setSpinner(mManualScrollSpinner, mScrollScrollSpinnerSections, getString(R.string.manual_fast_scroll)).setSelection(SharePreferences.getValue(SharedPrefKeys.MANUAL_SCROLL_POSITION)); } private void initAutoScrollSpinner() { mScrollScrollSpinnerSections = getScrollItems(); setSpinner(mAutoScrollSpinner, mScrollScrollSpinnerSections, getString(R.string.auto_fast_scroll)).setSelection(SharePreferences.getValue(SharedPrefKeys.AUTO_SCROLL_POSITION)); } private void initDividerSpinner() { mColorSpinnerSections = getFillGapSpinnerItems(); setSpinner(mDividerSpinner, mColorSpinnerSections, getString(R.string.dividers)).setSelection(SharePreferences.getValue(SharedPrefKeys.DIVIDERS_POSITION)); } private Spinner setSpinner(Spinner spinner, List<KeyValuePair> items, String mainTitle) { mSpinnerAdapter = new CustomizeSpinnersAdapter(getActivity(), items, mainTitle); spinner.setAdapter(mSpinnerAdapter); spinner.setOnItemSelectedListener(mSpinnerListener); return spinner; } private List<KeyValuePair> getScrollItems() { return new ArrayList<KeyValuePair>() {{ add(new KeyValuePair(getString(R.string.right), mScrollSpinnerValues[ScrollConfigOptions.RIGHT.getConfigValue()])); add(new KeyValuePair(getString(R.string.left), mScrollSpinnerValues[ScrollConfigOptions.LEFT.getConfigValue()])); }}; } private List<KeyValuePair> getFillGapSpinnerItems() { return new ArrayList<KeyValuePair>() {{ add(new KeyValuePair(getString(R.string.black), CustomizeSpinnersAdapter.OptionTypes.BLACK)); add(new KeyValuePair(getString(R.string.transparency), CustomizeSpinnersAdapter.OptionTypes.INSET)); add(new KeyValuePair(getString(R.string.empty), CustomizeSpinnersAdapter.OptionTypes.EMPTY)); }}; } private SeekBar.OnSeekBarChangeListener mSeekBarListener = new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { switch (seekBar.getId()) { case R.id.seekBarGap: mGapSeekBarProgress = progress; seekBarGapValue.setText(String.valueOf(progress)); mOnCustomizeListener.setGap(progress); break; case R.id.seekBarSpeed: mSpeedSeekBarProgress = progress; seekBarSpeedValue.setText(String.valueOf(progress)); mOnCustomizeListener.setSpeed(progress); break; case R.id.seekBarDivHeight: mDivHeightSeekBarProgress = progress; seekBarDivHeightValue.setText(String.valueOf(progress)); mOnCustomizeListener.setDividerHeight(progress); break; } } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { } }; private AdapterView.OnItemSelectedListener mSpinnerListener = new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> adapterView, View spinner, int position, long id) { int value; switch (adapterView.getId()) { case R.id.fillGapSpinner: mFillGapSpinnerPosition = position; value = mColorSpinnerSections.get(position).getColor(getActivity()); mOnCustomizeListener.setGapColor(value); break; case R.id.autoScrollSpinner: mAutoScrollSpinnerPosition = position; value = mScrollScrollSpinnerSections.get(position).getScrollOption(); mOnCustomizeListener.setAutoScrollFaster(value); break; case R.id.scrollSpinner: mManualScrollSpinnerPosition = position; value = mScrollScrollSpinnerSections.get(position).getScrollOption(); mOnCustomizeListener.setScrollFaster(value); break; case R.id.dividerSpinner: mDividerSpinnerPosition = position; int color = mColorSpinnerSections.get(position).getColor(getActivity()); color = color == ListBuddiesLayout.ATTR_NOT_SET ? getResources().getColor(android.R.color.transparent) : color; Drawable drawable = new ColorDrawable(color); mOnCustomizeListener.setDivider(drawable); break; } } @Override public void onNothingSelected(AdapterView<?> adapterView) { } }; @Override public void onAttach(Activity activity) { super.onAttach(activity); try { mOnCustomizeListener = (OnCustomizeListener) activity; } catch (ClassCastException e) { throw new ClassCastException(activity.toString() + " must implement " + OnCustomizeListener.class.getSimpleName()); } } public void reset() { startConfig(); } public interface OnCustomizeListener { void setSpeed(int value); void setGap(int value); void setGapColor(int color); void setDivider(Drawable drawable); void setDividerHeight(int value); void setAutoScrollFaster(int option); void setScrollFaster(int option); } @Override public void onDestroy() { super.onDestroy(); SharePreferences.saveCustomization(SharedPrefKeys.GAP_PROGRESS, mGapSeekBarProgress); SharePreferences.saveCustomization(SharedPrefKeys.SPEED_PROGRESS, mSpeedSeekBarProgress); SharePreferences.saveCustomization(SharedPrefKeys.DIV_HEIGHT_PROGRESS, mDivHeightSeekBarProgress); SharePreferences.saveCustomization(SharedPrefKeys.FILL_GAP_POSITION, mFillGapSpinnerPosition); SharePreferences.saveCustomization(SharedPrefKeys.MANUAL_SCROLL_POSITION, mManualScrollSpinnerPosition); SharePreferences.saveCustomization(SharedPrefKeys.AUTO_SCROLL_POSITION, mAutoScrollSpinnerPosition); SharePreferences.saveCustomization(SharedPrefKeys.DIVIDERS_POSITION, mDividerSpinnerPosition); } }