Minor changes to HabitHistoryView rendering; enable haptic feedback

pull/77/merge
Alinson S. Xavier 10 years ago
parent 94f56a8869
commit d45a4445cc

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.4 KiB

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.5 KiB

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.8 KiB

After

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

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.support.test.runner.AndroidJUnit4;
import android.test.suitebuilder.annotation.SmallTest; import android.test.suitebuilder.annotation.SmallTest;
import android.util.Log;
import org.isoron.uhabits.helpers.DateHelper; import org.isoron.uhabits.helpers.DateHelper;
import org.isoron.uhabits.models.Habit; import org.isoron.uhabits.models.Habit;
@ -56,6 +57,7 @@ public class HabitHistoryViewTest extends ViewTest
@Test @Test
public void render() throws Throwable public void render() throws Throwable
{ {
Log.d("HabitHistoryViewTest", String.format("height=%d", dpToPixels(100)));
assertRenders(view, "HabitHistoryView/render.png"); assertRenders(view, "HabitHistoryView/render.png");
} }
@ -69,7 +71,7 @@ public class HabitHistoryViewTest extends ViewTest
@Test @Test
public void render_withDataOffset() throws Throwable public void render_withDataOffset() throws Throwable
{ {
view.onScroll(null, null, -300, 0); view.onScroll(null, null, -dpToPixels(150), 0);
view.invalidate(); view.invalidate();
assertRenders(view, "HabitHistoryView/renderDataOffset.png"); assertRenders(view, "HabitHistoryView/renderDataOffset.png");
@ -79,7 +81,7 @@ public class HabitHistoryViewTest extends ViewTest
public void tapDate_withEditableView() throws Throwable public void tapDate_withEditableView() throws Throwable
{ {
view.setIsEditable(true); view.setIsEditable(true);
tap(view, 280, 30); tap(view, 270, 30);
waitForAsyncTasks(); waitForAsyncTasks();
long today = DateHelper.getStartOfToday(); long today = DateHelper.getStartOfToday();
@ -90,7 +92,7 @@ public class HabitHistoryViewTest extends ViewTest
public void tapDate_withReadOnlyView() throws Throwable public void tapDate_withReadOnlyView() throws Throwable
{ {
view.setIsEditable(false); view.setIsEditable(false);
tap(view, 280, 30); tap(view, 270, 30);
waitForAsyncTasks(); waitForAsyncTasks();
long today = DateHelper.getStartOfToday(); long today = DateHelper.getStartOfToday();

@ -24,13 +24,16 @@ import android.graphics.Canvas;
import android.graphics.Color; import android.graphics.Color;
import android.graphics.Paint; import android.graphics.Paint;
import android.graphics.Paint.Align; import android.graphics.Paint.Align;
import android.graphics.Rect; import android.graphics.RectF;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.util.Log;
import android.view.HapticFeedbackConstants;
import android.view.MotionEvent; import android.view.MotionEvent;
import org.isoron.uhabits.R; import org.isoron.uhabits.R;
import org.isoron.uhabits.helpers.ColorHelper; import org.isoron.uhabits.helpers.ColorHelper;
import org.isoron.uhabits.helpers.DateHelper; import org.isoron.uhabits.helpers.DateHelper;
import org.isoron.uhabits.helpers.DialogHelper;
import org.isoron.uhabits.models.Habit; import org.isoron.uhabits.models.Habit;
import org.isoron.uhabits.tasks.ToggleRepetitionTask; import org.isoron.uhabits.tasks.ToggleRepetitionTask;
@ -46,13 +49,13 @@ public class HabitHistoryView extends ScrollableDataView implements HabitDataVie
private Habit habit; private Habit habit;
private int[] checkmarks; private int[] checkmarks;
private Paint pSquareBg, pSquareFg, pTextHeader; private Paint pSquareBg, pSquareFg, pTextHeader;
private int squareSpacing; private float squareSpacing;
private float squareTextOffset; private float squareTextOffset;
private float headerTextOffset; private float headerTextOffset;
private int columnWidth; private float columnWidth;
private int columnHeight; private float columnHeight;
private int nColumns; private int nColumns;
private String wdays[]; private String wdays[];
@ -63,7 +66,7 @@ public class HabitHistoryView extends ScrollableDataView implements HabitDataVie
private int nDays; private int nDays;
private int todayWeekday; private int todayWeekday;
private int colors[]; private int colors[];
private Rect baseLocation; private RectF baseLocation;
private int primaryColor; private int primaryColor;
private boolean isBackgroundTransparent; private boolean isBackgroundTransparent;
@ -103,7 +106,7 @@ public class HabitHistoryView extends ScrollableDataView implements HabitDataVie
dfMonth = new SimpleDateFormat("MMM", Locale.getDefault()); dfMonth = new SimpleDateFormat("MMM", Locale.getDefault());
dfYear = new SimpleDateFormat("yyyy", Locale.getDefault()); dfYear = new SimpleDateFormat("yyyy", Locale.getDefault());
baseLocation = new Rect(); baseLocation = new RectF();
} }
private void updateDate() 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) protected void onSizeChanged(int width, int height, int oldWidth, int oldHeight)
{ {
if(height < 8) height = 200; if(height < 8) height = 200;
int baseSize = height / 8; float baseSize = height / 8.0f;
setScrollerBucketSize(baseSize); setScrollerBucketSize((int) baseSize);
squareSpacing = (int) Math.floor(baseSize / 15.0); squareSpacing = DialogHelper.dpToPixels(getContext(), 1.0f);
int maxTextSize = getResources().getDimensionPixelSize(R.dimen.history_max_font_size); float maxTextSize = getResources().getDimensionPixelSize(R.dimen.regularTextSize);
float textSize = Math.min(baseSize * 0.5f, maxTextSize); float textSize = Math.min(baseSize * 0.5f, maxTextSize);
pSquareFg.setTextSize(textSize); pSquareFg.setTextSize(textSize);
@ -142,26 +145,22 @@ public class HabitHistoryView extends ScrollableDataView implements HabitDataVie
squareTextOffset = pSquareFg.getFontSpacing() * 0.4f; squareTextOffset = pSquareFg.getFontSpacing() * 0.4f;
headerTextOffset = pTextHeader.getFontSpacing() * 0.3f; headerTextOffset = pTextHeader.getFontSpacing() * 0.3f;
int rightLabelWidth = getWeekdayLabelWidth(); float rightLabelWidth = getWeekdayLabelWidth() + headerTextOffset;
int horizontalPadding = getPaddingRight() + getPaddingLeft(); float horizontalPadding = getPaddingRight() + getPaddingLeft();
columnWidth = baseSize; columnWidth = baseSize;
columnHeight = 8 * baseSize; columnHeight = 8 * baseSize;
nColumns = (width - rightLabelWidth - horizontalPadding) / baseSize + 1; nColumns = (int)((width - rightLabelWidth - horizontalPadding) / baseSize) + 1;
updateDate(); updateDate();
} }
private int getWeekdayLabelWidth() private float getWeekdayLabelWidth()
{ {
int width = 0; float width = 0;
Rect bounds = new Rect();
for(String w : wdays) for(String w : wdays)
{ width = Math.max(width, pSquareFg.measureText(w));
pSquareFg.getTextBounds(w, 0, w.length(), bounds);
width = Math.max(width, bounds.right);
}
return width; return width;
} }
@ -272,7 +271,7 @@ public class HabitHistoryView extends ScrollableDataView implements HabitDataVie
drawAxis(canvas, baseLocation); 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); drawColumnHeader(canvas, location, date);
location.offset(0, columnWidth); 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) int checkmarkOffset)
{ {
if (checkmarkOffset >= checkmarks.length) pSquareBg.setColor(colors[0]); 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); 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++) for (int i = 0; i < 7; i++)
{ {
@ -313,7 +312,7 @@ public class HabitHistoryView extends ScrollableDataView implements HabitDataVie
private float headerOverflow = 0; 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 month = dfMonth.format(date.getTime());
String year = dfYear.format(date.getTime()); String year = dfYear.format(date.getTime());
@ -339,11 +338,19 @@ public class HabitHistoryView extends ScrollableDataView implements HabitDataVie
createColors(); createColors();
} }
@Override
public void onLongPress(MotionEvent e)
{
onSingleTapUp(e);
}
@Override @Override
public boolean onSingleTapUp(MotionEvent e) public boolean onSingleTapUp(MotionEvent e)
{ {
if(!isEditable) return false; if(!isEditable) return false;
performHapticFeedback(HapticFeedbackConstants.KEYBOARD_TAP);
int pointerId = e.getPointerId(0); int pointerId = e.getPointerId(0);
float x = e.getX(pointerId); float x = e.getX(pointerId);
float y = e.getY(pointerId); float y = e.getY(pointerId);

Loading…
Cancel
Save