├── .gitattributes ├── .github ├── FUNDING.yml ├── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md └── workflows │ ├── main.yml │ └── release.yml ├── .gitignore ├── .gitmodules ├── .idea ├── .name ├── codeStyles │ └── Project.xml ├── misc.xml └── runConfigurations.xml ├── CHANGELOG.md ├── LICENSE ├── README.md ├── app ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── forrestguice │ │ └── suntimes │ │ └── naturalhour │ │ ├── ExampleInstrumentedTest.java │ │ ├── MainActivityTest.java │ │ ├── SettingsActivityTest.java │ │ ├── TestRobot.java │ │ ├── espresso │ │ ├── DataInteractionHelper.java │ │ ├── ViewAssertionHelper.java │ │ ├── ViewInteractionHelper.java │ │ ├── action │ │ │ └── ViewActionsContrib.java │ │ ├── contrib │ │ │ └── PickerActions.java │ │ └── matcher │ │ │ └── ViewMatchersContrib.java │ │ └── ui │ │ ├── alarms │ │ └── AlarmActivityTest.java │ │ ├── daydream │ │ └── ClockDaydreamSettingsActivityTest.java │ │ ├── tiles │ │ ├── TileConfigActivityTest.java │ │ └── TileLockScreenActivityTest.java │ │ └── widget │ │ ├── NaturalHourWidgetTest.java │ │ ├── Widget3x2ConfigActivityTest.java │ │ ├── Widget4x3ConfigActivityTest.java │ │ ├── Widget5x3ConfigActivityTest.java │ │ └── WidgetConfigActivityTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── art │ │ ├── naturalhour.svg │ │ └── naturalhour1.svg │ ├── ic_launcher-playstore.png │ ├── java │ │ └── com │ │ │ └── forrestguice │ │ │ └── suntimes │ │ │ └── naturalhour │ │ │ ├── AppSettings.java │ │ │ ├── AppThemes.java │ │ │ ├── MainActivity.java │ │ │ ├── SettingsActivity.java │ │ │ ├── data │ │ │ ├── EquinoctialHours.java │ │ │ ├── ExecutorUtils.java │ │ │ ├── NaturalHourCalculator.java │ │ │ ├── NaturalHourCalculator1.java │ │ │ ├── NaturalHourCalculator2.java │ │ │ ├── NaturalHourData.java │ │ │ ├── NaturalHourProvider.java │ │ │ ├── NaturalHourProviderContract.java │ │ │ ├── TimeZoneWrapper.java │ │ │ └── alarms │ │ │ │ ├── NaturalHourAlarm0.java │ │ │ │ ├── NaturalHourAlarm1.java │ │ │ │ └── NaturalHourAlarmType.java │ │ │ └── ui │ │ │ ├── AboutDialog.java │ │ │ ├── DisplayStrings.java │ │ │ ├── HelpDialog.java │ │ │ ├── IntListPreference.java │ │ │ ├── NaturalHourFragment.java │ │ │ ├── ThrottledClickListener.java │ │ │ ├── TimeOffsetPicker.java │ │ │ ├── TimeOffsetPickerDialog.java │ │ │ ├── TimeOffsetPickerPreference.java │ │ │ ├── Toast.java │ │ │ ├── alarms │ │ │ ├── AlarmActivity.java │ │ │ ├── AlarmSelectFragment.java │ │ │ ├── AlarmSelectFragmentBase.java │ │ │ ├── NaturalHourAlarmFragment.java │ │ │ ├── NaturalHourAlarmSheet.java │ │ │ ├── NaturalHourSelectFragment.java │ │ │ └── NightWatchSelectFragment.java │ │ │ ├── clockview │ │ │ ├── ClockColorValues.java │ │ │ ├── ClockColorValuesCollection.java │ │ │ ├── ClockColorValuesEditFragment.java │ │ │ ├── ClockColorValuesSun.java │ │ │ ├── NaturalHourClockBitmap.java │ │ │ └── NaturalHourClockView.java │ │ │ ├── colors │ │ │ ├── ColorUtils.java │ │ │ ├── ColorValues.java │ │ │ ├── ColorValuesCollection.java │ │ │ ├── ColorValuesCollectionPreference.java │ │ │ ├── ColorValuesEditFragment.java │ │ │ ├── ColorValuesEditViewAdapter.java │ │ │ ├── ColorValuesEditViewHolder.java │ │ │ ├── ColorValuesFragment.java │ │ │ ├── ColorValuesSelectFragment.java │ │ │ ├── ColorValuesSheetActivity.java │ │ │ ├── ColorValuesSheetFragment.java │ │ │ └── ResourceColorValues.java │ │ │ ├── daydream │ │ │ ├── ClockDaydreamBitmap.java │ │ │ ├── ClockDaydreamService.java │ │ │ ├── ClockDaydreamSettingsActivity.java │ │ │ ├── DaydreamClockView.java │ │ │ ├── DaydreamPreferenceFragment.java │ │ │ └── DaydreamSettings.java │ │ │ ├── tiles │ │ │ ├── NaturalHourTileBase.java │ │ │ ├── NaturalHourTileConfigActivity.java │ │ │ ├── NaturalHourTileService.java │ │ │ ├── SuntimesTileActivity.java │ │ │ ├── SuntimesTileBase.java │ │ │ ├── SuntimesTileService.java │ │ │ ├── TileLockScreenActivity.java │ │ │ └── TilePreferenceFragment.java │ │ │ └── widget │ │ │ ├── NaturalHourWidget.java │ │ │ ├── NaturalHourWidget_3x2.java │ │ │ ├── NaturalHourWidget_3x2_ConfigActivity.java │ │ │ ├── NaturalHourWidget_4x3.java │ │ │ ├── NaturalHourWidget_4x3_ConfigActivity.java │ │ │ ├── NaturalHourWidget_5x3.java │ │ │ ├── NaturalHourWidget_5x3_ConfigActivity.java │ │ │ ├── WidgetConfigActivity.java │ │ │ ├── WidgetPreferenceFragment.java │ │ │ └── WidgetSettings.java │ └── res │ │ ├── color │ │ ├── card_background_dark.xml │ │ ├── card_background_light.xml │ │ └── textbutton_date.xml │ │ ├── drawable-anydpi │ │ ├── ic_about.xml │ │ ├── ic_about_light.xml │ │ ├── ic_add.xml │ │ ├── ic_add_light.xml │ │ ├── ic_alarm.xml │ │ ├── ic_alarm_light.xml │ │ ├── ic_back.xml │ │ ├── ic_back_light.xml │ │ ├── ic_delete.xml │ │ ├── ic_delete_light.xml │ │ ├── ic_done.xml │ │ ├── ic_done_light.xml │ │ ├── ic_edit.xml │ │ ├── ic_edit_light.xml │ │ ├── ic_fullscreen_off.xml │ │ ├── ic_fullscreen_off_light.xml │ │ ├── ic_fullscreen_on.xml │ │ ├── ic_fullscreen_on_light.xml │ │ ├── ic_help.xml │ │ ├── ic_help_light.xml │ │ ├── ic_palette.xml │ │ ├── ic_palette_light.xml │ │ ├── ic_save.xml │ │ ├── ic_save_light.xml │ │ ├── ic_settings.xml │ │ ├── ic_settings_light.xml │ │ ├── ic_share.xml │ │ ├── ic_share_light.xml │ │ ├── ic_today.xml │ │ ├── ic_today_light.xml │ │ └── widget_bg_dark.xml │ │ ├── drawable-hdpi │ │ ├── ic_about.png │ │ ├── ic_about_light.png │ │ ├── ic_add.png │ │ ├── ic_add_light.png │ │ ├── ic_alarm.png │ │ ├── ic_alarm_light.png │ │ ├── ic_back.png │ │ ├── ic_back_light.png │ │ ├── ic_delete.png │ │ ├── ic_delete_light.png │ │ ├── ic_done.png │ │ ├── ic_done_light.png │ │ ├── ic_edit.png │ │ ├── ic_edit_light.png │ │ ├── ic_fullscreen_off.png │ │ ├── ic_fullscreen_off_light.png │ │ ├── ic_fullscreen_on.png │ │ ├── ic_fullscreen_on_light.png │ │ ├── ic_help.png │ │ ├── ic_help_light.png │ │ ├── ic_palette.png │ │ ├── ic_palette_light.png │ │ ├── ic_save.png │ │ ├── ic_save_light.png │ │ ├── ic_settings.png │ │ ├── ic_settings_light.png │ │ ├── ic_share.png │ │ ├── ic_share_light.png │ │ ├── ic_today.png │ │ └── ic_today_light.png │ │ ├── drawable-mdpi │ │ ├── ic_about.png │ │ ├── ic_about_light.png │ │ ├── ic_add.png │ │ ├── ic_add_light.png │ │ ├── ic_alarm.png │ │ ├── ic_alarm_light.png │ │ ├── ic_back.png │ │ ├── ic_back_light.png │ │ ├── ic_delete.png │ │ ├── ic_delete_light.png │ │ ├── ic_done.png │ │ ├── ic_done_light.png │ │ ├── ic_edit.png │ │ ├── ic_edit_light.png │ │ ├── ic_fullscreen_off.png │ │ ├── ic_fullscreen_off_light.png │ │ ├── ic_fullscreen_on.png │ │ ├── ic_fullscreen_on_light.png │ │ ├── ic_help.png │ │ ├── ic_help_light.png │ │ ├── ic_palette.png │ │ ├── ic_palette_light.png │ │ ├── ic_save.png │ │ ├── ic_save_light.png │ │ ├── ic_settings.png │ │ ├── ic_settings_light.png │ │ ├── ic_share.png │ │ ├── ic_share_light.png │ │ ├── ic_today.png │ │ └── ic_today_light.png │ │ ├── drawable-v23 │ │ └── toast_frame.xml │ │ ├── drawable-xhdpi │ │ ├── ic_about.png │ │ ├── ic_about_light.png │ │ ├── ic_add.png │ │ ├── ic_add_light.png │ │ ├── ic_alarm.png │ │ ├── ic_alarm_light.png │ │ ├── ic_back.png │ │ ├── ic_back_light.png │ │ ├── ic_delete.png │ │ ├── ic_delete_light.png │ │ ├── ic_done.png │ │ ├── ic_done_light.png │ │ ├── ic_edit.png │ │ ├── ic_edit_light.png │ │ ├── ic_fullscreen_off.png │ │ ├── ic_fullscreen_off_light.png │ │ ├── ic_fullscreen_on.png │ │ ├── ic_fullscreen_on_light.png │ │ ├── ic_help.png │ │ ├── ic_help_light.png │ │ ├── ic_palette.png │ │ ├── ic_palette_light.png │ │ ├── ic_save.png │ │ ├── ic_save_light.png │ │ ├── ic_settings.png │ │ ├── ic_settings_light.png │ │ ├── ic_share.png │ │ ├── ic_share_light.png │ │ ├── ic_today.png │ │ └── ic_today_light.png │ │ ├── drawable-xxhdpi │ │ ├── ic_about.png │ │ ├── ic_about_light.png │ │ ├── ic_add.png │ │ ├── ic_add_light.png │ │ ├── ic_alarm.png │ │ ├── ic_alarm_light.png │ │ ├── ic_back.png │ │ ├── ic_back_light.png │ │ ├── ic_delete.png │ │ ├── ic_delete_light.png │ │ ├── ic_done.png │ │ ├── ic_done_light.png │ │ ├── ic_edit.png │ │ ├── ic_edit_light.png │ │ ├── ic_fullscreen_off.png │ │ ├── ic_fullscreen_off_light.png │ │ ├── ic_fullscreen_on.png │ │ ├── ic_fullscreen_on_light.png │ │ ├── ic_help.png │ │ ├── ic_help_light.png │ │ ├── ic_palette.png │ │ ├── ic_palette_light.png │ │ ├── ic_save.png │ │ ├── ic_save_light.png │ │ ├── ic_settings.png │ │ ├── ic_settings_light.png │ │ ├── ic_share.png │ │ ├── ic_share_light.png │ │ ├── ic_today.png │ │ └── ic_today_light.png │ │ ├── drawable │ │ ├── ic_launcher_foreground.xml │ │ ├── ic_launcher_monochrome.xml │ │ ├── ic_time.xml │ │ ├── tilecard_bg_dark.xml │ │ ├── tilecard_bg_light.xml │ │ └── toast_frame.xml │ │ ├── layout-land │ │ ├── activity_main.xml │ │ └── card_naturalhour.xml │ │ ├── layout │ │ ├── activity_alarm.xml │ │ ├── activity_colorsheet.xml │ │ ├── activity_daydream.xml │ │ ├── activity_daydream_config.xml │ │ ├── activity_main.xml │ │ ├── activity_tileconfig.xml │ │ ├── activity_widget.xml │ │ ├── card_naturalhour.xml │ │ ├── content_bottombar.xml │ │ ├── content_main.xml │ │ ├── dialog_about.xml │ │ ├── dialog_alarms.xml │ │ ├── dialog_help.xml │ │ ├── fragment_alarmsheet.xml │ │ ├── fragment_colorselector.xml │ │ ├── fragment_colorsheet.xml │ │ ├── fragment_colorvalues.xml │ │ ├── fragment_naturalhour.xml │ │ ├── fragment_naturalhour_selector.xml │ │ ├── fragment_nightwatch_selector.xml │ │ ├── layout_dialog_alert.xml │ │ ├── layout_dialog_tile.xml │ │ ├── layout_dialog_timeoffset.xml │ │ ├── layout_listitem_coloredit.xml │ │ ├── layout_listitem_colors.xml │ │ ├── layout_listitem_hourmode.xml │ │ ├── layout_view_timeoffset.xml │ │ └── widget_naturalhour_3x3.xml │ │ ├── menu │ │ ├── menu_alarm.xml │ │ ├── menu_alarm1.xml │ │ ├── menu_coloredit.xml │ │ ├── menu_colorlist.xml │ │ ├── menu_colorsheet.xml │ │ ├── menu_daydream.xml │ │ ├── menu_jumpto.xml │ │ ├── menu_main.xml │ │ ├── menu_timeformat.xml │ │ ├── menu_timezone.xml │ │ └── menu_widget.xml │ │ ├── mipmap-anydpi-v26 │ │ ├── ic_launcher.xml │ │ └── ic_launcher_round.xml │ │ ├── mipmap-hdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-mdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xhdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xxhdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xxxhdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── 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 │ │ ├── clockface.xml │ │ ├── colors.xml │ │ ├── daydream.xml │ │ ├── icons.xml │ │ └── styles.xml │ │ ├── values-v14 │ │ └── widget.xml │ │ ├── values-v16 │ │ └── styles.xml │ │ ├── values-v21 │ │ └── styles.xml │ │ ├── values-v24 │ │ └── attrs.xml │ │ ├── values-v28 │ │ └── styles.xml │ │ ├── values │ │ ├── attrs.xml │ │ ├── clockface.xml │ │ ├── colors.xml │ │ ├── daydream.xml │ │ ├── dimens.xml │ │ ├── help_urls.xml │ │ ├── ic_launcher_background.xml │ │ ├── icons.xml │ │ ├── numerals.xml │ │ ├── strings.xml │ │ ├── styles.xml │ │ ├── tiles.xml │ │ └── widget.xml │ │ └── xml │ │ ├── backup_descriptor.xml │ │ ├── daydream_clock.xml │ │ ├── pref_daydream.xml │ │ ├── pref_general.xml │ │ ├── pref_tile.xml │ │ ├── pref_widget.xml │ │ ├── widget_naturalhour_3x2.xml │ │ ├── widget_naturalhour_4x3.xml │ │ └── widget_naturalhour_5x3.xml │ └── test │ └── java │ └── com │ └── forrestguice │ └── suntimes │ └── naturalhour │ └── ExampleUnitTest.java ├── build.gradle ├── fastlane └── metadata │ └── android │ └── en-US │ ├── changelogs │ ├── 1.txt │ ├── 2.txt │ ├── 3.txt │ ├── 4.txt │ ├── 5.txt │ ├── 6.txt │ ├── 7.txt │ └── 8.txt │ ├── full_description.txt │ ├── images │ ├── featureGraphic.png │ ├── icon.png │ └── phoneScreenshots │ │ ├── 1.png │ │ ├── 2.png │ │ ├── 3.png │ │ └── 4.png │ └── short_description.txt ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat └── settings.gradle /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /.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 | -------------------------------------------------------------------------------- /.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 | -------------------------------------------------------------------------------- /.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 | -------------------------------------------------------------------------------- /.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 build 35 | 36 | - name: Upload artifacts (debug apk) 37 | uses: actions/upload-artifact@v4 38 | with: 39 | name: app 40 | path: app/build/outputs/apk/debug/app-debug.apk 41 | 42 | - name: Upload artifacts (lint results) 43 | uses: actions/upload-artifact@v4 44 | with: 45 | name: lint-results.html 46 | path: app/build/reports/lint-results.html 47 | -------------------------------------------------------------------------------- /.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 | -------------------------------------------------------------------------------- /.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 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "SuntimesAddon"] 2 | path = SuntimesAddon 3 | url = https://github.com/forrestguice/SuntimesAddon 4 | -------------------------------------------------------------------------------- /.idea/.name: -------------------------------------------------------------------------------- 1 | Natural Hour -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 9 | -------------------------------------------------------------------------------- /.idea/runConfigurations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 12 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | 3 | android { 4 | compileSdkVersion 33 5 | defaultConfig { 6 | applicationId "com.forrestguice.suntimes.naturalhour" 7 | minSdkVersion 14 8 | //noinspection OldTargetApi 9 | targetSdkVersion 33 10 | versionCode 8 11 | versionName "0.3.2" 12 | testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' 13 | vectorDrawables.useSupportLibrary = true 14 | buildConfigField "String", "GIT_HASH", "\"${getGitHash()}\"" 15 | missingDimensionStrategy 'version', 'androidx' 16 | missingDimensionStrategy 'api', 'api33' 17 | } 18 | 19 | buildTypes { 20 | release { 21 | minifyEnabled true 22 | proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' 23 | } 24 | } 25 | 26 | lintOptions { 27 | disable 'MissingTranslation'//,'WrongRegion','ObsoleteSdkInt' 28 | } 29 | 30 | compileOptions { 31 | sourceCompatibility 1.8 32 | targetCompatibility 1.8 33 | } 34 | } 35 | 36 | dependencies { 37 | implementation project(path: ":SuntimesAddon") //implementation 'com.github.forrestguice:SuntimesAddon:v0.4.3' 38 | implementation 'androidx.appcompat:appcompat:1.6.1' // 1.7.0 (2024-05-29) requires Java 17 39 | implementation 'androidx.constraintlayout:constraintlayout:2.1.4' // 2.2.0 (2024-10-30) requires minapi 21+ 40 | implementation 'androidx.coordinatorlayout:coordinatorlayout:1.2.0' // 1.3.0 (2025-02-26) requires minapi 21+ 41 | implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' 42 | implementation 'androidx.lifecycle:lifecycle-livedata:2.5.0' // 2.7.0+ requires Java 17 43 | implementation 'androidx.lifecycle:lifecycle-viewmodel:2.5.0' // 2.7.0+ requires Java 17 44 | implementation 'androidx.vectordrawable:vectordrawable:1.1.0' // 1.2.0 requires Java 17 45 | implementation 'com.google.android.material:material:1.6.1' 46 | 47 | testImplementation 'junit:junit:4.12' 48 | 49 | androidTestImplementation 'androidx.test.ext:junit:1.1.1' 50 | androidTestImplementation 'androidx.test:core:1.1.0' 51 | androidTestImplementation 'androidx.test:rules:1.2.0' 52 | androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' 53 | } 54 | 55 | def getGitHash() 56 | { 57 | def stdout = new ByteArrayOutputStream() 58 | exec { 59 | commandLine 'git', 'rev-parse', '--short', 'HEAD' 60 | standardOutput = stdout 61 | } 62 | return stdout.toString().trim() 63 | } -------------------------------------------------------------------------------- /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/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/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/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/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/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/androidTest/java/com/forrestguice/suntimes/naturalhour/ui/tiles/TileLockScreenActivityTest.java: -------------------------------------------------------------------------------- 1 | package com.forrestguice.suntimes.naturalhour.ui.tiles; 2 | 3 | import android.content.Context; 4 | import android.content.Intent; 5 | 6 | import com.forrestguice.suntimes.naturalhour.TestRobot; 7 | 8 | import org.junit.After; 9 | import org.junit.Before; 10 | import org.junit.Rule; 11 | import org.junit.Test; 12 | import org.junit.runner.RunWith; 13 | 14 | import java.io.IOException; 15 | 16 | import androidx.test.ext.junit.runners.AndroidJUnit4; 17 | import androidx.test.filters.LargeTest; 18 | import androidx.test.platform.app.InstrumentationRegistry; 19 | import androidx.test.rule.ActivityTestRule; 20 | 21 | import static com.forrestguice.suntimes.naturalhour.TestRobot.setAnimationsEnabled; 22 | import static org.junit.Assert.assertFalse; 23 | import static org.junit.Assert.assertTrue; 24 | 25 | @LargeTest 26 | @RunWith(AndroidJUnit4.class) 27 | public class TileLockScreenActivityTest 28 | { 29 | @Rule 30 | public ActivityTestRule activityRule = new ActivityTestRule<>(TileLockScreenActivity.class, false, false); 31 | private Context context; 32 | 33 | @Before 34 | public void beforeTest() throws IOException { 35 | context = InstrumentationRegistry.getInstrumentation().getTargetContext(); 36 | setAnimationsEnabled(false); 37 | } 38 | @After 39 | public void afterTest() throws IOException { 40 | setAnimationsEnabled(true); 41 | } 42 | 43 | @Test 44 | public void test_tileLockScreenActivity() 45 | { 46 | Intent intent = new Intent(context, TileLockScreenActivity.class); 47 | intent.putExtra(TileLockScreenActivity.EXTRA_APPWIDGETID, NaturalHourTileBase.TILE_APPWIDGET_ID); 48 | activityRule.launchActivity(intent); 49 | assertFalse(activityRule.getActivity().isFinishing()); 50 | } 51 | 52 | @Test 53 | public void test_tileLockScreenActivity_missingID() 54 | { 55 | Intent intent = new Intent(context, TileLockScreenActivity.class); 56 | activityRule.launchActivity(intent); 57 | assertTrue(activityRule.getActivity().isFinishing()); 58 | } 59 | 60 | /** 61 | * TileLockScreenActivityRobot 62 | */ 63 | public static class TileLockScreenActivityRobot extends TestRobot.ActivityRobot 64 | { 65 | public TileLockScreenActivityRobot() { 66 | setRobot(this); 67 | } 68 | 69 | public TileLockScreenActivityRobot assertActivityShown() 70 | { 71 | // TODO 72 | return this; 73 | } 74 | } 75 | } -------------------------------------------------------------------------------- /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/ic_launcher-playstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/ic_launcher-playstore.png -------------------------------------------------------------------------------- /app/src/main/java/com/forrestguice/suntimes/naturalhour/data/ExecutorUtils.java: -------------------------------------------------------------------------------- 1 | /** 2 | Copyright (C) 2024 Forrest Guice 3 | This file is part of SuntimesWidget. 4 | 5 | SuntimesWidget 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 | SuntimesWidget 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 SuntimesWidget. If not, see . 17 | */ 18 | 19 | package com.forrestguice.suntimes.naturalhour.data; 20 | 21 | import android.util.Log; 22 | 23 | import com.forrestguice.suntimes.annotation.NonNull; 24 | import com.forrestguice.suntimes.annotation.Nullable; 25 | 26 | import java.util.concurrent.Callable; 27 | import java.util.concurrent.ExecutionException; 28 | import java.util.concurrent.ExecutorService; 29 | import java.util.concurrent.Executors; 30 | import java.util.concurrent.Future; 31 | import java.util.concurrent.TimeUnit; 32 | import java.util.concurrent.TimeoutException; 33 | 34 | public class ExecutorUtils 35 | { 36 | public static boolean runTask(String tag, @NonNull final Callable r, long timeoutAfter) 37 | { 38 | Boolean result = getResult(tag, r, timeoutAfter); 39 | return (result != null && result); 40 | } 41 | 42 | @Nullable 43 | public static T getResult(String tag, @NonNull final Callable callable, long timeoutAfter) 44 | { 45 | ExecutorService executor = Executors.newSingleThreadExecutor(); 46 | final Future task = executor.submit(callable); 47 | try { 48 | return task.get(timeoutAfter, TimeUnit.MILLISECONDS); 49 | 50 | } catch (TimeoutException | InterruptedException | ExecutionException e) { 51 | Log.e(tag, "getResult: failed! " + e); 52 | return null; 53 | 54 | } finally { 55 | task.cancel(true); 56 | executor.shutdownNow(); 57 | } 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /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/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 | -------------------------------------------------------------------------------- /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/java/com/forrestguice/suntimes/naturalhour/data/alarms/NaturalHourAlarmType.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.data.alarms; 21 | 22 | import android.content.Context; 23 | 24 | import com.forrestguice.suntimes.naturalhour.data.NaturalHourData; 25 | 26 | import java.util.Calendar; 27 | import java.util.HashMap; 28 | 29 | import androidx.annotation.NonNull; 30 | import androidx.annotation.Nullable; 31 | 32 | public interface NaturalHourAlarmType 33 | { 34 | String getTypeID(); 35 | boolean isOfType(@Nullable String alarmID); 36 | 37 | /** 38 | * @return an array of [alarmID, ...] (that should be listed by the UI) 39 | */ 40 | String[] getAlarmList(@NonNull Context context); 41 | 42 | String getAlarmTitle(Context context, @Nullable String alarmID); 43 | String getAlarmSummary(Context context, @Nullable String alarmID); 44 | String getAlarmPhrase(Context context, @Nullable String alarmID); 45 | String getAlarmPhraseGender(Context context, @Nullable String alarmID); 46 | int getAlarmPhraseQuantity(Context context, @Nullable String alarmID); 47 | 48 | boolean getRequiresLocation(@Nullable String alarmID); 49 | boolean getSupportsRepeating(@Nullable String alarmID); 50 | 51 | long calculateAlarmTime(@NonNull Context context, @Nullable String alarmID, HashMap selectionMap); 52 | 53 | /** 54 | * @param alarmID alarmID 55 | * @return int[] params 56 | */ 57 | int[] fromAlarmID(String alarmID); 58 | String toAlarmID(int[] params); 59 | 60 | Calendar getEventTime(int hourMode, NaturalHourData data, int[] params); 61 | 62 | } -------------------------------------------------------------------------------- /app/src/main/java/com/forrestguice/suntimes/naturalhour/ui/IntListPreference.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; 21 | 22 | import android.content.Context; 23 | import android.preference.ListPreference; 24 | import android.util.AttributeSet; 25 | import android.util.Log; 26 | 27 | /** 28 | * IntListPreference: an extended version of ListPreference that attempts to save/load values as int. 29 | */ 30 | public class IntListPreference extends ListPreference 31 | { 32 | public IntListPreference(Context context) { 33 | super(context); 34 | } 35 | 36 | public IntListPreference(Context context, AttributeSet attrs) { 37 | super(context, attrs); 38 | } 39 | 40 | @Override 41 | protected boolean persistString(String value) { 42 | return persistInt(Integer.parseInt(value)); 43 | } 44 | 45 | @Override 46 | protected String getPersistedString(String defaultValue) 47 | { 48 | if (!shouldPersist()) { 49 | return defaultValue; 50 | } 51 | 52 | int intDefault; 53 | try { 54 | intDefault = defaultValue != null ? Integer.parseInt(defaultValue) : 0; 55 | } catch (NumberFormatException e) { 56 | Log.e(getClass().getSimpleName(), "getPersistedString: not numeric! " + e); 57 | intDefault = 0; 58 | } 59 | return Integer.toString(getPersistedInt(intDefault)); 60 | } 61 | } -------------------------------------------------------------------------------- /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/main/java/com/forrestguice/suntimes/naturalhour/ui/Toast.java: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (C) 2022 Forrest Guice 3 | This file is part of Natural Hour. 4 | 5 | Natural Hour 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 | Natural Hour 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 Natural Hour. If not, see . 17 | */ 18 | 19 | package com.forrestguice.suntimes.naturalhour.ui; 20 | 21 | import android.annotation.SuppressLint; 22 | import android.content.Context; 23 | import android.os.Build; 24 | import android.view.View; 25 | import android.widget.TextView; 26 | 27 | import com.forrestguice.suntimes.naturalhour.R; 28 | 29 | /** 30 | * Custom toast methods.. applies version specific bug-fixes to Toast messages. 31 | * bug: [Android 13 dark theme toasts white on white](https://issuetracker.google.com/issues/245108402) 32 | */ 33 | public class Toast 34 | { 35 | public static final int LENGTH_LONG = android.widget.Toast.LENGTH_LONG; 36 | public static final int LENGTH_SHORT = android.widget.Toast.LENGTH_SHORT; 37 | 38 | /** 39 | * Applies `backgroundResource` and `textAppearance` for api33+ (and targetSdk is under than 30). 40 | */ 41 | @SuppressLint("ShowToast") 42 | public static android.widget.Toast makeText(Context context, CharSequence text, int duration) 43 | { 44 | android.widget.Toast toast = android.widget.Toast.makeText(context, text, duration); 45 | if (context.getApplicationContext().getApplicationInfo().targetSdkVersion < 30) 46 | { 47 | if (Build.VERSION.SDK_INT >= 33) 48 | { 49 | View v = toast.getView(); // Toast.getView will return null for targetApi R+ 50 | if (v != null) 51 | { 52 | v.setBackgroundResource(R.drawable.toast_frame); 53 | TextView message = (TextView) v.findViewById(android.R.id.message); 54 | if (message != null) { 55 | message.setTextAppearance(R.style.ToastTextAppearance); 56 | } 57 | } 58 | } 59 | } 60 | return toast; 61 | } 62 | } -------------------------------------------------------------------------------- /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/main/java/com/forrestguice/suntimes/naturalhour/ui/colors/ColorUtils.java: -------------------------------------------------------------------------------- 1 | /** 2 | Copyright (C) 2024 Forrest Guice 3 | This file is part of SuntimesWidget. 4 | 5 | SuntimesWidget 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 | SuntimesWidget 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 SuntimesWidget. If not, see . 17 | */ 18 | 19 | package com.forrestguice.suntimes.naturalhour.ui.colors; 20 | 21 | import android.graphics.Color; 22 | 23 | public class ColorUtils 24 | { 25 | /** 26 | * isTextReadable 27 | * @param textColor text color 28 | * @param backgroundColor background color 29 | * @return contrast ratio between textColor and backgroundColor is greater than 4.5 30 | */ 31 | public static boolean isTextReadable(int textColor, int backgroundColor) { 32 | return getContrastRatio(textColor, backgroundColor) > 4.5; // AA minimum; https://www.w3.org/TR/WCAG21/#contrast-minimum 33 | } 34 | 35 | /** 36 | * https://www.w3.org/TR/WCAG21/#dfn-relative-luminance 37 | */ 38 | public static double getLuminance(int color) 39 | { 40 | double r0 = Color.red(color) / 255d; 41 | double g0 = Color.green(color) / 255d; 42 | double b0 = Color.blue(color) / 255d; 43 | 44 | double r = ((r0 <= 0.04045) ? (r0 / 12.92) : Math.pow((r0 + 0.055) / 1.055, 2.4)); 45 | double g = ((g0 <= 0.04045) ? (g0 / 12.92) : Math.pow((g0 + 0.055) / 1.055, 2.4)); 46 | double b = ((b0 <= 0.04045) ? (b0 / 12.92) : Math.pow((b0 + 0.055) / 1.055, 2.4)); 47 | 48 | return (0.2126 * r) + (0.7152 * g) + (0.0722 * b); 49 | } 50 | public static double getContrastRatio(int textColor, int backgroundColor) 51 | { 52 | double l_textColor = getLuminance(textColor); 53 | double l_backgroundColor = getLuminance(backgroundColor); 54 | double l1 = Math.max(l_textColor, l_backgroundColor); 55 | double l2 = Math.min(l_textColor, l_backgroundColor); 56 | return (l1 + 0.05) / (l2 + 0.05); 57 | } 58 | 59 | } 60 | -------------------------------------------------------------------------------- /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/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/java/com/forrestguice/suntimes/naturalhour/ui/tiles/SuntimesTileActivity.java: -------------------------------------------------------------------------------- 1 | /** 2 | Copyright (C) 2024 Forrest Guice 3 | This file is part of SuntimesWidget. 4 | 5 | SuntimesWidget 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 | SuntimesWidget 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 SuntimesWidget. If not, see . 17 | */ 18 | 19 | package com.forrestguice.suntimes.naturalhour.ui.tiles; 20 | 21 | import android.app.Dialog; 22 | import android.os.Build; 23 | import android.os.Bundle; 24 | import android.util.Log; 25 | import android.view.WindowManager; 26 | 27 | import com.forrestguice.suntimes.annotation.Nullable; 28 | 29 | import androidx.appcompat.app.AppCompatActivity; 30 | 31 | /** 32 | * SuntimesTileActivity; displays a "tile dialog" over the lock screen. 33 | * @see SuntimesTileBase 34 | */ 35 | public abstract class SuntimesTileActivity extends AppCompatActivity 36 | { 37 | @Nullable 38 | protected abstract SuntimesTileBase initTileBase(); 39 | protected SuntimesTileBase tileBase; 40 | 41 | public SuntimesTileActivity() { 42 | super(); 43 | } 44 | 45 | @Override 46 | protected void onCreate(Bundle savedState) 47 | { 48 | super.onCreate(savedState); 49 | setShowWhenLocked(); 50 | getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER); 51 | 52 | tileBase = initTileBase(); 53 | if (tileBase == null) 54 | { 55 | Log.e("SuntimesTileActivity", "null base! finishing..."); 56 | finish(); 57 | 58 | } else { 59 | Dialog dialog = tileBase.createDialog(this); 60 | if (dialog != null) { 61 | dialog.show(); 62 | } 63 | } 64 | } 65 | 66 | @Override 67 | public void onResume() 68 | { 69 | super.onResume(); 70 | overridePendingTransition(0, 0); 71 | } 72 | 73 | protected void setShowWhenLocked() 74 | { 75 | if (Build.VERSION.SDK_INT >= 27) { 76 | setShowWhenLocked(true); 77 | } else { 78 | getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); 79 | } 80 | } 81 | 82 | } 83 | -------------------------------------------------------------------------------- /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/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 | -------------------------------------------------------------------------------- /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/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.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_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_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/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/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/color/textbutton_date.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 8 | 9 | 11 | 12 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /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_add.xml: -------------------------------------------------------------------------------- 1 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi/ic_add_light.xml: -------------------------------------------------------------------------------- 1 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /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/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_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_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_edit.xml: -------------------------------------------------------------------------------- 1 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi/ic_edit_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/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_help.xml: -------------------------------------------------------------------------------- 1 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi/ic_help_light.xml: -------------------------------------------------------------------------------- 1 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi/ic_save.xml: -------------------------------------------------------------------------------- 1 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi/ic_save_light.xml: -------------------------------------------------------------------------------- 1 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /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/drawable-anydpi/ic_share.xml: -------------------------------------------------------------------------------- 1 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi/ic_share_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/drawable-anydpi/widget_bg_dark.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_about.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-hdpi/ic_about.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_about_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-hdpi/ic_about_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-hdpi/ic_add.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_add_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-hdpi/ic_add_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_alarm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-hdpi/ic_alarm.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_alarm_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-hdpi/ic_alarm_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-hdpi/ic_back.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_back_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-hdpi/ic_back_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-hdpi/ic_delete.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_delete_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-hdpi/ic_delete_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_done.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-hdpi/ic_done.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_done_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-hdpi/ic_done_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_edit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-hdpi/ic_edit.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_edit_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-hdpi/ic_edit_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_fullscreen_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-hdpi/ic_fullscreen_off.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_fullscreen_off_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-hdpi/ic_fullscreen_off_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_fullscreen_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-hdpi/ic_fullscreen_on.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_fullscreen_on_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-hdpi/ic_fullscreen_on_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_help.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-hdpi/ic_help.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_help_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-hdpi/ic_help_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_palette.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-hdpi/ic_palette.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_palette_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-hdpi/ic_palette_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_save.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-hdpi/ic_save.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_save_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-hdpi/ic_save_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-hdpi/ic_settings.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_settings_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-hdpi/ic_settings_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_share.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-hdpi/ic_share.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_share_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-hdpi/ic_share_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_today.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-hdpi/ic_today.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_today_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-hdpi/ic_today_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_about.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-mdpi/ic_about.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_about_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-mdpi/ic_about_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-mdpi/ic_add.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_add_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-mdpi/ic_add_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_alarm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-mdpi/ic_alarm.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_alarm_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-mdpi/ic_alarm_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-mdpi/ic_back.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_back_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-mdpi/ic_back_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-mdpi/ic_delete.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_delete_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-mdpi/ic_delete_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_done.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-mdpi/ic_done.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_done_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-mdpi/ic_done_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_edit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-mdpi/ic_edit.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_edit_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-mdpi/ic_edit_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_fullscreen_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-mdpi/ic_fullscreen_off.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_fullscreen_off_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-mdpi/ic_fullscreen_off_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_fullscreen_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-mdpi/ic_fullscreen_on.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_fullscreen_on_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-mdpi/ic_fullscreen_on_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_help.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-mdpi/ic_help.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_help_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-mdpi/ic_help_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_palette.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-mdpi/ic_palette.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_palette_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-mdpi/ic_palette_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_save.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-mdpi/ic_save.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_save_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-mdpi/ic_save_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-mdpi/ic_settings.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_settings_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-mdpi/ic_settings_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_share.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-mdpi/ic_share.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_share_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-mdpi/ic_share_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_today.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-mdpi/ic_today.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_today_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-mdpi/ic_today_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v23/toast_frame.xml: -------------------------------------------------------------------------------- 1 | 16 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_about.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-xhdpi/ic_about.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_about_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-xhdpi/ic_about_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-xhdpi/ic_add.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_add_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-xhdpi/ic_add_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_alarm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-xhdpi/ic_alarm.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_alarm_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-xhdpi/ic_alarm_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-xhdpi/ic_back.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_back_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-xhdpi/ic_back_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-xhdpi/ic_delete.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_delete_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-xhdpi/ic_delete_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_done.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-xhdpi/ic_done.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_done_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-xhdpi/ic_done_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_edit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-xhdpi/ic_edit.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_edit_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-xhdpi/ic_edit_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_fullscreen_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-xhdpi/ic_fullscreen_off.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_fullscreen_off_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-xhdpi/ic_fullscreen_off_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_fullscreen_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-xhdpi/ic_fullscreen_on.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_fullscreen_on_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-xhdpi/ic_fullscreen_on_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_help.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-xhdpi/ic_help.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_help_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-xhdpi/ic_help_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_palette.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-xhdpi/ic_palette.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_palette_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-xhdpi/ic_palette_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_save.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-xhdpi/ic_save.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_save_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/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/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-xhdpi/ic_settings.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_settings_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-xhdpi/ic_settings_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_share.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-xhdpi/ic_share.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_share_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-xhdpi/ic_share_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_today.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-xhdpi/ic_today.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_today_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-xhdpi/ic_today_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_about.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-xxhdpi/ic_about.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_about_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-xxhdpi/ic_about_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-xxhdpi/ic_add.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_add_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-xxhdpi/ic_add_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_alarm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-xxhdpi/ic_alarm.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_alarm_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-xxhdpi/ic_alarm_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-xxhdpi/ic_back.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_back_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-xxhdpi/ic_back_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-xxhdpi/ic_delete.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_delete_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-xxhdpi/ic_delete_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_done.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-xxhdpi/ic_done.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_done_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-xxhdpi/ic_done_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_edit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-xxhdpi/ic_edit.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_edit_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-xxhdpi/ic_edit_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_fullscreen_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-xxhdpi/ic_fullscreen_off.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_fullscreen_off_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-xxhdpi/ic_fullscreen_off_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_fullscreen_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-xxhdpi/ic_fullscreen_on.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_fullscreen_on_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-xxhdpi/ic_fullscreen_on_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_help.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-xxhdpi/ic_help.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_help_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-xxhdpi/ic_help_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_palette.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-xxhdpi/ic_palette.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_palette_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-xxhdpi/ic_palette_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_save.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-xxhdpi/ic_save.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_save_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-xxhdpi/ic_save_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-xxhdpi/ic_settings.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_settings_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-xxhdpi/ic_settings_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_share.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-xxhdpi/ic_share.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_share_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-xxhdpi/ic_share_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_today.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-xxhdpi/ic_today.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_today_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/drawable-xxhdpi/ic_today_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_time.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/tilecard_bg_dark.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/tilecard_bg_light.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/toast_frame.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/layout-land/card_naturalhour.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 13 | 14 | 20 | 21 | 25 | 26 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /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/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/layout/activity_daydream.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 11 | 12 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /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_tileconfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 18 | 19 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /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/content_bottombar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | 12 | 13 | 18 | 19 | 20 | 21 | 22 | 23 | 26 | 27 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /app/src/main/res/layout/content_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /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/layout/dialog_help.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 11 | 12 | 16 | 17 | 23 | 24 | 25 | 26 | 32 | 33 |