Skip to content

Commit

Permalink
Merge branch 'hotfix/1.7.7'
Browse files Browse the repository at this point in the history
  • Loading branch information
iSoron committed Sep 30, 2017
2 parents 7bb62c1 + 657cde7 commit bf3964a
Show file tree
Hide file tree
Showing 6 changed files with 113 additions and 19 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
# Changelog

### 1.7.7 (September 30, 2017)

* Fix bug that caused reminders to show repeatedly on DST changes

### 1.7.6 (July 18, 2017)

* Fix bug that caused widgets not to render sometimes
Expand Down
26 changes: 13 additions & 13 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,14 @@ android {
compileSdkVersion 25
buildToolsVersion "25.0.2"

signingConfigs {
release {
storeFile file(LOOP_STORE_FILE)
storePassword LOOP_STORE_PASSWORD
keyAlias LOOP_KEY_ALIAS
keyPassword LOOP_KEY_PASSWORD
}
}
// signingConfigs {
// release {
// storeFile file(LOOP_STORE_FILE)
// storePassword LOOP_STORE_PASSWORD
// keyAlias LOOP_KEY_ALIAS
// keyPassword LOOP_KEY_PASSWORD
// }
// }

playAccountConfigs {
defaultAccountConfig {
Expand All @@ -35,14 +35,14 @@ android {
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
testInstrumentationRunnerArgument "size", "medium"

playAccountConfig = playAccountConfigs.defaultAccountConfig
// playAccountConfig = playAccountConfigs.defaultAccountConfig
}

buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
signingConfig signingConfigs.release
// signingConfig signingConfigs.release
}
debug {
testCoverageEnabled = false
Expand Down Expand Up @@ -161,6 +161,6 @@ task coverageReport(type: JacocoReport, dependsOn: ['testDebugUnitTest']) {
executionData = files(jvmExecData, connectedExecData)
}

play {
track = 'alpha'
}
//play {
// track = 'alpha'
//}
4 changes: 2 additions & 2 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@
<manifest
package="org.isoron.uhabits"
xmlns:android="http://schemas.android.com/apk/res/android"
android:versionCode="33"
android:versionName="1.7.6">
android:versionCode="35"
android:versionName="1.7.8">

<uses-permission android:name="android.permission.VIBRATE"/>

Expand Down
6 changes: 2 additions & 4 deletions app/src/main/java/org/isoron/uhabits/utils/DateUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,7 @@ public abstract class DateUtils
public static long applyTimezone(long localTimestamp)
{
TimeZone tz = getTimezone();
long now = new Date(localTimestamp).getTime();
return now - tz.getOffset(now);
return localTimestamp - tz.getOffset(localTimestamp - tz.getOffset(localTimestamp));
}

public static String formatHeaderDate(GregorianCalendar day)
Expand Down Expand Up @@ -230,8 +229,7 @@ public static int javaWeekdayToLoopWeekday(int number)
public static long removeTimezone(long timestamp)
{
TimeZone tz = getTimezone();
long now = new Date(timestamp).getTime();
return now + tz.getOffset(now);
return timestamp + tz.getOffset(timestamp);
}

public static void setFixedLocalTime(Long timestamp)
Expand Down
7 changes: 7 additions & 0 deletions app/src/test/java/org/isoron/uhabits/BaseUnitTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -58,4 +58,11 @@ public long timestamp(int year, int month, int day)
cal.set(year, month, day);
return cal.getTimeInMillis();
}

public long timestamp(int year, int month, int day, int hourOfDay, int minute, int second)
{
GregorianCalendar cal = DateUtils.getStartOfTodayCalendar();
cal.set(year, month, day, hourOfDay, minute, second);
return cal.getTimeInMillis();
}
}
85 changes: 85 additions & 0 deletions app/src/test/java/org/isoron/uhabits/utils/DateUtilsTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,11 @@
import java.util.*;

import static java.util.Calendar.*;
import static junit.framework.Assert.assertEquals;
import static org.hamcrest.CoreMatchers.*;
import static org.hamcrest.MatcherAssert.*;
import static org.isoron.uhabits.utils.DateUtils.applyTimezone;
import static org.isoron.uhabits.utils.DateUtils.removeTimezone;

public class DateUtilsTest extends BaseUnitTest
{
Expand Down Expand Up @@ -147,4 +150,86 @@ public void test_getDaysBetween()
assertThat(DateUtils.getDaysBetween(t1, t3), equalTo(365));
assertThat(DateUtils.getDaysBetween(t3, t1), equalTo(365));
}

@Test
public void test_applyTimezone()
{
DateUtils.setFixedTimeZone(TimeZone.getTimeZone("Australia/Sydney"));
assertEquals(applyTimezone(timestamp(2017, JULY, 30, 18, 0, 0)), (timestamp(2017, JULY, 30, 8, 0, 0)));
assertEquals(applyTimezone(timestamp(2017, SEPTEMBER, 30, 0, 0, 0)), (timestamp(2017, SEPTEMBER, 29, 14, 0, 0)));
assertEquals(applyTimezone(timestamp(2017, SEPTEMBER, 30, 10, 0, 0)), (timestamp(2017, SEPTEMBER, 30, 0, 0, 0)));
assertEquals(applyTimezone(timestamp(2017, SEPTEMBER, 30, 11, 0, 0)), (timestamp(2017, SEPTEMBER, 30, 1, 0, 0)));
assertEquals(applyTimezone(timestamp(2017, SEPTEMBER, 30, 12, 0, 0)), (timestamp(2017, SEPTEMBER, 30, 2, 0, 0)));
assertEquals(applyTimezone(timestamp(2017, SEPTEMBER, 30, 13, 0, 0)), (timestamp(2017, SEPTEMBER, 30, 3, 0, 0)));
assertEquals(applyTimezone(timestamp(2017, SEPTEMBER, 30, 22, 0, 0)), (timestamp(2017, SEPTEMBER, 30, 12, 0, 0)));
assertEquals(applyTimezone(timestamp(2017, SEPTEMBER, 30, 23, 0, 0)), (timestamp(2017, SEPTEMBER, 30, 13, 0, 0)));
assertEquals(applyTimezone(timestamp(2017, OCTOBER, 1, 0, 0, 0)), (timestamp(2017, SEPTEMBER, 30, 14, 0, 0)));
assertEquals(applyTimezone(timestamp(2017, OCTOBER, 1, 1, 0, 0)), (timestamp(2017, SEPTEMBER, 30, 15, 0, 0)));
assertEquals(applyTimezone(timestamp(2017, OCTOBER, 1, 1, 59, 0)), (timestamp(2017, SEPTEMBER, 30, 15, 59, 0)));
// DST begins
assertEquals(applyTimezone(timestamp(2017, OCTOBER, 1, 3, 0, 0)), (timestamp(2017, SEPTEMBER, 30, 16, 0, 0)));
assertEquals(applyTimezone(timestamp(2017, OCTOBER, 1, 4, 0, 0)), (timestamp(2017, SEPTEMBER, 30, 17, 0, 0)));
assertEquals(applyTimezone(timestamp(2017, OCTOBER, 1, 5, 0, 0)), (timestamp(2017, SEPTEMBER, 30, 18, 0, 0)));
assertEquals(applyTimezone(timestamp(2017, OCTOBER, 1, 11, 0, 0)), (timestamp(2017, OCTOBER, 1, 0, 0, 0)));
assertEquals(applyTimezone(timestamp(2017, OCTOBER, 1, 12, 0, 0)), (timestamp(2017, OCTOBER, 1, 1, 0, 0)));
assertEquals(applyTimezone(timestamp(2017, OCTOBER, 1, 13, 0, 0)), (timestamp(2017, OCTOBER, 1, 2, 0, 0)));
assertEquals(applyTimezone(timestamp(2017, OCTOBER, 1, 14, 0, 0)), (timestamp(2017, OCTOBER, 1, 3, 0, 0)));
assertEquals(applyTimezone(timestamp(2017, OCTOBER, 1, 15, 0, 0)), (timestamp(2017, OCTOBER, 1, 4, 0, 0)));
assertEquals(applyTimezone(timestamp(2017, OCTOBER, 1, 19, 0, 0)), (timestamp(2017, OCTOBER, 1, 8, 0, 0)));
assertEquals(applyTimezone(timestamp(2017, OCTOBER, 2, 19, 0, 0)), (timestamp(2017, OCTOBER, 2, 8, 0, 0)));
assertEquals(applyTimezone(timestamp(2017, NOVEMBER, 30, 19, 0, 0)), (timestamp(2017, NOVEMBER, 30, 8, 0, 0)));
assertEquals(applyTimezone(timestamp(2018, MARCH, 31, 0, 0, 0)), (timestamp(2018, MARCH, 30, 13, 0, 0)));
assertEquals(applyTimezone(timestamp(2018, MARCH, 31, 12, 0, 0)), (timestamp(2018, MARCH, 31, 1, 0, 0)));
assertEquals(applyTimezone(timestamp(2018, MARCH, 31, 18, 0, 0)), (timestamp(2018, MARCH, 31, 7, 0, 0)));
assertEquals(applyTimezone(timestamp(2018, APRIL, 1, 0, 0, 0)), (timestamp(2018, MARCH, 31, 13, 0, 0)));
assertEquals(applyTimezone(timestamp(2018, APRIL, 1, 1, 0, 0)), (timestamp(2018, MARCH, 31, 14, 0, 0)));
assertEquals(applyTimezone(timestamp(2018, APRIL, 1, 1, 59, 0)), (timestamp(2018, MARCH, 31, 14, 59, 0)));
// DST ends
assertEquals(applyTimezone(timestamp(2018, APRIL, 1, 2, 0, 0)), (timestamp(2018, MARCH, 31, 16, 0, 0)));
assertEquals(applyTimezone(timestamp(2018, APRIL, 1, 3, 0, 0)), (timestamp(2018, MARCH, 31, 17, 0, 0)));
assertEquals(applyTimezone(timestamp(2018, APRIL, 1, 4, 0, 0)), (timestamp(2018, MARCH, 31, 18, 0, 0)));
assertEquals(applyTimezone(timestamp(2018, APRIL, 1, 10, 0, 0)), (timestamp(2018, APRIL, 1, 0, 0, 0)));
assertEquals(applyTimezone(timestamp(2018, APRIL, 1, 18, 0, 0)), (timestamp(2018, APRIL, 1, 8, 0, 0)));
}

@Test
public void test_removeTimezone()
{
DateUtils.setFixedTimeZone(TimeZone.getTimeZone("Australia/Sydney"));
assertEquals(removeTimezone(timestamp(2017, JULY, 30, 8, 0, 0)), (timestamp(2017, JULY, 30, 18, 0, 0)));
assertEquals(removeTimezone(timestamp(2017, SEPTEMBER, 29, 14, 0, 0)), (timestamp(2017, SEPTEMBER, 30, 0, 0, 0)));
assertEquals(removeTimezone(timestamp(2017, SEPTEMBER, 30, 0, 0, 0)), (timestamp(2017, SEPTEMBER, 30, 10, 0, 0)));
assertEquals(removeTimezone(timestamp(2017, SEPTEMBER, 30, 1, 0, 0)), (timestamp(2017, SEPTEMBER, 30, 11, 0, 0)));
assertEquals(removeTimezone(timestamp(2017, SEPTEMBER, 30, 2, 0, 0)), (timestamp(2017, SEPTEMBER, 30, 12, 0, 0)));
assertEquals(removeTimezone(timestamp(2017, SEPTEMBER, 30, 3, 0, 0)), (timestamp(2017, SEPTEMBER, 30, 13, 0, 0)));
assertEquals(removeTimezone(timestamp(2017, SEPTEMBER, 30, 12, 0, 0)), (timestamp(2017, SEPTEMBER, 30, 22, 0, 0)));
assertEquals(removeTimezone(timestamp(2017, SEPTEMBER, 30, 13, 0, 0)), (timestamp(2017, SEPTEMBER, 30, 23, 0, 0)));
assertEquals(removeTimezone(timestamp(2017, SEPTEMBER, 30, 14, 0, 0)), (timestamp(2017, OCTOBER, 1, 0, 0, 0)));
assertEquals(removeTimezone(timestamp(2017, SEPTEMBER, 30, 15, 0, 0)), (timestamp(2017, OCTOBER, 1, 1, 0, 0)));
assertEquals(removeTimezone(timestamp(2017, SEPTEMBER, 30, 15, 59, 0)), (timestamp(2017, OCTOBER, 1, 1, 59, 0)));
// DST begins
assertEquals(removeTimezone(timestamp(2017, SEPTEMBER, 30, 16, 0, 0)), (timestamp(2017, OCTOBER, 1, 3, 0, 0)));
assertEquals(removeTimezone(timestamp(2017, SEPTEMBER, 30, 17, 0, 0)), (timestamp(2017, OCTOBER, 1, 4, 0, 0)));
assertEquals(removeTimezone(timestamp(2017, SEPTEMBER, 30, 18, 0, 0)), (timestamp(2017, OCTOBER, 1, 5, 0, 0)));
assertEquals(removeTimezone(timestamp(2017, OCTOBER, 1, 0, 0, 0)), (timestamp(2017, OCTOBER, 1, 11, 0, 0)));
assertEquals(removeTimezone(timestamp(2017, OCTOBER, 1, 1, 0, 0)), (timestamp(2017, OCTOBER, 1, 12, 0, 0)));
assertEquals(removeTimezone(timestamp(2017, OCTOBER, 1, 2, 0, 0)), (timestamp(2017, OCTOBER, 1, 13, 0, 0)));
assertEquals(removeTimezone(timestamp(2017, OCTOBER, 1, 3, 0, 0)), (timestamp(2017, OCTOBER, 1, 14, 0, 0)));
assertEquals(removeTimezone(timestamp(2017, OCTOBER, 1, 4, 0, 0)), (timestamp(2017, OCTOBER, 1, 15, 0, 0)));
assertEquals(removeTimezone(timestamp(2017, OCTOBER, 1, 8, 0, 0)), (timestamp(2017, OCTOBER, 1, 19, 0, 0)));
assertEquals(removeTimezone(timestamp(2017, OCTOBER, 2, 8, 0, 0)), (timestamp(2017, OCTOBER, 2, 19, 0, 0)));
assertEquals(removeTimezone(timestamp(2017, NOVEMBER, 30, 8, 0, 0)), (timestamp(2017, NOVEMBER, 30, 19, 0, 0)));
assertEquals(removeTimezone(timestamp(2018, MARCH, 30, 13, 0, 0)), (timestamp(2018, MARCH, 31, 0, 0, 0)));
assertEquals(removeTimezone(timestamp(2018, MARCH, 31, 1, 0, 0)), (timestamp(2018, MARCH, 31, 12, 0, 0)));
assertEquals(removeTimezone(timestamp(2018, MARCH, 31, 7, 0, 0)), (timestamp(2018, MARCH, 31, 18, 0, 0)));
assertEquals(removeTimezone(timestamp(2018, MARCH, 31, 13, 0, 0)), (timestamp(2018, APRIL, 1, 0, 0, 0)));
assertEquals(removeTimezone(timestamp(2018, MARCH, 31, 14, 0, 0)), (timestamp(2018, APRIL, 1, 1, 0, 0)));
assertEquals(removeTimezone(timestamp(2018, MARCH, 31, 14, 59, 0)), (timestamp(2018, APRIL, 1, 1, 59, 0)));
// DST ends
assertEquals(removeTimezone(timestamp(2018, MARCH, 31, 16, 0, 0)), (timestamp(2018, APRIL, 1, 2, 0, 0)));
assertEquals(removeTimezone(timestamp(2018, MARCH, 31, 17, 0, 0)), (timestamp(2018, APRIL, 1, 3, 0, 0)));
assertEquals(removeTimezone(timestamp(2018, MARCH, 31, 18, 0, 0)), (timestamp(2018, APRIL, 1, 4, 0, 0)));
assertEquals(removeTimezone(timestamp(2018, APRIL, 1, 0, 0, 0)), (timestamp(2018, APRIL, 1, 10, 0, 0)));
assertEquals(removeTimezone(timestamp(2018, APRIL, 1, 8, 0, 0)), (timestamp(2018, APRIL, 1, 18, 0, 0)));
}
}

0 comments on commit bf3964a

Please sign in to comment.