Minor changes to HabitHistoryView rendering; enable haptic feedback
|
Before Width: | Height: | Size: 7.4 KiB After Width: | Height: | Size: 7.4 KiB |
|
Before Width: | Height: | Size: 7.5 KiB After Width: | Height: | Size: 7.5 KiB |
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 36 KiB |
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 31 KiB |
@@ -21,6 +21,7 @@ package org.isoron.uhabits.unit.views;
|
||||
|
||||
import android.support.test.runner.AndroidJUnit4;
|
||||
import android.test.suitebuilder.annotation.SmallTest;
|
||||
import android.util.Log;
|
||||
|
||||
import org.isoron.uhabits.helpers.DateHelper;
|
||||
import org.isoron.uhabits.models.Habit;
|
||||
@@ -56,6 +57,7 @@ public class HabitHistoryViewTest extends ViewTest
|
||||
@Test
|
||||
public void render() throws Throwable
|
||||
{
|
||||
Log.d("HabitHistoryViewTest", String.format("height=%d", dpToPixels(100)));
|
||||
assertRenders(view, "HabitHistoryView/render.png");
|
||||
}
|
||||
|
||||
@@ -69,7 +71,7 @@ public class HabitHistoryViewTest extends ViewTest
|
||||
@Test
|
||||
public void render_withDataOffset() throws Throwable
|
||||
{
|
||||
view.onScroll(null, null, -300, 0);
|
||||
view.onScroll(null, null, -dpToPixels(150), 0);
|
||||
view.invalidate();
|
||||
|
||||
assertRenders(view, "HabitHistoryView/renderDataOffset.png");
|
||||
@@ -79,7 +81,7 @@ public class HabitHistoryViewTest extends ViewTest
|
||||
public void tapDate_withEditableView() throws Throwable
|
||||
{
|
||||
view.setIsEditable(true);
|
||||
tap(view, 280, 30);
|
||||
tap(view, 270, 30);
|
||||
waitForAsyncTasks();
|
||||
|
||||
long today = DateHelper.getStartOfToday();
|
||||
@@ -90,7 +92,7 @@ public class HabitHistoryViewTest extends ViewTest
|
||||
public void tapDate_withReadOnlyView() throws Throwable
|
||||
{
|
||||
view.setIsEditable(false);
|
||||
tap(view, 280, 30);
|
||||
tap(view, 270, 30);
|
||||
waitForAsyncTasks();
|
||||
|
||||
long today = DateHelper.getStartOfToday();
|
||||
|
||||
@@ -24,13 +24,16 @@ import android.graphics.Canvas;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.Paint;
|
||||
import android.graphics.Paint.Align;
|
||||
import android.graphics.Rect;
|
||||
import android.graphics.RectF;
|
||||
import android.util.AttributeSet;
|
||||
import android.util.Log;
|
||||
import android.view.HapticFeedbackConstants;
|
||||
import android.view.MotionEvent;
|
||||
|
||||
import org.isoron.uhabits.R;
|
||||
import org.isoron.uhabits.helpers.ColorHelper;
|
||||
import org.isoron.uhabits.helpers.DateHelper;
|
||||
import org.isoron.uhabits.helpers.DialogHelper;
|
||||
import org.isoron.uhabits.models.Habit;
|
||||
import org.isoron.uhabits.tasks.ToggleRepetitionTask;
|
||||
|
||||
@@ -46,13 +49,13 @@ public class HabitHistoryView extends ScrollableDataView implements HabitDataVie
|
||||
private Habit habit;
|
||||
private int[] checkmarks;
|
||||
private Paint pSquareBg, pSquareFg, pTextHeader;
|
||||
private int squareSpacing;
|
||||
private float squareSpacing;
|
||||
|
||||
private float squareTextOffset;
|
||||
private float headerTextOffset;
|
||||
|
||||
private int columnWidth;
|
||||
private int columnHeight;
|
||||
private float columnWidth;
|
||||
private float columnHeight;
|
||||
private int nColumns;
|
||||
|
||||
private String wdays[];
|
||||
@@ -63,7 +66,7 @@ public class HabitHistoryView extends ScrollableDataView implements HabitDataVie
|
||||
private int nDays;
|
||||
private int todayWeekday;
|
||||
private int colors[];
|
||||
private Rect baseLocation;
|
||||
private RectF baseLocation;
|
||||
private int primaryColor;
|
||||
|
||||
private boolean isBackgroundTransparent;
|
||||
@@ -103,7 +106,7 @@ public class HabitHistoryView extends ScrollableDataView implements HabitDataVie
|
||||
dfMonth = new SimpleDateFormat("MMM", Locale.getDefault());
|
||||
dfYear = new SimpleDateFormat("yyyy", Locale.getDefault());
|
||||
|
||||
baseLocation = new Rect();
|
||||
baseLocation = new RectF();
|
||||
}
|
||||
|
||||
private void updateDate()
|
||||
@@ -130,11 +133,11 @@ public class HabitHistoryView extends ScrollableDataView implements HabitDataVie
|
||||
protected void onSizeChanged(int width, int height, int oldWidth, int oldHeight)
|
||||
{
|
||||
if(height < 8) height = 200;
|
||||
int baseSize = height / 8;
|
||||
setScrollerBucketSize(baseSize);
|
||||
float baseSize = height / 8.0f;
|
||||
setScrollerBucketSize((int) baseSize);
|
||||
|
||||
squareSpacing = (int) Math.floor(baseSize / 15.0);
|
||||
int maxTextSize = getResources().getDimensionPixelSize(R.dimen.history_max_font_size);
|
||||
squareSpacing = DialogHelper.dpToPixels(getContext(), 1.0f);
|
||||
float maxTextSize = getResources().getDimensionPixelSize(R.dimen.regularTextSize);
|
||||
float textSize = Math.min(baseSize * 0.5f, maxTextSize);
|
||||
|
||||
pSquareFg.setTextSize(textSize);
|
||||
@@ -142,26 +145,22 @@ public class HabitHistoryView extends ScrollableDataView implements HabitDataVie
|
||||
squareTextOffset = pSquareFg.getFontSpacing() * 0.4f;
|
||||
headerTextOffset = pTextHeader.getFontSpacing() * 0.3f;
|
||||
|
||||
int rightLabelWidth = getWeekdayLabelWidth();
|
||||
int horizontalPadding = getPaddingRight() + getPaddingLeft();
|
||||
float rightLabelWidth = getWeekdayLabelWidth() + headerTextOffset;
|
||||
float horizontalPadding = getPaddingRight() + getPaddingLeft();
|
||||
|
||||
columnWidth = baseSize;
|
||||
columnHeight = 8 * baseSize;
|
||||
nColumns = (width - rightLabelWidth - horizontalPadding) / baseSize + 1;
|
||||
nColumns = (int)((width - rightLabelWidth - horizontalPadding) / baseSize) + 1;
|
||||
|
||||
updateDate();
|
||||
}
|
||||
|
||||
private int getWeekdayLabelWidth()
|
||||
private float getWeekdayLabelWidth()
|
||||
{
|
||||
int width = 0;
|
||||
Rect bounds = new Rect();
|
||||
float width = 0;
|
||||
|
||||
for(String w : wdays)
|
||||
{
|
||||
pSquareFg.getTextBounds(w, 0, w.length(), bounds);
|
||||
width = Math.max(width, bounds.right);
|
||||
}
|
||||
width = Math.max(width, pSquareFg.measureText(w));
|
||||
|
||||
return width;
|
||||
}
|
||||
@@ -272,7 +271,7 @@ public class HabitHistoryView extends ScrollableDataView implements HabitDataVie
|
||||
drawAxis(canvas, baseLocation);
|
||||
}
|
||||
|
||||
private void drawColumn(Canvas canvas, Rect location, GregorianCalendar date, int column)
|
||||
private void drawColumn(Canvas canvas, RectF location, GregorianCalendar date, int column)
|
||||
{
|
||||
drawColumnHeader(canvas, location, date);
|
||||
location.offset(0, columnWidth);
|
||||
@@ -290,7 +289,7 @@ public class HabitHistoryView extends ScrollableDataView implements HabitDataVie
|
||||
}
|
||||
}
|
||||
|
||||
private void drawSquare(Canvas canvas, Rect location, GregorianCalendar date,
|
||||
private void drawSquare(Canvas canvas, RectF location, GregorianCalendar date,
|
||||
int checkmarkOffset)
|
||||
{
|
||||
if (checkmarkOffset >= checkmarks.length) pSquareBg.setColor(colors[0]);
|
||||
@@ -301,7 +300,7 @@ public class HabitHistoryView extends ScrollableDataView implements HabitDataVie
|
||||
canvas.drawText(text, location.centerX(), location.centerY() + squareTextOffset, pSquareFg);
|
||||
}
|
||||
|
||||
private void drawAxis(Canvas canvas, Rect location)
|
||||
private void drawAxis(Canvas canvas, RectF location)
|
||||
{
|
||||
for (int i = 0; i < 7; i++)
|
||||
{
|
||||
@@ -313,7 +312,7 @@ public class HabitHistoryView extends ScrollableDataView implements HabitDataVie
|
||||
|
||||
private float headerOverflow = 0;
|
||||
|
||||
private void drawColumnHeader(Canvas canvas, Rect location, GregorianCalendar date)
|
||||
private void drawColumnHeader(Canvas canvas, RectF location, GregorianCalendar date)
|
||||
{
|
||||
String month = dfMonth.format(date.getTime());
|
||||
String year = dfYear.format(date.getTime());
|
||||
@@ -339,11 +338,19 @@ public class HabitHistoryView extends ScrollableDataView implements HabitDataVie
|
||||
createColors();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLongPress(MotionEvent e)
|
||||
{
|
||||
onSingleTapUp(e);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onSingleTapUp(MotionEvent e)
|
||||
{
|
||||
if(!isEditable) return false;
|
||||
|
||||
performHapticFeedback(HapticFeedbackConstants.KEYBOARD_TAP);
|
||||
|
||||
int pointerId = e.getPointerId(0);
|
||||
float x = e.getX(pointerId);
|
||||
float y = e.getY(pointerId);
|
||||
|
||||