├── .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 |
8 |
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 |
39 |
40 |
41 |
42 |
43 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/fragment_colorselector.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
11 |
12 |
16 |
17 |
20 |
21 |
26 |
27 |
32 |
33 |
37 |
38 |
39 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/fragment_colorsheet.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
15 |
16 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/fragment_naturalhour.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
13 |
14 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/fragment_naturalhour_selector.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
10 |
11 |
15 |
16 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/fragment_nightwatch_selector.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/layout_dialog_alert.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
9 |
10 |
15 |
16 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/layout_dialog_timeoffset.xml:
--------------------------------------------------------------------------------
1 |
2 |
10 |
11 |
16 |
17 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/layout_listitem_coloredit.xml:
--------------------------------------------------------------------------------
1 |
2 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/layout_listitem_colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
13 |
14 |
19 |
20 |
25 |
26 |
31 |
32 |
36 |
37 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/layout_listitem_hourmode.xml:
--------------------------------------------------------------------------------
1 |
2 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/widget_naturalhour_3x3.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
8 |
9 |
14 |
15 |
18 |
19 |
24 |
25 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/menu_alarm.xml:
--------------------------------------------------------------------------------
1 |
20 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/menu_alarm1.xml:
--------------------------------------------------------------------------------
1 |
14 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/menu_coloredit.xml:
--------------------------------------------------------------------------------
1 |
28 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/menu_colorlist.xml:
--------------------------------------------------------------------------------
1 |
35 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/menu_colorsheet.xml:
--------------------------------------------------------------------------------
1 |
35 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/menu_daydream.xml:
--------------------------------------------------------------------------------
1 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/menu_jumpto.xml:
--------------------------------------------------------------------------------
1 |
56 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/menu_main.xml:
--------------------------------------------------------------------------------
1 |
5 |
6 |
12 |
13 |
19 |
20 |
26 |
27 |
33 |
34 |
40 |
41 |
47 |
48 |
54 |
55 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/menu_timeformat.xml:
--------------------------------------------------------------------------------
1 |
5 |
6 |
7 |
8 |
13 |
14 |
19 |
20 |
25 |
26 |
31 |
32 |
37 |
38 |
39 |
40 |
41 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/menu_timezone.xml:
--------------------------------------------------------------------------------
1 |
5 |
6 |
8 |
9 |
14 |
15 |
20 |
21 |
26 |
27 |
32 |
33 |
38 |
39 |
40 |
41 |
42 |
45 |
46 |
51 |
52 |
57 |
58 |
63 |
64 |
69 |
70 |
71 |
72 |
73 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/menu_widget.xml:
--------------------------------------------------------------------------------
1 |
5 |
6 |
12 |
13 |
19 |
20 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/values-en-rCA/help_urls.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | @string/help_gh_url
4 |
--------------------------------------------------------------------------------
/app/src/main/res/values-en-rUS/help_urls.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | @string/help_gh_url
4 |
--------------------------------------------------------------------------------
/app/src/main/res/values-es-rMX/help_urls.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | @string/help_gh_url
4 |
--------------------------------------------------------------------------------
/app/src/main/res/values-fr-rCA/help_urls.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | @string/help_gh_url
4 |
--------------------------------------------------------------------------------
/app/src/main/res/values-night/clockface.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | @color/clockColorAstro_dark
4 | @color/clockColorNautical_dark
5 | @color/clockColorCivil_dark
6 | @color/clockColorAM_dark
7 | @color/clockColorPM_dark
8 | @color/clockColorDayBorder_dark
9 | @color/clockColorDay_dark
10 | @color/clockColorDayLabel_dark
11 | @color/clockColorDayFace_dark
12 | @color/clockColorNightBorder_dark
13 | @color/clockColorNight_dark
14 | @color/clockColorNightLabel_dark
15 | @color/clockColorNightFace_dark
16 | @color/clockColorBackground_dark
17 | @color/clockColorBackgroundAlt_dark
18 | @color/clockColorFace_dark
19 | @color/clockColorPlate_dark
20 | @color/clockColorFrame_dark
21 | @color/clockColorCenter_dark
22 | @color/clockColorHand_dark
23 | @color/clockColorHand1_dark
24 | @color/clockColorLabel1_dark
25 | @color/clockColorLabel2_dark
26 |
--------------------------------------------------------------------------------
/app/src/main/res/values-night/daydream.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | @color/daydream_bg_dark
4 |
--------------------------------------------------------------------------------
/app/src/main/res/values-night/icons.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | @drawable/ic_back
4 | @drawable/ic_done
5 | @drawable/ic_add
6 | @drawable/ic_edit
7 | @drawable/ic_save
8 | @drawable/ic_delete
9 | @drawable/ic_palette
10 | @drawable/ic_alarm
11 | @drawable/ic_fullscreen_on
12 | @drawable/ic_fullscreen_off
13 | @drawable/ic_share
14 | @drawable/ic_today
15 | @drawable/ic_settings
16 | @drawable/ic_help
17 | @drawable/ic_about
18 |
19 | @drawable/tilecard_bg_dark
20 |
--------------------------------------------------------------------------------
/app/src/main/res/values-night/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/values-v14/widget.xml:
--------------------------------------------------------------------------------
1 |
2 | 0dp
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/values-v16/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/values-v21/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/values-v24/attrs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | true
4 |
--------------------------------------------------------------------------------
/app/src/main/res/values-v28/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/values/daydream.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 3
5 | 0
6 |
7 | true
8 |
9 | true
10 | true
11 | true
12 | true
13 | true
14 | true
15 |
16 | 2
17 | 15000
18 | 7500
19 | 12000
20 | 18000
21 | 1500
22 | 3000
23 | 3750
24 | 3750
25 |
26 | 0.02f
27 | 1.0f
28 | 0.60f
29 | 1.0f
30 | 100f
31 | 200f
32 | 15f
33 | 15f
34 |
35 | @color/daydream_bg_dark
36 | @android:color/black
37 | @android:color/white
38 |
39 | true
40 | false
41 | false
42 |
43 |
--------------------------------------------------------------------------------
/app/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 | 16dp
3 | 3dp
4 | 3dp
5 | 0dp
6 | 0dp
7 | 3dp
8 | 6dp
9 |
10 | @android:integer/config_longAnimTime
11 | @android:integer/config_longAnimTime
12 |
13 | 32sp
14 | 34sp
15 | 36sp
16 | 38sp
17 |
18 |
19 |
--------------------------------------------------------------------------------
/app/src/main/res/values/help_urls.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | @string/help_cb_url
4 |
5 |
6 | addons/naturalhour
7 | addons/naturalhour/#alarms
8 |
9 |
10 | https://forrestguice.github.io/Suntimes/help/
11 |
12 |
13 | https://forrestguice.codeberg.page/Suntimes/help/
14 |
15 |
--------------------------------------------------------------------------------
/app/src/main/res/values/ic_launcher_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #313131
4 |
--------------------------------------------------------------------------------
/app/src/main/res/values/icons.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | @drawable/ic_back_light
4 | @drawable/ic_done_light
5 | @drawable/ic_add_light
6 | @drawable/ic_edit_light
7 | @drawable/ic_save_light
8 | @drawable/ic_delete_light
9 | @drawable/ic_palette_light
10 | @drawable/ic_alarm_light
11 | @drawable/ic_fullscreen_on_light
12 | @drawable/ic_fullscreen_off_light
13 | @drawable/ic_share_light
14 | @drawable/ic_today_light
15 | @drawable/ic_settings_light
16 | @drawable/ic_help_light
17 | @drawable/ic_about_light
18 |
19 | @drawable/tilecard_bg_light
20 |
--------------------------------------------------------------------------------
/app/src/main/res/values/tiles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 16dp
4 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/backup_descriptor.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/daydream_clock.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/pref_tile.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
5 |
6 |
13 |
14 |
20 |
21 |
27 |
28 |
29 |
30 |
32 |
33 |
40 |
41 |
42 |
43 |
44 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/widget_naturalhour_3x2.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/widget_naturalhour_4x3.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/widget_naturalhour_5x3.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
--------------------------------------------------------------------------------
/app/src/test/java/com/forrestguice/suntimes/naturalhour/ExampleUnitTest.java:
--------------------------------------------------------------------------------
1 | package com.forrestguice.suntimes.naturalhour;
2 |
3 | import org.junit.Test;
4 |
5 | import static org.junit.Assert.*;
6 |
7 | /**
8 | * Example local unit test, which will execute on the development machine (host).
9 | *
10 | * @see Testing documentation
11 | */
12 | public class ExampleUnitTest {
13 | @Test
14 | public void addition_isCorrect() {
15 | assertEquals(4, 2 + 2);
16 | }
17 | }
--------------------------------------------------------------------------------
/build.gradle:
--------------------------------------------------------------------------------
1 | // Top-level build file where you can add configuration options common to all sub-projects/modules.
2 |
3 | buildscript {
4 |
5 | repositories {
6 | maven { url "https://maven.google.com/" }
7 | mavenCentral()
8 |
9 | }
10 | dependencies {
11 | classpath 'com.android.tools.build:gradle:7.2.2'
12 |
13 | // NOTE: Do not place your application dependencies here; they belong
14 | // in the individual module build.gradle files
15 | }
16 | }
17 |
18 | allprojects {
19 | repositories {
20 | maven { url "https://maven.google.com/" }
21 | mavenCentral()
22 | }
23 | }
24 |
25 | task clean(type: Delete) {
26 | delete rootProject.buildDir
27 | }
28 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/1.txt:
--------------------------------------------------------------------------------
1 | - first release
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/2.txt:
--------------------------------------------------------------------------------
1 | - repeating alarms and notifications (requires `Suntimes v0.14.0` or later).
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/3.txt:
--------------------------------------------------------------------------------
1 | - adds support for system dark mode (night mode).
2 | - fixes bug "the widget does not update" (#15).
3 | - fixes bug "broken UI - missing first hour - watches" (#14).
4 | - fixes bug where the hour is sometimes announced incorrectly.
5 | - fixes bug "unable to set alarm for all hours when using 'sunset (24)' (#21).
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/4.txt:
--------------------------------------------------------------------------------
1 | - adds UTC to time zone settings.
2 | - adds themed app icon (api33+).
3 | - adds support for "text size" and "high contrast" app themes.
4 | - fixes bug "watch face shows broken daylight" (#22).
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/5.txt:
--------------------------------------------------------------------------------
1 | - fixes bug where "twilight periods are drawn incorrectly".
2 | - fixes bug where "alarms times are incorrect when using hours begin at sunset (24)".
3 | - updates default color schemes.
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/6.txt:
--------------------------------------------------------------------------------
1 | - adds quick settings tile that displays the current hour.
2 | - adds daydream (screen saver) that shows a "wandering clock".
3 | - adds fullscreen mode, ability to display over the lock screen, and home screen wallpaper option.
4 | - adds clock option; show "seconds hand" and inner dial.
5 | - adds clock option; "6hr time format" (Italian six-hour clock).
6 | - adds clock option; equinoctial hours; "Babylonian", "Italic", "Italian Civil", or "Julian".
7 | - adds clock option; temporal hours begin at "sunrise (24)", "civil dawn (24)", "noon (240", or "civil dusk (24)".
8 | - adds clock option; night watches of five or more parts.
9 | - adds clock option; show "solar midnight".
10 | - adds widget option; "on tap", "reconfigure widget" or "launch app".
11 | - adds default colors; "Sun (dark)".
12 | - updates targetSdkVersion (28 -> 30), and migrates app to AndroidX.
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/7.txt:
--------------------------------------------------------------------------------
1 | v0.3.1
2 | - fixes bug where Android 12+ refuses to install the app (#35).
3 |
4 | v0.3.0
5 | - adds quick settings tile that displays the current hour.
6 | - adds daydream (screen saver) that shows a "wandering clock".
7 | - adds fullscreen mode, ability to display over the lock screen, and home screen wallpaper option.
8 | - adds clock option; show "seconds hand" and inner dial.
9 | - adds clock option; "6hr time format" (Italian six-hour clock).
10 | - adds clock option; equinoctial hours; "Babylonian", "Italic", "Italian Civil", or "Julian".
11 | - adds clock option; temporal hours begin at "sunrise (24)", "civil dawn (24)", "noon (240", or "civil dusk (24)".
12 | - adds clock option; night watches of five or more parts.
13 | - adds clock option; show "solar midnight".
14 | - adds widget option; "on tap", "reconfigure widget" or "launch app".
15 | - adds default colors; "Sun (dark)".
16 | - updates targetSdkVersion (28 -> 30), and migrates app to AndroidX.
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/8.txt:
--------------------------------------------------------------------------------
1 | - fixes broken widgets on Android 12+ (#38).
2 | - fixes bug where alarm activity ignores the "hour mode" setting (#38).
3 | - adds fullscreen behavior; the floating action button is shown for a moment and then hides itself.
4 | - adds background option to app; "app theme" (default), "black", "home screen wallpaper", "clock colors".
5 | - adds background option to daydream: "black" (default), "clock colors" (#37).
6 | - adds daydream options; "fullscreen", "interactive", "screen bright", and "background pulse".
7 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/full_description.txt:
--------------------------------------------------------------------------------
1 | A 24-hour clock and roman timekeeping add-on for Suntimes. This app displays the roman hours for a given date and location.
2 |
3 | This is an add-on for Suntimes. It depends on Suntimes v0.10.3 or later.
4 |
5 | * A 24-hr clock face with roman timekeeping divisions; hours, twilights, and night watches.
6 | * Repeating alarms and notifications (requires Suntimes v0.14.0 or later).
7 | * Home screen widgets (resizable clock widgets).
8 | * Quick settings tile that displays the current hour.
9 | * Daydream / screensaver that shows a "wandering clock".
10 | * Quick navigation to the dates of the solstices and equinoxes.
11 | * The app announces the current time (and roman hour) when the clock is clicked.
12 |
13 | Options for:
14 | * time zone (local mean time, apparent solar time, UTC, system, or app time zone), and time format (24hr, 12hr, or 6hr).
15 | * other equinoctial hours; Babylonian, Italic, Italian Civil, or Julian.
16 | * temporal hours; the day begins at sunrise/sunset (12), dawn/dusk (12), dawn (24), sunrise (24), noon (24), sunset (24), or dusk (24).
17 | * clock colors (custom color schemes), and other customizations.
18 | * clock orientation; show "midnight at top", "center on noon".
19 | * clock numerals; Arabic, Attic, Armenian, Etruscan, Greek, Hebrew, Roman.
20 | * night watches; 2, 3, 4, or more divisions.
21 | * seconds; a "seconds dial" and "seconds hand".
22 | * fullscreen mode (over the home screen wallpaper).
23 |
24 | The following permissions are required:
25 | * suntimes.permission.READ_CALCULATOR is used to read data from the Suntimes provider.
26 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/featureGraphic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/fastlane/metadata/android/en-US/images/featureGraphic.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/fastlane/metadata/android/en-US/images/icon.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/fastlane/metadata/android/en-US/images/phoneScreenshots/1.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/fastlane/metadata/android/en-US/images/phoneScreenshots/2.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/fastlane/metadata/android/en-US/images/phoneScreenshots/3.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/fastlane/metadata/android/en-US/images/phoneScreenshots/4.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/short_description.txt:
--------------------------------------------------------------------------------
1 | A 24-hour clock and roman timekeeping add-on for Suntimes.
--------------------------------------------------------------------------------
/gradle.properties:
--------------------------------------------------------------------------------
1 | # Project-wide Gradle settings.
2 | # IDE (e.g. Android Studio) users:
3 | # Gradle settings configured through the IDE *will override*
4 | # any settings specified in this file.
5 | # For more details on how to configure your build environment visit
6 | # http://www.gradle.org/docs/current/userguide/build_environment.html
7 | # Specifies the JVM arguments used for the daemon process.
8 | # The setting is particularly useful for tweaking memory settings.
9 | android.enableJetifier=true
10 | android.useAndroidX=true
11 | android.targetVersion=33
12 | org.gradle.jvmargs=-Xmx1536m
13 | # When configured, Gradle will run in incubating parallel mode.
14 | # This option should only be used with decoupled projects. More details, visit
15 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
16 | # org.gradle.parallel=true
17 |
18 |
19 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/forrestguice/NaturalHour/234dd15c7f812843946e7c68e51e42cf7677bd3e/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Tue Sep 15 21:57:26 MST 2020
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-all.zip
7 |
--------------------------------------------------------------------------------
/gradlew.bat:
--------------------------------------------------------------------------------
1 | @if "%DEBUG%" == "" @echo off
2 | @rem ##########################################################################
3 | @rem
4 | @rem Gradle startup script for Windows
5 | @rem
6 | @rem ##########################################################################
7 |
8 | @rem Set local scope for the variables with windows NT shell
9 | if "%OS%"=="Windows_NT" setlocal
10 |
11 | set DIRNAME=%~dp0
12 | if "%DIRNAME%" == "" set DIRNAME=.
13 | set APP_BASE_NAME=%~n0
14 | set APP_HOME=%DIRNAME%
15 |
16 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
17 | set DEFAULT_JVM_OPTS=
18 |
19 | @rem Find java.exe
20 | if defined JAVA_HOME goto findJavaFromJavaHome
21 |
22 | set JAVA_EXE=java.exe
23 | %JAVA_EXE% -version >NUL 2>&1
24 | if "%ERRORLEVEL%" == "0" goto init
25 |
26 | echo.
27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
28 | echo.
29 | echo Please set the JAVA_HOME variable in your environment to match the
30 | echo location of your Java installation.
31 |
32 | goto fail
33 |
34 | :findJavaFromJavaHome
35 | set JAVA_HOME=%JAVA_HOME:"=%
36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe
37 |
38 | if exist "%JAVA_EXE%" goto init
39 |
40 | echo.
41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
42 | echo.
43 | echo Please set the JAVA_HOME variable in your environment to match the
44 | echo location of your Java installation.
45 |
46 | goto fail
47 |
48 | :init
49 | @rem Get command-line arguments, handling Windows variants
50 |
51 | if not "%OS%" == "Windows_NT" goto win9xME_args
52 |
53 | :win9xME_args
54 | @rem Slurp the command line arguments.
55 | set CMD_LINE_ARGS=
56 | set _SKIP=2
57 |
58 | :win9xME_args_slurp
59 | if "x%~1" == "x" goto execute
60 |
61 | set CMD_LINE_ARGS=%*
62 |
63 | :execute
64 | @rem Setup the command line
65 |
66 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
67 |
68 | @rem Execute Gradle
69 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
70 |
71 | :end
72 | @rem End local scope for the variables with windows NT shell
73 | if "%ERRORLEVEL%"=="0" goto mainEnd
74 |
75 | :fail
76 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
77 | rem the _cmd.exe /c_ return code!
78 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
79 | exit /b 1
80 |
81 | :mainEnd
82 | if "%OS%"=="Windows_NT" endlocal
83 |
84 | :omega
85 |
--------------------------------------------------------------------------------
/settings.gradle:
--------------------------------------------------------------------------------
1 | rootProject.name='Natural Hour'
2 | include ':SuntimesAddon', ':app'
3 | project(':SuntimesAddon').projectDir = new File(rootDir, 'SuntimesAddon/suntimesaddon/')
4 |
--------------------------------------------------------------------------------