From f8e0d07236079de7a23506d4c5aed58482ec16d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lubo=C5=A1=20Lu=C5=88=C3=A1k?= Date: Sat, 16 Sep 2017 19:35:50 +0200 Subject: [PATCH 01/10] avoid sql error when updating sql database The index doesn't exist in version 1.7.6 and so trying to drop it would lead to an error, resulting in not being able to import 1.7.6 database. https://github.com/iSoron/uhabits/issues/327 --- uhabits-core/src/main/resources/migrations/22.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uhabits-core/src/main/resources/migrations/22.sql b/uhabits-core/src/main/resources/migrations/22.sql index 0417119f9..1d1ffcf9a 100644 --- a/uhabits-core/src/main/resources/migrations/22.sql +++ b/uhabits-core/src/main/resources/migrations/22.sql @@ -13,7 +13,7 @@ begin transaction; habit integer not null references habits(id), timestamp integer not null, value integer not null); - drop index idx_repetitions_habit_timestamp; + drop index if exists idx_repetitions_habit_timestamp; create unique index idx_repetitions_habit_timestamp on Repetitions( habit, timestamp); insert into Repetitions select * from RepetitionsBak; From d1490ee771bd27c90538e403b82c983df4ef7078 Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Sun, 24 Sep 2017 06:05:29 -0500 Subject: [PATCH 02/10] Update Gradle and Android plugin --- build.gradle | 2 +- gradle/wrapper/gradle-wrapper.properties | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index a186732fc..b21b92ae7 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:3.0.0-alpha8' + classpath 'com.android.tools.build:gradle:3.0.0-beta6' classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' classpath 'com.getkeepsafe.dexcount:dexcount-gradle-plugin:0.6.4' classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index b5e196df5..52ff6ae93 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Thu Jul 13 10:27:19 CDT 2017 +#Sun Sep 24 06:01:27 CDT 2017 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-milestone-1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip From e911fb35b653ba782f09e9138e1bb1ef5ae7defa Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Sun, 24 Sep 2017 07:16:59 -0500 Subject: [PATCH 03/10] Better explain LED lights feature --- uhabits-android/src/main/res/values/strings.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/uhabits-android/src/main/res/values/strings.xml b/uhabits-android/src/main/res/values/strings.xml index 1671734fd..3ea1d2f76 100644 --- a/uhabits-android/src/main/res/values/strings.xml +++ b/uhabits-android/src/main/res/values/strings.xml @@ -163,7 +163,7 @@ Replaces gray backgrounds with pure black in night mode. Reduces battery usage in phones with AMOLED display. Interface Reverse order of days - Show days in reverse order on the main screen + Show days in reverse order on the main screen. Day Week @@ -188,8 +188,8 @@ Make notifications sticky Prevents notifications from being swiped away. - LED - Notifications blinking light. + Notification light + Shows a blinking light for reminders. Only available in phones with LED notification lights. Repair database Database repaired. From bb22972eb218f2d56c1adbc79a99e3c18e1c317d Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Sun, 24 Sep 2017 07:19:35 -0500 Subject: [PATCH 04/10] Minor code style changes --- .../uhabits/notifications/AndroidNotificationTray.kt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/notifications/AndroidNotificationTray.kt b/uhabits-android/src/main/java/org/isoron/uhabits/notifications/AndroidNotificationTray.kt index d06d0e320..6a25300d0 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/notifications/AndroidNotificationTray.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/notifications/AndroidNotificationTray.kt @@ -21,8 +21,8 @@ package org.isoron.uhabits.notifications import android.app.* import android.content.* +import android.graphics.* import android.graphics.BitmapFactory.* -import android.graphics.Color import android.support.v4.app.* import android.support.v4.app.NotificationCompat.* import org.isoron.androidbase.* @@ -85,13 +85,13 @@ class AndroidNotificationTray .setWhen(reminderTime) .setShowWhen(true) .setOngoing(preferences.shouldMakeNotificationsSticky()) + if (preferences.shouldMakeNotificationsLed()) - builder.setLights(Color.RED, 1000, 1000) - val notification = builder.build() + builder.setLights(Color.RED, 1000, 1000) val notificationManager = context.getSystemService( Activity.NOTIFICATION_SERVICE) as NotificationManager - notificationManager.notify(notificationId, notification) + notificationManager.notify(notificationId, builder.build()) } } From be9c2ff64d107ccfaec085e8629496bc05a524d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lubo=C5=A1=20Lu=C5=88=C3=A1k?= Date: Wed, 27 Sep 2017 20:13:29 +0200 Subject: [PATCH 05/10] fix name of exported files (correct the time) This reverts part of a75a27ad, where this got changed presumably by mistake. --- .../src/main/java/org/isoron/uhabits/utils/DatabaseUtils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/utils/DatabaseUtils.java b/uhabits-android/src/main/java/org/isoron/uhabits/utils/DatabaseUtils.java index e0bc5d42e..8f99eb42d 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/utils/DatabaseUtils.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/utils/DatabaseUtils.java @@ -92,7 +92,7 @@ public abstract class DatabaseUtils throws IOException { SimpleDateFormat dateFormat = DateFormats.getBackupDateFormat(); - String date = dateFormat.format(DateUtils.getStartOfToday()); + String date = dateFormat.format(DateUtils.getLocalTime()); String format = "%s/Loop Habits Backup %s.db"; String filename = String.format(format, dir.getAbsolutePath(), date); From d2cc283bd5f92a508b8b33457db17f0d4bc6bd3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lubo=C5=A1=20Lu=C5=88=C3=A1k?= Date: Thu, 28 Sep 2017 13:03:34 +0200 Subject: [PATCH 06/10] don't reset habit position when editing it --- .../isoron/uhabits/activities/habits/edit/EditHabitDialog.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/EditHabitDialog.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/EditHabitDialog.java index 55ea8e691..6ff2bfa6b 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/EditHabitDialog.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/EditHabitDialog.java @@ -171,6 +171,8 @@ public class EditHabitDialog extends AppCompatDialogFragment if (type == Habit.NUMBER_HABIT && !targetPanel.validate()) return; Habit habit = modelFactory.buildHabit(); + if( originalHabit != null ) + habit.copyFrom(originalHabit); habit.setName(namePanel.getName()); habit.setDescription(namePanel.getDescription()); habit.setColor(namePanel.getColor()); From acb94db6d62ffd66732d99cf66697c88a8ca3dfe Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Thu, 28 Sep 2017 06:40:06 -0500 Subject: [PATCH 07/10] Introduce failing test for bug #339 --- .../java/org/isoron/uhabits/BaseUserInterfaceTest.java | 2 +- .../java/org/isoron/uhabits/acceptance/HabitsTest.java | 3 +-- .../isoron/uhabits/acceptance/steps/CommonSteps.java | 10 ++++++++++ 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseUserInterfaceTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseUserInterfaceTest.java index 75516133a..e2dfb6b1f 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseUserInterfaceTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseUserInterfaceTest.java @@ -60,9 +60,9 @@ public class BaseUserInterfaceTest @Before public void setUp() throws Exception { + device = getInstance(getInstrumentation()); TestButler.setup(getTargetContext()); TestButler.verifyAnimationsDisabled(getTargetContext()); - device = getInstance(getInstrumentation()); HabitsApplication app = (HabitsApplication) getTargetContext().getApplicationContext(); diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/HabitsTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/HabitsTest.java index e76bae1c2..035e0c150 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/HabitsTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/HabitsTest.java @@ -31,7 +31,6 @@ import static org.isoron.uhabits.acceptance.steps.CommonSteps.*; import static org.isoron.uhabits.acceptance.steps.EditHabitSteps.*; import static org.isoron.uhabits.acceptance.steps.ListHabitsSteps.MenuItem.*; import static org.isoron.uhabits.acceptance.steps.ListHabitsSteps.*; -import static org.isoron.uhabits.acceptance.steps.ListHabitsSteps.MenuItem.EDIT; @RunWith(AndroidJUnit4.class) @LargeTest @@ -94,7 +93,7 @@ public class HabitsTest extends BaseUserInterfaceTest clickSave(); verifyShowsScreen(LIST_HABITS); - verifyDisplaysText("Take a walk"); + verifyDisplaysTextInSequence("Wake up early", "Take a walk", "Meditate"); verifyDoesNotDisplayText("Track time"); } diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/CommonSteps.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/CommonSteps.java index fbbafe672..14b16144b 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/CommonSteps.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/CommonSteps.java @@ -31,6 +31,7 @@ import org.isoron.uhabits.activities.habits.list.*; import static android.support.test.espresso.Espresso.*; import static android.support.test.espresso.action.ViewActions.*; +import static android.support.test.espresso.assertion.PositionAssertions.*; import static android.support.test.espresso.assertion.ViewAssertions.*; import static android.support.test.espresso.matcher.ViewMatchers.*; import static junit.framework.Assert.*; @@ -114,6 +115,15 @@ public class CommonSteps extends BaseUserInterfaceTest onView(withText(text)).check(matches(isEnabled())); } + public static void verifyDisplaysTextInSequence(String... text) + { + verifyDisplaysText(text[0]); + for(int i = 1; i < text.length; i++) { + verifyDisplaysText(text[i]); + onView(withText(text[i])).check(isBelow(withText(text[i-1]))); + } + } + private static void verifyDisplaysView(String className) { onView(withClassName(endsWith(className))).check(matches(isEnabled())); From 46c61f9ea917c9f998d37d7cb3c103e6ea63846e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lubo=C5=A1=20Lu=C5=88=C3=A1k?= Date: Mon, 18 Sep 2017 22:33:00 +0200 Subject: [PATCH 08/10] force US locale for tests --- .../isoron/uhabits/core/utils/DateUtils.java | 21 +++++++++++++++---- .../uhabits/core/utils/DateUtilsTest.java | 8 +++++++ 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/utils/DateUtils.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/utils/DateUtils.java index 9d2a3f476..59ae5c6df 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/core/utils/DateUtils.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/utils/DateUtils.java @@ -34,6 +34,8 @@ public abstract class DateUtils private static TimeZone fixedTimeZone = null; + private static Locale fixedLocale = null; + /** * Time of the day when the new day starts. */ @@ -58,7 +60,7 @@ public abstract class DateUtils public static String formatHeaderDate(GregorianCalendar day) { - Locale locale = Locale.getDefault(); + Locale locale = getLocale(); String dayOfMonth = Integer.toString(day.get(DAY_OF_MONTH)); String dayOfWeek = day.getDisplayName(DAY_OF_WEEK, SHORT, locale); return dayOfWeek + "\n" + dayOfMonth; @@ -82,7 +84,7 @@ public abstract class DateUtils for (int i = 0; i < wdays.length; i++) { wdays[i] = - day.getDisplayName(DAY_OF_WEEK, format, Locale.getDefault()); + day.getDisplayName(DAY_OF_WEEK, format, getLocale()); day.add(DAY_OF_MONTH, 1); } @@ -100,7 +102,7 @@ public abstract class DateUtils /** * @return array with weekday names starting according to locale settings, - * e.g. [Mo,Di,Mi,Do,Fr,Sa,So] in Europe + * e.g. [Mo,Di,Mi,Do,Fr,Sa,So] in Germany */ public static String[] getLocaleDayNames(int format) { @@ -111,7 +113,7 @@ public abstract class DateUtils for (int i = 0; i < days.length; i++) { days[i] = calendar.getDisplayName(DAY_OF_WEEK, format, - Locale.getDefault()); + getLocale()); calendar.add(DAY_OF_MONTH, 1); } @@ -195,6 +197,17 @@ public abstract class DateUtils fixedLocalTime = timestamp; } + public static void setFixedLocale(Locale locale) + { + fixedLocale = locale; + } + + private static Locale getLocale() + { + if(fixedLocale != null) return fixedLocale; + return Locale.getDefault(); + } + public static Long truncate(TruncateField field, long timestamp) { GregorianCalendar cal = DateUtils.getCalendar(timestamp); diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/core/utils/DateUtilsTest.java b/uhabits-core/src/test/java/org/isoron/uhabits/core/utils/DateUtilsTest.java index 57358649a..ca6a3e73a 100644 --- a/uhabits-core/src/test/java/org/isoron/uhabits/core/utils/DateUtilsTest.java +++ b/uhabits-core/src/test/java/org/isoron/uhabits/core/utils/DateUtilsTest.java @@ -31,6 +31,14 @@ import static org.hamcrest.MatcherAssert.*; public class DateUtilsTest extends BaseUnitTest { + @Before + @Override + public void setUp() throws Exception + { + super.setUp(); + DateUtils.setFixedLocale(Locale.US); + } + @Test public void testFormatHeaderDate() { From 318caa886c8cd80ef42d09ad7dc9c42df4debb5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lubo=C5=A1=20Lu=C5=88=C3=A1k?= Date: Mon, 18 Sep 2017 22:44:58 +0200 Subject: [PATCH 09/10] fix csv export with locales that do not use dot as decimal separator --- .../src/main/java/org/isoron/uhabits/core/models/ScoreList.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/models/ScoreList.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/models/ScoreList.java index 43959c11c..b3ba68370 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/core/models/ScoreList.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/models/ScoreList.java @@ -172,7 +172,7 @@ public abstract class ScoreList implements Iterable for (Score s : this) { String timestamp = dateFormat.format(s.getTimestamp().getUnixTime()); - String score = String.format("%.4f", s.getValue()); + String score = String.format((Locale)null, "%.4f", s.getValue()); out.write(String.format("%s,%s\n", timestamp, score)); } } From e052a144bd4b7bf3b9b50658910a0561c0507f31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lubo=C5=A1=20Lu=C5=88=C3=A1k?= Date: Mon, 18 Sep 2017 23:13:53 +0200 Subject: [PATCH 10/10] fix testTruncate_dayOfWeek failing with some locales --- .../src/main/java/org/isoron/uhabits/core/utils/DateUtils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/utils/DateUtils.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/utils/DateUtils.java index 59ae5c6df..2771f3500 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/core/utils/DateUtils.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/utils/DateUtils.java @@ -69,7 +69,7 @@ public abstract class DateUtils private static GregorianCalendar getCalendar(long timestamp) { GregorianCalendar day = - new GregorianCalendar(TimeZone.getTimeZone("GMT")); + new GregorianCalendar(TimeZone.getTimeZone("GMT"), getLocale()); day.setTimeInMillis(timestamp); return day; }