From 955ecf1d8fec3d0fad6b6f674285dd81fcd3a0b5 Mon Sep 17 00:00:00 2001 From: Christopher Beckmann Date: Wed, 30 Aug 2017 12:48:47 +0200 Subject: [PATCH] Added the TimerService and the remade the activity for viewing the timer. --- .idea/.name | 1 - .idea/gradle.xml | 7 +- .idea/modules.xml | 1 + .idea/vcs.xml | 6 + app/build.gradle | 22 +- .../ApplicationTest.java | 2 +- app/src/main/AndroidManifest.xml | 68 +++--- app/src/main/assets/exercises.sqlite | Bin 143360 -> 240640 bytes .../activities}/AboutActivity.java | 4 +- .../activities}/BreakActivity.java | 15 +- .../activities}/BreakDeciderActivity.java | 7 +- .../activities}/BreakReminder.java | 7 +- .../activities}/ExerciseTypeActivity.java | 7 +- .../activities}/HelpActivity.java | 4 +- .../activities}/ProfileActivity.java | 4 +- .../activities}/SettingsActivity.java | 8 +- .../activities/TimerActivity.java | 161 ++++++++++++++ .../helper}/AppCompatPreferenceActivity.java | 2 +- .../database/DBHandler.java | 192 +++++++++++++++++ .../database/columns/ExerciseColumns.java | 49 +++++ .../columns/ExercisesLocalColumns.java | 59 +++++ .../database/data}/Exercise.java | 35 +-- .../preferences}/DynamicListPreference.java | 9 +- .../preferences}/ExerciseListPreference.java | 2 +- .../preferences}/SeekBarPreference.java | 4 +- .../service/TimerService.java | 201 ++++++++++++++++++ .../widget}/AppWidget.java | 6 +- .../DBHandler.java | 122 ----------- .../res/drawable-hdpi/ic_add_black_48dp.png | Bin 0 -> 114 bytes .../drawable-hdpi/ic_create_black_48dp.png | Bin 0 -> 269 bytes .../res/drawable-hdpi/ic_home_black_48dp.png | Bin 0 -> 303 bytes .../res/drawable-hdpi/ic_pause_black_48dp.png | Bin 0 -> 109 bytes .../res/drawable-hdpi/ic_pause_white_24dp.png | Bin 0 -> 105 bytes .../ic_play_arrow_white_24dp.png | Bin 0 -> 195 bytes .../ic_play_circle_filled_white_24dp.png | Bin 0 -> 358 bytes .../ic_play_circle_outline_black_48dp.png | Bin 0 -> 1005 bytes .../ic_play_circle_outline_white_24dp.png | Bin 0 -> 500 bytes .../drawable-hdpi/ic_replay_black_48dp.png | Bin 0 -> 647 bytes .../drawable-hdpi/ic_replay_white_24dp.png | Bin 0 -> 391 bytes .../drawable-hdpi/ic_settings_black_48dp.png | Bin 0 -> 827 bytes .../drawable-hdpi/ic_skip_next_black_48dp.png | Bin 0 -> 284 bytes .../drawable-hdpi/ic_skip_next_white_24dp.png | Bin 0 -> 187 bytes .../ic_skip_previous_black_48dp.png | Bin 0 -> 295 bytes .../ic_skip_previous_white_24dp.png | Bin 0 -> 201 bytes .../res/drawable-mdpi/ic_add_black_48dp.png | Bin 0 -> 108 bytes .../drawable-mdpi/ic_create_black_48dp.png | Bin 0 -> 222 bytes .../res/drawable-mdpi/ic_home_black_48dp.png | Bin 0 -> 239 bytes .../res/drawable-mdpi/ic_pause_black_48dp.png | Bin 0 -> 101 bytes .../res/drawable-mdpi/ic_pause_white_24dp.png | Bin 0 -> 83 bytes .../ic_play_arrow_white_24dp.png | Bin 0 -> 157 bytes .../ic_play_circle_filled_white_24dp.png | Bin 0 -> 255 bytes .../ic_play_circle_outline_black_48dp.png | Bin 0 -> 680 bytes .../ic_play_circle_outline_white_24dp.png | Bin 0 -> 351 bytes .../drawable-mdpi/ic_replay_black_48dp.png | Bin 0 -> 437 bytes .../drawable-mdpi/ic_replay_white_24dp.png | Bin 0 -> 244 bytes .../drawable-mdpi/ic_settings_black_48dp.png | Bin 0 -> 557 bytes .../drawable-mdpi/ic_skip_next_black_48dp.png | Bin 0 -> 225 bytes .../drawable-mdpi/ic_skip_next_white_24dp.png | Bin 0 -> 147 bytes .../ic_skip_previous_black_48dp.png | Bin 0 -> 233 bytes .../ic_skip_previous_white_24dp.png | Bin 0 -> 152 bytes .../res/drawable-xhdpi/ic_add_black_48dp.png | Bin 0 -> 119 bytes .../drawable-xhdpi/ic_create_black_48dp.png | Bin 0 -> 319 bytes .../res/drawable-xhdpi/ic_home_black_48dp.png | Bin 0 -> 356 bytes .../drawable-xhdpi/ic_pause_black_48dp.png | Bin 0 -> 111 bytes .../drawable-xhdpi/ic_pause_white_24dp.png | Bin 0 -> 90 bytes .../ic_play_arrow_white_24dp.png | Bin 0 -> 220 bytes .../ic_play_circle_filled_white_24dp.png | Bin 0 -> 464 bytes .../ic_play_circle_outline_black_48dp.png | Bin 0 -> 1339 bytes .../ic_play_circle_outline_white_24dp.png | Bin 0 -> 699 bytes .../drawable-xhdpi/ic_replay_black_48dp.png | Bin 0 -> 866 bytes .../drawable-xhdpi/ic_replay_white_24dp.png | Bin 0 -> 457 bytes .../drawable-xhdpi/ic_settings_black_48dp.png | Bin 0 -> 1073 bytes .../ic_skip_next_black_48dp.png | Bin 0 -> 340 bytes .../ic_skip_next_white_24dp.png | Bin 0 -> 222 bytes .../ic_skip_previous_black_48dp.png | Bin 0 -> 354 bytes .../ic_skip_previous_white_24dp.png | Bin 0 -> 242 bytes .../res/drawable-xxhdpi/ic_add_black_48dp.png | Bin 0 -> 130 bytes .../drawable-xxhdpi/ic_create_black_48dp.png | Bin 0 -> 433 bytes .../drawable-xxhdpi/ic_home_black_48dp.png | Bin 0 -> 485 bytes .../drawable-xxhdpi/ic_pause_black_48dp.png | Bin 0 -> 127 bytes .../drawable-xxhdpi/ic_pause_white_24dp.png | Bin 0 -> 92 bytes .../ic_play_arrow_white_24dp.png | Bin 0 -> 283 bytes .../ic_play_circle_filled_white_24dp.png | Bin 0 -> 666 bytes .../ic_play_circle_outline_black_48dp.png | Bin 0 -> 2032 bytes .../ic_play_circle_outline_white_24dp.png | Bin 0 -> 1023 bytes .../drawable-xxhdpi/ic_replay_black_48dp.png | Bin 0 -> 1298 bytes .../drawable-xxhdpi/ic_replay_white_24dp.png | Bin 0 -> 675 bytes .../ic_settings_black_48dp.png | Bin 0 -> 1591 bytes .../ic_skip_next_black_48dp.png | Bin 0 -> 437 bytes .../ic_skip_next_white_24dp.png | Bin 0 -> 292 bytes .../ic_skip_previous_black_48dp.png | Bin 0 -> 441 bytes .../ic_skip_previous_white_24dp.png | Bin 0 -> 309 bytes .../drawable-xxxhdpi/ic_add_black_48dp.png | Bin 0 -> 133 bytes .../drawable-xxxhdpi/ic_create_black_48dp.png | Bin 0 -> 578 bytes .../drawable-xxxhdpi/ic_home_black_48dp.png | Bin 0 -> 589 bytes .../drawable-xxxhdpi/ic_pause_black_48dp.png | Bin 0 -> 128 bytes .../drawable-xxxhdpi/ic_pause_white_24dp.png | Bin 0 -> 94 bytes .../ic_play_arrow_white_24dp.png | Bin 0 -> 343 bytes .../ic_play_circle_filled_white_24dp.png | Bin 0 -> 883 bytes .../ic_play_circle_outline_black_48dp.png | Bin 0 -> 2699 bytes .../ic_play_circle_outline_white_24dp.png | Bin 0 -> 1379 bytes .../drawable-xxxhdpi/ic_replay_black_48dp.png | Bin 0 -> 1736 bytes .../drawable-xxxhdpi/ic_replay_white_24dp.png | Bin 0 -> 908 bytes .../ic_settings_black_48dp.png | Bin 0 -> 2130 bytes .../ic_skip_next_black_48dp.png | Bin 0 -> 563 bytes .../ic_skip_next_white_24dp.png | Bin 0 -> 357 bytes .../ic_skip_previous_black_48dp.png | Bin 0 -> 564 bytes .../ic_skip_previous_white_24dp.png | Bin 0 -> 372 bytes app/src/main/res/drawable/circular.xml | 22 ++ app/src/main/res/layout/about.xml | 2 +- app/src/main/res/layout/activity_break.xml | 2 +- .../res/layout/activity_break_decider.xml | 2 +- app/src/main/res/layout/activity_help.xml | 4 +- app/src/main/res/layout/activity_timer.xml | 82 +++++++ .../res/layout/app_bar_break_reminder.xml | 2 +- .../res/layout/content_break_reminder.xml | 2 +- app/src/main/res/values/colors.xml | 2 +- app/src/main/res/values/strings.xml | 2 +- app/src/main/res/xml/pref_general.xml | 8 +- app/src/main/res/xml/pref_headers.xml | 4 +- .../ExampleUnitTest.java | 2 +- build.gradle | 2 +- gradle/wrapper/gradle-wrapper.properties | 4 +- 123 files changed, 916 insertions(+), 231 deletions(-) delete mode 100644 .idea/.name create mode 100644 .idea/vcs.xml rename app/src/androidTest/java/{orgprivacy_friendly_apps => org}/secuso/privacyfriendlybreakreminder/ApplicationTest.java (82%) rename app/src/main/java/{orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder => org/secuso/privacyfriendlybreakreminder/activities}/AboutActivity.java (93%) rename app/src/main/java/{orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder => org/secuso/privacyfriendlybreakreminder/activities}/BreakActivity.java (98%) rename app/src/main/java/{orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder => org/secuso/privacyfriendlybreakreminder/activities}/BreakDeciderActivity.java (89%) rename app/src/main/java/{orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder => org/secuso/privacyfriendlybreakreminder/activities}/BreakReminder.java (99%) rename app/src/main/java/{orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder => org/secuso/privacyfriendlybreakreminder/activities}/ExerciseTypeActivity.java (94%) rename app/src/main/java/{orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder => org/secuso/privacyfriendlybreakreminder/activities}/HelpActivity.java (92%) rename app/src/main/java/{orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder => org/secuso/privacyfriendlybreakreminder/activities}/ProfileActivity.java (98%) rename app/src/main/java/{orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder => org/secuso/privacyfriendlybreakreminder/activities}/SettingsActivity.java (97%) create mode 100644 app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/TimerActivity.java rename app/src/main/java/{orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder => org/secuso/privacyfriendlybreakreminder/activities/helper}/AppCompatPreferenceActivity.java (97%) create mode 100644 app/src/main/java/org/secuso/privacyfriendlybreakreminder/database/DBHandler.java create mode 100644 app/src/main/java/org/secuso/privacyfriendlybreakreminder/database/columns/ExerciseColumns.java create mode 100644 app/src/main/java/org/secuso/privacyfriendlybreakreminder/database/columns/ExercisesLocalColumns.java rename app/src/main/java/{orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder => org/secuso/privacyfriendlybreakreminder/database/data}/Exercise.java (52%) rename app/src/main/java/{orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder => org/secuso/privacyfriendlybreakreminder/preferences}/DynamicListPreference.java (92%) rename app/src/main/java/{orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder => org/secuso/privacyfriendlybreakreminder/preferences}/ExerciseListPreference.java (97%) rename app/src/main/java/{orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder => org/secuso/privacyfriendlybreakreminder/preferences}/SeekBarPreference.java (98%) create mode 100644 app/src/main/java/org/secuso/privacyfriendlybreakreminder/service/TimerService.java rename app/src/main/java/{orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder => org/secuso/privacyfriendlybreakreminder/widget}/AppWidget.java (97%) delete mode 100644 app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/DBHandler.java create mode 100644 app/src/main/res/drawable-hdpi/ic_add_black_48dp.png create mode 100644 app/src/main/res/drawable-hdpi/ic_create_black_48dp.png create mode 100644 app/src/main/res/drawable-hdpi/ic_home_black_48dp.png create mode 100644 app/src/main/res/drawable-hdpi/ic_pause_black_48dp.png create mode 100644 app/src/main/res/drawable-hdpi/ic_pause_white_24dp.png create mode 100644 app/src/main/res/drawable-hdpi/ic_play_arrow_white_24dp.png create mode 100644 app/src/main/res/drawable-hdpi/ic_play_circle_filled_white_24dp.png create mode 100644 app/src/main/res/drawable-hdpi/ic_play_circle_outline_black_48dp.png create mode 100644 app/src/main/res/drawable-hdpi/ic_play_circle_outline_white_24dp.png create mode 100644 app/src/main/res/drawable-hdpi/ic_replay_black_48dp.png create mode 100644 app/src/main/res/drawable-hdpi/ic_replay_white_24dp.png create mode 100644 app/src/main/res/drawable-hdpi/ic_settings_black_48dp.png create mode 100644 app/src/main/res/drawable-hdpi/ic_skip_next_black_48dp.png create mode 100644 app/src/main/res/drawable-hdpi/ic_skip_next_white_24dp.png create mode 100644 app/src/main/res/drawable-hdpi/ic_skip_previous_black_48dp.png create mode 100644 app/src/main/res/drawable-hdpi/ic_skip_previous_white_24dp.png create mode 100644 app/src/main/res/drawable-mdpi/ic_add_black_48dp.png create mode 100644 app/src/main/res/drawable-mdpi/ic_create_black_48dp.png create mode 100644 app/src/main/res/drawable-mdpi/ic_home_black_48dp.png create mode 100644 app/src/main/res/drawable-mdpi/ic_pause_black_48dp.png create mode 100644 app/src/main/res/drawable-mdpi/ic_pause_white_24dp.png create mode 100644 app/src/main/res/drawable-mdpi/ic_play_arrow_white_24dp.png create mode 100644 app/src/main/res/drawable-mdpi/ic_play_circle_filled_white_24dp.png create mode 100644 app/src/main/res/drawable-mdpi/ic_play_circle_outline_black_48dp.png create mode 100644 app/src/main/res/drawable-mdpi/ic_play_circle_outline_white_24dp.png create mode 100644 app/src/main/res/drawable-mdpi/ic_replay_black_48dp.png create mode 100644 app/src/main/res/drawable-mdpi/ic_replay_white_24dp.png create mode 100644 app/src/main/res/drawable-mdpi/ic_settings_black_48dp.png create mode 100644 app/src/main/res/drawable-mdpi/ic_skip_next_black_48dp.png create mode 100644 app/src/main/res/drawable-mdpi/ic_skip_next_white_24dp.png create mode 100644 app/src/main/res/drawable-mdpi/ic_skip_previous_black_48dp.png create mode 100644 app/src/main/res/drawable-mdpi/ic_skip_previous_white_24dp.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_add_black_48dp.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_create_black_48dp.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_home_black_48dp.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_pause_black_48dp.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_pause_white_24dp.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_play_arrow_white_24dp.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_play_circle_filled_white_24dp.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_play_circle_outline_black_48dp.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_play_circle_outline_white_24dp.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_replay_black_48dp.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_replay_white_24dp.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_settings_black_48dp.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_skip_next_black_48dp.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_skip_next_white_24dp.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_skip_previous_black_48dp.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_skip_previous_white_24dp.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_add_black_48dp.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_create_black_48dp.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_home_black_48dp.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_pause_black_48dp.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_pause_white_24dp.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_play_arrow_white_24dp.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_play_circle_filled_white_24dp.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_play_circle_outline_black_48dp.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_play_circle_outline_white_24dp.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_replay_black_48dp.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_replay_white_24dp.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_settings_black_48dp.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_skip_next_black_48dp.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_skip_next_white_24dp.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_skip_previous_black_48dp.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_skip_previous_white_24dp.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_add_black_48dp.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_create_black_48dp.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_home_black_48dp.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_pause_black_48dp.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_pause_white_24dp.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_play_arrow_white_24dp.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_play_circle_filled_white_24dp.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_play_circle_outline_black_48dp.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_play_circle_outline_white_24dp.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_replay_black_48dp.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_replay_white_24dp.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_settings_black_48dp.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_skip_next_black_48dp.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_skip_next_white_24dp.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_skip_previous_black_48dp.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_skip_previous_white_24dp.png create mode 100644 app/src/main/res/drawable/circular.xml create mode 100644 app/src/main/res/layout/activity_timer.xml rename app/src/test/java/{orgprivacy_friendly_apps => org}/secuso/privacyfriendlybreakreminder/ExampleUnitTest.java (80%) diff --git a/.idea/.name b/.idea/.name deleted file mode 100644 index 2371e82..0000000 --- a/.idea/.name +++ /dev/null @@ -1 +0,0 @@ -Privacy Friendly Break Reminder \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml index ee6ddd0..97e0e84 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -12,12 +12,7 @@ - + diff --git a/.idea/modules.xml b/.idea/modules.xml index 162eb5d..6f9f70f 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -4,6 +4,7 @@ + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 4f44e4a..a670b52 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,15 +1,15 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 23 - buildToolsVersion "23.0.3" + compileSdkVersion 25 + buildToolsVersion "25.0.3" defaultConfig { - applicationId "orgprivacy_friendly_apps.secuso.privacyfriendlybreakreminder" + applicationId "org.secuso.privacyfriendlybreakreminder" minSdkVersion 17 - targetSdkVersion 23 - versionCode 1 - versionName "1.0" + targetSdkVersion 24 + versionCode 2 + versionName "2.0" } buildTypes { release { @@ -21,9 +21,11 @@ android { dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') + compile 'com.android.support:appcompat-v7:25.3.1' + compile 'com.android.support:design:25.3.1' + compile 'com.android.support:support-v4:25.3.1' + compile 'com.android.support:support-annotations:25.3.1' + compile 'com.android.support:cardview-v7:25.3.1' + compile 'com.android.support.constraint:constraint-layout:1.0.2' testCompile 'junit:junit:4.12' - compile 'com.android.support:appcompat-v7:23.4.0' - compile 'com.android.support:design:23.4.0' - compile 'com.android.support:support-v4:23.4.0' - compile 'com.android.support:support-annotations:23.4.0' } diff --git a/app/src/androidTest/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/ApplicationTest.java b/app/src/androidTest/java/org/secuso/privacyfriendlybreakreminder/ApplicationTest.java similarity index 82% rename from app/src/androidTest/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/ApplicationTest.java rename to app/src/androidTest/java/org/secuso/privacyfriendlybreakreminder/ApplicationTest.java index 043f8f7..1f81edc 100644 --- a/app/src/androidTest/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/ApplicationTest.java +++ b/app/src/androidTest/java/org/secuso/privacyfriendlybreakreminder/ApplicationTest.java @@ -1,4 +1,4 @@ -package orgprivacy_friendly_apps.secuso.privacyfriendlybreakreminder; +package org.secuso.privacyfriendlybreakreminder; import android.app.Application; import android.test.ApplicationTestCase; diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index a603aa1..1997841 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,52 +1,57 @@ + package="org.secuso.privacyfriendlybreakreminder"> + - - + android:parentActivityName=".activities.BreakReminder" + android:screenOrientation="portrait"> + android:value="org.secuso.privacyfriendlybreakreminder.activities.BreakReminder" /> - - - - - - + + + + + + @@ -55,9 +60,24 @@ - + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/assets/exercises.sqlite b/app/src/main/assets/exercises.sqlite index b1ee90d088319de06d5ad3e9d2a4a219a96327d0..bce08a5d184789e995c48d4abc8c5db364d040e6 100644 GIT binary patch delta 23474 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 ICv3v~f8JK7n*aa+ delta 6689 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 BGE)Em diff --git a/app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/AboutActivity.java b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/AboutActivity.java similarity index 93% rename from app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/AboutActivity.java rename to app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/AboutActivity.java index 28f7b17..7a326e0 100644 --- a/app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/AboutActivity.java +++ b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/AboutActivity.java @@ -1,4 +1,4 @@ -package orgprivacy_friendly_apps.secuso.privacyfriendlybreakreminder; +package org.secuso.privacyfriendlybreakreminder.activities; import android.os.Bundle; import android.support.v7.app.ActionBar; @@ -8,6 +8,8 @@ import android.view.MenuItem; import android.view.View; import android.widget.TextView; +import org.secuso.privacyfriendlybreakreminder.R; + public class AboutActivity extends AppCompatActivity { @Override diff --git a/app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/BreakActivity.java b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/BreakActivity.java similarity index 98% rename from app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/BreakActivity.java rename to app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/BreakActivity.java index 2412264..1ce9f91 100644 --- a/app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/BreakActivity.java +++ b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/BreakActivity.java @@ -1,14 +1,7 @@ -package orgprivacy_friendly_apps.secuso.privacyfriendlybreakreminder; +package org.secuso.privacyfriendlybreakreminder.activities; -import android.app.NotificationManager; -import android.content.Context; -import android.content.DialogInterface; import android.content.SharedPreferences; -import android.media.Ringtone; -import android.media.RingtoneManager; -import android.net.Uri; import android.os.CountDownTimer; -import android.os.Vibrator; import android.preference.PreferenceManager; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; @@ -19,6 +12,10 @@ import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; +import org.secuso.privacyfriendlybreakreminder.database.DBHandler; +import org.secuso.privacyfriendlybreakreminder.database.data.*; +import org.secuso.privacyfriendlybreakreminder.R; + import java.util.Collections; import java.util.Random; @@ -256,7 +253,7 @@ public class BreakActivity extends AppCompatActivity implements View.OnClickList while (notFoundYet) { currentExerciseSection = random.nextInt(exercises.length); if (!usedSectionsString.contains(exercises[currentExerciseSection])) { - List list = dbHandler.getExercisesFromSection(exercises[currentExerciseSection]); + List list = dbHandler.getExercisesFromSection("de",exercises[currentExerciseSection]); allAvailableExercises.add(list); usedSectionsString += exercises[currentExerciseSection] + "."; editor.putString("currently_done_exercises", usedSectionsString); diff --git a/app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/BreakDeciderActivity.java b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/BreakDeciderActivity.java similarity index 89% rename from app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/BreakDeciderActivity.java rename to app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/BreakDeciderActivity.java index 4a83573..4d4c014 100644 --- a/app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/BreakDeciderActivity.java +++ b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/BreakDeciderActivity.java @@ -1,11 +1,12 @@ -package orgprivacy_friendly_apps.secuso.privacyfriendlybreakreminder; +package org.secuso.privacyfriendlybreakreminder.activities; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; -import android.widget.HorizontalScrollView; + +import org.secuso.privacyfriendlybreakreminder.R; public class BreakDeciderActivity extends AppCompatActivity implements View.OnClickListener { @@ -18,8 +19,6 @@ public class BreakDeciderActivity extends AppCompatActivity implements View.OnCl skipButton.setOnClickListener(this); Button breakButton = (Button)findViewById(R.id.button_break); breakButton.setOnClickListener(this); - - } public void onClick(View v) { diff --git a/app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/BreakReminder.java b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/BreakReminder.java similarity index 99% rename from app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/BreakReminder.java rename to app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/BreakReminder.java index fb4e681..8c94346 100644 --- a/app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/BreakReminder.java +++ b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/BreakReminder.java @@ -1,4 +1,4 @@ -package orgprivacy_friendly_apps.secuso.privacyfriendlybreakreminder; +package org.secuso.privacyfriendlybreakreminder.activities; import android.app.Activity; import android.app.Dialog; @@ -36,6 +36,9 @@ import android.widget.Button; import android.widget.Spinner; import android.widget.TextView; +import org.secuso.privacyfriendlybreakreminder.R; +import org.secuso.privacyfriendlybreakreminder.widget.*; + import java.util.Locale; @@ -533,7 +536,7 @@ public class BreakReminder extends AppCompatActivity AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setView(i.inflate(R.layout.first_dialog, null)); - builder.setIcon(R.mipmap.ic_launcher); + builder.setIcon(R.mipmap.ic_drawer_logo); builder.setTitle(getActivity().getString(R.string.app_name_long)); builder.setPositiveButton(getActivity().getString(R.string.dialog_positive), null); diff --git a/app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/ExerciseTypeActivity.java b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/ExerciseTypeActivity.java similarity index 94% rename from app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/ExerciseTypeActivity.java rename to app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/ExerciseTypeActivity.java index a0cba59..cd10348 100644 --- a/app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/ExerciseTypeActivity.java +++ b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/ExerciseTypeActivity.java @@ -1,24 +1,23 @@ -package orgprivacy_friendly_apps.secuso.privacyfriendlybreakreminder; +package org.secuso.privacyfriendlybreakreminder.activities; import android.content.SharedPreferences; import android.os.Bundle; import android.preference.PreferenceManager; import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.RecyclerView; import android.view.View; -import android.widget.Adapter; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.ListView; import android.widget.Spinner; import android.widget.Toast; +import org.secuso.privacyfriendlybreakreminder.R; + import java.util.ArrayList; public class ExerciseTypeActivity extends AppCompatActivity implements View.OnClickListener { - Spinner typeSpinner; ListView listView; ArrayList adapter; diff --git a/app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/HelpActivity.java b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/HelpActivity.java similarity index 92% rename from app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/HelpActivity.java rename to app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/HelpActivity.java index 5337796..38f1a60 100644 --- a/app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/HelpActivity.java +++ b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/HelpActivity.java @@ -1,4 +1,4 @@ -package orgprivacy_friendly_apps.secuso.privacyfriendlybreakreminder; +package org.secuso.privacyfriendlybreakreminder.activities; import android.os.Bundle; import android.preference.PreferenceFragment; @@ -6,6 +6,8 @@ import android.support.v7.app.ActionBar; import android.support.v7.app.AppCompatActivity; import android.view.MenuItem; +import org.secuso.privacyfriendlybreakreminder.R; + public class HelpActivity extends AppCompatActivity { diff --git a/app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/ProfileActivity.java b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/ProfileActivity.java similarity index 98% rename from app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/ProfileActivity.java rename to app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/ProfileActivity.java index 0bccce5..1653b1d 100644 --- a/app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/ProfileActivity.java +++ b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/ProfileActivity.java @@ -1,4 +1,4 @@ -package orgprivacy_friendly_apps.secuso.privacyfriendlybreakreminder; +package org.secuso.privacyfriendlybreakreminder.activities; import android.content.Intent; @@ -14,6 +14,8 @@ import android.widget.SeekBar; import android.widget.TextView; import android.widget.Toast; +import org.secuso.privacyfriendlybreakreminder.R; + public class ProfileActivity extends AppCompatActivity implements View.OnClickListener { private SeekBar interval_seekbar, break_seekbar; diff --git a/app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/SettingsActivity.java b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/SettingsActivity.java similarity index 97% rename from app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/SettingsActivity.java rename to app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/SettingsActivity.java index aff965b..5465567 100644 --- a/app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/SettingsActivity.java +++ b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/SettingsActivity.java @@ -1,5 +1,5 @@ -package orgprivacy_friendly_apps.secuso.privacyfriendlybreakreminder; +package org.secuso.privacyfriendlybreakreminder.activities; import android.annotation.TargetApi; @@ -24,6 +24,12 @@ import android.view.MenuItem; import android.support.v4.app.NavUtils; import android.widget.Toast; +import org.secuso.privacyfriendlybreakreminder.activities.helper.AppCompatPreferenceActivity; +import org.secuso.privacyfriendlybreakreminder.preferences.DynamicListPreference; +import org.secuso.privacyfriendlybreakreminder.preferences.ExerciseListPreference; +import org.secuso.privacyfriendlybreakreminder.R; +import org.secuso.privacyfriendlybreakreminder.preferences.SeekBarPreference; + import java.util.List; /** diff --git a/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/TimerActivity.java b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/TimerActivity.java new file mode 100644 index 0000000..8af888e --- /dev/null +++ b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/TimerActivity.java @@ -0,0 +1,161 @@ +package org.secuso.privacyfriendlybreakreminder.activities; + +import android.animation.ObjectAnimator; +import android.content.BroadcastReceiver; +import android.content.ComponentName; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.content.ServiceConnection; +import android.os.IBinder; +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; +import android.view.View; +import android.view.animation.DecelerateInterpolator; +import android.view.animation.LinearInterpolator; +import android.widget.ProgressBar; +import android.widget.TextView; + +import org.secuso.privacyfriendlybreakreminder.R; +import org.secuso.privacyfriendlybreakreminder.service.TimerService; + +public class TimerActivity extends AppCompatActivity { + + // UI + private ProgressBar progressBar; + private TextView timerText; + + // Service + private TimerService mTimerService = null; + + private final ServiceConnection mServiceConnection = new ServiceConnection() { + @Override + public void onServiceConnected(ComponentName name, IBinder service) { + TimerService.TimerServiceBinder binder = (TimerService.TimerServiceBinder) service; + mTimerService = binder.getService(); + + TimerActivity.this.onServiceConnected(); + } + + @Override + public void onServiceDisconnected(ComponentName name) { + mTimerService = null; + } + }; + + private void onServiceConnected() { + if(mTimerService.isRunning()) { + progressBar.setMax((int) mTimerService.getInitialDuration()); + } + } + + private final BroadcastReceiver timerReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + long millisUntilDone = intent.getLongExtra("onTickMillis", -1L); + + updateProgress(millisUntilDone); + } + }; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_timer); + + initResources(); + } + + @Override + protected void onStop() { + super.onStop(); + + shutdownServiceBinding(); + } + + @Override + protected void onPause() { + super.onPause(); + + unregisterReceiver(timerReceiver); + } + + @Override + protected void onResume() { + super.onResume(); + + TimerService.startService(this); + registerReceiver(timerReceiver, new IntentFilter(TimerService.TIMER_BROADCAST)); + + if(mTimerService != null && !mTimerService.isRunning()) { + updateProgress(mTimerService.getInitialDuration()); + } + } + + @Override + protected void onStart() { + super.onStart(); + + initServiceBinding(); + } + + private void initServiceBinding() { + Intent intent = new Intent(this, TimerService.class); + bindService(intent, mServiceConnection, Context.BIND_AUTO_CREATE); + } + + private void shutdownServiceBinding() { + if (mTimerService != null) { + unbindService(mServiceConnection); + } + } + + private void initResources() { + progressBar = (ProgressBar) findViewById(R.id.progressBar); + timerText = (TextView) findViewById(R.id.timerText); + + timerText.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + int duration = 1000 * 60 * 1; // 1 minutes + if(mTimerService != null) { + mTimerService.startTimer(duration); + progressBar.setMax(duration); + } + } + }); + } + + private void updateProgress(long millisUntilFinished) { + progressBar.setProgress(progressBar.getMax() - (int) millisUntilFinished); + + int secondsUntilFinished = (int) Math.ceil(millisUntilFinished / 1000.0); + int minutesUntilFinished = secondsUntilFinished / 60; + int hours = minutesUntilFinished / 60; + int seconds = secondsUntilFinished % 60; + int minutes = minutesUntilFinished % 60; + + StringBuilder sb = new StringBuilder(); + + if(hours > 0) sb.append(hours).append(":"); + if(minutes < 10) sb.append(0); + sb.append(minutes).append(":"); + if(seconds < 10) sb.append(0); + sb.append(seconds); + + timerText.setText(sb.toString()); + + //progressBar.setMax(1000); + //ObjectAnimator animation = ObjectAnimator.ofInt(progressBar, "progress", 0, 1000 * percentFinished); // see this max value coming back here, we animale towards that value + + //animation.setDuration(5000); //in milliseconds + //animation.setInterpolator(new LinearInterpolator()); + //animation.start(); + } + + + + + + +} diff --git a/app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/AppCompatPreferenceActivity.java b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/helper/AppCompatPreferenceActivity.java similarity index 97% rename from app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/AppCompatPreferenceActivity.java rename to app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/helper/AppCompatPreferenceActivity.java index d93609f..2f7948b 100644 --- a/app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/AppCompatPreferenceActivity.java +++ b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/helper/AppCompatPreferenceActivity.java @@ -1,4 +1,4 @@ -package orgprivacy_friendly_apps.secuso.privacyfriendlybreakreminder; +package org.secuso.privacyfriendlybreakreminder.activities.helper; import android.content.res.Configuration; import android.os.Bundle; diff --git a/app/src/main/java/org/secuso/privacyfriendlybreakreminder/database/DBHandler.java b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/database/DBHandler.java new file mode 100644 index 0000000..015ac1d --- /dev/null +++ b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/database/DBHandler.java @@ -0,0 +1,192 @@ +package org.secuso.privacyfriendlybreakreminder.database; + + +import android.content.Context; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteOpenHelper; +import android.util.Log; + +import org.secuso.privacyfriendlybreakreminder.database.data.Exercise; +import org.secuso.privacyfriendlybreakreminder.database.columns.ExerciseColumns; +import org.secuso.privacyfriendlybreakreminder.database.columns.ExercisesLocalColumns; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.ArrayList; +import java.util.List; + +public class DBHandler extends SQLiteOpenHelper { + + private SQLiteDatabase dataBase; + private static final String DATABASE_NAME = "exercises.sqlite"; + private static final String DATABASE_PATH = "/data/data/org.secuso.privacyfriendlybreakreminder/databases/"; + private static final int DATABASE_VERSION = 3; + + private static final String[] deleteQueryList = { + ExerciseColumns.SQL_DELETE_ENTRIES, + ExercisesLocalColumns.SQL_DELETE_ENTRIES}; + + public DBHandler(Context context) { + super(context, DATABASE_NAME, null, DATABASE_VERSION); + + //Check if database exists + File databaseFile = context.getDatabasePath(DATABASE_NAME); + if (!databaseFile.exists()) { + this.getReadableDatabase(); + try { + copyDataBase(context); + this.close(); + } catch (Exception e) { + Log.v("db log", "Copying data didn´t work!!"); + } + } + } + + @Override + public void onCreate(SQLiteDatabase db) { + + } + + public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { + execSQLList(db, deleteQueryList); + } + + public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) { + onUpgrade(db, oldVersion, newVersion); + } + + private void execSQLList(SQLiteDatabase db, String[] queryList) { + for (String query : queryList) { + db.execSQL(query); + } + } + + + public Cursor getExerciseCursor(String language) { + SQLiteDatabase database = getReadableDatabase(); + + return database.rawQuery(buildQuery(false), new String[]{language}); + } + + public List getExerciseList(String language) { + SQLiteDatabase database = getReadableDatabase(); + + Cursor c = database.rawQuery(buildQuery(false), new String[]{language}); + + List result = new ArrayList<>(); + + if(c != null) { + + while(!c.isAfterLast()) { + result.add(ExerciseColumns.getExercise(c)); + c.moveToNext(); + } + + c.close(); + } + + return result; + } + + /** + * SELECT + * E._id, + * E.section, + * E.image_id, + * L.local_id, + * L.language, + * L.exercise_id, + * L.name, + * L.description, + * L.execution + * FROM exercises E LEFT OUTER JOIN exercises_local L + * ON E._id = L.exercise_id + * WHERE L.language = "de" [AND E.section LIKE %?%] + * ORDER BY E._id ASC + * + * @return the sql query without the ; at the end. + */ + private String buildQuery(boolean addSectionCheck) { + StringBuilder sqlQuery = new StringBuilder(); + + sqlQuery.append("SELECT "); + + for(String field : ExerciseColumns.PROJECTION) { + sqlQuery.append("E.").append(field).append(", "); + } + for(String field : ExercisesLocalColumns.PROJECTION) { + sqlQuery.append("L.").append(field).append(", "); + } + // delete the last comma + sqlQuery.setLength(sqlQuery.length()-2); + + sqlQuery.append(" FROM "); + sqlQuery.append(ExerciseColumns.TABLE_NAME); + sqlQuery.append(" E LEFT OUTER JOIN "); + sqlQuery.append(ExercisesLocalColumns.TABLE_NAME); + sqlQuery.append(" L"); + + sqlQuery.append("ON E."); + sqlQuery.append(ExerciseColumns._ID); + sqlQuery.append(" = L."); + sqlQuery.append(ExercisesLocalColumns.EXERCISE_ID); + + sqlQuery.append("WHERE "); + sqlQuery.append("L."); + sqlQuery.append(ExercisesLocalColumns.LANGUAGE); + sqlQuery.append("= ? "); + + if(addSectionCheck) { + sqlQuery.append("AND E."); + sqlQuery.append(ExerciseColumns.SECTION); + sqlQuery.append("LIKE ? "); + } + + sqlQuery.append("ORDER BY E."); + sqlQuery.append(ExerciseColumns._ID); + sqlQuery.append(" ASC"); + + return sqlQuery.toString(); + } + + + public List getExercisesFromSection(String language, String section) { + SQLiteDatabase database = getReadableDatabase(); + + Cursor c = database.rawQuery(buildQuery(true), new String[]{language, "%"+section+"%"}); + + List result = new ArrayList<>(); + + if(c != null) { + + while(!c.isAfterLast()) { + result.add(ExerciseColumns.getExercise(c)); + c.moveToNext(); + } + + c.close(); + } + + return result; + } + + private void copyDataBase(Context context) throws IOException { + InputStream myInput = context.getAssets().open(DATABASE_NAME); + String outFileName = DATABASE_PATH + DATABASE_NAME; + OutputStream myOutput = new FileOutputStream(outFileName); + + byte[] buffer = new byte[1024]; + int length; + while ((length = myInput.read(buffer)) > 0) { + myOutput.write(buffer, 0, length); + } + + myOutput.flush(); + myOutput.close(); + myInput.close(); + } +} diff --git a/app/src/main/java/org/secuso/privacyfriendlybreakreminder/database/columns/ExerciseColumns.java b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/database/columns/ExerciseColumns.java new file mode 100644 index 0000000..759d872 --- /dev/null +++ b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/database/columns/ExerciseColumns.java @@ -0,0 +1,49 @@ +package org.secuso.privacyfriendlybreakreminder.database.columns; + +import android.content.ContentValues; +import android.database.Cursor; +import android.provider.BaseColumns; + +import org.secuso.privacyfriendlybreakreminder.database.data.Exercise; + +/** + * Created by Christopher Beckmann on 23.08.2017. + */ + +public class ExerciseColumns implements BaseColumns { + + public static final String TABLE_NAME = "exercises"; + + public static final String SECTION = "section"; + public static final String IMAGE_ID = "image_id"; + + public static final String[] PROJECTION = { + _ID, + SECTION, + IMAGE_ID, + }; + public static final String SQL_DELETE_ENTRIES = "DROP TABLE IF EXISTS " + TABLE_NAME; + + public static Exercise getExercise(Cursor c) { + Exercise e = ExercisesLocalColumns.getExercise(c); + + e.setId(c.getInt(c.getColumnIndexOrThrow(ExerciseColumns._ID))); + e.setSection(c.getString(c.getColumnIndexOrThrow(ExerciseColumns.SECTION))); + e.setImageID(c.getString(c.getColumnIndexOrThrow(ExerciseColumns.IMAGE_ID))); + + return e; + } + + public static ContentValues getValues(Exercise record) { + ContentValues values = new ContentValues(); + if(record.getId() != -1) { + values.put(ExerciseColumns._ID, record.getId()); + } + values.put(ExerciseColumns.SECTION, record.getSection()); + values.put(ExerciseColumns.IMAGE_ID, record.getImageID()); + + values.putAll(ExercisesLocalColumns.getValues(record)); + + return values; + } +} diff --git a/app/src/main/java/org/secuso/privacyfriendlybreakreminder/database/columns/ExercisesLocalColumns.java b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/database/columns/ExercisesLocalColumns.java new file mode 100644 index 0000000..5721b89 --- /dev/null +++ b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/database/columns/ExercisesLocalColumns.java @@ -0,0 +1,59 @@ +package org.secuso.privacyfriendlybreakreminder.database.columns; + +import android.content.ContentValues; +import android.database.Cursor; +import android.provider.BaseColumns; + +import org.secuso.privacyfriendlybreakreminder.database.data.Exercise; + +/** + * Created by Christopher Beckmann on 25.08.2017. + */ + +public class ExercisesLocalColumns implements BaseColumns { + + public static final String TABLE_NAME = "exercises_local"; + + public static final String _ID = "local_id"; + public static final String LANGUAGE = "language"; + public static final String EXERCISE_ID = "exercise_id"; + public static final String DESCRIPTION = "description"; + public static final String EXECUTION = "execution"; + public static final String NAME = "name"; + + public static final String[] PROJECTION = { + _ID, + LANGUAGE, + EXERCISE_ID, + DESCRIPTION, + EXECUTION, + NAME + }; + public static final String SQL_DELETE_ENTRIES = "DROP TABLE IF EXISTS " + TABLE_NAME; + + public static Exercise getExercise(Cursor c) { + Exercise e = new Exercise(); + + e.setLocalId(c.getInt(c.getColumnIndexOrThrow(ExercisesLocalColumns._ID))); + e.setLanguage(c.getString(c.getColumnIndexOrThrow(ExercisesLocalColumns.LANGUAGE))); + e.setDescription(c.getString(c.getColumnIndexOrThrow(ExercisesLocalColumns.DESCRIPTION))); + e.setExecution(c.getString(c.getColumnIndexOrThrow(ExercisesLocalColumns.EXECUTION))); + e.setName(c.getString(c.getColumnIndexOrThrow(ExercisesLocalColumns.NAME))); + + return e; + } + + public static ContentValues getValues(Exercise record) { + ContentValues values = new ContentValues(); + + if(record.getLocalId() != -1) { + values.put(ExercisesLocalColumns._ID, record.getLocalId()); + } + values.put(ExercisesLocalColumns.LANGUAGE, record.getLanguage()); + values.put(ExercisesLocalColumns.DESCRIPTION, record.getDescription()); + values.put(ExercisesLocalColumns.EXECUTION, record.getExecution()); + values.put(ExercisesLocalColumns.NAME, record.getName()); + + return values; + } +} diff --git a/app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/Exercise.java b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/database/data/Exercise.java similarity index 52% rename from app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/Exercise.java rename to app/src/main/java/org/secuso/privacyfriendlybreakreminder/database/data/Exercise.java index cab61ab..bd023d9 100644 --- a/app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/Exercise.java +++ b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/database/data/Exercise.java @@ -1,31 +1,41 @@ -package orgprivacy_friendly_apps.secuso.privacyfriendlybreakreminder; +package org.secuso.privacyfriendlybreakreminder.database.data; public class Exercise { private int id; - private String section, execution, description, imageID; + private int localId; + private String section; + private String execution; + private String description; + private String name; + private String imageID; + private String language; - public Exercise(int id, String description, String section, String imageID, String execution) { - this.id = id; - this.imageID = imageID; - this.section = section; - this.execution = execution; - this.description = description; + public Exercise() { + this.localId = -1; + this.id = -1; + this.imageID = "-1"; } - public int getId() { return id; } - public void setId(int id) { this.id = id; } + public int getLocalId() { return localId; } + public void setLocalId(int exercise_id) { this.localId = exercise_id; } + + public String getLanguage() { return language; } + public void setLanguage(String language) { this.language = language; } + + public String getName() { return name; } + public void setName(String name) { this.name = name; } + public String getExecution() { return execution; } - public void setExecution(String execution) { this.execution = execution; } @@ -33,7 +43,6 @@ public class Exercise { public String getImageID() { return imageID; } - public void setImageID(String imageID) { this.imageID = imageID; } @@ -41,7 +50,6 @@ public class Exercise { public String getSection() { return section; } - public void setSection(String section) { this.section = section; } @@ -49,7 +57,6 @@ public class Exercise { public String getDescription() { return description; } - public void setDescription(String description) { this.description = description; } diff --git a/app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/DynamicListPreference.java b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/preferences/DynamicListPreference.java similarity index 92% rename from app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/DynamicListPreference.java rename to app/src/main/java/org/secuso/privacyfriendlybreakreminder/preferences/DynamicListPreference.java index f628e52..7e4bf62 100644 --- a/app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/DynamicListPreference.java +++ b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/preferences/DynamicListPreference.java @@ -1,20 +1,17 @@ -package orgprivacy_friendly_apps.secuso.privacyfriendlybreakreminder; +package org.secuso.privacyfriendlybreakreminder.preferences; -import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.SharedPreferences; -import android.os.Bundle; import android.preference.ListPreference; -import android.preference.Preference; import android.preference.PreferenceManager; import android.util.AttributeSet; import android.view.View; import android.widget.ArrayAdapter; -import android.widget.Button; import android.widget.ListAdapter; import android.widget.ListView; -import android.widget.Toast; + +import org.secuso.privacyfriendlybreakreminder.R; public class DynamicListPreference extends ListPreference implements DialogInterface.OnClickListener { diff --git a/app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/ExerciseListPreference.java b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/preferences/ExerciseListPreference.java similarity index 97% rename from app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/ExerciseListPreference.java rename to app/src/main/java/org/secuso/privacyfriendlybreakreminder/preferences/ExerciseListPreference.java index b7486b9..a73350d 100644 --- a/app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/ExerciseListPreference.java +++ b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/preferences/ExerciseListPreference.java @@ -1,4 +1,4 @@ -package orgprivacy_friendly_apps.secuso.privacyfriendlybreakreminder; +package org.secuso.privacyfriendlybreakreminder.preferences; import android.app.AlertDialog; import android.content.Context; diff --git a/app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/SeekBarPreference.java b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/preferences/SeekBarPreference.java similarity index 98% rename from app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/SeekBarPreference.java rename to app/src/main/java/org/secuso/privacyfriendlybreakreminder/preferences/SeekBarPreference.java index a480b4b..c47d8a5 100644 --- a/app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/SeekBarPreference.java +++ b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/preferences/SeekBarPreference.java @@ -1,4 +1,4 @@ -package orgprivacy_friendly_apps.secuso.privacyfriendlybreakreminder; +package org.secuso.privacyfriendlybreakreminder.preferences; /** * Created by badri_000 on 29.05.2016. @@ -17,6 +17,8 @@ import android.widget.LinearLayout; import android.widget.SeekBar; import android.widget.TextView; +import org.secuso.privacyfriendlybreakreminder.R; + public class SeekBarPreference extends DialogPreference implements SeekBar.OnSeekBarChangeListener, OnClickListener { // ------------------------------------------------------------------------------------------ diff --git a/app/src/main/java/org/secuso/privacyfriendlybreakreminder/service/TimerService.java b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/service/TimerService.java new file mode 100644 index 0000000..052041e --- /dev/null +++ b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/service/TimerService.java @@ -0,0 +1,201 @@ +package org.secuso.privacyfriendlybreakreminder.service; + +import android.app.Notification; +import android.app.NotificationManager; +import android.app.PendingIntent; +import android.app.Service; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.os.Binder; +import android.os.CountDownTimer; +import android.os.IBinder; +import android.os.IInterface; +import android.os.Parcel; +import android.os.RemoteException; +import android.support.annotation.Nullable; +import android.support.v4.content.ContextCompat; +import android.support.v7.app.NotificationCompat; + +import org.secuso.privacyfriendlybreakreminder.R; +import org.secuso.privacyfriendlybreakreminder.activities.TimerActivity; + +import java.io.FileDescriptor; +import java.util.Timer; + +import static android.app.PendingIntent.FLAG_UPDATE_CURRENT; + +public class TimerService extends Service { + public static final String TAG = TimerService.class.getSimpleName(); + public static final String NOTIFICATION_BROADCAST = TAG + ".NOTIFICATION_BROADCAST"; + public static final String TIMER_BROADCAST = TAG + ".TIMER_BROADCAST"; + + private TimerServiceBinder mBinder = new TimerServiceBinder(); + private CountDownTimer mTimer; + + private boolean isRunning = false; + private long remainingDuration = 0; + private long initialDuration = 0; + + private BroadcastReceiver timerReceiver = new BroadcastReceiver() { + int lastTime = 0; + @Override + public void onReceive(Context context, Intent intent) { + if((int) remainingDuration / 1000 != lastTime) { + lastTime = (int) remainingDuration / 1000; + updateNotification(); + } + + if(intent.getBooleanExtra("done" ,false)) { + updateNotification(); + + } + } + }; + + @Override + public void onCreate() { + super.onCreate(); + + registerReceiver(timerReceiver, new IntentFilter(TIMER_BROADCAST)); + } + + @Override + public void onDestroy() { + super.onDestroy(); + + unregisterReceiver(timerReceiver); + } + + public synchronized void startTimer(long duration) { + if(!isRunning) { + initialDuration = duration; + mTimer = createTimer(duration); + mTimer.start(); + isRunning = true; + } + } + + public synchronized void pauseTimer() { + if(isRunning) { + mTimer.cancel(); + isRunning = false; + } + } + + public synchronized void resumeTimer() { + if(!isRunning & remainingDuration > 0) { + mTimer = createTimer(remainingDuration); + mTimer.start(); + isRunning = true; + } + } + + public synchronized void resetTimer() { + if(isRunning) { + mTimer.cancel(); + isRunning = false; + remainingDuration = 0; + } + } + + public synchronized boolean isRunning() { + return isRunning; + } + + private CountDownTimer createTimer(long duration) { + remainingDuration = duration; + + return new CountDownTimer(duration, 10) { + + @Override + public void onTick(long millisUntilFinished) { + int secondsUntilFinished = (int) Math.ceil(millisUntilFinished / 1000.0); + + remainingDuration = millisUntilFinished; + + Intent broadcast = new Intent(TIMER_BROADCAST); + broadcast.putExtra("onTickMillis", millisUntilFinished); + broadcast.putExtra("countdown_seconds", secondsUntilFinished); + sendBroadcast(broadcast); + } + + @Override + public void onFinish() { + // TODO: finish broadcast + Intent broadcast = new Intent(TIMER_BROADCAST); + broadcast.putExtra("done", true); + broadcast.putExtra("onTickMillis", 0); + broadcast.putExtra("countdown_seconds", 0); + sendBroadcast(broadcast); + resetTimer(); + } + }; + } + + @Override + public int onStartCommand(Intent intent, int flags, int startId) { + super.onStartCommand(intent, flags, startId); + + setAsForegroundService(); + + return START_STICKY; + } + + private void setAsForegroundService() { + startForeground(31337, buildNotification()); + } + + private Notification buildNotification() { + NotificationCompat.Builder builder = new NotificationCompat.Builder(this); + builder.setContentTitle(getString(R.string.app_name)); + + int secondsUntilFinished = (int) Math.ceil(remainingDuration / 1000.0); + int minutesUntilFinished = secondsUntilFinished / 60; + int hours = minutesUntilFinished / 60; + int seconds = secondsUntilFinished % 60; + int minutes = minutesUntilFinished % 60; + + StringBuilder sb = new StringBuilder(); + + if(hours > 0) sb.append(hours).append(":"); + if(minutes < 10) sb.append(0); + sb.append(minutes).append(":"); + if(seconds < 10) sb.append(0); + sb.append(seconds); + + builder.setContentText(sb.toString()); + builder.setContentIntent(PendingIntent.getActivity(this, 0, new Intent(this, TimerActivity.class), FLAG_UPDATE_CURRENT)); + builder.setColor(ContextCompat.getColor(this, R.color.colorAccent)); + builder.setPriority(NotificationCompat.PRIORITY_HIGH); + builder.setWhen(0); + builder.setSmallIcon(R.mipmap.ic_launcher); + + return builder.build(); + } + + private void updateNotification() { + NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); + notificationManager.notify(31337, buildNotification()); + } + + @Override + public IBinder onBind(Intent intent) { + return mBinder; + } + + public static void startService(Context context) { + context.startService(new Intent(context.getApplicationContext(), TimerService.class)); + } + + public class TimerServiceBinder extends Binder { + public TimerService getService() { + return TimerService.this; + } + } + + public long getInitialDuration() { + return initialDuration; + } +} diff --git a/app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/AppWidget.java b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/widget/AppWidget.java similarity index 97% rename from app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/AppWidget.java rename to app/src/main/java/org/secuso/privacyfriendlybreakreminder/widget/AppWidget.java index 9be89e6..6203f57 100644 --- a/app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/AppWidget.java +++ b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/widget/AppWidget.java @@ -1,4 +1,4 @@ -package orgprivacy_friendly_apps.secuso.privacyfriendlybreakreminder; +package org.secuso.privacyfriendlybreakreminder.widget; import android.app.PendingIntent; import android.appwidget.AppWidgetManager; @@ -8,9 +8,11 @@ import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.preference.PreferenceManager; -import android.provider.Settings; import android.widget.RemoteViews; +import org.secuso.privacyfriendlybreakreminder.activities.BreakReminder; +import org.secuso.privacyfriendlybreakreminder.R; + /** * Implementation of App Widget functionality. */ diff --git a/app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/DBHandler.java b/app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/DBHandler.java deleted file mode 100644 index a269647..0000000 --- a/app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/DBHandler.java +++ /dev/null @@ -1,122 +0,0 @@ -package orgprivacy_friendly_apps.secuso.privacyfriendlybreakreminder; - - -import android.content.Context; -import android.database.Cursor; -import android.database.SQLException; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteOpenHelper; -import android.util.Log; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.util.ArrayList; -import java.util.List; -import java.util.Locale; - -public class DBHandler extends SQLiteOpenHelper { - - private Context mContext; - private SQLiteDatabase dataBase; - private static final String DATABASE_NAME = "exercises.sqlite"; - private static final String DATABASE_PATH = "/data/data/orgprivacy_friendly_apps.secuso.privacyfriendlybreakreminder/databases/"; - private static final int DATABASE_VERSION = 1; - - private static String DEVICE_LANGUAGE = ""; - public static final String EXERCISES_ID = "id"; - public static final String EXERCISES_IMAGE_ID = "imageID"; - public static final String EXERCISES_SECTION = "section"; - public static final String EXERCISES_DESCRIPTION = "description"; - public static final String EXERCISES_EXECUTION = "execution"; - - public DBHandler(Context context) { - super(context, DATABASE_NAME, null, DATABASE_VERSION); - mContext = context; - - - DEVICE_LANGUAGE = Locale.getDefault().getLanguage(); - if(!DEVICE_LANGUAGE.equals("de") && !DEVICE_LANGUAGE.equals("fr") && !DEVICE_LANGUAGE.equals("ru")) - DEVICE_LANGUAGE = "en"; - System.out.println("Current Language: " + DEVICE_LANGUAGE); - - //Check if database exists - File databaseFile = mContext.getDatabasePath(DATABASE_NAME); - if (false == databaseFile.exists()) { - this.getReadableDatabase(); - try { - copyDataBase(); - this.close(); - } catch (Exception e) { - Log.v("db log", "Copying data didn´t work!!"); - } - } - - } - - @Override - public void onCreate(SQLiteDatabase db) { - } - - @Override - public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { - } - - public List getExercises() { - Exercise exercise; - List exerciseList = new ArrayList<>(); - dataBase = this.getReadableDatabase(); - Cursor res = dataBase.rawQuery("SELECT * FROM EXERCISES_" + DEVICE_LANGUAGE, null); - res.moveToFirst(); - while (!res.isAfterLast()) { - exercise = new Exercise(res.getInt(0), res.getString(1), res.getString(2), res.getString(3), res.getString(4)); - exerciseList.add(exercise); - res.moveToNext(); - } - - res.close(); - return exerciseList; - } - - - public List getExercisesFromSection(String section) { - Exercise exercise; - List exerciseList = new ArrayList<>(); - dataBase = this.getReadableDatabase(); - - String table = ""; - if(!DEVICE_LANGUAGE.equals("fr") && !DEVICE_LANGUAGE.equals("de") && !DEVICE_LANGUAGE.equals("ru")) - table = "en"; - else - table = DEVICE_LANGUAGE; - - Cursor res = dataBase.rawQuery("SELECT * FROM EXERCISES_" + table + " WHERE " + EXERCISES_SECTION + " LIKE " + "\"%" + section + "%\"", null); - res.moveToFirst(); - while (!res.isAfterLast()) { - exercise = new Exercise(res.getInt(0), res.getString(1), section, res.getString(3), res.getString(4)); - exerciseList.add(exercise); - res.moveToNext(); - } - - res.close(); - return exerciseList; - } - - private void copyDataBase() throws IOException { - InputStream myInput = mContext.getAssets().open(DATABASE_NAME); - String outFileName = DATABASE_PATH + DATABASE_NAME; - OutputStream myOutput = new FileOutputStream(outFileName); - - byte[] buffer = new byte[1024]; - int length; - while ((length = myInput.read(buffer)) > 0) { - myOutput.write(buffer, 0, length); - } - - myOutput.flush(); - myOutput.close(); - myInput.close(); - } -} diff --git a/app/src/main/res/drawable-hdpi/ic_add_black_48dp.png b/app/src/main/res/drawable-hdpi/ic_add_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..a84106b01fd4402e5d15b08c496a75b76e811999 GIT binary patch literal 114 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xf3?%cF6p=fS?83{ F1OO~S9V-9; literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/ic_create_black_48dp.png b/app/src/main/res/drawable-hdpi/ic_create_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..4af4ae634b4c805b2b13c209262bba92d4ef5bdb GIT binary patch literal 269 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY0wn)GsXhawu6VjQhEy=Vy==(G$SBbIuwHt% zp3_UKM>>291zL-BrWtE$WMrxY&q^|md-S)saec+%`%mT+^YR*%zN!3_;NI;JthdL` z{KCnCCY1w%imdJpA~Ld3FOd=(E`?RG0HH+`PU-POx#QYR|iePyTZek-J~XvsWJ zNp;6pnWrr{gH+WWS3OqoV4b69!Fg%ZjL8ar=LoBC`b|jln)7GMS;OOVHd`te@;#f8 z>^I4HhOyA|j6Ta%GFL2C6b3wAaO`BGUn!j9*xM|{uGv?7Zl}4O+1d4_3mOH1{$ucT L^>bP0l+XkKk9}#` literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/ic_home_black_48dp.png b/app/src/main/res/drawable-hdpi/ic_home_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..2e86cc2557d602e22c29bf90ff3cd9b76c86bc6d GIT binary patch literal 303 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY0wn)GsXhawzInPhhEy=Vow70Tu!9I|c%#we zRg9M#vkY8k7=^U&Ht=1+cDYe1V2w|s9SaLj^TVd&_GdqoN#Dr$$=zdk%p~Ss?hQ^| zeU^h$r^$Xe;89~yw7^Jq{So#2l8`48JAXVnGSTbHnIq=szJxsJY~AtrP-n`#$WHkf z%gHAWxczx_Y=ZegjW141kUOFI fTfgBkiO*~+jBK|k0wldT1B8K;fv1aOh{y5d1PRu~43dBH9UPL5 z6iT|k0wldT1B8K8m#2$kh{y4_Q_k`_IEb*R=ADxY zV6uJDq_v_+Z-tYfR|K!cZcn#wZ_1w*Zwfx3^1JLFH&cH)|4gqfmxMH3rgg?BZ~AgX zO7P4Ssfnoy7dsLbs)cmuJnq)8IA+UruCTi)d!Bot@+%Rg#TB=_7E65dSjDj^h($AU t;!LNFTjoCMkvN)I{QpIN|NiIvIZ;mvueQI+xBzq&gQu&X%Q~loCIB@QN?HH_ literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/ic_play_circle_filled_white_24dp.png b/app/src/main/res/drawable-hdpi/ic_play_circle_filled_white_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..f8c7bc9f80c56f38fb6d26a5124e84b8c6c65840 GIT binary patch literal 358 zcmV-s0h#`ZP) zv1-Cl6oxNG9SRbBjrL6x9UKB~eGn1x2@FPX>{x_8hU5wQ3Xy0PJdxJ~q z_iq_K_!G`KG5-+yOv%WxTyL@DY?;u*$dMlpS#w6BVnysLnq$!@NFIwK_V|zyX`+ZP zd^r#`i}r-DYZA=~C6Po!ETI&{_o6itALuOWqCRIN4DbBVOhwNXO_4DeUiqe(u`9|H zk>N$Dn7X1|6&a=C(G^);q*N?j(Nz~I6)(>hc~^VWt3CN;Z(D!+iZPr<2l1p@Pfbv{pl^PO}DlaJVIs5J_9-K-!D zDKo<kPg37sq>DnH}sLSQNTB&8>?yoYe2kI-7=&iVqYljys`bGHkIsN5vVzkH9?6rwUn zQ+k8G#v_U#EYO98&yHT7G?CZ;Qi{;DA>nW1=x*pM962Ig(?=+tQ$u1LT}B_fTqV+~ zzAS)SLuz#PQ{Wj9JbiWNl&K-h=+3IAK5&Fk1%3SjTSJD?bx=}IT_n_`D!XTI$S}J5 z>WK+LEvm9HdqalN6;=H_q1IJd!QPNzbi=B8jZoXFtk2$%VRZefa*I%9Rn}{7$S}IB zsw)vnZ~BzIA;aj>s;YXB4UNWYDA|#1#2H!gi+Vo(qE2$#kH*;ciGML}7{3_j+>VYV znlp|{d7z#cC)6cX_Lin1MrAo%zadnY-uRq0Hnfra^#fk0(pj1@jY`qKIIXxZwq3&& zb`*C$74<1sh?J+UimwyNGAd9h~Ei+NpY2 z9x6$rNkC%%rVZ_d`4Sa b+b8Nj_5ab?X<5&;!mC$>Ye$wegmi*brfqwcnvpH7s!&HEKMb|Y zp}G?Qw|2~#(bP0!&aOUyp1M4w?gyZ6RZWParegrOP|rgrfK%^FS7-_`NGPr&7rQoNJ z38?N4EXGg|>kF7Cgn!D`@7SM8yg4@^{du zJXF2fO-Z$ihyAtMVIP6r1Qb<@vJVbpXbJR_7xE@^AqQX~hMGp8BSeWRMOg=h@fZrW zz`$gsAMFPZU_%f?T87}P(i*u0kET+KtqnLZR>E`vE4fwM1Du-@vZXEoUHRqj0&s6l zJ@KX1JpjI|{rNdM25@K3yjc?_%$m1v0HCW@{y?@3k)KB^RiEsZO(Ur(Y^2XG$faRX q*OezPUOc&SXu){NpNQ)Dcc9H z!Y^TG(J!vfX!u3`2BNZWp$)o1-*Kt%8^tX8Tq;>;rO%Ymt%YGjUI}#=A#`HAD5Vt) zaIA#N7@(kpDi|QAgsK=|SP9iIKtc(%=$kKH4O$R-Rm+nELE7Idds54%Eqv4$YWbRl z-~Lc7KOzWD{2h#|YWXw%iSbMAxJ=(<5S4j+;ksPYc;HTLaf)Bg)owR36LUf#FZD0DUf5B1PRjQC~%_hEcJBO37AFR5s!Ief#6|+2TwZp zjPp&z*`eO&KzN%WzLin-Y4kY7-y_37NKxXJ4$?hzxM7nd17?I3%2cRQqeY7vRVtKO hCQVR8L_|bH`~}oaFRkf%3C92c002ovPDHLkV1nyUC&B;# literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/ic_replay_white_24dp.png b/app/src/main/res/drawable-hdpi/ic_replay_white_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..5ef425a17081a52d92e540c1f774617b3c85e4a3 GIT binary patch literal 391 zcmV;20eJq2P)fyTno#awEM#RSB_%5p3%Lj69yGEsC1iyimWGdo zGlOzwn0K=B?9Tf>eb0N&`#iry;_sxtK^WH!!q6a0FsO_P1btwFK%X&KGAE@a6jRod zT|I?eWh8;!=MLmJnZ{9OF(i9j-Q(nPra7C-mq-NO6`l)3`+5aN6;C5qBD@H2^s^1c*D+nvuc8JU_0J0 z32v+RTZelv9&bsy0lBK6b#PTR+0x+ERIFn<>e@{8uWxb;o-KU4zZkXupmx}L6r-tg zWaP_EDtZa$x_^?}K84COytFSXYu{C6?L_ZSE6`@s%eOPTWJBxk`ZQ=KN_trj@&@WF lXVQqYjEuBl$;7{c^aj8h;`WV_+Q$F@002ovPDHLkV1l8Dub}_{ literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/ic_settings_black_48dp.png b/app/src/main/res/drawable-hdpi/ic_settings_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..3023ff8daa925ac79e863caf679d03c56c3afc93 GIT binary patch literal 827 zcmV-B1H}A^P)>`06 zl!7Kix5q+Fq6=w?Bq2zRX%{Q=l9q~JFAfaD-fMk(ql{OMJp*hZ8Le@FKzb36b`fRvPbJZ#ihbmi`-huQ`v`H+dnnz5 zIO;AGB7BE9YM!%LJ&ic*2`mcPKpgfvmoR!03D^-c43Z$hAhR4H0ecmL8#qMtu}v3c zWQvny2hqm?F??uNd0r4z>Rub{-SwiV_KcJlc$@G(Y7OnY{oYXaZ@4M{dXjJ$v z`$eh=sKvO?Cei3I?)A;6Md`CXq2t(8SWgZw6G7n$pCQ&JiDGgU(}=YRim_lq5{{Tt>$z%L(Sw8>(002ovPDHLk FV1g%Ge~AD9 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/ic_skip_next_black_48dp.png b/app/src/main/res/drawable-hdpi/ic_skip_next_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..16e8a4000d1bedf2e7b2ce8fd06bef4beaae4b4d GIT binary patch literal 284 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY0wn)GsXhaw9(%ethEy=Vow1RZu~5RjexgQ* z)zWFR{)ug9MJ>sMlGb zq+9e?52uZ@kEtxY;q5&oKqsqR$ZIPz$I@GjEkSP?oK}`GEDW)pa$%-QNcPcRf&L!n z>)flpP3`*c(f+tfb*_A`*%IcpS9(eg$$gsme!t_+5TJ6chJYzv9ANtBuY}g0OVWEl cjyuEtn|VQ@%-j#xfZk>BboFyt=akR{0EVS@xBvhE literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/ic_skip_next_white_24dp.png b/app/src/main/res/drawable-hdpi/ic_skip_next_white_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..044b6b079364403c8f2a7d3cb79b15df8d564e8d GIT binary patch literal 187 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k0wldT1B8K8lc$Sgh{y4_R~GUfa*$|yIEyPJ zHe6#@h1d%v15OHpWS3VONUILmHM(|d)q z-#kZdN6u|{kT<(ALdICY=N8YA(-RsWWKC|YxUqDB9b>FeIJfOL-H(5}ozq-)9l0=1 m$ocn~H50ESX-}=Y&hhEy=Vy|K}dHISk8VSQQJ zWM4DkNnIy38@N`$kjVlD!<8RWl^P|BS=1-SFg6L#d2jaN{GRXM?$rKiUIheNwbuK$ z7R?taIic;vIcw)L;iW8ZKeYsSU9fzwp_Q1-l$~8B0@uMGaMgGr`SRd;l5Vw1c!uq@O dLqVXH@%_sMeJq+y?}0vN@O1TaS?83{1ORJ?eS`o2 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/ic_skip_previous_white_24dp.png b/app/src/main/res/drawable-hdpi/ic_skip_previous_white_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..23faeeb0264f26fee6a64ad9af46cece572394d1 GIT binary patch literal 201 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k0wldT1B8Lp1Wy;okP61PlNSm)849o_?>l%T zkXgz`grV0#Ie;;QLG%LKto;2;7-cqhs2lqnv2NTEE56Zq`jb=hC#!UPx_oM_t*%L# zleAiaGqbwggElc6fv^_`r0-mqV||G0ZAGK>tU||#g`&zXEz@iS85hr0b}Gt_EBo{L z^xpr9&fzY6GRo7!*3JAgVNFc6;$fatjYIm}3)5$rX*=ry-NxYQ>gTe~DWM4fws}NQ literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/ic_add_black_48dp.png b/app/src/main/res/drawable-mdpi/ic_add_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..3191d5283e981b9eecdcaa54feda419515ef656f GIT binary patch literal 108 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA0wn)(8}a}tV^0^ykP61P7Z(aL7zi*O{Br+` z`;vw;dk$=HXVkVR^_;bx1E`8&^BsGK4=F%~hW8~_)0*>!J6N0?fLsPoS3j3^P664_{qyg@{QSjgwU#qa z4m4P{;Lhvwjx;vjkO;gju?@H-u^UM2HOE<{iHGL)J?kWK5`Arw=$J_OB+)UI@Pi2f z-xB$l*f{u@(DEU%bn=GVhgbaVcl>4C{Ji+@`PrCx+&peR4_q}oZXP#}o5#%~;0>$Q Y-lS`>2u|CQasU7T07*qoM6N<$f(W@`r~m)} literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/ic_home_black_48dp.png b/app/src/main/res/drawable-mdpi/ic_home_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..dcdcfc0a80de0fe05a62160fc706e9363a0239e4 GIT binary patch literal 239 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA0wn)(8}b0DZJsWUAr*{oC+`((au8vg-ry4~ zb%Adko37L81$?_NsI6eMUeMTmlA}UM!ovJt4Ria&+qwyhkN!0FJD9pDLDeho#*?X& zL~mS5@Rv4AS@x)J?~R~|6K!Ru-Pous+}N?#Q0T;giE_Ua&NsHsk=&rqHz&g3Y{%b% zCG+g3b}svTGWaEe*cS3BWY?jZLm|5+D)=nbIHT^Pss$vLYM)6rp1RSpO5rH8+y{qq d4eT<ojwUa*oC)#{gQu&X%Q~loCIET=VpRYD literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/ic_pause_black_48dp.png b/app/src/main/res/drawable-mdpi/ic_pause_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..74068eae0d0121441c8c15b9437c91b3faa012df GIT binary patch literal 101 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA0wn)(8}a}t9Zwg>kP61PXBGJv7&w>>|NYOr vpwSdtHCcG=3ze_;ezP+$lmnFk!KFziX4m!waNe;`1aUoG{an^LB{Ts5hM^k< literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/ic_pause_white_24dp.png b/app/src/main/res/drawable-mdpi/ic_pause_white_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..2272d478c38ddb2a4b3c592b2eadee8d4e296432 GIT binary patch literal 83 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM0wlfaz7_*1DNh&25R22v2@)?K*o!=P)So4B g)u6(pM}&c4fy8~qgOCMtu*=z2v@^=eS1UZ1g)78&qol`;+ E0Fs_H=>Px# literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/ic_play_circle_filled_white_24dp.png b/app/src/main/res/drawable-mdpi/ic_play_circle_filled_white_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..9681bf5a5ec96da881f1d74e32bc0a33337be9ec GIT binary patch literal 255 zcmVk$HD;~t$S=!+dM^Y4w`a(JmQ1r_Tu?R;EyWb3-v3h_rb-vx5Y^;8Dbt^ zQ}Ho=u+BTJ?2Yr5Bo;JA_qo!LvEf2ZOH0L>buj8*cmczFVu{wv1nvL;002ovPDHLk FV1lb#Y}x<- literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/ic_play_circle_outline_black_48dp.png b/app/src/main/res/drawable-mdpi/ic_play_circle_outline_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..a9e0143b746ffcf81ac90ccf1afefd969fd0e812 GIT binary patch literal 680 zcmV;Z0$2TsP)Y`Z0kQZn%`T*LxwMf90cBR;Wna7T(s7TKmwldCA2)Y)c%LX^2N zk67Ucp&?Fq#Rwe}u+9~sBidBR(gDx-N$43(rb$E(@2(a2%?5Mi$yR5fHZ_p84Xm~AuvmRoIHD-GGt|}~{WrQoUgIa6!pUW1*7^o=8C1WJziTpBG zF_M*aJ0M3A?sKS4o-%}mX_=N?atX@U z{U^HdU;t?m#Xdy_4Qo|G4W=sJk0)uwD7D>Nlqe9;7ezpU5>?dJiaFgRVwy8T&p2g@ z4#==Z+gZHDDnoS4LzX!<7C&N%VQx%{3CdKd(V!hggBn%l$|qLombF&&Q9`7)#zlLCG~Ik{q8abKL@WQ@ z9L||J=l}mnk{y>++gN5}BQw&H{zbp=AzusU<>Wn&;6=xQs;Wa>6VSI;6g*<-CWlsZ ztk5r-Vd=Q^?S>W3wxfO!Zg-TEbTL;AKpQU+;nQ`_*aVjW7^4#r;MsnJ++rAx84hv+ z-hwqXya&RD$YJt3gI{Y>tp6jpDi>rpEC^mBOLfcwVT5i@@U#{B4uf!PVWJYX^(xoa zDVp)%7I9+>gXeA4=wY8an=2q05)Hi4Z3@Fs$ZxED}&gP}3ipiOF$;?aR< zwdpUvl<=)V%1zF)bCe7YwzaHvMJwCd zBoA%(KRLFo1M(0#$5f_ri-#*OvMf5>B;b^LD*Li3ia0Q}?K`)20{+<(6P&0^RA;!b zkcifBWQ4KxlUw}8rKQf`lLnzT@%#wtZl!PT? fIu!X5o;>*kv!`kZsnY~t00000NkvXXu0mjf_W#G= literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/ic_replay_white_24dp.png b/app/src/main/res/drawable-mdpi/ic_replay_white_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..5a79970a98b6bd85fcc354a541125bb9b6b54f23 GIT binary patch literal 244 zcmV?Vq?j@7sSH+=vGVcrbMdJhNy0000Nkla9V}f0{{|82kXi@9MRd@?$weK4A^ju7 zLRBcZi6~YV4Y?x0YCBk^ee93}@A5qN9`;=V`Fy9md5-r894+Q7Vwa zKGHbsTJ3CbB>k$}G!3du63TIxO+;yvI}8$@RV#hZwGsJa1 zG(UeLOQIW*%YP$A_S8JsifkZzY=a`Er-+B1U^vMR;-MW*pvdqV@zg66vq)lJDKSEJ zw`0sxb4<_B;v8FuS(#q`)kg&}+hPL6xOrb?GQ?%fExvFHL!Kq|$LU4WPhFXQ&M?@z zxR1mtVOeOIy~lo>;tz)rETgf>fK;}TNLegBvB^KiQ=u3Ot|-Y( z2Uu+mzU3;1m}L#YE?|a1uJMlWb*&qR^Q=+kG@*msHr|$gaEk##XL&}z6#u1a9Hidf vu2=2VHre2#z3N8+Q5wRd6(rV6I@-ivWBUX&LwAlh00000NkvXXu0mjfs0IG% literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/ic_skip_next_black_48dp.png b/app/src/main/res/drawable-mdpi/ic_skip_next_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..97a05c3ae613aae8f92f0a18d054a0c09a2a2731 GIT binary patch literal 225 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA0wn)(8}b0D6`n4RAr*{or)@lWh(Uy{UtTBZ zX5_7`xA%89NLw`eEs%b}w5w701%p*XX_W5UoJ%Y!pAIl?u`v1Yj?Kd3(Ce54VfR#Tqwz*{VY$x=7KTv!`@D5j_o383OYZ{nG?@WvNsl( z_hNSAhjUx5HZK0zktO!bTTgQ4{FiNuwk}V~m)qSn)7pZ$*eLv2N?glD^SbDL{*zQr Z3jcD_x?347v=HcK22WQ%mvv4FO#o`>SX=-A literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/ic_skip_next_white_24dp.png b/app/src/main/res/drawable-mdpi/ic_skip_next_white_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..f9c60b74031d904074118d4318e0f39d7cadcb0b GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM0wlfaz7_+iC{Gv15R21qFKrZb2oPWi=!{s# zx+;Kw>V*!j3}=3kkItV(5?E&6{*V?|P#qpxe<;Fqz2rW|>59yE#7dbSTu5(7I>qqj v7EcbR#<852dMiu)vTQdWUb_C{b7lVXzZOMJ4EwSfXbXd|{!oJ0ZH_#wW*h2O6}U)*YB6 zUc@H$j^WGP{Td-TbNXf6?(AjEu&`iGbW7*`(H|ROd46ks0h6iq^OUyE;xEppJDZkH axy0Wuq4jaQc)S$Q?F^o-elF{r5}E+-a#&yh literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/ic_skip_previous_white_24dp.png b/app/src/main/res/drawable-mdpi/ic_skip_previous_white_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..dac36407a0f73f1b53d8ab094fbf9d927670ad4b GIT binary patch literal 152 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM0wlfaz7_+icuyC{kP60R1<{_S{|W~h*na-k zcYe0mD=BNk|NjDNZV}9{|M&f`PfTht&G=)_{YYrF;_LtB3bQ?Ulm2gSkl1pWp>3vt z`o$xcI}&o$%_0OZ^c5UQRO?-uA;oc6a6Kb~NaSaQid|R#1Fd54boFyt=akR{0MV&8 A?*IS* literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/ic_add_black_48dp.png b/app/src/main/res/drawable-xhdpi/ic_add_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..3cb10924a0912d9f64d338b9769da053bc051da6 GIT binary patch literal 119 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeK3?y%aJ*@^(YymzYu0R?HmZtAK52P4Ng8YIR z9G=}s19Id&T^vIy7?T^C0uTIeOgX2~{@-4rW`SaRO?zLF8zVzTLHf)E76O$Z{hqFV JF6*2UngE2qAnO1C literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/ic_create_black_48dp.png b/app/src/main/res/drawable-xhdpi/ic_create_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..d6761ba161c4bc5f665968f7cb761cc7db671822 GIT binary patch literal 319 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD0wg^q?%&M7z{uw5;uuoF`1aC%Pu4&Qmyah! ze2xg^967?*v-Zf>_jYly&(gvcB=EW&nl+QJS~z`2`aZTgc00pk63IOq8}7b}wf}V~ zaJkl*gx| zSU!~+b=xx@hobrFbsnm9*iR@BKO*lDA@tKuao&63M?h+BzR;zgY9MOem-p3$Ig=-x z_xClZ0aE6i&(HqxJ>66D!mZ=q)@=QJ x^_)CsMaZRFKeL{%p1Zzm9}?r#b7Qbi;^!wF?pNJ-s1q1444$rjF6*2UngDHgmazZ; literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/ic_home_black_48dp.png b/app/src/main/res/drawable-xhdpi/ic_home_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..04e2b26ff139fe6c17fdfd5ae816dfe8b94c32ec GIT binary patch literal 356 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD0wg^q?%&M7z^Lu%;uuoF_~zh7UMEG7wu}8u ze$iqVcxO1aUzmAM?7Zp>NAm>6EUQ`Ct*wSx>5qK>6$=Oo3Qm;g)G0o&@&xPba3#K6 z%^S&y&BmS5-@bSqnrJIp9eMMi%d*6LGb28kmp9tyGS|O5b6}s$oE^sD?xs9P9R!Z_ z75`B8Z(s2HaaOv+jvdD3_xj(@iQ5wQ?NL}~*gq)I8fJEYcY)~s9ia=R@)j^>s50MS zi2B(b%@}o%$-H0e=-I`tg`YD5@7P3%U~s1aWuF3ND}l0d=Ka%-V{k(oZvXyV8UMT3 y0~izy3@`p?t4o+3U}gbzopr0AgTe~DWM4fm)lPg literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/ic_play_circle_filled_white_24dp.png b/app/src/main/res/drawable-xhdpi/ic_play_circle_filled_white_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..5dcdf0d7a4b7daca244384a566c3a36ddf563b71 GIT binary patch literal 464 zcmV;>0WbcEP)8qwL)}Di@L#=vc2@L4ggOYl3qLMETUUz&Y@xg0B7)Z;_5v!psA;D{ljZ5) zc#?BoPeMz<=Us&de(}5?&XfNETsn+db08ohBH+N95p7%?Q<;9yV8)pwPJEzlFQ~F4 z!bFHq#YWKQ2T}rhj|mEV;Zb}%si4RX8@3cBf&x2i+2WZ6pGkvn67)&SJDs4)PttOu zoGe(91&bs>L;I}W^9vavFY$sIIvn2c4H?rofy)^k_ZRXN2}g3Opo1RgUc#tas$eV= z2%{RRg0)N_jB2F{4l;o-s=X=*WCCGSS5*+n1j4AozbLSe=q>Vyvj52c;BPuYixQ2V zfhuTc+A5l=z~z)#v-=*`>>NI#;~tHSN&GyhXEbnrQ%f3|K3OnNp2-yg(sH4sTU&ah zrE6NeeA4jAyxDndv1LPEw*1;DHoTIq?;gHIIQhp8kRCUrT9hOk$WB22A84i7{daE4tCRGqG{gs-a#()X<>yAMipz#cSeLqdTLb(l#|( zf?F4O+Za-sE;XSoA_lL)3m0jum3h19%HPXm&N=Tn1B>}Q>o+;CJm)v(90^fDK|w)5 z!940YLEkX}I7B^F%t$3PaESrLL;7iFD@kUEBI@blZ^UON=wv-b zOsi5_c!C%*NHZy>MUtbuL+s%VZ6wIECY~W7W{5`eW)XLg2-3|$@?baPNJJT>iAcry z$wL`BX=5|XsU}X07;&mu!4?kF$rx``EWPmRS*)m=tQ|2vgqzIyvql_R^<~enQXmOUypX3~Ku_)&PnJg=$ z2}yO9^8Cdr!myf0S&CGN9q}x;?$0C%ON#4=4!sm(_T!Y*X(nt3rmWIsjCLa`|Ik1b zw(}8D*@?j-#`Wd%Em7I1S73}90=uKjLjzITp^HQ}0W~2i%|z`WqS8nJNuKGGhkW=& zKVOl+wUV1n;8Q7YRr^=r#SbK~`bymiuPMQo7R1Rpyb&I<6svZ`$v%9D zsfUNR%*7i)nBaSCD%7*;V~X&s9&yr!SMq<%RXTwUlrqcL8&i%GBTB8XlFX z&s3+t_X74RopG+>JqbK%P%n$=01Mcwv;=Xo2~RFLWB0+ZfTc>k$Y(i^7wTtZuVDd8 zmGoi$2Oi8roTLp4*s8P?aZ=&`2ps~$0@fo09e!>h3 zn5%TmnQkYid(Oya!vfYS=_CC%IrTXs%MA&Z&`3BF57<7h5 zD90OnbpWauQ~z&23m=*hCl~OpOhN%2OVMXT|^TpfTlh?8NG_|%3tc|?kQ zC{qO%TJSBw5aQ%I`Ot+pc|x238WEKPMC}NovW8G5Kq@6@*bvP(~1QILR0?WuCHx zkfnKyWL@G6U*bm{XR}_s&`%8!sB&*-C%v?=lw6k4>b&c^>7ks66mtd1kr#Avj0RRR zp9C>tB$>}j8aU1kUgn%X&uk*KlQATsjL=9P)X0od5ze^ zFfGKH7A5TCF=EI7dq^^^idf4v-XlIU&Q-o<7BfVGO`PXX#6$Wx#|GleNR_Okm3D6P xkXKCbiBC-Miih0dA}y??g3uHc6ciK`{0F;pyd4Fm&FTOE002ovPDHLkV1j=EXw?7! literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/ic_play_circle_outline_white_24dp.png b/app/src/main/res/drawable-xhdpi/ic_play_circle_outline_white_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..615b80d08543f8285c7ac5ffd66435bf0da1b7ff GIT binary patch literal 699 zcmV;s0!00ZP)9ER~}Ocb>nNr>2151>$#LL?rDP#4l7hMYi)F$bWnTZ;s2>AO;FAR7@pi(*JO z#wdzz)U=@XHOb~`;O1G)$1@Y!MZw>_4PNj!84~BgzknDs6sb_7NvFFeH7YEVC5B_0 z?FAF8ae<$6-ZS2NAk8KnY}%Aa^%9up2Vpgtixx=m8Ic>dSR_M|{_av_$g#~WA|>Ks z14Ha%z#$6^;{Ccs>KL%cP?$i1eT@HkOB^R)36{7AlOS#ne8Q;n0>?fkX<(FWfq9H? zq;W!Slmm=cL4hCF$h139M7D5( z0+v(lAO&}zf-D9HET_sNWp|*4WP$^hQ)Q8=JJ3Xu!2!#u(#VxN&_Vix1C~<_AniXD zcpW~_L{gyxwP+`b`cM86^`Bfpa`u2u6ZLJnjBHy2I*s?fB1`T-7P<9)6j)B9J?0L{ zcs=aSgFefy(*zyp)azmA@Byil@CpQ+M(gJoS;6rNjMD*gLDzy#qZN@BPuu~mgxoWU z6LBwTA?rAPffP-o!6;6Ijd6lpGU6T3<}eN-B*v&>%-X(ql`tAig*?s)#z!1mAkH4f zJp~e$cTSNO#x8x~zWgd7N8}jx`B>#S28>+>!+w2_Q$pmH9r9#JGtga{EP2Y@Vdyx0 z(SCr;aZOm4%=YpVD#-?IY+9@{()*9VXRLCDpHo)!skHK+2t{RV2URfJy|Ab$V=002ovPDHLkV1oZnH8lVL literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/ic_replay_black_48dp.png b/app/src/main/res/drawable-xhdpi/ic_replay_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..16567dc82526207ad0fe37ee71215e29ebfe12d4 GIT binary patch literal 866 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD0wg^q?%&M7z^v)%;uuoF_;%)5@90dC_W9MU z%$_DuF&eZtJ+?D-uQNS*pDNfpw9uRk8Gs@X`0 z`A|CEGG(@s^PVUBw*I)k`?$#Yk8h4%H~p2lSuDQ#oWa{`Tp6qP9N!-6_@lf1n)a27 zz4vE`&f4ibO}r+dQTYkGn5W6Vut%K6ArrD=vX5}xpZr9b-D83F53_BTHQjc& zFwNOgyr9yBlk>yYxyq@trXFzp+BnyF?|GZ1GUof2wt5A$mQT~$R@2q7$!Ye|)knon zbrfB=_Viuymqk@>$F6<-rLpME=C21PJ_-=kczm-e=~s)!{F_xzyccb+6uveuGCj00 zw&$Zr;Jw2la>rLWm>-J>VP!LL>(|=QW4J4%QMc#fO0JrN60)lfupaYR!4%%|Z1%qA z8^a!~ma1I7&VHfP!i&{Ma$^5?*bC3fHT~ooJN=@s)8g~1G6) zu75_{s)_C{?Z-QRpS@G-^0Q^d3B^;pEfV~B=PGJFyE473;LsGQXhlzvB`a3x_daZS z-tkE}@ItpnvBkmUcwRe&*6d3!*jEUhd*MDsc}JQ|;I~ITX6LSc@RoZx>Hd%K+J{rZ zWQ=+=yq6TZYX9yq>JPrP((RkV^&?t~Y!sW5?khaP{o( zb7!%6!sHmeMD<91y{Kcg+q8~~W|oL&ANAMS{Pt*A-!UOm<$$-FXQA+=p4F|FKYn}o zoWJOnv)#le|0gW!S5~>eBqumIfp_OIuFW=o9a;KiibE!5|CyZj%E4*>dhPzmCGC1v zFBKe{_^e(oYHzYzr@?I!tX`ugc)agnaCls>vrOeV?Yu_z90k4@_0zf!KlgD79jdSB zKEC$SIfe8S`W0UDcz7M#>`tBF)w$@c&D(n1SnY;u-6Ou_Cm9LvE}msLo%6Akd)bP0l+XkK_$rnr literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/ic_replay_white_24dp.png b/app/src/main/res/drawable-xhdpi/ic_replay_white_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..3b41913257dbe14e552f8203ba4612c9e49fa7a7 GIT binary patch literal 457 zcmV;)0XF`LP)FTt0oJ-PWqJo#>PDsS z`vtg-Yj!6pz?ENDOXxEq##k{R3pG`V_=<^3NWfR4)j)KkE?kf% zU}CHb1trze6>4h;sTD;rtpyq(711_6TOXmFPeL**CLQm0&Kbrt$^HG8P44Zq_ne-d zIYT6GB9TZWvWW>Kq@TD8Z%rbKCJFFT3Q=|)UTQ^@t;I_ZBg!7bOS=$dFXN?m5M}%E z(wB&`ukq3!h_Yz{ypu!>x)$#=AqKVLoh^t#k5E8sIL>$MVhOq3&gY0hM`8YgceIr|YY&iqQ@`QK~6 zQos?!gFYj`%4WoqwqT*0?-5V>feMW6L_F#x3@zbr#H0S91|$0r&w3vNHzOXl4y8E9 z5Dz;}9F@lr$I={PD~(h#??P2Hv5k*OBaS_R%D0F^Gwfz5bE%<=S;V1HRE7}izM+=? zvXWuMx}&JnaTc-a1LhN^j9$d5v#dlZNx#*%UxG%$>Lq+a5(6c?YW(obN2{C>#Hd#& z!B{)f219oRCRP~?=PB;R(sE89s&->)k9y|05eEzCQO)~HF|~}eY5{Q-jsl(y{dFJ0 zLg+*>%Tom8#bC&-wqj#@$W=cjZ_b3=su3H_Ay*wEUqWZ2%FD7H{2O^AAiF$gQgUe1!CaxCt9AAy+*GP?%|S8#ZFe%*GOO> z#bLy_Ugb>^^dZI#kVL7TbBI;FloO_cKI?z#>rnXuv2KJ_AwQf^#JVG>3?mNBvWI0k zCeFQ%8(UwY@+jh1ntry^Op?+IC23&?1EdS}PEAbz5c&FESu5gU4Th($JgXZci}?%j zAcuGCUqC#n17l^3BOc^%YUO^!lkUMvz+uFL`muJC2Zudosl~w?NY31kB51DEg_A{d zo(4V7yWC2^CMFTbCfGp0ZS3d#oLeiEIC_%o8Q~cgkx|9lh(m9&kc<=^oYC)hXq9s6 z($m<(9mL4iY&qBmXe3*lJNfX^nst-}xU1(FC+XyRa$C!w;mW?1+!pg9Cm5oZ0(uZJ z=)Phh(s literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/ic_skip_next_black_48dp.png b/app/src/main/res/drawable-xhdpi/ic_skip_next_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..ce88b61841f771915716b235388a1ab040a31dda GIT binary patch literal 340 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD0wg^q?%&M7z$oqM;uuoF_;!||UW+4x+kOub zt+_?fS-7-=ng5Brkf)`YuGz79v@&zx5e%_&Z zVeeC=XrIP+irmW_zRwa~;cz{wiEGQW1x#yI*EnQzYF~(A;@&cC1CYA`mAlO$+q2P< zX|>LY_8)Uj(&KHZe z@@SmK=eJ<#<9HuomMAM1ATMCS(q@s2mjSF%R>mxU?zp)?!9QmC*0k02*F^UD07Hwx M)78&qol`;+0MgWo7XSbN literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/ic_skip_next_white_24dp.png b/app/src/main/res/drawable-xhdpi/ic_skip_next_white_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..e722d104767465785e4cc04d3dc8cdecf5d519da GIT binary patch literal 222 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA0wn)(8}b0DrJgR1ArXh)Ufamq7%0)2I8h_S zYU#9D_n6EK7=<@5a&KtllxSeQ66H1bS-#4r3?7HVmM8nZ`rdnT@Aur#SF>837JfK< zBV%vryQ9yU^x7gB`MrCWF!WVLGEU75W3Ya^reSqp7(@2iH4T#;!w%eyvDIv7_6s|3 z_Q!hG-%mvEo}JWRbIHH%a%jCVa9WF&s_luf#~{oZXNT&;)1E17E4 W^OrqQ+j$Y_Uhj+|2`rstnE1mDxlJ}{}eP9yt(qP|Ef?~Z5Po7moLTnOY_%1<#(II8R#$=p}Dcnu?W z-p^%g7};|)Pe~P=RDa6zVrlRc(*@J}OcJK`8G$g2jZQ=5EFK(^WB8qOmvO^`V}FFV zE5`v@j}FRQICmuYko~h`Q_K8*^UvD&GNnaqFs yYc@|i!}zcLU8MJ|hDh&s4RPMqFrRh&VEs2~_43ryOwquwWAJqKb6Mw<&;$UM{F3Yd literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/ic_skip_previous_white_24dp.png b/app/src/main/res/drawable-xhdpi/ic_skip_previous_white_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..01dd12b3f40b7f90af78ddf25fd16f9cbe65a0f8 GIT binary patch literal 242 zcmVrfRW1hf~_@91(yO*n%%kY1DGxK4;3=Nm#D=w@Ma7_^DVParA VdDB(ycCsqSC{I^Emvv4FO#nC^B`*K~ literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/ic_create_black_48dp.png b/app/src/main/res/drawable-xxhdpi/ic_create_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..9160023a2b4c62625d6f297506a171dac2973d8c GIT binary patch literal 433 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q1xWh(YZ)^zFjjcFIEGX(zP(}X)f_0&dhxP^ zhw2U24}$6HOG?=M4j(Fv$W9bI=%w>0nJud0slHi~&Zg!Vk-Tf$(>JU-tm!#P1%z&0 zI93|;xoZ9PUF#xyvow8QuWQTSz0$LG>Efz&50Agg-oE8bv&KgSE}IS}{zV6xH9mlu z{%VJsGt@sSSgmCgTvV?*OCf4+Wv*h>-p5gri%#!*H}A8QxmwlBw>o<=e7@WgKYwA) zi&f_HuDNXfR}m$2_u2~idEZ>RZ@q3`ZhLXjx9Vq|E)`0G^E_JAg&ra?JzZiy_|%^l z?%eiKMagC+2hh&RogZA3Z01`ZzWmpjnP1MP;=_ZJ4-Yo8^UquE3#R34_<>>|5s+lb zq2dk*YmKm+4Le*W7N{h+!U+cJPcpyQXg}|eFkZOX4-#OLzAzf{m|r*Bc|!#l6%3xP KelF{r5}E+H+_{ec literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/ic_home_black_48dp.png b/app/src/main/res/drawable-xxhdpi/ic_home_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..d66401cc7ee5247323db1d0e5fda5a4abc986449 GIT binary patch literal 485 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q1xWh(YZ)^zFs|`*aSW+od~3)ejt(0xBY_Z3`g?>#w;r?yH3Mn@>gyZoOhh0;t4|kLXOqVG4!-_PpVOP z-aGBek=(OPwwe~g{Qe>@@_e25clsfI>{4yS*i@w#W^D{rz1-|>AY{nKWX$hsQ2NUm_Zew|kB`R>yWO+Byd{gCa6 z;F1F8&o6>^e6IYWdFQ9iFOepjX+a#HBD@q&Bx|-R^e=@AEIgHL-)h%y*J{%LSL7E^ z=>}8DJ^Px3_)tn7z0fVQjpUXO@geCym4Z)}Y literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/ic_pause_black_48dp.png b/app/src/main/res/drawable-xxhdpi/ic_pause_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..dc63538f31b9c96551808271cee9d704697e0b8a GIT binary patch literal 127 zcmeAS@N?(olHy`uVBq!ia0vp^6F``e8A#skDEJMe*aCb)T!AzYEKT2e9!N2k1o;Is zI6S+N2IQ!Fx;TbZFeWR=_cR3_`2YVuJ4a`HMhF6S!jv*C{ m$r5W0{Noqkjk>0hJ%NeAb!~d=tj~okAZ?zmelF{r5}E*xz!xz9 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/ic_play_arrow_white_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_play_arrow_white_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..547ef30aacdebbd5bc27a3831971aa49be8813f7 GIT binary patch literal 283 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY0wn)GsXhaw9(lSrhEy=Vy|FR(PyjfM61bK%=q7O8Xj0w7EPdhfr5^#S_IEwe==vgFzHZ{arrqiL9p^2}oCQR8HlO`a zfBt>_q&-EaGMH-9&z)oSy0%IOibq!5=i7xQ8?znl*Ho#q?l1C zmLwh%pdb>pKr}hv!ldkF|5nzo_`k zc}eR_hl%VF4-<)DT=alRfHl0KMErSu6_?hE1x;YW&OCE+==ML_XMw(D@O1TaS?83{ F1OO`naDo5; literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/ic_play_circle_filled_white_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_play_circle_filled_white_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..30330cfad6fc31d88d473c30deb4f1b101e70b23 GIT binary patch literal 666 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/ic_replay_black_48dp.png b/app/src/main/res/drawable-xxhdpi/ic_replay_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..13fc60779a1e278eb8d96c77bc15fa6f931cee09 GIT binary patch literal 1298 zcmV+t1?~EYP)Zd+Rc}6ME(Bc_dJVT3TXz>g!o>9s(N_j>p&nV>? zr97jQXO!{`h)0jdkLNlbKc4G&{CKY8@#DFU=lHdAMlVsNZyf&|ozg~_#_@VS8s-T(-jkMBDKTlaiR^S3ZmRq}H9ee0w8u>zfI?JwRb+G|6c3FlrkM#9E`Q@lh}Pk;@QH##b{ z*HnRBMd(6QvjBFP}3Y#V@GsOv=(e*v&7nH%`1_K4~M>{9PJM6n0J zu7&@PoD$F@0I)w6xS_sewE*_l6fKBi2Y}%*qXcvn0F29O*$RNMPdzbP4`3u&QX*;w z0OOgvXf+0ufGz@naY_kj1OSXSC7>q&U^FQKO#*xc_AQ8vudBQ9J~p6~^s za9vq`nt0&xCfZ}4BS@@U;=2&V!-PVeTCffh2Zp0RdVZ`t!aQ|EO-3!J9}*g85XG}Z z&3PpH-}(*s%0ql0O_Xfplk#LsWC)SFh~fpJoYb8IJUn#duF)2t-|vWV&gDZ(VpzliEFA|b&z zqI!=6VX=n$i0a=|M%-3V9Ks_EJcbd6yNQqy#9@C35qS(C4sQ}E^}G-G6eTDmYXUw! zvuq+_IuNJ#NKq)#+((=qA_fd0PA6!j5HvA`IK4(JNHU5zou`Y{#p4t?#OWVY6BD-Z z4hir9+g7pW`W*@IEt`oEEi51bex{dNzLkw!Vi5^2#|~mfJ3bQVN6xW{uO-8IJ|Thn z93+Nxl1G9i#|>KWSP34x7$%1VOP-^|lumr)3w_OH_K_rr8d|x+8{`Z1IZBLaX8~D( zOFUzMQ?$`U14$}LP(uSvv~ijNp0k9kz#IpOIW4?HBJwReC<3-HibUX_Y^F#^GKhri zHL58p+CzNRW;sL=lHnE-f;ZVj(Xy8@q=5dzZi<`)CwPq%z-f+ANl8#emPuq4o!~fY zDJd#w<5zs-8(rcK`|&7I>gnOpSH|S?kZv-R0UPMxDr4l4V9E1>pEyh{WygA&$#Rhq zo-oNQbNKkoG0P-R7@?Oe&7>#_48t%C!!QiPFbu;m48t(~1CFu3Ur3bHjQ{`u07*qo IM6N<$g2B#34gdfE literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/ic_replay_white_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_replay_white_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..fcddcf02ddb58ee1680889e7315757d76419b4b2 GIT binary patch literal 675 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/ic_skip_next_black_48dp.png b/app/src/main/res/drawable-xxhdpi/ic_skip_next_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..809b93b28f2f479f9f792d00c18a2d6da291a892 GIT binary patch literal 437 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q1xWh(YZ)^zFxGgwIEGX(zP+qV>tj;2I~|_dq}wxH{XEgQ(QWy9)5c@jz6Qr%rU(UKeO$s&?L4dbM2noaG-5yiw@3 zDcbw(MCs2xl^O5P+tu&f!t%=7d%-?9^+~_t@lw@*_$a2YFv|4&@r5-D{E!sQijUei t%Lyj1YYU4O(2Px6SU#CH?neaI2j;!Kjo+GP2swj-&(qbToEd2eLB&!_2;jg#O9-yaw1fb5 z^t6PaV4@`iHETLbLI5X*T0(GRt|bJtr(Kj#Yud#LwWM97(A%_&7J5m$c%eqxX$a*? zLKO?GOPwk``%LNCms%gARCI`i>rrX^s97luXa!@X5q7II1_cf!)(T9_# zUrBg1A>rbKO6CJB28=!o!eHtE6Hmjlo9cxcES#FlzCG(`3;0;eQ!qQ;>GEg)%Rtkh zAZP2<58tJyRf=SMGylJQHf2|VdmulEZBFA1LhEy=Vow3lDC6IwtUnSeX zLM6haLW4o8folQN3J4{2gXuy-_@e+0A)}7;FrAZZXFAN!$LUSJllScZ?H?b5y)>6j z37WC_=i{=9sLwk~H7I1a9b+I9z(wwyM0R4h4W9nrF_QbD7o zuY$Szf|z+tqie?ei3a0*vaM<8q{jM`H4oj_8U!Sv5MfELEMddHv1B)0M!Xmsb ZvF=KqSHL-&YavjW!PC{xWt~$(69A{7Cn*2` literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxxhdpi/ic_create_black_48dp.png b/app/src/main/res/drawable-xxxhdpi/ic_create_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..a09d3627a8c580713139121e82dc86b26cf3db5d GIT binary patch literal 578 zcmeAS@N?(olHy`uVBq!ia0vp^2SAvE1xWt5x}=AJfr-=8#WAFU@$H@cZ~Y1-+8;jO z-gtvMXFkDe%RLdo_;*p6=`}jy=!zeR(|_&>%2) zz_9N8;-41xpFOXcx4k%jU7M`!jQ5{k_y0C9Z=bs-=Hd0Tm3h3@63H_Tn=x4hOqIBd1RSldz7O#ra;vxexxv@V;azZ!c*w-+XXxtojd= zKce5i_6h%y*p^s6_koS{r}x$eci)^)f1gwCoYMby!ZmZVixuk)4*uOa!G6Yrk1;3Y zeF|oA|7_-b692FXNL&OF2SLO}5U~(MOau{)AfgaNB!Y-Q5a9?S3_--t$(#}LzP~u1 zyjP#Ff4;-NI;Nk8IiK*W0WER(_aM*TS*pMNv{82(KDbo@#G$@&h)dA$GC>V1*K7HA)pELjSa6-mD^^%2jmpgE4=UB)lG zfRc*%BtbflfOYCwcwb~q*WC3$$5njJ(icserD6-NE#^K~RdO)0U(bU30&6rj0X+cK zypAEg`QH5h+5LT)z?czW_?n-~akpjxQ#BI{hk$}Z0|O&EqhT7R7|9}kI1z>e?S%sY XC$})ypEvhZfU`ce(yQH_m`IJ_%&(Cy>|=^Iv|Y=OCGT4%Gazj Sbjw)>;(NOKxvXT$m`Z~Df*BafCZDwc^29w|978G? plNp)=Km51n;8#DVkv_$ki-GCDeZ`wzAGd%sdb;|#taD0e0szsl7@+_F literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxxhdpi/ic_play_arrow_white_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_play_arrow_white_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..be5c062b5feeba5eff766b2fdae6dccb60cb4b0e GIT binary patch literal 343 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD0wg^q?%&M7z$oYG;uuoF`1aODUuH)UwnS^i z62=e)(*V{`2k`*b5=Y_d%(4?EPx_&_WMu+pnDW{BolE^Uxj)}+yLIc`8R zg{90Lt0f&`?lL^eViO2AZ`iSm@yJ!6R31a2DNst&xD8@?udTeN#I8%r_sg2!eom$?*X_%R&Z!t~|1-cBYK4gm#+1_nk5gW={^?qALV VOCpPJ@c;vi!PC{xWt~$(69D@(h;je` literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxxhdpi/ic_play_circle_filled_white_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_play_circle_filled_white_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..9dc082586133b569032724aed8cec9e6386bb2d0 GIT binary patch literal 883 zcmV-(1C0EMP)VtW-#)^unfcGG6`1cl!3TbBCbQR4az#Z&MMXt1K#o;*Iio^@SKfK& zl?D|~*ndW&kOE z<`WV$Xn z5mr^ck_L=(N0{9*CJ7kj4j^R0h!o&UYM7`>p9CPm1*SSD?jP_QCfoK4Sip4iegMNX zG2Js6?|>6*sN@wehb`s308-pwOLda&0Y70=Kez>S^B>;&o)+?bB<&7Rz-x+cC?nsJ z8^9OTd;k9y{0}cfM@>AN^1*G{b0Fa;33rRh|EQkQ)r!=hx z*b)NBPiaFBP!$5mPw8(RzyOE=JFu=%`1 z-tU2@ZA|tH$}b?!Ii~uPPX7Q!A5~0rNsrXA%Moq~yBji+2VciRCj86S(npU+xC(JR znIH~-_j4Z7pKec3$M56p5Of=K273Wwo@avUk$f0eP%@MPdgmDo?-Ed+I+9)UA?#~d zNq*!b5;Z80Fmn+u%@SAmsmdZL(^nC*?DK-#n(Xl{9kyHsO)|{}|DaQab*8jOBM)$R z@ta_UBFB`ur^Op@w793t5t|gq(rf-YuK6bdM1Tko0V06Z^FN`6oF-LpM=}5a002ov JPDHLkV1l`OfX)B_ literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxxhdpi/ic_play_circle_outline_black_48dp.png b/app/src/main/res/drawable-xxxhdpi/ic_play_circle_outline_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..86a407d14be075eeab50cdc21837df350d094efd GIT binary patch literal 2699 zcmV;63Uu{}P)G0000V7Nkl|M=&eqO?tG^#AfVI=7=ewV^_S$PZLK$^j&7HLJDsAlJ2;H2dmjMRoMuwwO zWFo8RU;v50e)iHrE$(AN6{|Uj#NYu|GJzt$QAQK(NX&l1EtE0n8Os_@AV&7^1Y;Pq zT*~Y8BgSU=8U>agN9nRAkLZNO{yt)MzD^4#8I<6NhJkKnk5`Z9QPP^ zkSfgJ*^4B^c4{an&SEuZkOX;#7KTtDOkf|9Ksy*m0kDw&APMzX7LaJlcsay2@d#Ua zilxluGU_;w3d$&^~So0+|)Cls4iJvwY1ozhW{j@&^w23eW}|;X+@F z4x1TLW)8l#a0B}|05=9>G!ncHjF|c!(l|Vk1Aqei>Hg3Od&Ca zETX!J7`OyM_m31BEr@E4i-??Uh-y1&!s12Bae)##5Y@Mcm`h`ymIw#6i*&A4O@t zK@@8Ul~su1a)`13wozpN_vldPe8NB8BiA_Lu7dI@wK4ufk6SRqiAPbt>|!dXUshY1+b5z zW$N+a6@sN0qmnlpBv4N=l#d;z@z~7QPdsJT;L65nAeR8U>`-Bm222YD14<1 zbC*#8?4xL@as>wofiiUxHqEF2_E9uLos117Fm>u?q;rf4U>`*pM6sH{T&)ao1k4Ix zA4Nx%v9BO7cPc|{H7tOA6m3^VUQA$Gl_8!oEP#C!tye~UjKI9A46)R#0QOO&&xT(j zFm1{Za}5h%A4NArzfVMa7x*&60@z2<<;rNC1m=h`M4e#)?4zh&8S8NL>mBDA7QjA= zMk*uyKwwTPLsS?Rz&?s9)emI_rdJuF%&-9VQBKy6CsAtqtl?ixHXgz_);0>ZX(1mdUWnn7raAZljTWiL88a}^t_GnY)}85 z2(gPE9rbMKWiyoZ^)K`>-5fTTKp>_}%X3?Yb zk#aTr361B}V_GYT2&3rHIahs6bseE`Bcga45n&WPI*X9_)`^F!ld(1;!YF!lK2RrN z6@d_M~yAj2o8A?PvfvCE26rG zG-0v9na@~#il}ZTawd^O3}%8!_@rl!iNwI0h-#KgDI})RkEm`W7OFjE;UO{<3d89_ zRQniDOgxF`@-`_7fi!K1F0I5yCC3n5R#6E23DKpS3S#6AM3)?mB%NCkPc9@@QtU=_ zIZXpeW)^1q-dsZ8bsqDwCmOh0j~*i8*dq*l4pna_HL(1CdJ`vjJt zmVYCjY^MYx#__AyUqQlxXtL-3{*#QwkOhcGdzeX5n8gXiqc>s92E?PMnV*oxvk&p; zvzSxLXNX60tR{uar1>-A*-p;J9>#DC@$6PIxXN(a5YKjVK9119X~eUKnSzT=dMskQ}v#cPEOO&vhe#Emm=HVF4h%Y;+!xifJ6!GQ#I7lnv%RU~a6l=CA zM{$&A5TAB2&p0}dB0gPh_^^ByFa!M$noJvMf&*j{}GS<_^w@7F{%TN+c6Tct{ z^&~e@0E}ZVl0e%TOMx(i6`V#AWG@d=LP1eOJCYDTW&#CBibec{IBqu!Nl~z5SVItbQeeCcu7cpqLfX6wG7?7TEC<*~Gqb6nNMMFi%@r)>F`W z@9+|jv6$IZF_c8}-}c}@1^@s6V35D{J-!M600000_y{dR?xd)=vqS&@002ovPDHLk FV1g3X&CUP- literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxxhdpi/ic_play_circle_outline_white_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_play_circle_outline_white_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..516f6432693ac6d89901a2c9a0e76baa01045808 GIT binary patch literal 1379 zcmV-p1)TbcP)y%WEavn41Afhq;gFm$1qB5K1qI<@ z9`ziggS+%G$_J*H;sc}fafeGBq@F5Fm}dy*N@?H%0|e1eJ6lQ2lz<}Y>Eb=ECh257 zMbjHlPLd%s25F{jdIAz0;Vof!O)K$y2Q=}FFb&g~zko&DCJNmw%tyd3CWuOkrf36V z{1IRbowTxm||j7vx+SoqLZiixj;!&0rU8q?9$w0549MdTg*Os_>#YMY}V#CI6|v4+Q4hEy3wKrG9T?qw2~kgkktcr}I*2yX{zY~8sAG?A$p6Y(7& zQ)4ax37%oQjLF0OiEWs;d%$6Ak4WStpqv40`&|Rdd4n_+@YmLF#MKGklSX<)sarr2 zTN@_O!9$j-6WX!ubqOeD26U*$AJR%ifPPA=?RfuyQKV``fPPBzkzV=- zd_amR0`yagBTf1TOd%C30`yZVM*2L{0)9~hO#6f$1ej35PM$eG#2r!n5ceUiau3i? zNAody2Wd;_0S^?v$Zq-vTtYhJ7NDPwxMN7?BY&9FPe;f&Ziw*N)WV7NDDsxcf+L!2-4-rCmm(n~u0; z*fs$|Lo>E>K?9W2@qVCz-58gEGF~I4S%dMvT&E*$Ew)h- zZUKf?Y>z3!-+5!P#$wLHg5ns(+YpLsg)_Kcb^ zUwmDbB>_?#XHJd}%qJMf+f$Z?{pxWoPatc=X})#*YwHZ-WYbSg6fb{Q(aV?gk__-1 zx`Gz&^Cdl0MD_Z8377Emf-a8Iz-s0brJ{_QMkc^{Cx?ikzv9#$hLfc4J*z8UJ-^-lEkLxi*Tjv?SeYUq!6rD(`SL z!4-aB)=c>_Xq-))+*+~&F lGp`V!zd}GEpb$_9_#bazb~6%eta1PV002ovPDHLkV1nTeaFqZ6 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxxhdpi/ic_replay_black_48dp.png b/app/src/main/res/drawable-xxxhdpi/ic_replay_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..97d1d29f239a0a364f26b44c7002c177a370d02a GIT binary patch literal 1736 zcmb7_dpy$%AICSjWRH!_j!Q=yHa#wnh8$6yG&b8jMRP9^CfZygB-dPO?6~cRgEdle zS23!&L?m~yqbcU$n9Gxe3LO+WXFY#Bujk+A`+9vp-}m?P=lAt}eZQ=;4kRe#00aaA zK`CT{leBhz&;7De-5xK`1cBspC`tj9?YPid?53wq${cH zERQjF+C+_Tgx+Taa5B8NliQK8Z^K1Jmp|EK@McUWS=-ZN{YuDtn#WlrK;*zG5_0XR zrf39qVC`9iwaL!(4z@0?K5uJlS0Sim^vRZY#zhamWTW`uozLqhO3V?nZ0PeDNU6Z_ z=pReL+a(r5KSr|gf!!Y)E-|mC7)Dy`!gjJ>oA2}KF7+TDqBn^hTSsHYnAVc@-L6C0 zl97nQGx)|3K{t$>;?KQ5U8yaZ!3H_AgWWAJOSSF<&6yop@9ZmOns5S1sJ~sZvItTZ z^cX3bzA|eZI7vII*YwX^u$8x8zFzr4z-0HKN#Yj>YQb0y$Zd7NECoZ%HCr|AdyF9` z+Cc4>H#bmn*np-@ue<8gCuaiov0P^o;q;z78iX}ow1?Y|dz2LT1;wJGJ%>?(<`QML z#zET9B*q@sphnB8zGWP!ESVnCLhx_{jf*R$<6fsR@Z~;m+}So}4x9W#3{oMuF2#@u zkP}`#wDjRd$pTfgS1f&}#$AZJ+UMW#Eq#Bq7&pnfdo&yK^wK%wjs3AX;`9(vG&(3< zq%<<|^jDnD(!nmxspcqI>d<^QIZsX5hga`s}n6L6@Qw@>RT zQl-K@yg%DS^HhFE1tM@or8Gfm^+_$>0lWN}9-ZU;s~{rwF|iiRmASwnUvuq;ZLB<< za?SmD#G-D-D*;+H3@VFMfN|1PDyqW!T^fp4_(_^18}18(4KsuY;lPPgsc5(KmvLhY zj)e^_0D^29GE{wWWH#T5b@LjmYM6?B{5Q)>Fr9l|y#{%ce%&qnxooeF0 z3f2`7BK?lrr)=8DhM()|^C0mqH68po%B@g>1Ro!%L5=;zrJ9sK^MdqoJ0kAugIMw5 z)GLke+kbPXWF2KUdcuz}_1o@oD<)SvYxkg`6RU^E!P@USSPyBu9|cmpdFG5+u4{x_X!* z)o_dqIit%M&AoQRE`EHT+u z0+R4ebD?=_X%t}Ka;DwH zz^ld#Wk4fJT=N#t*z1gtZC3lFo=ET$rt%FnZ2f*B!V1r~+G{b6TB^en`6MMY z3x>7jux_tcIwRURL_as5qP^e>wUJ&_yx3YOw%!ao$npXdTL&7?oy!itql;*Zd2gVa zb%A8hV1ZF(DNZg|i=sVj>=}3D2m4V0K(1#%abZhZlD^D&t1ek1@_^Ug)Za6se>|q0ULCYOCS#}i`522(gWor z8r=m#?%u)y$W6KErZfJMs`T<|-30#$H`HPfRxhEaJJ^!3i{Kk@45V9PdiBYt$ zSDl*q$iX9)et+x>O2RAv+zF+UUFD7asz`X>51R8Pf2PsrTsw$bPdW__nEqmqdgrAE z7zYFRW7RJSZm(#c!=aP@?lD={Y7KxdP{-GO$RToOK{FZW7_Q*iyHb%lUo6&AZytuK zovS#N?3y?yU)a)VH4;_~`>^nQwTmbHL7-0U8_T{cHQ(_+VFAuDthYXZT9^6WQiu+O JM>akwe*w;XHQ@jN literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxxhdpi/ic_replay_white_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_replay_white_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..1573fb111b535e5e0df9371ff7f804ce2c40a0fa GIT binary patch literal 908 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 XQa`UV-tzO#Mv#=JtDnm{r-UW|cJtcB literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxxhdpi/ic_skip_next_white_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_skip_next_white_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..19c4929cca13b462dee093c2156ca904e52c4fad GIT binary patch literal 357 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD0wg^q?%&M7z^LQt;uuoF`1Y2e9%~|l>%&f$ zg_kt9Uio5{z#evh>jtB=g!P7|jSU+azGiEd&dOAqxOz`#SLZX8=YO~-=s(>1`@F;% z7^n-LS2W|H{Q2{3`{(M~f3OwLariW~{mo=X&rh?0%@iVwoLRR#m)Xd8(p_(5!?zjC zW(qf-&f)dAb|Q2qMDd?P2140PE}_?HYd-Es6#;R0aPwX z)}VoZ#>xFo*?A}HkL;c^(caDdlelD!m(LT!?N4UaF0@pP*L;66{M7c`=~eQpe$#u6{1-oD!MWgRJ*37*6h35c^4-ARzU|x|q)oQAfQvV|n^}wB+M3~L&=?GA9=cqVv&%iW`HEwy9<;72claaCf7n>KDW7<$32ae>N}6KfLv)XJmOs-IeQS z@9bub^-glQI!Wrn)+MYZx}A)n-dPUUCrK>$fAad)C2TM1OUi+QU^SPr8vZbGC@}nF q6>wnq#I4Z4a75gJfsqBsyTA2URmg#B2af_nlfl!~&t;ucLK6TQaGnhS literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/circular.xml b/app/src/main/res/drawable/circular.xml new file mode 100644 index 0000000..d448196 --- /dev/null +++ b/app/src/main/res/drawable/circular.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/about.xml b/app/src/main/res/layout/about.xml index a474d74..9c52abd 100644 --- a/app/src/main/res/layout/about.xml +++ b/app/src/main/res/layout/about.xml @@ -11,7 +11,7 @@ android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:weightSum="1" - tools:context=".AboutActivity"> + tools:context="org.secuso.privacyfriendlybreakreminder.activities.AboutActivity"> + tools:context="org.secuso.privacyfriendlybreakreminder.activities.BreakActivity"> + tools:context=".activities.BreakDeciderActivity">