package pro.dbro.glance.fragments; import android.app.AlertDialog; import android.app.Dialog; import android.app.DialogFragment; import android.content.DialogInterface; import android.os.Bundle; import android.view.View; import android.view.animation.Animation; import android.view.animation.AnimationUtils; import android.widget.SeekBar; import android.widget.TextView; import com.squareup.otto.Bus; import pro.dbro.glance.GlanceApplication; import pro.dbro.glance.GlancePrefsManager; import pro.dbro.glance.R; import pro.dbro.glance.events.WpmSelectedEvent; /** * Created by davidbrodsky on 3/1/14. */ public class WpmDialogFragment extends DialogFragment { public static final int MAX_WPM = 1200; public static final int WHOAH_THRESHOLD_WPM = 800; public static final int MIN_WPM = 300; private View mView; private Animation mCurrentAnimation; private boolean mAnimationRunning; private SeekBar mWpmSeek; private TextView mWpmLabel; private int mWpm; private Bus mBus; public static WpmDialogFragment newInstance() { WpmDialogFragment f = new WpmDialogFragment(); return f; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mWpm = GlancePrefsManager.getWpm(getActivity()); mAnimationRunning = false; GlanceApplication app = (GlanceApplication) getActivity().getApplication(); this.mBus = app.getBus(); } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { View v = getActivity().getLayoutInflater().inflate(R.layout.fragment_dialog_wpm, null); mWpmLabel = (TextView) v.findViewById(R.id.wpmText); mWpmSeek = ((SeekBar) v.findViewById(R.id.seekBar)); mWpmSeek.setProgress((int) ((float) 100 * mWpm / MAX_WPM)); mWpmLabel.setText(mWpm + " WPM"); mWpmSeek.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { mWpm = Math.max(MIN_WPM, (int) ((progress / 100.0) * MAX_WPM)); String wpmStr = mWpm + " WPM"; mWpmLabel.setText(wpmStr); getDialog().setTitle(wpmStr); if (mWpm >= WHOAH_THRESHOLD_WPM + 50 && !mAnimationRunning) { setTrippin(true); } else if (mWpm <= WHOAH_THRESHOLD_WPM - 50 && mAnimationRunning) { setTrippin(false); } } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { } }); AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setTitle(getActivity().getString(R.string.set_wpm)) .setView(v); mView = v; return builder.create(); } private void setTrippin(boolean beTrippin){ if(beTrippin){ mAnimationRunning = true; if (mCurrentAnimation == null) { mCurrentAnimation = AnimationUtils.loadAnimation(getActivity(), R.anim.wobble); mView.startAnimation(mCurrentAnimation); } else { mView.startAnimation(mCurrentAnimation); } } else { mView.clearAnimation(); mAnimationRunning = false; } } @Override public void onDismiss(DialogInterface dialog) { mBus.post(new WpmSelectedEvent(mWpm)); GlancePrefsManager.setWpm(getActivity(), mWpm); getActivity().getFragmentManager().beginTransaction().remove(this).commit(); } }