Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f9eca2e0 authored by Jeff Sharkey's avatar Jeff Sharkey
Browse files

Data usage chart fixes.

Always draw first data point at 0. Each point should include full
value of current bucket, instead of lagging behind by one.

Bug: 5404917, 5404861, 5178305
Change-Id: I5fa63bc84cc1f9c0403fb03effd5affd2f01ad4c
parent 68da8364
Loading
Loading
Loading
Loading
+32 −23
Original line number Diff line number Diff line
@@ -181,10 +181,13 @@ public class ChartNetworkSeriesView extends View {
        final int height = getHeight();

        boolean started = false;
        float firstX = 0;
        float lastX = 0;
        float lastY = 0;
        long lastTime = Long.MIN_VALUE;
        float lastY = height;
        long lastTime = mHoriz.convertToValue(lastX);

        // move into starting position
        mPathStroke.moveTo(lastX, lastY);
        mPathFill.moveTo(lastX, lastY);

        // TODO: count fractional data from first bucket crossing start;
        // currently it only accepts first full bucket.
@@ -198,37 +201,43 @@ public class ChartNetworkSeriesView extends View {
        for (int i = start; i <= end; i++) {
            entry = mStats.getValues(i, entry);

            lastTime = entry.bucketStart + entry.bucketDuration;
            final float x = mHoriz.convertToPoint(lastTime);
            final float y = mVert.convertToPoint(totalData);
            final long startTime = entry.bucketStart;
            final long endTime = startTime + entry.bucketDuration;

            final float startX = mHoriz.convertToPoint(startTime);
            final float endX = mHoriz.convertToPoint(endTime);

            // skip until we find first stats on screen
            if (i > 0 && !started && x > 0) {
                mPathStroke.moveTo(lastX, lastY);
                mPathFill.moveTo(lastX, lastY);
                started = true;
                firstX = x;
            }
            if (endX < 0) continue;

            if (started) {
                mPathStroke.lineTo(x, y);
                mPathFill.lineTo(x, y);
            // increment by current bucket total
            totalData += entry.rxBytes + entry.txBytes;

            final float startY = lastY;
            final float endY = mVert.convertToPoint(totalData);

            if (lastTime != startTime) {
                // gap in buckets; line to start of current bucket
                mPathStroke.lineTo(startX, startY);
                mPathFill.lineTo(startX, startY);
            }

            lastX = x;
            lastY = y;
            // always draw to end of current bucket
            mPathStroke.lineTo(endX, endY);
            mPathFill.lineTo(endX, endY);

            lastX = endX;
            lastY = endY;
            lastTime = endTime;
        }

        // when data falls short, extend to requested end time
        if (lastTime < mEndTime) {
            lastX = mHoriz.convertToPoint(mEndTime);

            if (started) {
            mPathStroke.lineTo(lastX, lastY);
            mPathFill.lineTo(lastX, lastY);
        }
        }

        if (LOGD) {
            final RectF bounds = new RectF();
@@ -239,7 +248,7 @@ public class ChartNetworkSeriesView extends View {

        // drop to bottom of graph from current location
        mPathFill.lineTo(lastX, height);
        mPathFill.lineTo(firstX, height);
        mPathFill.lineTo(0, height);

        mMax = totalData;