diff --git a/.github/workflows/build-nightly.yml b/.github/workflows/build-nightly.yml index 7193122..cc81036 100644 --- a/.github/workflows/build-nightly.yml +++ b/.github/workflows/build-nightly.yml @@ -29,7 +29,6 @@ jobs: - name: Build APK run: | - chmod +x gradlew ./gradlew assembleNightly mv app/build/outputs/apk/nightly/app-nightly-unsigned.apk app/NotiFilter_nightly.apk diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index c60a7b2..c5c324e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -21,9 +21,7 @@ jobs: cache: "gradle" - name: Build APK - run: | - chmod +x gradlew - ./gradlew assembleRelease + run: ./gradlew assembleRelease - name: Sign APK env: diff --git a/.github/workflows/run_tests.yml b/.github/workflows/run_tests.yml new file mode 100644 index 0000000..b59262f --- /dev/null +++ b/.github/workflows/run_tests.yml @@ -0,0 +1,23 @@ +name: run tests + +on: + push: + branches: + - dev + +jobs: + run-tests: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup JDK + uses: actions/setup-java@v4 + with: + java-version: 17 + distribution: "temurin" + cache: "gradle" + + - name: Run tests + run: ./gradlew testReleaseUnitTest diff --git a/app/build.gradle.kts b/app/build.gradle.kts index b64d21d..c361cd9 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -19,8 +19,8 @@ android { applicationId = "co.adityarajput.notifilter" minSdk = 29 targetSdk = 36 - versionCode = 29 - versionName = "4.9.1" + versionCode = 30 + versionName = "4.10.0" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } diff --git a/app/src/main/java/co/adityarajput/notifilter/data/models/Schedule.kt b/app/src/main/java/co/adityarajput/notifilter/data/models/Schedule.kt index 684cac5..dda967a 100644 --- a/app/src/main/java/co/adityarajput/notifilter/data/models/Schedule.kt +++ b/app/src/main/java/co/adityarajput/notifilter/data/models/Schedule.kt @@ -43,11 +43,14 @@ data class Schedule( } } - fun includesNow(): Boolean { - val calendar = Calendar.getInstance() + fun includesNow(calendar: Calendar = Calendar.getInstance()): Boolean { + val minuteOfDay = + calendar.get(Calendar.HOUR_OF_DAY) * 60 + calendar.get(Calendar.MINUTE) + return days.contains(calendar.get(Calendar.DAY_OF_WEEK)) && - calendar.get(Calendar.HOUR_OF_DAY) * 60 + calendar.get(Calendar.MINUTE) in start..end + ((start < end && minuteOfDay in start..end) + || (end < start && minuteOfDay !in (end + 1).. NotiFilter NotiFilter - 4.9.1 + 4.10.0 No filters added.\nTap + to get started. diff --git a/app/src/test/java/co/adityarajput/notifilter/data/models/ScheduleTest.kt b/app/src/test/java/co/adityarajput/notifilter/data/models/ScheduleTest.kt new file mode 100644 index 0000000..a21a40b --- /dev/null +++ b/app/src/test/java/co/adityarajput/notifilter/data/models/ScheduleTest.kt @@ -0,0 +1,74 @@ +package co.adityarajput.notifilter.data.models + +import org.junit.Assert.assertFalse +import org.junit.Assert.assertTrue +import org.junit.Test +import java.util.Calendar + +@Suppress("TestFunctionName") +class ScheduleTest { + val mondayTenAM: Calendar = Calendar.getInstance().apply { + set(Calendar.DAY_OF_WEEK, Calendar.MONDAY) + set(Calendar.HOUR_OF_DAY, 10) + set(Calendar.MINUTE, 0) + } + + val tuesdayNinePM: Calendar = Calendar.getInstance().apply { + set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY) + set(Calendar.HOUR_OF_DAY, 21) + set(Calendar.MINUTE, 0) + } + + val saturdayElevenPM: Calendar = Calendar.getInstance().apply { + set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY) + set(Calendar.HOUR_OF_DAY, 23) + set(Calendar.MINUTE, 0) + } + + val atWork = Schedule( + 9 * 60, + (12 + 5) * 60, + setOf( + Calendar.MONDAY, + Calendar.TUESDAY, + Calendar.WEDNESDAY, + Calendar.THURSDAY, + Calendar.FRIDAY, + ), + ) + + val atHome = Schedule( + (12 + 5) * 60, + 9 * 60, + setOf( + Calendar.MONDAY, + Calendar.TUESDAY, + Calendar.WEDNESDAY, + Calendar.THURSDAY, + Calendar.FRIDAY, + ), + ) + + val weekend = Schedule(days = setOf(Calendar.SATURDAY, Calendar.SUNDAY)) + + @Test + fun Schedule_includesNow_correct() { + assertTrue(atWork.includesNow(mondayTenAM)) + assertTrue(atHome.includesNow(tuesdayNinePM)) + assertTrue(weekend.includesNow(saturdayElevenPM)) + } + + @Test + fun Schedule_includesNow_incorrectDay() { + assertFalse(atWork.includesNow(saturdayElevenPM)) + assertFalse(atHome.includesNow(saturdayElevenPM)) + assertFalse(weekend.includesNow(mondayTenAM)) + assertFalse(weekend.includesNow(tuesdayNinePM)) + } + + @Test + fun Schedule_includesNow_incorrectTime() { + assertFalse(atWork.includesNow(tuesdayNinePM)) + assertFalse(atHome.includesNow(mondayTenAM)) + } +} diff --git a/gradlew b/gradlew old mode 100644 new mode 100755 diff --git a/metadata/en-US/changelogs/30.txt b/metadata/en-US/changelogs/30.txt new file mode 100644 index 0000000..33f32eb --- /dev/null +++ b/metadata/en-US/changelogs/30.txt @@ -0,0 +1,5 @@ +• feat: Support overnight schedules + +Intervals like 9pm to 7am (of the next day) are now supported. + +Note that the schedule must include the correct days of the week. For example, if you want to schedule something from 9pm on Monday to 7am on Tuesday, both Monday and Tuesday must be active.