add step count for target.
authorTrillGates <williamtrillgates@gmail.com>
Thu, 16 Sep 2021 03:00:21 +0000 (11:00 +0800)
committerTrillGates <williamtrillgates@gmail.com>
Thu, 16 Sep 2021 03:00:21 +0000 (11:00 +0800)
app/src/main/java/com/ic/sport/fragment/pedometer/PedMainFragment.java
app/src/main/java/com/ic/sport/fragment/pedometer/PedSetupDialogFragment.java
app/src/main/java/com/ic/sport/widget/picker/NumericWheelAdapter.java
app/src/main/java/com/ic/sport/widget/picker/StepCountAdapter.java [new file with mode: 0644]
app/src/main/java/com/ic/sport/widget/picker/WheelAdapter.java
app/src/main/java/com/ic/sport/widget/picker/WheelView.java

index 50386f3..bc2aacf 100644 (file)
@@ -119,18 +119,22 @@ public class PedMainFragment extends Fragment {
     }
 
     private void setupRingProgress(int number) {
-        RingProgress mRingProgress = pedMainBinding.ringProgress;
-        mRingProgress.setProgress(number);
+        if (pedMainBinding != null) {
+            RingProgress mRingProgress = pedMainBinding.ringProgress;
+            mRingProgress.setProgress(number);
+        }
     }
 
     private void setupRingProgressNumberTv(int lastNumber, int number) {
-        TextView pedNumber = pedMainBinding.pedNumberTv;
-        Typeface typeFace = Typeface.createFromAsset(mContext.getAssets(), "fonts/Baloo2-SemiBold.ttf");
-        pedNumber.setTypeface(typeFace);
-
-        ValueAnimator animator = ValueAnimator.ofInt(lastNumber, number);
-        animator.setDuration(500);
-        animator.addUpdateListener(animation -> pedMainBinding.setPedNumber(animation.getAnimatedValue().toString()));
-        animator.start();
+        if (pedMainBinding != null) {
+            TextView pedNumber = pedMainBinding.pedNumberTv;
+            Typeface typeFace = Typeface.createFromAsset(mContext.getAssets(), "fonts/Baloo2-SemiBold.ttf");
+            pedNumber.setTypeface(typeFace);
+
+            ValueAnimator animator = ValueAnimator.ofInt(lastNumber, number);
+            animator.setDuration(500);
+            animator.addUpdateListener(animation -> pedMainBinding.setPedNumber(animation.getAnimatedValue().toString()));
+            animator.start();
+        }
     }
 }
index 6514661..051aab9 100644 (file)
@@ -19,6 +19,7 @@ import com.ic.iclooger.ICLogger;
 import com.ic.sport.R;
 import com.ic.sport.util.SPUtils;
 import com.ic.sport.widget.picker.NumericWheelAdapter;
+import com.ic.sport.widget.picker.StepCountAdapter;
 import com.ic.sport.widget.picker.WheelView;
 
 public class PedSetupDialogFragment extends DialogFragment {
@@ -40,7 +41,7 @@ public class PedSetupDialogFragment extends DialogFragment {
 
     private WheelView numberPicker;
 
-    private final ArrayMap<Integer, int[]> limil = new ArrayMap<>();
+    private final ArrayMap<Integer, int[]> limit = new ArrayMap<>();
 
     private final String[] UNIT_RES = new String[3];
     private final int[] VALUE_CURR = new int[3];
@@ -77,15 +78,14 @@ public class PedSetupDialogFragment extends DialogFragment {
         UNIT_RES[1] = getString(R.string.tips_weight_unit);
         UNIT_RES[2] = getString(R.string.step_unit);
 
-        limil.put(0, new int[]{30, 250});
-        limil.put(1, new int[]{15, 150});
-        limil.put(2, new int[]{3000, 50000});
+        limit.put(0, new int[]{30, 250});
+        limit.put(1, new int[]{15, 150});
+        limit.put(2, new int[]{3000, 100000});
     }
 
     @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container,
                              Bundle savedInstanceState) {
-
         Dialog mDialog = getDialog();
         if (mDialog != null) {
             getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);
@@ -93,15 +93,15 @@ public class PedSetupDialogFragment extends DialogFragment {
 
         View popView = inflater.inflate(R.layout.dialog_ped_setup_layout, container);
         numberPicker = popView.findViewById(R.id.dialog_value_picker);
-        setNumberPicker(limil.get(mCurrType)[0],
-                limil.get(mCurrType)[1],
+        setNumberPicker(limit.get(mCurrType)[0],
+                limit.get(mCurrType)[1],
                 UNIT_RES[mCurrType],
                 VALUE_CURR[mCurrType]);
 
         ImageView bt = popView.findViewById(R.id.dialog_picker_ok);
         bt.setOnClickListener(v -> {
             mListener.onDialogUpdate(mCurrType,
-                    limil.get(mCurrType)[0] + numberPicker.getCurrentItem());
+                    limit.get(mCurrType)[0] + numberPicker.getCurrentItem() * numberPicker.getAdapter().getStep());
             dismiss();
         });
         ImageView cancel = popView.findViewById(R.id.dialog_picker_cancel);
@@ -110,7 +110,11 @@ public class PedSetupDialogFragment extends DialogFragment {
     }
 
     private void setNumberPicker(final int numberMin, int numberMax, String label, int numberDefault) {
-        numberPicker.setAdapter(new NumericWheelAdapter(numberMin, numberMax));
+        if (mCurrType == 2) {
+            numberPicker.setAdapter(new StepCountAdapter(numberMin, numberMax, 1000));
+        } else {
+            numberPicker.setAdapter(new NumericWheelAdapter(numberMin, numberMax));
+        }
         numberPicker.setLabel(label);
         numberPicker.setCyclic(true);
         if (mCurrType == 2) {
@@ -120,7 +124,7 @@ public class PedSetupDialogFragment extends DialogFragment {
             numberPicker.TEXT_SIZE = (int) spToPx(65);
             numberPicker.ITEM_TEXT_SIZE = (int) spToPx(42);
         }
-        numberPicker.setCurrentItem(numberDefault - numberMin);
+        numberPicker.setCurrentItem(numberDefault / numberPicker.getAdapter().getStep() - numberMin);
     }
 
     private float spToPx(float sp) {
index 783c75b..9cbbbcd 100644 (file)
@@ -21,76 +21,80 @@ package com.ic.sport.widget.picker;
  */
 public class NumericWheelAdapter implements WheelAdapter {
 
-       /** The default min value */
-       public static final int DEFAULT_MAX_VALUE = 9;
+    /**
+     * The default min value
+     */
+    public static final int DEFAULT_MAX_VALUE = 9;
 
-       /** The default max value */
-       private static final int DEFAULT_MIN_VALUE = 0;
+    /**
+     * The default max value
+     */
+    private static final int DEFAULT_MIN_VALUE = 0;
 
-       // Values
-       private int minValue;
-       private int maxValue;
+    // Values
+    private int minValue;
+    private int maxValue;
 
-       // format
-       private String format;
+    // format
+    private String format;
 
-       /**
-        * Default constructor
-        */
-       public NumericWheelAdapter() {
-               this(DEFAULT_MIN_VALUE, DEFAULT_MAX_VALUE);
-       }
+    /**
+     * Default constructor
+     */
+    public NumericWheelAdapter() {
+        this(DEFAULT_MIN_VALUE, DEFAULT_MAX_VALUE);
+    }
 
-       /**
-        * Constructor
-        * 
-        * @param minValue
-        *            the wheel min value
-        * @param maxValue
-        *            the wheel max value
-        */
-       public NumericWheelAdapter(int minValue, int maxValue) {
-               this(minValue, maxValue, null);
-       }
+    /**
+     * Constructor
+     *
+     * @param minValue the wheel min value
+     * @param maxValue the wheel max value
+     */
+    public NumericWheelAdapter(int minValue, int maxValue) {
+        this(minValue, maxValue, null);
+    }
 
-       /**
-        * Constructor
-        * 
-        * @param minValue
-        *            the wheel min value
-        * @param maxValue
-        *            the wheel max value
-        * @param format
-        *            the format string
-        */
-       public NumericWheelAdapter(int minValue, int maxValue, String format) {
-               this.minValue = minValue;
-               this.maxValue = maxValue;
-               this.format = format;
-       }
+    /**
+     * Constructor
+     *
+     * @param minValue the wheel min value
+     * @param maxValue the wheel max value
+     * @param format   the format string
+     */
+    public NumericWheelAdapter(int minValue, int maxValue, String format) {
+        this.minValue = minValue;
+        this.maxValue = maxValue;
+        this.format = format;
+    }
 
-       @Override
-       public String getItem(int index) {
-               if (index >= 0 && index < getItemsCount()) {
-                       int value = minValue + index;
-                       return format != null ? String.format(format, value) : Integer
-                                       .toString(value);
-               }
-               return null;
-       }
+    @Override
+    public String getItem(int index) {
+        if (index >= 0 && index < getItemsCount()) {
+            int value = minValue + index;
+            return format != null ? String.format(format, value) : Integer
+                    .toString(value);
+        }
+        return null;
+    }
 
-       @Override
-       public int getItemsCount() {
-               return maxValue - minValue + 1;
-       }
+    @Override
+    public int getStep() {
+        return 1;
+    }
 
-       @Override
-       public int getMaximumLength() {
-               int max = Math.max(Math.abs(maxValue), Math.abs(minValue));
-               int maxLen = Integer.toString(max).length();
-               if (minValue < 0) {
-                       maxLen++;
-               }
-               return maxLen;
-       }
+    @Override
+    public int getItemsCount() {
+        return maxValue - minValue + 1;
+    }
+
+    @Override
+    public int getMaximumLength() {
+        int max = Math.max(Math.abs(maxValue), Math.abs(minValue));
+        int maxLen = Integer.toString(max).length();
+        if (minValue < 0) {
+            maxLen++;
+        }
+        return maxLen;
+    }
 }
diff --git a/app/src/main/java/com/ic/sport/widget/picker/StepCountAdapter.java b/app/src/main/java/com/ic/sport/widget/picker/StepCountAdapter.java
new file mode 100644 (file)
index 0000000..eb04ff7
--- /dev/null
@@ -0,0 +1,67 @@
+package com.ic.sport.widget.picker;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class StepCountAdapter implements WheelAdapter {
+
+    public StepCountAdapter(int mMin, int mMax, int mStep) {
+        this.mMin = mMin;
+        this.mMax = mMax;
+        this.mStep = mStep;
+        updateData();
+    }
+
+    private final int DEFAULT_MIN = 0;
+    private final int DEFAULT_MAX = 100;
+    private final int DEFAULT_STEP = 1;
+
+    private int mMin = DEFAULT_MIN;
+    private int mMax = DEFAULT_MAX;
+    private int mStep = DEFAULT_STEP;
+
+    public void setupMin(int min) {
+        this.mMin = min;
+        updateData();
+    }
+
+    public void setupStep(int step) {
+        this.mStep = step;
+        updateData();
+    }
+
+
+    public void setupMax(int max) {
+        this.mMax = max;
+        updateData();
+    }
+
+    private final List<String> data = new ArrayList<>();
+
+    private void updateData() {
+        data.clear();
+        for (int i = mMin; i < mMax; i += mStep) {
+            data.add(String.valueOf(i));
+        }
+    }
+
+    @Override
+    public int getStep() {
+        return mStep;
+    }
+
+    @Override
+    public int getItemsCount() {
+        return data.size();
+    }
+
+    @Override
+    public String getItem(int index) {
+        return data.get(index);
+    }
+
+    @Override
+    public int getMaximumLength() {
+        return 0;
+    }
+}
index 36e9004..da8b813 100644 (file)
@@ -17,6 +17,9 @@
 package com.ic.sport.widget.picker;
 
 public interface WheelAdapter {
+
+       int getStep();
+
        /**
         * Gets items count
         * 
index 651957a..0d2f73a 100644 (file)
@@ -161,8 +161,8 @@ public class WheelView extends View {
     boolean isCyclic = false;
 
     // Listeners
-    private List<OnWheelChangedListener> changingListeners = new LinkedList<>();
-    private List<OnWheelScrollListener> scrollingListeners = new LinkedList<>();
+    private final List<OnWheelChangedListener> changingListeners = new LinkedList<>();
+    private final List<OnWheelScrollListener> scrollingListeners = new LinkedList<>();
 
     /**
      * Constructor