├── .idea ├── .name ├── misc.xml └── runConfigurations.xml ├── app ├── .gitignore ├── src │ ├── main │ │ ├── res │ │ │ ├── xml │ │ │ │ ├── backup_descriptor.xml │ │ │ │ ├── data_extraction_rules.xml │ │ │ │ ├── daydream_clock.xml │ │ │ │ ├── widget_naturalhour_3x2.xml │ │ │ │ ├── widget_naturalhour_4x3.xml │ │ │ │ ├── widget_naturalhour_5x3.xml │ │ │ │ └── pref_tile.xml │ │ │ ├── drawable-hdpi │ │ │ │ ├── ic_add.png │ │ │ │ ├── ic_about.png │ │ │ │ ├── ic_alarm.png │ │ │ │ ├── ic_back.png │ │ │ │ ├── ic_delete.png │ │ │ │ ├── ic_done.png │ │ │ │ ├── ic_edit.png │ │ │ │ ├── ic_help.png │ │ │ │ ├── ic_save.png │ │ │ │ ├── ic_share.png │ │ │ │ ├── ic_today.png │ │ │ │ ├── ic_palette.png │ │ │ │ ├── ic_settings.png │ │ │ │ ├── ic_about_light.png │ │ │ │ ├── ic_add_light.png │ │ │ │ ├── ic_alarm_light.png │ │ │ │ ├── ic_back_light.png │ │ │ │ ├── ic_done_light.png │ │ │ │ ├── ic_edit_light.png │ │ │ │ ├── ic_help_light.png │ │ │ │ ├── ic_save_light.png │ │ │ │ ├── ic_share_light.png │ │ │ │ ├── ic_today_light.png │ │ │ │ ├── ic_delete_light.png │ │ │ │ ├── ic_fullscreen_on.png │ │ │ │ ├── ic_palette_light.png │ │ │ │ ├── ic_fullscreen_off.png │ │ │ │ ├── ic_settings_light.png │ │ │ │ ├── ic_fullscreen_off_light.png │ │ │ │ └── ic_fullscreen_on_light.png │ │ │ ├── drawable-mdpi │ │ │ │ ├── ic_add.png │ │ │ │ ├── ic_about.png │ │ │ │ ├── ic_alarm.png │ │ │ │ ├── ic_back.png │ │ │ │ ├── ic_delete.png │ │ │ │ ├── ic_done.png │ │ │ │ ├── ic_edit.png │ │ │ │ ├── ic_help.png │ │ │ │ ├── ic_save.png │ │ │ │ ├── ic_share.png │ │ │ │ ├── ic_today.png │ │ │ │ ├── ic_palette.png │ │ │ │ ├── ic_settings.png │ │ │ │ ├── ic_about_light.png │ │ │ │ ├── ic_add_light.png │ │ │ │ ├── ic_alarm_light.png │ │ │ │ ├── ic_back_light.png │ │ │ │ ├── ic_done_light.png │ │ │ │ ├── ic_edit_light.png │ │ │ │ ├── ic_help_light.png │ │ │ │ ├── ic_save_light.png │ │ │ │ ├── ic_share_light.png │ │ │ │ ├── ic_today_light.png │ │ │ │ ├── ic_delete_light.png │ │ │ │ ├── ic_fullscreen_on.png │ │ │ │ ├── ic_palette_light.png │ │ │ │ ├── ic_fullscreen_off.png │ │ │ │ ├── ic_settings_light.png │ │ │ │ ├── ic_fullscreen_off_light.png │ │ │ │ └── ic_fullscreen_on_light.png │ │ │ ├── drawable-xhdpi │ │ │ │ ├── ic_about.png │ │ │ │ ├── ic_add.png │ │ │ │ ├── ic_alarm.png │ │ │ │ ├── ic_back.png │ │ │ │ ├── ic_done.png │ │ │ │ ├── ic_edit.png │ │ │ │ ├── ic_help.png │ │ │ │ ├── ic_save.png │ │ │ │ ├── ic_share.png │ │ │ │ ├── ic_today.png │ │ │ │ ├── ic_delete.png │ │ │ │ ├── ic_palette.png │ │ │ │ ├── ic_add_light.png │ │ │ │ ├── ic_back_light.png │ │ │ │ ├── ic_done_light.png │ │ │ │ ├── ic_edit_light.png │ │ │ │ ├── ic_help_light.png │ │ │ │ ├── ic_save_light.png │ │ │ │ ├── ic_settings.png │ │ │ │ ├── ic_about_light.png │ │ │ │ ├── ic_alarm_light.png │ │ │ │ ├── ic_delete_light.png │ │ │ │ ├── ic_share_light.png │ │ │ │ ├── ic_today_light.png │ │ │ │ ├── ic_fullscreen_off.png │ │ │ │ ├── ic_fullscreen_on.png │ │ │ │ ├── ic_palette_light.png │ │ │ │ ├── ic_settings_light.png │ │ │ │ ├── ic_fullscreen_off_light.png │ │ │ │ └── ic_fullscreen_on_light.png │ │ │ ├── drawable-xxhdpi │ │ │ │ ├── ic_add.png │ │ │ │ ├── ic_back.png │ │ │ │ ├── ic_done.png │ │ │ │ ├── ic_edit.png │ │ │ │ ├── ic_help.png │ │ │ │ ├── ic_save.png │ │ │ │ ├── ic_about.png │ │ │ │ ├── ic_alarm.png │ │ │ │ ├── ic_delete.png │ │ │ │ ├── ic_share.png │ │ │ │ ├── ic_today.png │ │ │ │ ├── ic_add_light.png │ │ │ │ ├── ic_palette.png │ │ │ │ ├── ic_settings.png │ │ │ │ ├── ic_about_light.png │ │ │ │ ├── ic_alarm_light.png │ │ │ │ ├── ic_back_light.png │ │ │ │ ├── ic_done_light.png │ │ │ │ ├── ic_edit_light.png │ │ │ │ ├── ic_help_light.png │ │ │ │ ├── ic_save_light.png │ │ │ │ ├── ic_share_light.png │ │ │ │ ├── ic_today_light.png │ │ │ │ ├── ic_delete_light.png │ │ │ │ ├── ic_fullscreen_off.png │ │ │ │ ├── ic_fullscreen_on.png │ │ │ │ ├── ic_palette_light.png │ │ │ │ ├── ic_settings_light.png │ │ │ │ ├── ic_fullscreen_on_light.png │ │ │ │ └── ic_fullscreen_off_light.png │ │ │ ├── mipmap-hdpi │ │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-mdpi │ │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xhdpi │ │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xxhdpi │ │ │ │ └── ic_launcher.png │ │ │ ├── values-v24 │ │ │ │ └── attrs.xml │ │ │ ├── mipmap-xxxhdpi │ │ │ │ └── ic_launcher.png │ │ │ ├── values │ │ │ │ ├── tiles.xml │ │ │ │ ├── launcher.xml │ │ │ │ ├── dimens.xml │ │ │ │ ├── help_urls.xml │ │ │ │ ├── icons.xml │ │ │ │ └── daydream.xml │ │ │ ├── values-en │ │ │ │ └── help_urls.xml │ │ │ ├── values-es │ │ │ │ └── help_urls.xml │ │ │ ├── values-fr │ │ │ │ └── help_urls.xml │ │ │ ├── values-en-rCA │ │ │ │ └── help_urls.xml │ │ │ ├── values-en-rUS │ │ │ │ └── help_urls.xml │ │ │ ├── values-es-rMX │ │ │ │ └── help_urls.xml │ │ │ ├── values-fr-rCA │ │ │ │ └── help_urls.xml │ │ │ ├── values-night │ │ │ │ ├── daydream.xml │ │ │ │ ├── styles.xml │ │ │ │ ├── icons.xml │ │ │ │ └── clockface.xml │ │ │ ├── values-v14 │ │ │ │ └── widget.xml │ │ │ ├── drawable │ │ │ │ ├── toast_frame.xml │ │ │ │ ├── tilecard_bg_dark.xml │ │ │ │ ├── tilecard_bg_light.xml │ │ │ │ └── ic_time.xml │ │ │ ├── values-v16 │ │ │ │ └── styles.xml │ │ │ ├── drawable-anydpi │ │ │ │ ├── widget_bg_dark.xml │ │ │ │ ├── ic_add.xml │ │ │ │ ├── ic_add_light.xml │ │ │ │ ├── ic_done.xml │ │ │ │ ├── ic_done_light.xml │ │ │ │ ├── ic_back.xml │ │ │ │ ├── ic_back_light.xml │ │ │ │ ├── ic_fullscreen_on.xml │ │ │ │ ├── ic_fullscreen_on_light.xml │ │ │ │ ├── ic_delete.xml │ │ │ │ ├── ic_delete_light.xml │ │ │ │ ├── ic_about.xml │ │ │ │ ├── ic_about_light.xml │ │ │ │ ├── ic_fullscreen_off.xml │ │ │ │ ├── ic_fullscreen_off_light.xml │ │ │ │ ├── ic_save.xml │ │ │ │ ├── ic_edit.xml │ │ │ │ ├── ic_save_light.xml │ │ │ │ ├── ic_edit_light.xml │ │ │ │ ├── ic_today.xml │ │ │ │ ├── ic_today_light.xml │ │ │ │ ├── ic_alarm.xml │ │ │ │ ├── ic_alarm_light.xml │ │ │ │ ├── ic_help.xml │ │ │ │ ├── ic_help_light.xml │ │ │ │ ├── ic_share.xml │ │ │ │ ├── ic_share_light.xml │ │ │ │ ├── ic_palette.xml │ │ │ │ ├── ic_palette_light.xml │ │ │ │ ├── ic_settings.xml │ │ │ │ └── ic_settings_light.xml │ │ │ ├── mipmap-anydpi-v26 │ │ │ │ └── ic_launcher.xml │ │ │ ├── menu │ │ │ │ ├── menu_alarm1.xml │ │ │ │ ├── menu_daydream.xml │ │ │ │ ├── menu_alarm.xml │ │ │ │ ├── menu_widget.xml │ │ │ │ ├── menu_coloredit.xml │ │ │ │ ├── menu_colorlist.xml │ │ │ │ ├── menu_colorsheet.xml │ │ │ │ ├── menu_timeformat.xml │ │ │ │ ├── menu_main.xml │ │ │ │ ├── menu_jumpto.xml │ │ │ │ └── menu_timezone.xml │ │ │ ├── color │ │ │ │ ├── textbutton_date.xml │ │ │ │ ├── card_background_dark.xml │ │ │ │ └── card_background_light.xml │ │ │ ├── values-v28 │ │ │ │ └── styles.xml │ │ │ ├── layout │ │ │ │ ├── fragment_nightwatch_selector.xml │ │ │ │ ├── layout_listitem_hourmode.xml │ │ │ │ ├── layout_listitem_coloredit.xml │ │ │ │ ├── activity_daydream.xml │ │ │ │ ├── fragment_naturalhour.xml │ │ │ │ ├── layout_dialog_alert.xml │ │ │ │ ├── content_main.xml │ │ │ │ ├── layout_dialog_timeoffset.xml │ │ │ │ ├── activity_widget.xml │ │ │ │ ├── fragment_colorsheet.xml │ │ │ │ ├── fragment_naturalhour_selector.xml │ │ │ │ ├── widget_naturalhour_3x3.xml │ │ │ │ ├── activity_tileconfig.xml │ │ │ │ ├── activity_daydream_config.xml │ │ │ │ ├── activity_colorsheet.xml │ │ │ │ ├── activity_alarm.xml │ │ │ │ ├── layout_listitem_colors.xml │ │ │ │ ├── dialog_alarms.xml │ │ │ │ ├── content_bottombar.xml │ │ │ │ ├── dialog_help.xml │ │ │ │ ├── fragment_colorselector.xml │ │ │ │ └── activity_main.xml │ │ │ ├── values-v21 │ │ │ │ └── styles.xml │ │ │ ├── drawable-v23 │ │ │ │ └── toast_frame.xml │ │ │ └── layout-land │ │ │ │ └── card_naturalhour.xml │ │ ├── ic_launcher-playstore.png │ │ └── java │ │ │ └── com │ │ │ └── forrestguice │ │ │ └── suntimes │ │ │ └── naturalhour │ │ │ ├── ui │ │ │ ├── widget │ │ │ │ ├── NaturalHourWidget_5x3_ConfigActivity.java │ │ │ │ ├── NaturalHourWidget_3x2_ConfigActivity.java │ │ │ │ ├── NaturalHourWidget_4x3_ConfigActivity.java │ │ │ │ ├── NaturalHourWidget_4x3.java │ │ │ │ ├── NaturalHourWidget_5x3.java │ │ │ │ └── NaturalHourWidget_3x2.java │ │ │ ├── tiles │ │ │ │ ├── TilePreferenceFragment.java │ │ │ │ ├── TileLockScreenActivity.java │ │ │ │ ├── NaturalHourTileConfigActivity.java │ │ │ │ └── SuntimesTileActivity.java │ │ │ ├── alarms │ │ │ │ └── AlarmSelectFragment.java │ │ │ ├── daydream │ │ │ │ ├── DaydreamClockView.java │ │ │ │ └── ClockDaydreamBitmap.java │ │ │ ├── ThrottledClickListener.java │ │ │ ├── IntListPreference.java │ │ │ ├── colors │ │ │ │ └── ColorUtils.java │ │ │ └── Toast.java │ │ │ ├── data │ │ │ ├── NaturalHourCalculator2.java │ │ │ ├── NaturalHourCalculator1.java │ │ │ ├── TimeZoneWrapper.java │ │ │ ├── ExecutorUtils.java │ │ │ └── alarms │ │ │ │ └── NaturalHourAlarmType.java │ │ │ └── ExceptionHandler.java │ ├── nightly │ │ └── res │ │ │ └── values │ │ │ └── launcher.xml │ ├── test │ │ └── java │ │ │ └── com │ │ │ └── forrestguice │ │ │ └── suntimes │ │ │ └── naturalhour │ │ │ └── ExampleUnitTest.java │ └── androidTest │ │ └── java │ │ └── com │ │ └── forrestguice │ │ └── suntimes │ │ └── naturalhour │ │ ├── espresso │ │ ├── DataInteractionHelper.java │ │ ├── ViewInteractionHelper.java │ │ ├── ViewAssertionHelper.java │ │ └── action │ │ │ └── ViewActionsContrib.java │ │ ├── ExampleInstrumentedTest.java │ │ ├── ui │ │ ├── widget │ │ │ ├── Widget3x2ConfigActivityTest.java │ │ │ ├── Widget4x3ConfigActivityTest.java │ │ │ └── Widget5x3ConfigActivityTest.java │ │ └── tiles │ │ │ └── TileLockScreenActivityTest.java │ │ └── SettingsActivityTest.java └── proguard-rules.pro ├── fastlane └── metadata │ └── android │ └── en-US │ ├── changelogs │ ├── 1.txt │ ├── 2.txt │ ├── 5.txt │ ├── 4.txt │ ├── 3.txt │ ├── 8.txt │ ├── 6.txt │ └── 7.txt │ ├── short_description.txt │ ├── images │ ├── icon.png │ ├── featureGraphic.png │ └── phoneScreenshots │ │ ├── 1.png │ │ ├── 2.png │ │ ├── 3.png │ │ └── 4.png │ └── full_description.txt ├── .gitattributes ├── .gitmodules ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── settings.gradle ├── .github ├── ISSUE_TEMPLATE │ ├── feature_request.md │ └── bug_report.md ├── FUNDING.yml └── workflows │ ├── main.yml │ ├── nightly.yml │ └── release.yml ├── gradle.properties ├── .gitignore └── gradlew.bat /.idea/.name: -------------------------------------------------------------------------------- 1 | Natural Hour -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/1.txt: -------------------------------------------------------------------------------- 1 | - first release -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /app/src/main/res/xml/backup_descriptor.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/short_description.txt: -------------------------------------------------------------------------------- 1 | A 24-hour clock and roman timekeeping add-on for Suntimes. -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "SuntimesAddon"] 2 | path = SuntimesAddon 3 | url = https://github.com/forrestguice/SuntimesAddon 4 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/2.txt: -------------------------------------------------------------------------------- 1 | - repeating alarms and notifications (requires `Suntimes v0.14.0` or later). -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /app/src/main/ic_launcher-playstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/ic_launcher-playstore.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-hdpi/ic_add.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-mdpi/ic_add.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_about.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-hdpi/ic_about.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_alarm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-hdpi/ic_alarm.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-hdpi/ic_back.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-hdpi/ic_delete.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_done.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-hdpi/ic_done.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_edit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-hdpi/ic_edit.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_help.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-hdpi/ic_help.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_save.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-hdpi/ic_save.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_share.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-hdpi/ic_share.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_today.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-hdpi/ic_today.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_about.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-mdpi/ic_about.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_alarm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-mdpi/ic_alarm.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-mdpi/ic_back.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-mdpi/ic_delete.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_done.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-mdpi/ic_done.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_edit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-mdpi/ic_edit.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_help.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-mdpi/ic_help.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_save.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-mdpi/ic_save.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_share.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-mdpi/ic_share.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_today.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-mdpi/ic_today.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_about.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-xhdpi/ic_about.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-xhdpi/ic_add.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_alarm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-xhdpi/ic_alarm.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-xhdpi/ic_back.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_done.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-xhdpi/ic_done.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_edit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-xhdpi/ic_edit.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_help.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-xhdpi/ic_help.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_save.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-xhdpi/ic_save.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_share.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-xhdpi/ic_share.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_today.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-xhdpi/ic_today.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-xxhdpi/ic_add.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-xxhdpi/ic_back.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_done.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-xxhdpi/ic_done.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_edit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-xxhdpi/ic_edit.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_help.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-xxhdpi/ic_help.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_save.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-xxhdpi/ic_save.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_palette.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-hdpi/ic_palette.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-hdpi/ic_settings.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_palette.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-mdpi/ic_palette.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-mdpi/ic_settings.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-xhdpi/ic_delete.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_palette.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-xhdpi/ic_palette.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_about.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-xxhdpi/ic_about.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_alarm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-xxhdpi/ic_alarm.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-xxhdpi/ic_delete.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_share.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-xxhdpi/ic_share.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_today.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-xxhdpi/ic_today.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/values-v24/attrs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | true 4 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_about_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-hdpi/ic_about_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_add_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-hdpi/ic_add_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_alarm_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-hdpi/ic_alarm_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_back_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-hdpi/ic_back_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_done_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-hdpi/ic_done_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_edit_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-hdpi/ic_edit_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_help_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-hdpi/ic_help_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_save_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-hdpi/ic_save_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_share_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-hdpi/ic_share_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_today_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-hdpi/ic_today_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_about_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-mdpi/ic_about_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_add_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-mdpi/ic_add_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_alarm_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-mdpi/ic_alarm_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_back_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-mdpi/ic_back_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_done_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-mdpi/ic_done_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_edit_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-mdpi/ic_edit_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_help_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-mdpi/ic_help_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_save_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-mdpi/ic_save_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_share_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-mdpi/ic_share_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_today_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-mdpi/ic_today_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_add_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-xhdpi/ic_add_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_back_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-xhdpi/ic_back_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_done_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-xhdpi/ic_done_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_edit_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-xhdpi/ic_edit_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_help_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-xhdpi/ic_help_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_save_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-xhdpi/ic_save_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-xhdpi/ic_settings.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_add_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-xxhdpi/ic_add_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_palette.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-xxhdpi/ic_palette.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-xxhdpi/ic_settings.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/values/tiles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16dp 4 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/fastlane/metadata/android/en-US/images/icon.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_delete_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-hdpi/ic_delete_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_fullscreen_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-hdpi/ic_fullscreen_on.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_palette_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-hdpi/ic_palette_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_delete_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-mdpi/ic_delete_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_fullscreen_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-mdpi/ic_fullscreen_on.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_palette_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-mdpi/ic_palette_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_about_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-xhdpi/ic_about_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_alarm_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-xhdpi/ic_alarm_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_delete_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-xhdpi/ic_delete_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_share_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-xhdpi/ic_share_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_today_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-xhdpi/ic_today_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_about_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-xxhdpi/ic_about_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_alarm_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-xxhdpi/ic_alarm_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_back_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-xxhdpi/ic_back_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_done_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-xxhdpi/ic_done_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_edit_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-xxhdpi/ic_edit_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_help_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-xxhdpi/ic_help_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_save_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-xxhdpi/ic_save_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_share_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-xxhdpi/ic_share_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_today_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-xxhdpi/ic_today_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_fullscreen_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-hdpi/ic_fullscreen_off.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_settings_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-hdpi/ic_settings_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_fullscreen_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-mdpi/ic_fullscreen_off.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_settings_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-mdpi/ic_settings_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_fullscreen_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-xhdpi/ic_fullscreen_off.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_fullscreen_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-xhdpi/ic_fullscreen_on.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_palette_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-xhdpi/ic_palette_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_settings_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-xhdpi/ic_settings_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_delete_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-xxhdpi/ic_delete_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_fullscreen_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-xxhdpi/ic_fullscreen_off.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_fullscreen_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-xxhdpi/ic_fullscreen_on.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_palette_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-xxhdpi/ic_palette_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_settings_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-xxhdpi/ic_settings_light.png -------------------------------------------------------------------------------- /app/src/main/res/xml/data_extraction_rules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/values-en/help_urls.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | @string/help_cb_url 4 | -------------------------------------------------------------------------------- /app/src/main/res/values-es/help_urls.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | @string/help_cb_url 4 | -------------------------------------------------------------------------------- /app/src/main/res/values-fr/help_urls.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | @string/help_cb_url 4 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_fullscreen_off_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-hdpi/ic_fullscreen_off_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_fullscreen_on_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-hdpi/ic_fullscreen_on_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_fullscreen_off_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-mdpi/ic_fullscreen_off_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_fullscreen_on_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-mdpi/ic_fullscreen_on_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_fullscreen_off_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-xhdpi/ic_fullscreen_off_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_fullscreen_on_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-xhdpi/ic_fullscreen_on_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_fullscreen_on_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-xxhdpi/ic_fullscreen_on_light.png -------------------------------------------------------------------------------- /app/src/main/res/values-en-rCA/help_urls.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | @string/help_gh_url 4 | -------------------------------------------------------------------------------- /app/src/main/res/values-en-rUS/help_urls.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | @string/help_gh_url 4 | -------------------------------------------------------------------------------- /app/src/main/res/values-es-rMX/help_urls.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | @string/help_gh_url 4 | -------------------------------------------------------------------------------- /app/src/main/res/values-fr-rCA/help_urls.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | @string/help_gh_url 4 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/featureGraphic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/fastlane/metadata/android/en-US/images/featureGraphic.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_fullscreen_off_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/app/src/main/res/drawable-xxhdpi/ic_fullscreen_off_light.png -------------------------------------------------------------------------------- /app/src/main/res/values-night/daydream.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | @color/daydream_bg_dark 4 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/fastlane/metadata/android/en-US/images/phoneScreenshots/1.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/fastlane/metadata/android/en-US/images/phoneScreenshots/2.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/fastlane/metadata/android/en-US/images/phoneScreenshots/3.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/HEAD/fastlane/metadata/android/en-US/images/phoneScreenshots/4.png -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | rootProject.name='Natural Hour' 2 | include ':SuntimesAddon', ':app' 3 | project(':SuntimesAddon').projectDir = new File(rootDir, 'SuntimesAddon/suntimesaddon/') 4 | -------------------------------------------------------------------------------- /app/src/nightly/res/values/launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | Natural Hour (Debug) 3 | #512021 4 | 5 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/values-v14/widget.xml: -------------------------------------------------------------------------------- 1 | 2 | 0dp 3 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi/widget_bg_dark.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi/ic_add.xml: -------------------------------------------------------------------------------- 1 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi/ic_add_light.xml: -------------------------------------------------------------------------------- 1 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/values-night/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi/ic_done.xml: -------------------------------------------------------------------------------- 1 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi/ic_done_light.xml: -------------------------------------------------------------------------------- 1 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi/ic_back.xml: -------------------------------------------------------------------------------- 1 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi/ic_back_light.xml: -------------------------------------------------------------------------------- 1 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi/ic_fullscreen_on.xml: -------------------------------------------------------------------------------- 1 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi/ic_fullscreen_on_light.xml: -------------------------------------------------------------------------------- 1 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi/ic_delete.xml: -------------------------------------------------------------------------------- 1 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi/ic_delete_light.xml: -------------------------------------------------------------------------------- 1 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi/ic_about.xml: -------------------------------------------------------------------------------- 1 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi/ic_about_light.xml: -------------------------------------------------------------------------------- 1 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi/ic_fullscreen_off.xml: -------------------------------------------------------------------------------- 1 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi/ic_fullscreen_off_light.xml: -------------------------------------------------------------------------------- 1 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/test/java/com/forrestguice/suntimes/naturalhour/ExampleUnitTest.java: -------------------------------------------------------------------------------- 1 | package com.forrestguice.suntimes.naturalhour; 2 | 3 | import org.junit.Test; 4 | 5 | import static org.junit.Assert.*; 6 | 7 | /** 8 | * Example local unit test, which will execute on the development machine (host). 9 | * 10 | * @see Testing documentation 11 | */ 12 | public class ExampleUnitTest { 13 | @Test 14 | public void addition_isCorrect() { 15 | assertEquals(4, 2 + 2); 16 | } 17 | } -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_alarm1.xml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/8.txt: -------------------------------------------------------------------------------- 1 | - fixes broken widgets on Android 12+ (#38). 2 | - fixes bug where alarm activity ignores the "hour mode" setting (#38). 3 | - adds fullscreen behavior; the floating action button is shown for a moment and then hides itself. 4 | - adds background option to app; "app theme" (default), "black", "home screen wallpaper", "clock colors". 5 | - adds background option to daydream: "black" (default), "clock colors" (#37). 6 | - adds daydream options; "fullscreen", "interactive", "screen bright", and "background pulse". 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi/ic_save.xml: -------------------------------------------------------------------------------- 1 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi/ic_edit.xml: -------------------------------------------------------------------------------- 1 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi/ic_save_light.xml: -------------------------------------------------------------------------------- 1 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_daydream.xml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi/ic_edit_light.xml: -------------------------------------------------------------------------------- 1 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi/ic_today.xml: -------------------------------------------------------------------------------- 1 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi/ic_today_light.xml: -------------------------------------------------------------------------------- 1 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 16dp 3 | 3dp 4 | 3dp 5 | 0dp 6 | 0dp 7 | 3dp 8 | 6dp 9 | 10 | @android:integer/config_longAnimTime 11 | @android:integer/config_longAnimTime 12 | 13 | 14 | -------------------------------------------------------------------------------- /.idea/runConfigurations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_time.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/color/textbutton_date.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 8 | 9 | 11 | 12 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/values-v28/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_nightwatch_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/layout/layout_listitem_hourmode.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/values-v21/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 11 | -------------------------------------------------------------------------------- /app/src/androidTest/java/com/forrestguice/suntimes/naturalhour/espresso/DataInteractionHelper.java: -------------------------------------------------------------------------------- 1 | package com.forrestguice.suntimes.naturalhour.espresso; 2 | 3 | import androidx.test.espresso.DataInteraction; 4 | 5 | public class DataInteractionHelper 6 | { 7 | public interface DataInteractionInterface { 8 | DataInteraction get(); 9 | } 10 | 11 | public static DataInteractionInterface wrap(final DataInteraction dataInteraction) { 12 | return new DataInteractionInterface() { 13 | @Override 14 | public DataInteraction get() { 15 | return dataInteraction; 16 | } 17 | }; 18 | } 19 | 20 | } -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi/ic_alarm.xml: -------------------------------------------------------------------------------- 1 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi/ic_alarm_light.xml: -------------------------------------------------------------------------------- 1 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/layout/layout_listitem_coloredit.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: [forrestguice] 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: forrestguice 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: forrestguice 10 | issuehunt: # Replace with a single IssueHunt username 11 | otechie: # Replace with a single Otechie username 12 | custom: ['https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=NZJ5FJBCKY6K2', 'https://www.paypal.me/forrestguice'] 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi/ic_help.xml: -------------------------------------------------------------------------------- 1 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi/ic_help_light.xml: -------------------------------------------------------------------------------- 1 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/androidTest/java/com/forrestguice/suntimes/naturalhour/ExampleInstrumentedTest.java: -------------------------------------------------------------------------------- 1 | package com.forrestguice.suntimes.naturalhour; 2 | 3 | import android.content.Context; 4 | import androidx.test.platform.app.InstrumentationRegistry; 5 | import androidx.test.ext.junit.runners.AndroidJUnit4; 6 | 7 | import org.junit.Test; 8 | import org.junit.runner.RunWith; 9 | 10 | import static org.junit.Assert.*; 11 | 12 | @RunWith(AndroidJUnit4.class) 13 | public class ExampleInstrumentedTest { 14 | @Test 15 | public void useAppContext() { 16 | Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); 17 | assertEquals("com.forrestguice.suntimes.naturalhour", appContext.getPackageName()); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_alarm.xml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 12 | 13 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/color/card_background_dark.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 8 | 9 | 11 | 12 | 14 | 15 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/color/card_background_light.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 8 | 9 | 11 | 12 | 14 | 15 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_widget.xml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 12 | 13 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi/ic_share.xml: -------------------------------------------------------------------------------- 1 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi/ic_share_light.xml: -------------------------------------------------------------------------------- 1 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile 22 | 23 | -dontobfuscate -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_daydream.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 11 | 12 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/values/help_urls.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | @string/help_cb_url 4 | 5 | 6 | addons/naturalhour 7 | addons/naturalhour/#alarms 8 | 9 | 10 | https://forrestguice.github.io/Suntimes/help/ 11 | 12 | 13 | https://forrestguice.codeberg.page/Suntimes/help/ 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_naturalhour.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 13 | 14 | -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | # IDE (e.g. Android Studio) users: 3 | # Gradle settings configured through the IDE *will override* 4 | # any settings specified in this file. 5 | # For more details on how to configure your build environment visit 6 | # http://www.gradle.org/docs/current/userguide/build_environment.html 7 | # Specifies the JVM arguments used for the daemon process. 8 | # The setting is particularly useful for tweaking memory settings. 9 | android.enableJetifier=true 10 | android.useAndroidX=true 11 | android.targetVersion=33 12 | org.gradle.jvmargs=-Xmx1536m 13 | # When configured, Gradle will run in incubating parallel mode. 14 | # This option should only be used with decoupled projects. More details, visit 15 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 16 | # org.gradle.parallel=true 17 | 18 | 19 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/6.txt: -------------------------------------------------------------------------------- 1 | - adds quick settings tile that displays the current hour. 2 | - adds daydream (screen saver) that shows a "wandering clock". 3 | - adds fullscreen mode, ability to display over the lock screen, and home screen wallpaper option. 4 | - adds clock option; show "seconds hand" and inner dial. 5 | - adds clock option; "6hr time format" (Italian six-hour clock). 6 | - adds clock option; equinoctial hours; "Babylonian", "Italic", "Italian Civil", or "Julian". 7 | - adds clock option; temporal hours begin at "sunrise (24)", "civil dawn (24)", "noon (240", or "civil dusk (24)". 8 | - adds clock option; night watches of five or more parts. 9 | - adds clock option; show "solar midnight". 10 | - adds widget option; "on tap", "reconfigure widget" or "launch app". 11 | - adds default colors; "Sun (dark)". 12 | - updates targetSdkVersion (28 -> 30), and migrates app to AndroidX. -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi/ic_palette.xml: -------------------------------------------------------------------------------- 1 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi/ic_palette_light.xml: -------------------------------------------------------------------------------- 1 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior: 15 | 1. Go to '...' 16 | 2. Click on '....' 17 | 3. Scroll down to '....' 18 | 4. See error 19 | 20 | **Expected behavior** 21 | A clear and concise description of what you expected to happen. 22 | 23 | **Screenshots** 24 | If applicable, add screenshots to help explain the problem. 25 | A picture is worth a thousand words, and might capture useful information for debugging. 26 | 27 | **Version Info:** 28 | - NaturalHour Version: [e.g. v0.2.0] 29 | - Suntimes Version: [e.g. v0.14.7] 30 | - Android Version: [e.g. 10] 31 | - Device Model: [e.g. Pixel 6] 32 | 33 | **Additional context** 34 | Add any other information about the problem here. 35 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-v23/toast_frame.xml: -------------------------------------------------------------------------------- 1 | 16 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/layout/layout_dialog_alert.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 9 | 10 | 15 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/layout/content_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/7.txt: -------------------------------------------------------------------------------- 1 | v0.3.1 2 | - fixes bug where Android 12+ refuses to install the app (#35). 3 | 4 | v0.3.0 5 | - adds quick settings tile that displays the current hour. 6 | - adds daydream (screen saver) that shows a "wandering clock". 7 | - adds fullscreen mode, ability to display over the lock screen, and home screen wallpaper option. 8 | - adds clock option; show "seconds hand" and inner dial. 9 | - adds clock option; "6hr time format" (Italian six-hour clock). 10 | - adds clock option; equinoctial hours; "Babylonian", "Italic", "Italian Civil", or "Julian". 11 | - adds clock option; temporal hours begin at "sunrise (24)", "civil dawn (24)", "noon (240", or "civil dusk (24)". 12 | - adds clock option; night watches of five or more parts. 13 | - adds clock option; show "solar midnight". 14 | - adds widget option; "on tap", "reconfigure widget" or "launch app". 15 | - adds default colors; "Sun (dark)". 16 | - updates targetSdkVersion (28 -> 30), and migrates app to AndroidX. -------------------------------------------------------------------------------- /app/src/main/res/xml/widget_naturalhour_3x2.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/xml/widget_naturalhour_4x3.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/layout/layout_dialog_timeoffset.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 16 | 17 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /app/src/main/res/xml/widget_naturalhour_5x3.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | -------------------------------------------------------------------------------- /app/src/androidTest/java/com/forrestguice/suntimes/naturalhour/ui/widget/Widget3x2ConfigActivityTest.java: -------------------------------------------------------------------------------- 1 | package com.forrestguice.suntimes.naturalhour.ui.widget; 2 | 3 | import org.junit.Rule; 4 | import org.junit.Test; 5 | import org.junit.runner.RunWith; 6 | 7 | import androidx.test.ext.junit.runners.AndroidJUnit4; 8 | import androidx.test.filters.LargeTest; 9 | import androidx.test.rule.ActivityTestRule; 10 | 11 | @LargeTest 12 | @RunWith(AndroidJUnit4.class) 13 | public class Widget3x2ConfigActivityTest extends WidgetConfigActivityTest 14 | { 15 | @Rule 16 | public ActivityTestRule activityRule = new ActivityTestRule<>(NaturalHourWidget_3x2_ConfigActivity.class, false, false); 17 | 18 | @Test 19 | public void test_widgetConfigActivity_about() 20 | { 21 | activityRule.launchActivity(getLaunchIntent(context, NaturalHourWidget_3x2_ConfigActivity.class, -9000, null)); 22 | test_widgetConfigActivity_about(context, new WidgetConfigActivityRobot()); 23 | } 24 | 25 | } -------------------------------------------------------------------------------- /app/src/androidTest/java/com/forrestguice/suntimes/naturalhour/ui/widget/Widget4x3ConfigActivityTest.java: -------------------------------------------------------------------------------- 1 | package com.forrestguice.suntimes.naturalhour.ui.widget; 2 | 3 | import org.junit.Rule; 4 | import org.junit.Test; 5 | import org.junit.runner.RunWith; 6 | 7 | import androidx.test.ext.junit.runners.AndroidJUnit4; 8 | import androidx.test.filters.LargeTest; 9 | import androidx.test.rule.ActivityTestRule; 10 | 11 | @LargeTest 12 | @RunWith(AndroidJUnit4.class) 13 | public class Widget4x3ConfigActivityTest extends WidgetConfigActivityTest 14 | { 15 | @Rule 16 | public ActivityTestRule activityRule = new ActivityTestRule<>(NaturalHourWidget_4x3_ConfigActivity.class, false, false); 17 | 18 | @Test 19 | public void test_widgetConfigActivity_about() 20 | { 21 | activityRule.launchActivity(getLaunchIntent(context, NaturalHourWidget_4x3_ConfigActivity.class, -9000, null)); 22 | test_widgetConfigActivity_about(context, new WidgetConfigActivityRobot()); 23 | } 24 | 25 | } -------------------------------------------------------------------------------- /app/src/androidTest/java/com/forrestguice/suntimes/naturalhour/ui/widget/Widget5x3ConfigActivityTest.java: -------------------------------------------------------------------------------- 1 | package com.forrestguice.suntimes.naturalhour.ui.widget; 2 | 3 | import org.junit.Rule; 4 | import org.junit.Test; 5 | import org.junit.runner.RunWith; 6 | 7 | import androidx.test.ext.junit.runners.AndroidJUnit4; 8 | import androidx.test.filters.LargeTest; 9 | import androidx.test.rule.ActivityTestRule; 10 | 11 | @LargeTest 12 | @RunWith(AndroidJUnit4.class) 13 | public class Widget5x3ConfigActivityTest extends WidgetConfigActivityTest 14 | { 15 | @Rule 16 | public ActivityTestRule activityRule = new ActivityTestRule<>(NaturalHourWidget_5x3_ConfigActivity.class, false, false); 17 | 18 | @Test 19 | public void test_widgetConfigActivity_about() 20 | { 21 | activityRule.launchActivity(getLaunchIntent(context, NaturalHourWidget_5x3_ConfigActivity.class, -9000, null)); 22 | test_widgetConfigActivity_about(context, new WidgetConfigActivityRobot()); 23 | } 24 | 25 | } -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi/ic_settings.xml: -------------------------------------------------------------------------------- 1 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi/ic_settings_light.xml: -------------------------------------------------------------------------------- 1 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_coloredit.xml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 12 | 13 | 19 | 20 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_widget.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 11 | 12 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_colorsheet.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 15 | 16 | -------------------------------------------------------------------------------- /app/src/main/java/com/forrestguice/suntimes/naturalhour/ui/widget/NaturalHourWidget_5x3_ConfigActivity.java: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-3.0-or-later 2 | /* 3 | Copyright (C) 2020 Forrest Guice 4 | This file is part of Natural Hour. 5 | 6 | Natural Hour is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU General Public License as published by 8 | the Free Software Foundation, either version 3 of the License, or 9 | (at your option) any later version. 10 | 11 | Natural Hour is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU General Public License for more details. 15 | 16 | You should have received a copy of the GNU General Public License 17 | along with Natural Hour. If not, see . 18 | */ 19 | 20 | package com.forrestguice.suntimes.naturalhour.ui.widget; 21 | 22 | public class NaturalHourWidget_5x3_ConfigActivity extends WidgetConfigActivity 23 | { 24 | @Override 25 | public Class getWidgetClass() { 26 | return NaturalHourWidget_5x3.class; 27 | } 28 | } -------------------------------------------------------------------------------- /app/src/main/res/values-night/icons.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | @drawable/ic_back 4 | @drawable/ic_done 5 | @drawable/ic_add 6 | @drawable/ic_edit 7 | @drawable/ic_save 8 | @drawable/ic_delete 9 | @drawable/ic_palette 10 | @drawable/ic_alarm 11 | @drawable/ic_fullscreen_on 12 | @drawable/ic_fullscreen_off 13 | @drawable/ic_share 14 | @drawable/ic_today 15 | @drawable/ic_settings 16 | @drawable/ic_help 17 | @drawable/ic_about 18 | 19 | @drawable/tilecard_bg_dark 20 | -------------------------------------------------------------------------------- /app/src/main/java/com/forrestguice/suntimes/naturalhour/ui/widget/NaturalHourWidget_3x2_ConfigActivity.java: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-3.0-or-later 2 | /* 3 | Copyright (C) 2020 Forrest Guice 4 | This file is part of Natural Hour. 5 | 6 | Natural Hour is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU General Public License as published by 8 | the Free Software Foundation, either version 3 of the License, or 9 | (at your option) any later version. 10 | 11 | Natural Hour is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU General Public License for more details. 15 | 16 | You should have received a copy of the GNU General Public License 17 | along with Natural Hour. If not, see . 18 | */ 19 | 20 | package com.forrestguice.suntimes.naturalhour.ui.widget; 21 | 22 | public class NaturalHourWidget_3x2_ConfigActivity extends WidgetConfigActivity 23 | { 24 | @Override 25 | public Class getWidgetClass() { 26 | return NaturalHourWidget_3x2.class; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /app/src/main/java/com/forrestguice/suntimes/naturalhour/ui/widget/NaturalHourWidget_4x3_ConfigActivity.java: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-3.0-or-later 2 | /* 3 | Copyright (C) 2020 Forrest Guice 4 | This file is part of Natural Hour. 5 | 6 | Natural Hour is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU General Public License as published by 8 | the Free Software Foundation, either version 3 of the License, or 9 | (at your option) any later version. 10 | 11 | Natural Hour is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU General Public License for more details. 15 | 16 | You should have received a copy of the GNU General Public License 17 | along with Natural Hour. If not, see . 18 | */ 19 | 20 | package com.forrestguice.suntimes.naturalhour.ui.widget; 21 | 22 | public class NaturalHourWidget_4x3_ConfigActivity extends WidgetConfigActivity 23 | { 24 | @Override 25 | public Class getWidgetClass() { 26 | return NaturalHourWidget_4x3.class; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /app/src/main/java/com/forrestguice/suntimes/naturalhour/ui/widget/NaturalHourWidget_4x3.java: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-3.0-or-later 2 | /* 3 | Copyright (C) 2020 Forrest Guice 4 | This file is part of Natural Hour. 5 | 6 | Natural Hour is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU General Public License as published by 8 | the Free Software Foundation, either version 3 of the License, or 9 | (at your option) any later version. 10 | 11 | Natural Hour is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU General Public License for more details. 15 | 16 | You should have received a copy of the GNU General Public License 17 | along with Natural Hour. If not, see . 18 | */ 19 | 20 | package com.forrestguice.suntimes.naturalhour.ui.widget; 21 | 22 | import androidx.annotation.Nullable; 23 | 24 | public class NaturalHourWidget_4x3 extends NaturalHourWidget 25 | { 26 | @Override 27 | @Nullable 28 | protected Class getConfigClass() { 29 | return NaturalHourWidget_4x3_ConfigActivity.class; 30 | } 31 | } -------------------------------------------------------------------------------- /app/src/main/java/com/forrestguice/suntimes/naturalhour/ui/widget/NaturalHourWidget_5x3.java: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-3.0-or-later 2 | /* 3 | Copyright (C) 2020 Forrest Guice 4 | This file is part of Natural Hour. 5 | 6 | Natural Hour is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU General Public License as published by 8 | the Free Software Foundation, either version 3 of the License, or 9 | (at your option) any later version. 10 | 11 | Natural Hour is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU General Public License for more details. 15 | 16 | You should have received a copy of the GNU General Public License 17 | along with Natural Hour. If not, see . 18 | */ 19 | 20 | package com.forrestguice.suntimes.naturalhour.ui.widget; 21 | 22 | import androidx.annotation.Nullable; 23 | 24 | public class NaturalHourWidget_5x3 extends NaturalHourWidget 25 | { 26 | @Override 27 | @Nullable 28 | protected Class getConfigClass() { 29 | return NaturalHourWidget_5x3_ConfigActivity.class; 30 | } 31 | } -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_colorlist.xml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 12 | 13 | 19 | 20 | 26 | 27 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_naturalhour_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 10 | 11 | 15 | 16 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/values/icons.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | @drawable/ic_back_light 4 | @drawable/ic_done_light 5 | @drawable/ic_add_light 6 | @drawable/ic_edit_light 7 | @drawable/ic_save_light 8 | @drawable/ic_delete_light 9 | @drawable/ic_palette_light 10 | @drawable/ic_alarm_light 11 | @drawable/ic_fullscreen_on_light 12 | @drawable/ic_fullscreen_off_light 13 | @drawable/ic_share_light 14 | @drawable/ic_today_light 15 | @drawable/ic_settings_light 16 | @drawable/ic_help_light 17 | @drawable/ic_about_light 18 | 19 | @drawable/tilecard_bg_light 20 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_colorsheet.xml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 12 | 13 | 19 | 20 | 26 | 27 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /app/src/main/java/com/forrestguice/suntimes/naturalhour/ui/tiles/TilePreferenceFragment.java: -------------------------------------------------------------------------------- 1 | /** 2 | Copyright (C) 2024 Forrest Guice 3 | This file is part of NaturalHour. 4 | 5 | NaturalHour is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | (at your option) any later version. 9 | 10 | NaturalHour is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with NaturalHour. If not, see . 17 | */ 18 | 19 | package com.forrestguice.suntimes.naturalhour.ui.tiles; 20 | 21 | import com.forrestguice.suntimes.naturalhour.R; 22 | import com.forrestguice.suntimes.naturalhour.ui.widget.WidgetPreferenceFragment; 23 | 24 | public class TilePreferenceFragment extends WidgetPreferenceFragment 25 | { 26 | public TilePreferenceFragment() { 27 | super(); 28 | } 29 | 30 | @Override 31 | public int getPreferenceResources() { 32 | return R.xml.pref_tile; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | name: Android CI 2 | 3 | on: 4 | push: 5 | branches: 6 | - master 7 | pull_request: 8 | branches: 9 | - master 10 | 11 | jobs: 12 | build: 13 | 14 | runs-on: ubuntu-latest 15 | 16 | steps: 17 | - uses: actions/checkout@v4 18 | with: 19 | submodules: recursive 20 | 21 | - name: set up JDK 17 22 | uses: actions/setup-java@v4 23 | with: 24 | distribution: 'temurin' 25 | java-version: '17' 26 | 27 | - name: Gradle Wrapper Validation 28 | uses: gradle/actions/wrapper-validation@v4 29 | 30 | - name: Make gradlew executable 31 | run: chmod +x ./gradlew 32 | 33 | - name: Build with Gradle 34 | run: ./gradlew assembleProductionRelease 35 | 36 | - name: Build with Gradle (Unit tests) 37 | run: ./gradlew testProductionRelease 38 | 39 | - name: Build with Gradle (lintVitalRelease) 40 | run: ./gradlew lintVitalProductionRelease 41 | 42 | - name: Upload artifacts (debug apk) 43 | uses: actions/upload-artifact@v4 44 | with: 45 | name: app 46 | path: app/build/outputs/apk/debug/app-debug.apk 47 | 48 | - name: Upload artifacts (lint results) 49 | uses: actions/upload-artifact@v4 50 | with: 51 | name: lint-results.html 52 | path: app/build/reports/lint-results.html 53 | -------------------------------------------------------------------------------- /.github/workflows/nightly.yml: -------------------------------------------------------------------------------- 1 | name: F-Droid Nightly 2 | 3 | on: 4 | workflow_dispatch: 5 | push: 6 | branches: 7 | - master 8 | 9 | jobs: 10 | build: 11 | runs-on: ubuntu-latest 12 | 13 | steps: 14 | - uses: actions/checkout@v4 15 | with: 16 | submodules: recursive 17 | 18 | - name: set up JDK 17 19 | uses: actions/setup-java@v4 20 | with: 21 | distribution: 'temurin' 22 | java-version: '17' 23 | 24 | - name: Gradle Wrapper Validation 25 | uses: gradle/actions/wrapper-validation@v3 26 | 27 | - name: Make gradlew executable 28 | run: chmod +x ./gradlew 29 | 30 | - uses: actions/cache@v4 31 | with: 32 | path: | 33 | ~/.gradle/caches 34 | ~/.gradle/wrapper 35 | key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} 36 | restore-keys: | 37 | ${{ runner.os }}-gradle- 38 | 39 | - name: Build with Gradle 40 | run: ./gradlew assembleNightlyDebug 41 | 42 | - name: Publish nightly debug 43 | run: | 44 | python -m venv fdroidserver-env 45 | . fdroidserver-env/bin/activate 46 | pip install git+https://github.com/forrestguice/fdroidserver.git 47 | fdroid nightly --archive-older 10 48 | env: 49 | DEBUG_KEYSTORE: ${{ secrets.DEBUG_KEYSTORE }} 50 | -------------------------------------------------------------------------------- /app/src/main/res/layout/widget_naturalhour_3x3.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 8 | 9 | 14 | 15 | 18 | 19 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_tileconfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 18 | 19 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_daydream_config.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 18 | 19 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_colorsheet.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 8 | 11 | 12 | 15 | 16 | 19 | 20 | 21 | 22 | 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_timeformat.xml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | 8 | 13 | 14 | 19 | 20 | 25 | 26 | 31 | 32 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /app/src/main/java/com/forrestguice/suntimes/naturalhour/ui/alarms/AlarmSelectFragment.java: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-3.0-or-later 2 | /* 3 | Copyright (C) 2024 Forrest Guice 4 | This file is part of Natural Hour. 5 | 6 | Natural Hour is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU General Public License as published by 8 | the Free Software Foundation, either version 3 of the License, or 9 | (at your option) any later version. 10 | 11 | Natural Hour is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU General Public License for more details. 15 | 16 | You should have received a copy of the GNU General Public License 17 | along with Natural Hour. If not, see . 18 | */ 19 | 20 | package com.forrestguice.suntimes.naturalhour.ui.alarms; 21 | 22 | import android.view.View; 23 | 24 | public interface AlarmSelectFragment 25 | { 26 | String getSelectedEventID(); 27 | void setSelectedEventID(String eventID); 28 | 29 | View getView(); 30 | void initViews(View content); 31 | void updateViews(); 32 | 33 | void setIntArg(String key, int value); 34 | void setBoolArg(String key, boolean value); 35 | 36 | int getIntArg(String key, int defValue); 37 | boolean getBoolArg(String key, boolean defValue); 38 | 39 | void setFragmentListener(FragmentListener l); 40 | interface FragmentListener 41 | { 42 | void onItemSelected(int[] values); 43 | } 44 | } -------------------------------------------------------------------------------- /app/src/androidTest/java/com/forrestguice/suntimes/naturalhour/espresso/ViewInteractionHelper.java: -------------------------------------------------------------------------------- 1 | package com.forrestguice.suntimes.naturalhour.espresso; 2 | 3 | import androidx.test.espresso.FailureHandler; 4 | import androidx.test.espresso.ViewInteraction; 5 | import android.view.View; 6 | 7 | import org.hamcrest.Matcher; 8 | 9 | import static androidx.test.espresso.assertion.ViewAssertions.matches; 10 | import static androidx.test.espresso.matcher.ViewMatchers.isChecked; 11 | 12 | public class ViewInteractionHelper 13 | { 14 | /** 15 | * @param viewInteraction a ViewInteraction wrapping some view 16 | * @return true view is checked, false otherwise 17 | */ 18 | public static boolean viewIsChecked(ViewInteraction viewInteraction) 19 | { 20 | final boolean[] isChecked = {true}; 21 | viewInteraction.withFailureHandler(new FailureHandler() 22 | { 23 | @Override 24 | public void handle(Throwable error, Matcher viewMatcher) 25 | { 26 | isChecked[0] = false; 27 | } 28 | }).check(matches(isChecked())); 29 | return isChecked[0]; 30 | } 31 | 32 | /** 33 | * ViewInteractionInterface 34 | */ 35 | public interface ViewInteractionInterface 36 | { 37 | ViewInteraction get(); 38 | } 39 | 40 | public static ViewInteractionInterface wrap(final ViewInteraction viewInteraction) { 41 | return new ViewInteractionInterface() { 42 | @Override 43 | public ViewInteraction get() { 44 | return viewInteraction; 45 | } 46 | }; 47 | } 48 | 49 | } -------------------------------------------------------------------------------- /app/src/main/java/com/forrestguice/suntimes/naturalhour/ui/tiles/TileLockScreenActivity.java: -------------------------------------------------------------------------------- 1 | /** 2 | Copyright (C) 2024 Forrest Guice 3 | This file is part of NaturalHour. 4 | 5 | NaturalHour is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | (at your option) any later version. 9 | 10 | NaturalHour is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with NaturalHour. If not, see . 17 | */ 18 | 19 | package com.forrestguice.suntimes.naturalhour.ui.tiles; 20 | 21 | import android.appwidget.AppWidgetManager; 22 | 23 | /** 24 | * TileLockScreenActivity 25 | */ 26 | public class TileLockScreenActivity extends SuntimesTileActivity 27 | { 28 | public static final String EXTRA_APPWIDGETID = AppWidgetManager.EXTRA_APPWIDGET_ID; 29 | 30 | public TileLockScreenActivity() { 31 | super(); 32 | } 33 | 34 | @Override 35 | protected SuntimesTileBase initTileBase() 36 | { 37 | final int appWidgetID = getIntent().getIntExtra(EXTRA_APPWIDGETID, 0); 38 | switch (appWidgetID) 39 | { 40 | case NaturalHourTileBase.TILE_APPWIDGET_ID: return new NaturalHourTileBase(this); 41 | default: return null; 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /app/src/main/java/com/forrestguice/suntimes/naturalhour/data/NaturalHourCalculator2.java: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-3.0-or-later 2 | /* 3 | Copyright (C) 2020 Forrest Guice 4 | This file is part of Natural Hour. 5 | 6 | Natural Hour is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU General Public License as published by 8 | the Free Software Foundation, either version 3 of the License, or 9 | (at your option) any later version. 10 | 11 | Natural Hour is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU General Public License for more details. 15 | 16 | You should have received a copy of the GNU General Public License 17 | along with Natural Hour. If not, see . 18 | */ 19 | 20 | package com.forrestguice.suntimes.naturalhour.data; 21 | 22 | import android.content.ContentResolver; 23 | 24 | /** 25 | * An alternate definition of "natural hour" where the day is counted sunset to sunset. 26 | */ 27 | public class NaturalHourCalculator2 extends NaturalHourCalculator 28 | { 29 | @Override 30 | public long[] queryStartEndDay(ContentResolver resolver, long dateMillis, NaturalHourData data) 31 | { 32 | long[] riseset0 = querySunriseSunset(resolver, dateMillis - (24 * 60 * 60 * 1000), data.latitude, data.longitude, data.altitude); 33 | long[] riseset1 = querySunriseSunset(resolver, dateMillis, data.latitude, data.longitude, data.altitude); 34 | return new long[] {riseset1[0], riseset0[1] + 24 * 60 * 60 * 1000}; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/full_description.txt: -------------------------------------------------------------------------------- 1 | A 24-hour clock and roman timekeeping add-on for Suntimes. This app displays the roman hours for a given date and location. 2 | 3 | This is an add-on for Suntimes. It depends on Suntimes v0.10.3 or later. 4 | 5 | * A 24-hr clock face with roman timekeeping divisions; hours, twilights, and night watches. 6 | * Repeating alarms and notifications (requires Suntimes v0.14.0 or later). 7 | * Home screen widgets (resizable clock widgets). 8 | * Quick settings tile that displays the current hour. 9 | * Daydream / screensaver that shows a "wandering clock". 10 | * Quick navigation to the dates of the solstices and equinoxes. 11 | * The app announces the current time (and roman hour) when the clock is clicked. 12 | 13 | Options for: 14 | * time zone (local mean time, apparent solar time, UTC, system, or app time zone), and time format (24hr, 12hr, or 6hr). 15 | * other equinoctial hours; Babylonian, Italic, Italian Civil, or Julian. 16 | * temporal hours; the day begins at sunrise/sunset (12), dawn/dusk (12), dawn (24), sunrise (24), noon (24), sunset (24), or dusk (24). 17 | * clock colors (custom color schemes), and other customizations. 18 | * clock orientation; show "midnight at top", "center on noon". 19 | * clock numerals; Arabic, Attic, Armenian, Etruscan, Greek, Hebrew, Roman. 20 | * night watches; 2, 3, 4, or more divisions. 21 | * seconds; a "seconds dial" and "seconds hand". 22 | * fullscreen mode (over the home screen wallpaper). 23 | 24 | The following permissions are required: 25 | * suntimes.permission.READ_CALCULATOR is used to read data from the Suntimes provider. 26 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Release Check 2 | 3 | on: 4 | push: 5 | branches: 6 | - 'release-**' 7 | pull_request: 8 | branches: 9 | - 'release-**' 10 | 11 | jobs: 12 | build: 13 | runs-on: ubuntu-latest 14 | steps: 15 | 16 | - name: Checkout Branch 17 | uses: actions/checkout@v3 18 | with: 19 | path: branch 20 | 21 | - name: Checkout Master 22 | uses: actions/checkout@v3 23 | with: 24 | ref: 'master' 25 | path: master 26 | 27 | - name: Get version from Master 28 | id: versionReader0 29 | uses: Devofure/version-reader-action@v1.0.0 30 | with: 31 | gradlePath: master/app/build.gradle 32 | 33 | - name: Get version from Branch 34 | id: versionReader1 35 | uses: Devofure/version-reader-action@v1.0.0 36 | with: 37 | gradlePath: branch/app/build.gradle 38 | 39 | - name: Verify bump versionCode 40 | uses: jackbilestech/semver-compare@b6b063c569b77bea4a0ab627192cbdabf75de3f5 41 | with: 42 | head: '0.${{ steps.versionReader1.outputs.versionCode }}.0' 43 | base: '0.${{ steps.versionReader0.outputs.versionCode }}.0' 44 | operator: '>' 45 | 46 | - name: Verify bump versionName 47 | uses: jackbilestech/semver-compare@b6b063c569b77bea4a0ab627192cbdabf75de3f5 48 | with: 49 | head: '${{ steps.versionReader1.outputs.majorVersion }}.${{ steps.versionReader1.outputs.minorVersion }}.${{ steps.versionReader1.outputs.patchVersion }}' 50 | base: '${{ steps.versionReader0.outputs.majorVersion }}.${{ steps.versionReader0.outputs.minorVersion }}.${{ steps.versionReader0.outputs.patchVersion }}' 51 | operator: '>' 52 | -------------------------------------------------------------------------------- /app/src/main/java/com/forrestguice/suntimes/naturalhour/ui/widget/NaturalHourWidget_3x2.java: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-3.0-or-later 2 | /* 3 | Copyright (C) 2020 Forrest Guice 4 | This file is part of Natural Hour. 5 | 6 | Natural Hour is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU General Public License as published by 8 | the Free Software Foundation, either version 3 of the License, or 9 | (at your option) any later version. 10 | 11 | Natural Hour is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU General Public License for more details. 15 | 16 | You should have received a copy of the GNU General Public License 17 | along with Natural Hour. If not, see . 18 | */ 19 | 20 | package com.forrestguice.suntimes.naturalhour.ui.widget; 21 | 22 | import android.content.Context; 23 | 24 | import com.forrestguice.suntimes.naturalhour.ui.clockview.NaturalHourClockBitmap; 25 | 26 | import androidx.annotation.Nullable; 27 | 28 | public class NaturalHourWidget_3x2 extends NaturalHourWidget 29 | { 30 | @Override 31 | protected void prepareClockBitmap(Context context, NaturalHourClockBitmap clockView) 32 | { 33 | clockView.setFlag(NaturalHourClockBitmap.FLAG_SHOW_DATE, false); 34 | clockView.setFlag(NaturalHourClockBitmap.FLAG_SHOW_TIMEZONE, false); 35 | clockView.setFlag(NaturalHourClockBitmap.FLAG_SHOW_TICKS_5M, false); 36 | } 37 | 38 | @Override 39 | @Nullable 40 | protected Class getConfigClass() { 41 | return NaturalHourWidget_3x2_ConfigActivity.class; 42 | } 43 | } -------------------------------------------------------------------------------- /app/src/main/java/com/forrestguice/suntimes/naturalhour/data/NaturalHourCalculator1.java: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-3.0-or-later 2 | /* 3 | Copyright (C) 2020 Forrest Guice 4 | This file is part of Natural Hour. 5 | 6 | Natural Hour is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU General Public License as published by 8 | the Free Software Foundation, either version 3 of the License, or 9 | (at your option) any later version. 10 | 11 | Natural Hour is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU General Public License for more details. 15 | 16 | You should have received a copy of the GNU General Public License 17 | along with Natural Hour. If not, see . 18 | */ 19 | 20 | package com.forrestguice.suntimes.naturalhour.data; 21 | 22 | import android.content.ContentResolver; 23 | 24 | /** 25 | * An alternate definition of "natural hour" where the day begins and ends at civil twilight (6 degrees). 26 | */ 27 | public class NaturalHourCalculator1 extends NaturalHourCalculator 28 | { 29 | @Override 30 | public long[] queryStartEndDay(ContentResolver resolver, long dateMillis, NaturalHourData data) { 31 | 32 | if (data.twilightHours != null && data.twilightHours.length == 8 33 | && data.twilightHours[2] > 0 && data.twilightHours[5] > 0) 34 | { 35 | return new long[] {data.twilightHours[2], data.twilightHours[5]}; // civil sunrise, civil sunset 36 | 37 | } else { 38 | return queryCivilTwilight(resolver, dateMillis, data.latitude, data.longitude, data.altitude); 39 | } 40 | } 41 | 42 | } 43 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_alarm.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 11 | 12 | 15 | 16 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /app/src/main/res/layout/layout_listitem_colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 13 | 14 | 19 | 20 | 25 | 26 | 31 | 32 | 36 | 37 | -------------------------------------------------------------------------------- /app/src/main/res/values-night/clockface.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | @color/clockColorAstro_dark 4 | @color/clockColorNautical_dark 5 | @color/clockColorCivil_dark 6 | @color/clockColorAM_dark 7 | @color/clockColorPM_dark 8 | @color/clockColorDayBorder_dark 9 | @color/clockColorDay_dark 10 | @color/clockColorDayLabel_dark 11 | @color/clockColorDayFace_dark 12 | @color/clockColorNightBorder_dark 13 | @color/clockColorNight_dark 14 | @color/clockColorNightLabel_dark 15 | @color/clockColorNightFace_dark 16 | @color/clockColorBackground_dark 17 | @color/clockColorBackgroundAlt_dark 18 | @color/clockColorFace_dark 19 | @color/clockColorPlate_dark 20 | @color/clockColorFrame_dark 21 | @color/clockColorCenter_dark 22 | @color/clockColorHand_dark 23 | @color/clockColorHand1_dark 24 | @color/clockColorLabel1_dark 25 | @color/clockColorLabel2_dark 26 | -------------------------------------------------------------------------------- /app/src/main/java/com/forrestguice/suntimes/naturalhour/ui/daydream/DaydreamClockView.java: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-3.0-or-later 2 | /* 3 | Copyright (C) 2024 Forrest Guice 4 | This file is part of Natural Hour. 5 | 6 | Natural Hour is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU General Public License as published by 8 | the Free Software Foundation, either version 3 of the License, or 9 | (at your option) any later version. 10 | 11 | Natural Hour is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU General Public License for more details. 15 | 16 | You should have received a copy of the GNU General Public License 17 | along with Natural Hour. If not, see . 18 | */ 19 | 20 | package com.forrestguice.suntimes.naturalhour.ui.daydream; 21 | 22 | import android.content.Context; 23 | import androidx.annotation.Nullable; 24 | import android.util.AttributeSet; 25 | import com.forrestguice.suntimes.naturalhour.ui.clockview.NaturalHourClockBitmap; 26 | import com.forrestguice.suntimes.naturalhour.ui.clockview.NaturalHourClockView; 27 | 28 | public class DaydreamClockView extends NaturalHourClockView 29 | { 30 | @Override 31 | protected NaturalHourClockBitmap createBitmapHelper() { 32 | return new ClockDaydreamBitmap(getContext(), getWidth()); 33 | } 34 | 35 | public DaydreamClockView(Context context) { 36 | super(context); 37 | } 38 | 39 | public DaydreamClockView(Context context, @Nullable AttributeSet attrs) { 40 | super(context, attrs); 41 | } 42 | 43 | public DaydreamClockView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { 44 | super(context, attrs, defStyleAttr); 45 | } 46 | } -------------------------------------------------------------------------------- /app/src/main/java/com/forrestguice/suntimes/naturalhour/ui/tiles/NaturalHourTileConfigActivity.java: -------------------------------------------------------------------------------- 1 | /** 2 | Copyright (C) 2024 Forrest Guice 3 | This file is part of NaturalHour. 4 | 5 | NaturalHour is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | (at your option) any later version. 9 | 10 | NaturalHour is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with NaturalHour. If not, see . 17 | */ 18 | 19 | package com.forrestguice.suntimes.naturalhour.ui.tiles; 20 | 21 | import android.content.Context; 22 | 23 | import com.forrestguice.suntimes.naturalhour.R; 24 | import com.forrestguice.suntimes.naturalhour.ui.widget.WidgetConfigActivity; 25 | 26 | public class NaturalHourTileConfigActivity extends WidgetConfigActivity 27 | { 28 | public NaturalHourTileConfigActivity() { 29 | super(); 30 | this.reconfigure = true; 31 | } 32 | 33 | protected SuntimesTileBase initTileBase() { 34 | return new NaturalHourTileBase(this); 35 | } 36 | 37 | @Override 38 | public int getDefaultAppWidgetId() { 39 | return NaturalHourTileBase.TILE_APPWIDGET_ID; 40 | } 41 | 42 | @Override 43 | protected int getActivityLayoutResID() { 44 | return R.layout.activity_tileconfig; 45 | } 46 | 47 | @Override 48 | public Class getWidgetClass() { 49 | return null; 50 | } 51 | 52 | @Override 53 | protected void updateWidgets(Context context) { /* EMPTY */ } 54 | } 55 | -------------------------------------------------------------------------------- /app/src/main/res/layout/dialog_alarms.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 11 | 12 | 20 | 21 | 26 | 27 | 28 | 29 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /app/src/main/res/xml/pref_tile.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 13 | 14 | 20 | 21 | 27 | 28 | 29 | 30 | 32 | 33 | 40 | 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Built application files 2 | *.ap_ 3 | *.aab 4 | 5 | *.apk 6 | *.apk.asc 7 | 8 | *.tar.gz 9 | *.tar.gz.asc 10 | 11 | *.zip 12 | *.zip.asc 13 | 14 | # Files for the ART/Dalvik VM 15 | *.dex 16 | 17 | # Java class files 18 | *.class 19 | 20 | # Generated files 21 | bin/ 22 | gen/ 23 | out/ 24 | # Uncomment the following line in case you need and you don't have the release build type files in your app 25 | # release/ 26 | 27 | app/release/output.json 28 | 29 | # Gradle files 30 | .gradle/ 31 | build/ 32 | 33 | # Local configuration file (sdk path, etc) 34 | local.properties 35 | 36 | # Proguard folder generated by Eclipse 37 | proguard/ 38 | 39 | # Log Files 40 | *.log 41 | 42 | # Android Studio Navigation editor temp files 43 | .navigation/ 44 | 45 | # Android Studio captures folder 46 | captures/ 47 | 48 | # IntelliJ 49 | *.iml 50 | .idea/jarRepositories.xml 51 | .idea/compiler.xml 52 | .idea/misc.xml 53 | .idea/workspace.xml 54 | .idea/tasks.xml 55 | .idea/gradle.xml 56 | .idea/assetWizardSettings.xml 57 | .idea/dictionaries 58 | .idea/libraries 59 | # Android Studio 3 in .gitignore file. 60 | .idea/caches 61 | .idea/modules.xml 62 | # Comment next line if keeping position of elements in Navigation Editor is relevant for you 63 | .idea/navEditor.xml 64 | 65 | # Keystore files 66 | # Uncomment the following lines if you do not want to check your keystore files in. 67 | *.jks 68 | *.keystore 69 | 70 | # External native build folder generated in Android Studio 2.2 and later 71 | .externalNativeBuild 72 | 73 | # Google Services (e.g. APIs or Firebase) 74 | # google-services.json 75 | 76 | # Freeline 77 | freeline.py 78 | freeline/ 79 | freeline_project_description.json 80 | 81 | # fastlane 82 | fastlane/report.xml 83 | fastlane/Preview.html 84 | fastlane/screenshots 85 | fastlane/test_output 86 | fastlane/readme.md 87 | 88 | # Version control 89 | vcs.xml 90 | 91 | # lint 92 | lint/intermediates/ 93 | lint/generated/ 94 | lint/outputs/ 95 | lint/tmp/ 96 | # lint/reports/ 97 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_main.xml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 12 | 13 | 19 | 20 | 26 | 27 | 33 | 34 | 40 | 41 | 47 | 48 | 54 | 55 | -------------------------------------------------------------------------------- /app/src/main/res/layout/content_bottombar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | 12 | 13 | 18 | 19 | 20 | 21 | 22 | 23 | 26 | 27 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /app/src/androidTest/java/com/forrestguice/suntimes/naturalhour/SettingsActivityTest.java: -------------------------------------------------------------------------------- 1 | package com.forrestguice.suntimes.naturalhour; 2 | 3 | import org.junit.After; 4 | import org.junit.Before; 5 | import org.junit.Rule; 6 | import org.junit.Test; 7 | import org.junit.runner.RunWith; 8 | 9 | import java.io.IOException; 10 | 11 | import androidx.test.ext.junit.runners.AndroidJUnit4; 12 | import androidx.test.filters.LargeTest; 13 | import androidx.test.rule.ActivityTestRule; 14 | 15 | import static androidx.test.espresso.Espresso.onView; 16 | import static androidx.test.espresso.matcher.ViewMatchers.withText; 17 | import static com.forrestguice.suntimes.naturalhour.TestRobot.setAnimationsEnabled; 18 | import static com.forrestguice.suntimes.naturalhour.espresso.ViewAssertionHelper.assertShown; 19 | 20 | @LargeTest 21 | @RunWith(AndroidJUnit4.class) 22 | public class SettingsActivityTest 23 | { 24 | @Rule 25 | public ActivityTestRule activityRule = new ActivityTestRule<>(SettingsActivity.class); 26 | 27 | @Before 28 | public void beforeTest() throws IOException { 29 | setAnimationsEnabled(false); 30 | } 31 | @After 32 | public void afterTest() throws IOException { 33 | setAnimationsEnabled(true); 34 | } 35 | 36 | @Test 37 | public void test_settingsActivity() { 38 | new SettingsActivityRobot() 39 | .assertActivityShown(); 40 | } 41 | 42 | /** 43 | * SettingsActivityRobot 44 | */ 45 | public static class SettingsActivityRobot extends TestRobot.ActivityRobot 46 | { 47 | public SettingsActivityRobot() { 48 | setRobot(this); 49 | } 50 | 51 | public SettingsActivityRobot assertActivityShown() 52 | { 53 | onView(withText(R.string.pref_category_general)).check(assertShown); 54 | onView(withText(R.string.pref_title_hourdef)).check(assertShown); 55 | onView(withText(R.string.pref_title_timeformat)).check(assertShown); 56 | return this; 57 | } 58 | } 59 | } -------------------------------------------------------------------------------- /app/src/main/java/com/forrestguice/suntimes/naturalhour/ui/ThrottledClickListener.java: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-3.0-or-later 2 | /* 3 | Copyright (C) 2023 Forrest Guice 4 | This file is part of Natural Hour. 5 | 6 | Natural Hour is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU General Public License as published by 8 | the Free Software Foundation, either version 3 of the License, or 9 | (at your option) any later version. 10 | 11 | Natural Hour is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU General Public License for more details. 15 | 16 | You should have received a copy of the GNU General Public License 17 | along with Natural Hour. If not, see . 18 | */ 19 | 20 | package com.forrestguice.suntimes.naturalhour.ui; 21 | 22 | import android.view.View; 23 | import com.forrestguice.suntimes.annotation.NonNull; 24 | 25 | /** 26 | * ThrottledClickListener 27 | */ 28 | public class ThrottledClickListener implements View.OnClickListener 29 | { 30 | protected long delayMs; 31 | protected Long previousClickAt; 32 | protected View.OnClickListener listener; 33 | 34 | public ThrottledClickListener(@NonNull View.OnClickListener listener) { 35 | this(listener, 1000); 36 | } 37 | 38 | public ThrottledClickListener(@NonNull View.OnClickListener listener, long delayMs) 39 | { 40 | this.delayMs = delayMs; 41 | this.listener = listener; 42 | if (listener == null) { 43 | throw new NullPointerException("OnClickListener is null!"); 44 | } 45 | } 46 | 47 | @Override 48 | public void onClick(View v) 49 | { 50 | long currentClickAt = System.currentTimeMillis(); 51 | if (previousClickAt == null || Math.abs(currentClickAt - previousClickAt) > delayMs) { 52 | previousClickAt = currentClickAt; 53 | listener.onClick(v); 54 | } 55 | } 56 | } -------------------------------------------------------------------------------- /app/src/androidTest/java/com/forrestguice/suntimes/naturalhour/espresso/ViewAssertionHelper.java: -------------------------------------------------------------------------------- 1 | package com.forrestguice.suntimes.naturalhour.espresso; 2 | 3 | import androidx.test.espresso.ViewAssertion; 4 | 5 | import static androidx.test.espresso.assertion.ViewAssertions.matches; 6 | import static androidx.test.espresso.matcher.ViewMatchers.hasFocus; 7 | import static androidx.test.espresso.matcher.ViewMatchers.isChecked; 8 | import static androidx.test.espresso.matcher.ViewMatchers.isClickable; 9 | import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed; 10 | import static androidx.test.espresso.matcher.ViewMatchers.isDisplayingAtLeast; 11 | import static androidx.test.espresso.matcher.ViewMatchers.isEnabled; 12 | import static androidx.test.espresso.matcher.ViewMatchers.isNotChecked; 13 | import static androidx.test.espresso.matcher.ViewMatchers.isSelected; 14 | import static androidx.test.espresso.matcher.ViewMatchers.withText; 15 | import static org.hamcrest.CoreMatchers.containsString; 16 | import static org.hamcrest.core.AllOf.allOf; 17 | import static org.hamcrest.core.IsNot.not; 18 | 19 | public class ViewAssertionHelper 20 | { 21 | public static ViewAssertion assertShown = matches(isDisplayed()); 22 | public static ViewAssertion assertShownCompletely = matches(isDisplayingAtLeast(90)); 23 | public static ViewAssertion assertHidden = matches(not(isDisplayed())); 24 | public static ViewAssertion assertEnabled = matches(allOf(isEnabled(), isDisplayed())); 25 | public static ViewAssertion assertDisabled = matches(allOf(not(isEnabled()), isDisplayed())); 26 | public static ViewAssertion assertFocused = matches(allOf(isEnabled(), isDisplayed(), hasFocus())); 27 | public static ViewAssertion assertClickable = matches(isClickable()); 28 | public static ViewAssertion assertSelected = matches(isSelected()); 29 | public static ViewAssertion assertChecked = matches(isChecked()); 30 | public static ViewAssertion assertNotChecked = matches(isNotChecked()); 31 | public static ViewAssertion assertContainsText(String text) { 32 | return matches(withText(containsString(text))); 33 | } 34 | } -------------------------------------------------------------------------------- /app/src/main/java/com/forrestguice/suntimes/naturalhour/ui/daydream/ClockDaydreamBitmap.java: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-3.0-or-later 2 | /* 3 | Copyright (C) 2020-2024 Forrest Guice 4 | This file is part of Natural Hour. 5 | 6 | Natural Hour is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU General Public License as published by 8 | the Free Software Foundation, either version 3 of the License, or 9 | (at your option) any later version. 10 | 11 | Natural Hour is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU General Public License for more details. 15 | 16 | You should have received a copy of the GNU General Public License 17 | along with Natural Hour. If not, see . 18 | */ 19 | 20 | package com.forrestguice.suntimes.naturalhour.ui.daydream; 21 | 22 | import android.content.Context; 23 | 24 | import com.forrestguice.suntimes.naturalhour.R; 25 | import com.forrestguice.suntimes.naturalhour.ui.clockview.NaturalHourClockBitmap; 26 | 27 | public class ClockDaydreamBitmap extends NaturalHourClockBitmap 28 | { 29 | public ClockDaydreamBitmap(Context context, int size) { 30 | super(context, size); 31 | } 32 | 33 | @Override 34 | protected void initFlags(Context context) 35 | { 36 | setFlagIfUnset(FLAG_SHOW_SECONDS, context.getResources().getBoolean(R.bool.daydream_show_seconds)); 37 | super.initFlags(context); 38 | } 39 | 40 | @Override 41 | public boolean getDefaultFlag(Context context, String flag) 42 | { 43 | switch (flag) { 44 | case FLAG_SHOW_SECONDS: return context.getResources().getBoolean(R.bool.daydream_show_seconds); 45 | default: return super.getDefaultFlag(context, flag); 46 | } 47 | } 48 | 49 | @Override 50 | public int getDefaultValue(Context context, String key) 51 | { 52 | switch (key) { 53 | default: return super.getDefaultValue(context, key); 54 | } 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /app/src/main/java/com/forrestguice/suntimes/naturalhour/data/TimeZoneWrapper.java: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-3.0-or-later 2 | /* 3 | Copyright (C) 2022 Forrest Guice 4 | This file is part of Natural Hour. 5 | 6 | Natural Hour is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU General Public License as published by 8 | the Free Software Foundation, either version 3 of the License, or 9 | (at your option) any later version. 10 | 11 | Natural Hour is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU General Public License for more details. 15 | 16 | You should have received a copy of the GNU General Public License 17 | along with Natural Hour. If not, see . 18 | */ 19 | 20 | package com.forrestguice.suntimes.naturalhour.data; 21 | 22 | import java.util.Date; 23 | import java.util.TimeZone; 24 | 25 | public class TimeZoneWrapper extends TimeZone 26 | { 27 | protected final boolean inDst; 28 | protected final TimeZone timezone; 29 | 30 | /** 31 | * @param timezone TimeZone object to wrap 32 | * @param dst true force DST adjustment on; false force DST adjustment off 33 | */ 34 | public TimeZoneWrapper(TimeZone timezone, boolean dst) 35 | { 36 | this.timezone = timezone; 37 | this.inDst = dst; 38 | } 39 | 40 | @Override 41 | public boolean useDaylightTime() { 42 | return inDst; 43 | } 44 | 45 | @Override 46 | public boolean inDaylightTime(Date date) { 47 | return inDst; 48 | } 49 | 50 | @Override 51 | public int getOffset(int era, int year, int month, int day, int dayOfWeek, int milliseconds) { 52 | return timezone.getOffset(era, year, month, day, dayOfWeek, milliseconds); 53 | } 54 | 55 | @Override 56 | public void setRawOffset(int offsetMillis) { 57 | timezone.setRawOffset(offsetMillis); 58 | } 59 | 60 | @Override 61 | public int getRawOffset() { 62 | return timezone.getRawOffset(); 63 | } 64 | } -------------------------------------------------------------------------------- /app/src/main/res/layout/dialog_help.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 11 | 12 | 16 | 17 | 23 | 24 | 25 | 26 | 32 | 33 |