mirror of
https://github.com/iSoron/uhabits.git
synced 2025-12-06 09:08:52 -06:00
Merge branch 'hotfix/1.7.7'
This commit is contained in:
@@ -1,5 +1,9 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
### 1.7.7 (September 30, 2017)
|
||||||
|
|
||||||
|
* Fix bug that caused reminders to show repeatedly on DST changes
|
||||||
|
|
||||||
### 1.7.6 (July 18, 2017)
|
### 1.7.6 (July 18, 2017)
|
||||||
|
|
||||||
* Fix bug that caused widgets not to render sometimes
|
* Fix bug that caused widgets not to render sometimes
|
||||||
|
|||||||
@@ -8,14 +8,14 @@ android {
|
|||||||
compileSdkVersion 25
|
compileSdkVersion 25
|
||||||
buildToolsVersion "25.0.2"
|
buildToolsVersion "25.0.2"
|
||||||
|
|
||||||
signingConfigs {
|
// signingConfigs {
|
||||||
release {
|
// release {
|
||||||
storeFile file(LOOP_STORE_FILE)
|
// storeFile file(LOOP_STORE_FILE)
|
||||||
storePassword LOOP_STORE_PASSWORD
|
// storePassword LOOP_STORE_PASSWORD
|
||||||
keyAlias LOOP_KEY_ALIAS
|
// keyAlias LOOP_KEY_ALIAS
|
||||||
keyPassword LOOP_KEY_PASSWORD
|
// keyPassword LOOP_KEY_PASSWORD
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
playAccountConfigs {
|
playAccountConfigs {
|
||||||
defaultAccountConfig {
|
defaultAccountConfig {
|
||||||
@@ -35,14 +35,14 @@ android {
|
|||||||
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
|
||||||
testInstrumentationRunnerArgument "size", "medium"
|
testInstrumentationRunnerArgument "size", "medium"
|
||||||
|
|
||||||
playAccountConfig = playAccountConfigs.defaultAccountConfig
|
// playAccountConfig = playAccountConfigs.defaultAccountConfig
|
||||||
}
|
}
|
||||||
|
|
||||||
buildTypes {
|
buildTypes {
|
||||||
release {
|
release {
|
||||||
minifyEnabled false
|
minifyEnabled false
|
||||||
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
|
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
|
||||||
signingConfig signingConfigs.release
|
// signingConfig signingConfigs.release
|
||||||
}
|
}
|
||||||
debug {
|
debug {
|
||||||
testCoverageEnabled = false
|
testCoverageEnabled = false
|
||||||
@@ -161,6 +161,6 @@ task coverageReport(type: JacocoReport, dependsOn: ['testDebugUnitTest']) {
|
|||||||
executionData = files(jvmExecData, connectedExecData)
|
executionData = files(jvmExecData, connectedExecData)
|
||||||
}
|
}
|
||||||
|
|
||||||
play {
|
//play {
|
||||||
track = 'alpha'
|
// track = 'alpha'
|
||||||
}
|
//}
|
||||||
|
|||||||
@@ -21,8 +21,8 @@
|
|||||||
<manifest
|
<manifest
|
||||||
package="org.isoron.uhabits"
|
package="org.isoron.uhabits"
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:versionCode="33"
|
android:versionCode="35"
|
||||||
android:versionName="1.7.6">
|
android:versionName="1.7.8">
|
||||||
|
|
||||||
<uses-permission android:name="android.permission.VIBRATE"/>
|
<uses-permission android:name="android.permission.VIBRATE"/>
|
||||||
|
|
||||||
|
|||||||
@@ -42,8 +42,7 @@ public abstract class DateUtils
|
|||||||
public static long applyTimezone(long localTimestamp)
|
public static long applyTimezone(long localTimestamp)
|
||||||
{
|
{
|
||||||
TimeZone tz = getTimezone();
|
TimeZone tz = getTimezone();
|
||||||
long now = new Date(localTimestamp).getTime();
|
return localTimestamp - tz.getOffset(localTimestamp - tz.getOffset(localTimestamp));
|
||||||
return now - tz.getOffset(now);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String formatHeaderDate(GregorianCalendar day)
|
public static String formatHeaderDate(GregorianCalendar day)
|
||||||
@@ -230,8 +229,7 @@ public abstract class DateUtils
|
|||||||
public static long removeTimezone(long timestamp)
|
public static long removeTimezone(long timestamp)
|
||||||
{
|
{
|
||||||
TimeZone tz = getTimezone();
|
TimeZone tz = getTimezone();
|
||||||
long now = new Date(timestamp).getTime();
|
return timestamp + tz.getOffset(timestamp);
|
||||||
return now + tz.getOffset(now);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setFixedLocalTime(Long timestamp)
|
public static void setFixedLocalTime(Long timestamp)
|
||||||
|
|||||||
@@ -58,4 +58,11 @@ public class BaseUnitTest
|
|||||||
cal.set(year, month, day);
|
cal.set(year, month, day);
|
||||||
return cal.getTimeInMillis();
|
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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,8 +25,11 @@ import org.junit.*;
|
|||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
import static java.util.Calendar.*;
|
import static java.util.Calendar.*;
|
||||||
|
import static junit.framework.Assert.assertEquals;
|
||||||
import static org.hamcrest.CoreMatchers.*;
|
import static org.hamcrest.CoreMatchers.*;
|
||||||
import static org.hamcrest.MatcherAssert.*;
|
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
|
public class DateUtilsTest extends BaseUnitTest
|
||||||
{
|
{
|
||||||
@@ -147,4 +150,86 @@ public class DateUtilsTest extends BaseUnitTest
|
|||||||
assertThat(DateUtils.getDaysBetween(t1, t3), equalTo(365));
|
assertThat(DateUtils.getDaysBetween(t1, t3), equalTo(365));
|
||||||
assertThat(DateUtils.getDaysBetween(t3, t1), 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)));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user