Android Open Source - Roundr Seek Bar Preference






From Project

Back to project page Roundr.

License

The source code is released under:

Copyright (C) 2013 Mohammad Adib Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the te...

If you think the Android project Roundr listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package mohammad.adib.roundr;
//ww  w  .  j  a v  a2  s .  co  m
import wei.mark.standout.StandOutWindow;
import android.content.Context;
import android.content.res.TypedArray;
import android.os.Bundle;
import android.preference.Preference;
import android.util.AttributeSet;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewParent;
import android.widget.RelativeLayout;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView;

public class SeekBarPreference extends Preference implements OnSeekBarChangeListener {

  private final String TAG = getClass().getName();

  private static final String ANDROIDNS = "http://schemas.android.com/apk/res/android";
  private static final String ROUNDRNS = "roundrprefs";
  private static final int DEFAULT_VALUE = 50;

  private int mMaxValue = 100;
  private int mMinValue = 0;
  private int mInterval = 1;
  private int mCurrentValue;
  private String mUnitsLeft = "";
  private String mUnitsRight = "";
  private SeekBar mSeekBar;
  private Context context;

  private TextView mStatusText;

  public SeekBarPreference(Context context, AttributeSet attrs) {
    super(context, attrs);
    this.context = context;
    initPreference(context, attrs);
  }

  public SeekBarPreference(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    initPreference(context, attrs);
  }

  private void initPreference(Context context, AttributeSet attrs) {
    setValuesFromXml(attrs);
    mSeekBar = new SeekBar(context, attrs);
    mSeekBar.setMax(mMaxValue - mMinValue);
    mSeekBar.setOnSeekBarChangeListener(this);
  }

  private void setValuesFromXml(AttributeSet attrs) {
    mMaxValue = attrs.getAttributeIntValue(ANDROIDNS, "max", 100);
    mMinValue = attrs.getAttributeIntValue(ROUNDRNS, "min", 0);

    mUnitsLeft = getAttributeStringValue(attrs, ROUNDRNS, "unitsLeft", "");
    String units = getAttributeStringValue(attrs, ROUNDRNS, "units", "");
    mUnitsRight = getAttributeStringValue(attrs, ROUNDRNS, "unitsRight", units);

    try {
      String newInterval = attrs.getAttributeValue(ROUNDRNS, "interval");
      if (newInterval != null)
        mInterval = Integer.parseInt(newInterval);
    } catch (Exception e) {
      Log.e(TAG, "Invalid interval value", e);
    }

  }

  private String getAttributeStringValue(AttributeSet attrs, String namespace, String name, String defaultValue) {
    String value = attrs.getAttributeValue(namespace, name);
    if (value == null)
      value = defaultValue;

    return value;
  }

  @Override
  protected View onCreateView(ViewGroup parent) {

    RelativeLayout layout = null;

    try {
      LayoutInflater mInflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);

      layout = (RelativeLayout) mInflater.inflate(R.layout.seek_bar_preference, parent, false);
    } catch (Exception e) {
      Log.e(TAG, "Error creating seek bar preference", e);
    }

    return layout;

  }

  @Override
  public void onBindView(View view) {
    super.onBindView(view);

    try {
      // move our seekbar to the new view we've been given
      ViewParent oldContainer = mSeekBar.getParent();
      ViewGroup newContainer = (ViewGroup) view.findViewById(R.id.seekBarPrefBarContainer);

      if (oldContainer != newContainer) {
        // remove the seekbar from the old view
        if (oldContainer != null) {
          ((ViewGroup) oldContainer).removeView(mSeekBar);
        }
        // remove the existing seekbar (there may not be one) and add
        // ours
        newContainer.removeAllViews();
        newContainer.addView(mSeekBar, ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
      }
    } catch (Exception ex) {
      Log.e(TAG, "Error binding view: " + ex.toString());
    }

    updateView(view);
  }

  /**
   * Update a SeekBarPreference view with our current state
   * 
   * @param view
   */
  protected void updateView(View view) {

    try {
      RelativeLayout layout = (RelativeLayout) view;

      mStatusText = (TextView) layout.findViewById(R.id.seekBarPrefValue);
      mStatusText.setText(String.valueOf(pxFromDp(mCurrentValue)));
      mStatusText.setMinimumWidth(30);

      mSeekBar.setProgress(mCurrentValue - mMinValue);

    } catch (Exception e) {
      Log.e(TAG, "Error updating seek bar preference", e);
    }

  }

  private int pxFromDp(double dp) {
    return (int) (dp * context.getResources().getDisplayMetrics().density);
  }

  @Override
  public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
    int newValue = progress + mMinValue;

    if (newValue > mMaxValue)
      newValue = mMaxValue;
    else if (newValue < mMinValue)
      newValue = mMinValue;
    else if (mInterval != 1 && newValue % mInterval != 0)
      newValue = Math.round(((float) newValue) / mInterval) * mInterval;

    // change rejected, revert to the previous value
    if (!callChangeListener(newValue)) {
      seekBar.setProgress(mCurrentValue - mMinValue);
      return;
    }

    // change accepted, store it
    mCurrentValue = newValue;
    mStatusText.setText(String.valueOf(pxFromDp(newValue)));
    persistInt(newValue);
    // Refresh the corners to apply the new radius
    StandOutWindow.sendData(context, Corner.class, Corner.wildcard, Corner.UPDATE_CODE, new Bundle(), Corner.class, StandOutWindow.DISREGARD_ID);
  }

  @Override
  public void onStartTrackingTouch(SeekBar seekBar) {
  }

  @Override
  public void onStopTrackingTouch(SeekBar seekBar) {
    notifyChanged();
  }

  @Override
  protected Object onGetDefaultValue(TypedArray ta, int index) {

    int defaultValue = ta.getInt(index, DEFAULT_VALUE);
    return defaultValue;

  }

  @Override
  protected void onSetInitialValue(boolean restoreValue, Object defaultValue) {

    if (restoreValue) {
      mCurrentValue = getPersistedInt(mCurrentValue);
    } else {
      int temp = 0;
      try {
        temp = (Integer) defaultValue;
      } catch (Exception ex) {
        Log.e(TAG, "Invalid default value: " + defaultValue.toString());
      }

      persistInt(temp);
      mCurrentValue = temp;
    }

  }

}




Java Source Code List

mohammad.adib.roundr.BootReceiver.java
mohammad.adib.roundr.Corner.java
mohammad.adib.roundr.MainActivity.java
mohammad.adib.roundr.SeekBarPreference.java
mohammad.adib.roundr.SettingsActivity.java
wei.mark.standout.StandOutWindow.java
wei.mark.standout.Utils.java
wei.mark.standout.WindowCache.java
wei.mark.standout.constants.StandOutFlags.java
wei.mark.standout.ui.TouchInfo.java
wei.mark.standout.ui.Window.java