From 77554f6c45db28ad29fca2b209e9e1a270bfec3c Mon Sep 17 00:00:00 2001 From: Christopher Beckmann Date: Fri, 3 Nov 2017 03:39:39 +0100 Subject: [PATCH] Cleanup. Something went wrong with the last commit. --- app/build.gradle | 12 +- app/src/main/AndroidManifest.xml | 10 + .../activities/ExerciseActivity.java | 32 +-- .../helper/ExpandableListAdapter.java | 2 +- .../activities/tutorial/PrefManager.java | 6 + .../activities/tutorial/TutorialActivity.java | 16 +- .../receivers/OnBootCompletedReceiver.java | 22 ++ .../receivers/TimerSchedulerReceiver.java | 158 +++++++++++++++ .../service/TimerService.java | 18 +- app/src/main/res/drawable/circle_black.xml | 7 - app/src/main/res/drawable/circle_white.xml | 4 +- app/src/main/res/drawable/drawer_header.png | Bin 2213 -> 0 bytes .../main/res/drawable/help_next_button.png | Bin 3480 -> 0 bytes .../main/res/drawable/ic_info_black_24dp.xml | 9 + app/src/main/res/drawable/tutorial_clock.png | Bin 9176 -> 0 bytes .../res/drawable/tutorial_play_button.png | Bin 5615 -> 0 bytes .../main/res/drawable/tutorial_spinner.png | Bin 14392 -> 0 bytes app/src/main/res/drawable/widget_preview.png | Bin 22967 -> 0 bytes app/src/main/res/layout/activity_tutorial.xml | 2 + app/src/main/res/layout/tutorial_slide1.xml | 2 + app/src/main/res/layout/tutorial_slide2.xml | 2 + app/src/main/res/layout/tutorial_slide3.xml | 2 + app/src/main/res/layout/tutorial_slide4.xml | 45 +++++ app/src/main/res/layout/tutorial_slide5.xml | 45 +++++ app/src/main/res/layout/tutorial_slide6.xml | 45 +++++ .../main/res/mipmap-hdpi/ic_notification.png | Bin 0 -> 179 bytes .../main/res/mipmap-mdpi/ic_notification.png | Bin 0 -> 160 bytes .../main/res/mipmap-xhdpi/ic_notification.png | Bin 0 -> 198 bytes .../res/mipmap-xxhdpi/ic_notification.png | Bin 0 -> 308 bytes app/src/main/res/mipmap-xxhdpi/ic_splash.png | Bin 0 -> 2311 bytes .../res/mipmap-xxxhdpi/ic_notification.png | Bin 0 -> 427 bytes app/src/main/res/values-de/strings.xml | 67 ++++--- app/src/main/res/values-fr/strings.xml | 124 ------------ app/src/main/res/values-ru/strings.xml | 122 ----------- app/src/main/res/values-v14/dimens.xml | 1 - app/src/main/res/values-v21/styles.xml | 5 - app/src/main/res/values/dimens.xml | 1 - app/src/main/res/values/drawables.xml | 4 +- app/src/main/res/values/strings.xml | 189 ++++++------------ app/src/main/res/values/styles.xml | 5 - 40 files changed, 496 insertions(+), 461 deletions(-) create mode 100644 app/src/main/java/org/secuso/privacyfriendlybreakreminder/receivers/OnBootCompletedReceiver.java create mode 100644 app/src/main/java/org/secuso/privacyfriendlybreakreminder/receivers/TimerSchedulerReceiver.java delete mode 100644 app/src/main/res/drawable/circle_black.xml delete mode 100644 app/src/main/res/drawable/drawer_header.png delete mode 100644 app/src/main/res/drawable/help_next_button.png create mode 100644 app/src/main/res/drawable/ic_info_black_24dp.xml delete mode 100644 app/src/main/res/drawable/tutorial_clock.png delete mode 100644 app/src/main/res/drawable/tutorial_play_button.png delete mode 100644 app/src/main/res/drawable/tutorial_spinner.png delete mode 100644 app/src/main/res/drawable/widget_preview.png create mode 100644 app/src/main/res/layout/tutorial_slide4.xml create mode 100644 app/src/main/res/layout/tutorial_slide5.xml create mode 100644 app/src/main/res/layout/tutorial_slide6.xml create mode 100644 app/src/main/res/mipmap-hdpi/ic_notification.png create mode 100644 app/src/main/res/mipmap-mdpi/ic_notification.png create mode 100644 app/src/main/res/mipmap-xhdpi/ic_notification.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_notification.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_splash.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_notification.png delete mode 100644 app/src/main/res/values-fr/strings.xml delete mode 100644 app/src/main/res/values-ru/strings.xml diff --git a/app/build.gradle b/app/build.gradle index 505da39..1bbb80b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,13 +1,13 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 26 + compileSdkVersion 25 buildToolsVersion '26.0.2' defaultConfig { applicationId "org.secuso.privacyfriendlybreakreminder" minSdkVersion 21 - targetSdkVersion 26 + targetSdkVersion 25 versionCode 3 versionName "2.1" vectorDrawables.useSupportLibrary = true @@ -32,12 +32,12 @@ repositories { dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') - compile 'com.android.support:appcompat-v7:26.1.0' - compile 'com.android.support:design:26.1.0' + compile 'com.android.support:appcompat-v7:25.4.0' + compile 'com.android.support:design:25.4.0' compile 'com.github.bumptech.glide:glide:3.7.0' - compile 'com.android.support:support-v4:26.1.0' + compile 'com.android.support:support-v4:25.4.0' compile 'com.android.support:support-annotations:27.0.0' - compile 'com.android.support:cardview-v7:26.1.0' + compile 'com.android.support:cardview-v7:25.4.0' compile 'com.android.support.constraint:constraint-layout:1.0.2' compile 'com.nex3z:flow-layout:1.0.0' compile 'com.readystatesoftware.sqliteasset:sqliteassethelper:2.0.1' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7f788ff..39c7de0 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -3,6 +3,8 @@ package="org.secuso.privacyfriendlybreakreminder"> + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/ExerciseActivity.java b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/ExerciseActivity.java index b5696b6..9245622 100644 --- a/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/ExerciseActivity.java +++ b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/ExerciseActivity.java @@ -139,23 +139,23 @@ public class ExerciseActivity extends AppCompatActivity implements android.suppo private void initResources() { dbHelper = new SQLiteHelper(this); - playButton = findViewById(R.id.button_playPause); - progressBar = findViewById(R.id.progressBar); - timerText = findViewById(R.id.timerText); - executionText = findViewById(R.id.execution); - descriptionText = findViewById(R.id.description); - exerciseImage = findViewById(R.id.exercise_image); - sectionText = findViewById(R.id.section); - repeatButton = findViewById(R.id.button_repeat); - exerciseContent = findViewById(R.id.exercise_layout); - continuousButton = findViewById(R.id.button_continuous); - prevButton = findViewById(R.id.button_prev); - nextButton = findViewById(R.id.button_next); - exerciseInfoButton = findViewById(R.id.exercise_info_button); + playButton = (ImageButton) findViewById(R.id.button_playPause); + progressBar = (ProgressBar) findViewById(R.id.progressBar); + timerText = (TextView) findViewById(R.id.timerText); + executionText = (TextView) findViewById(R.id.execution); + descriptionText = (TextView) findViewById(R.id.description); + exerciseImage = (ImageView) findViewById(R.id.exercise_image); + sectionText = (TextView) findViewById(R.id.section); + repeatButton = (ImageButton) findViewById(R.id.button_repeat); + exerciseContent = (ConstraintLayout) findViewById(R.id.exercise_layout); + continuousButton = (ImageButton) findViewById(R.id.button_continuous); + prevButton = (ImageButton) findViewById(R.id.button_prev); + nextButton = (ImageButton) findViewById(R.id.button_next); + exerciseInfoButton = (ImageButton) findViewById(R.id.exercise_info_button); - progressBarBig = findViewById(R.id.progressBarBig); - breakTimerTextBig = findViewById(R.id.breakTimerTextBig); - bigProgressBarLayout = findViewById(R.id.bigProgressBarLayout); + progressBarBig = (ProgressBar) findViewById(R.id.progressBarBig); + breakTimerTextBig = (TextView) findViewById(R.id.breakTimerTextBig); + bigProgressBarLayout = (ConstraintLayout) findViewById(R.id.bigProgressBarLayout); setRepeatButtonStatus(repeatStatus); setContinuousButtonStatus(continuousStatus); diff --git a/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/helper/ExpandableListAdapter.java b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/helper/ExpandableListAdapter.java index 36e16f6..03528af 100644 --- a/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/helper/ExpandableListAdapter.java +++ b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/helper/ExpandableListAdapter.java @@ -51,7 +51,7 @@ public class ExpandableListAdapter extends BaseExpandableListAdapter { LayoutInflater layoutInflater = (LayoutInflater) this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = layoutInflater.inflate(R.layout.help_list_item, parent, false); } - TextView expandedListTextView = convertView.findViewById(R.id.expandedListItem); + TextView expandedListTextView = (TextView) convertView.findViewById(R.id.expandedListItem); expandedListTextView.setText(expandedListText); return convertView; } diff --git a/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/tutorial/PrefManager.java b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/tutorial/PrefManager.java index 2fb07e9..9439152 100644 --- a/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/tutorial/PrefManager.java +++ b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/tutorial/PrefManager.java @@ -25,7 +25,10 @@ public class PrefManager { public static final String REPEAT_EXERCISES = "REPEAT_EXERCISES"; public static final String EXERCISE_DURATION = "pref_exercise_time"; public static final String KEEP_SCREEN_ON_DURING_EXERCISE = "pref_keep_screen_on_during_exercise"; + public static final String PREF_SCHEDULE_EXERCISE_ENABLED = "pref_schedule_exercise"; + public static final String PREF_SCHEDULE_EXERCISE_DAYS_ENABLED = "pref_schedule_exercise_daystrigger"; public static final String PREF_SCHEDULE_EXERCISE_DAYS = "pref_schedule_exercise_days"; + public static final String PREF_SCHEDULE_EXERCISE_TIME = "pref_schedule_exercise_time"; public static final String PREF_EXERCISE_CONTINUOUS = "pref_exercise_continuous"; public static final String WORK_TIME = "WORK_TIME"; @@ -58,6 +61,9 @@ public class PrefManager { .putInt(PREF_PICKER_HOURS, 1) .putLong(WORK_TIME, 1000L * 60L * 60L) // 1 hour .putString(EXERCISE_DURATION, "30") + .putBoolean(PREF_SCHEDULE_EXERCISE_DAYS_ENABLED, false) + .putBoolean(PREF_SCHEDULE_EXERCISE_ENABLED, false) + .putLong(PREF_SCHEDULE_EXERCISE_TIME, 32400000L) .putBoolean(KEEP_SCREEN_ON_DURING_EXERCISE, true) .putBoolean(PREF_EXERCISE_CONTINUOUS, false) .putStringSet(PREF_SCHEDULE_EXERCISE_DAYS, new HashSet(Arrays.asList("Mo","Di","Mi","Do","Fr","Sa","So"))) diff --git a/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/tutorial/TutorialActivity.java b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/tutorial/TutorialActivity.java index 0c5a891..ebcd3e6 100644 --- a/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/tutorial/TutorialActivity.java +++ b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/tutorial/TutorialActivity.java @@ -20,6 +20,7 @@ import android.widget.LinearLayout; import android.widget.TextView; import org.secuso.privacyfriendlybreakreminder.R; +import org.secuso.privacyfriendlybreakreminder.activities.ManageExerciseSetsActivity; import org.secuso.privacyfriendlybreakreminder.activities.TimerActivity; /** @@ -35,6 +36,9 @@ public class TutorialActivity extends AppCompatActivity { R.layout.tutorial_slide1, R.layout.tutorial_slide2, R.layout.tutorial_slide3, + R.layout.tutorial_slide4, + R.layout.tutorial_slide5, + R.layout.tutorial_slide6 }; private ViewPager viewPager; @@ -62,10 +66,10 @@ public class TutorialActivity extends AppCompatActivity { setContentView(R.layout.activity_tutorial); - viewPager = (ViewPager) findViewById(R.id.view_pager); - dotsLayout = (LinearLayout) findViewById(R.id.layoutDots); - btnSkip = (Button) findViewById(R.id.btn_skip); - btnNext = (Button) findViewById(R.id.btn_next); + viewPager = (ViewPager) findViewById(R.id.view_pager); + dotsLayout = (LinearLayout) findViewById(R.id.layoutDots); + btnSkip = (Button) findViewById(R.id.btn_skip); + btnNext = (Button) findViewById(R.id.btn_next); // adding bottom dots addBottomDots(0); @@ -130,8 +134,8 @@ public class TutorialActivity extends AppCompatActivity { private void launchHomeScreen() { if(prefManager.isFirstTimeLaunch()) { - Intent intent = new Intent(TutorialActivity.this, TimerActivity.class); - intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + Intent intent = new Intent(TutorialActivity.this, ManageExerciseSetsActivity.class); + //intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); prefManager.setFirstTimeLaunch(false); startActivity(intent); } diff --git a/app/src/main/java/org/secuso/privacyfriendlybreakreminder/receivers/OnBootCompletedReceiver.java b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/receivers/OnBootCompletedReceiver.java new file mode 100644 index 0000000..213eb7d --- /dev/null +++ b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/receivers/OnBootCompletedReceiver.java @@ -0,0 +1,22 @@ +package org.secuso.privacyfriendlybreakreminder.receivers; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; + +/** + * @author Christopher Beckmann + * @version 2.0 + * @since 03.11.2017 + * created 03.11.2017 + */ +public class OnBootCompletedReceiver extends BroadcastReceiver { + @Override + public void onReceive(Context context, Intent intent) { + + if(!"android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) + return; + + TimerSchedulerReceiver.scheduleNextAlarm(context); + } +} diff --git a/app/src/main/java/org/secuso/privacyfriendlybreakreminder/receivers/TimerSchedulerReceiver.java b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/receivers/TimerSchedulerReceiver.java new file mode 100644 index 0000000..b5166e4 --- /dev/null +++ b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/receivers/TimerSchedulerReceiver.java @@ -0,0 +1,158 @@ +package org.secuso.privacyfriendlybreakreminder.receivers; + +import android.app.AlarmManager; +import android.app.PendingIntent; +import android.content.ComponentName; +import android.content.Context; +import android.content.Intent; +import android.content.ServiceConnection; +import android.content.SharedPreferences; +import android.os.Build; +import android.os.IBinder; +import android.preference.PreferenceManager; +import android.support.annotation.NonNull; +import android.support.v4.content.WakefulBroadcastReceiver; + +import org.secuso.privacyfriendlybreakreminder.service.TimerService; + +import java.util.Arrays; +import java.util.Calendar; +import java.util.HashSet; +import java.util.Set; + +import static org.secuso.privacyfriendlybreakreminder.activities.tutorial.PrefManager.PREF_SCHEDULE_EXERCISE_DAYS; +import static org.secuso.privacyfriendlybreakreminder.activities.tutorial.PrefManager.PREF_SCHEDULE_EXERCISE_DAYS_ENABLED; +import static org.secuso.privacyfriendlybreakreminder.activities.tutorial.PrefManager.PREF_SCHEDULE_EXERCISE_ENABLED; +import static org.secuso.privacyfriendlybreakreminder.activities.tutorial.PrefManager.PREF_SCHEDULE_EXERCISE_TIME; +import static org.secuso.privacyfriendlybreakreminder.activities.tutorial.PrefManager.WORK_TIME; + +/** + * @author Christopher Beckmann + * @version 2.0 + * @since 03.11.2017 + * created 03.11.2017 + */ +public class TimerSchedulerReceiver extends WakefulBroadcastReceiver { + + private SharedPreferences mPref; + private TimerService mTimerService; + private ServiceConnection mServiceConnection = new ServiceConnection() { + @Override + public void onServiceConnected(ComponentName name, IBinder service) { + TimerService.TimerServiceBinder binder = (TimerService.TimerServiceBinder) service; + mTimerService = binder.getService(); + TimerSchedulerReceiver.this.startTimer(); + TimerSchedulerReceiver.scheduleNextAlarm(mTimerService.getApplicationContext()); + } + @Override + public void onServiceDisconnected(ComponentName name) { + } + }; + + @Override + public void onReceive(Context context, Intent intent) { + // TODO: automatically set continuous mode? + Intent timerIntent = new Intent(context, TimerService.class); + context.getApplicationContext().startService(timerIntent); + context.getApplicationContext().bindService(timerIntent, mServiceConnection, Context.BIND_AUTO_CREATE); + + mPref = PreferenceManager.getDefaultSharedPreferences(context); + } + + private void startTimer() { + mTimerService.startTimer(mPref.getLong(WORK_TIME, 1000L * 60L * 60L)); + } + + public static void scheduleNextAlarm(@NonNull Context context) { + SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(context); + + if(!pref.getBoolean(PREF_SCHEDULE_EXERCISE_ENABLED, false)) { + deleteScheduledAlarm(context); + return; + } + + long timestamp = pref.getLong(PREF_SCHEDULE_EXERCISE_TIME, 32400000); + + + AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); + + Intent automaticTimerIntent = new Intent(context, TimerSchedulerReceiver.class); + PendingIntent automaticTimerPending = PendingIntent.getBroadcast(context, 0, automaticTimerIntent, PendingIntent.FLAG_UPDATE_CURRENT); + + Calendar calendar = Calendar.getInstance(); + calendar.setTimeInMillis(timestamp); + calendar.set(Calendar.YEAR, Calendar.getInstance().get(Calendar.YEAR)); + calendar.set(Calendar.MONTH, Calendar.getInstance().get(Calendar.MONTH)); + calendar.set(Calendar.DAY_OF_MONTH, Calendar.getInstance().get(Calendar.DAY_OF_MONTH)); + calendar.set(Calendar.SECOND, 0); + calendar.set(Calendar.MILLISECOND, 0); + if(calendar.before(Calendar.getInstance())){ + calendar.add(Calendar.DAY_OF_MONTH, 1); + } + + if(pref.getBoolean(PREF_SCHEDULE_EXERCISE_DAYS_ENABLED, false)) { + + Set daySet = pref.getStringSet(PREF_SCHEDULE_EXERCISE_DAYS, new HashSet(Arrays.asList("Mo","Di","Mi","Do","Fr","Sa","So"))); + boolean done = false; + + for(int i = 0; i < 7; i++) { + String currentDay; + // TODO skip days that are not selected + switch (calendar.get(Calendar.DAY_OF_WEEK)) { + case Calendar.MONDAY: + currentDay = "Mo"; + break; + case Calendar.TUESDAY: + currentDay = "Di"; + break; + case Calendar.WEDNESDAY: + currentDay = "Mi"; + break; + case Calendar.THURSDAY: + currentDay = "Do"; + break; + case Calendar.FRIDAY: + currentDay = "Fr"; + break; + case Calendar.SATURDAY: + currentDay = "Sa"; + break; + case Calendar.SUNDAY: + currentDay = "So"; + break; + default: + currentDay = "None"; + } + + for(String day : daySet) { + if(currentDay.equals(day)) { + done = true; + break; + } + } + + if(done) { + break; + } + + calendar.add(Calendar.DAY_OF_MONTH, 1); + } + } + + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), automaticTimerPending); + } else { + alarmManager.setExact(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), automaticTimerPending); + } + } + + private static void deleteScheduledAlarm(Context context) { + AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); + + Intent automaticTimerIntent = new Intent(context, TimerSchedulerReceiver.class); + PendingIntent automaticTimerPending = PendingIntent.getBroadcast(context, 0, automaticTimerIntent, PendingIntent.FLAG_UPDATE_CURRENT); + + alarmManager.cancel(automaticTimerPending); + } +} diff --git a/app/src/main/java/org/secuso/privacyfriendlybreakreminder/service/TimerService.java b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/service/TimerService.java index 7db5ecd..67aa302 100644 --- a/app/src/main/java/org/secuso/privacyfriendlybreakreminder/service/TimerService.java +++ b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/service/TimerService.java @@ -12,7 +12,10 @@ import android.content.SharedPreferences; import android.os.Binder; import android.os.Bundle; import android.os.CountDownTimer; +import android.os.Handler; +import android.os.HandlerThread; import android.os.IBinder; +import android.os.Looper; import android.preference.PreferenceManager; import android.provider.Settings; import android.support.v4.app.NotificationCompat; @@ -115,7 +118,7 @@ public class TimerService extends Service { .setWhen(0) .setOngoing(false) .setAutoCancel(true) - .setSmallIcon(R.mipmap.ic_launcher) + .setSmallIcon(R.mipmap.ic_notification) .setDefaults(Notification.DEFAULT_LIGHTS) .setVibrate(new long[] { 0, 1000, 1000, 1000, 1000, 1000, 1000 }) .setSound(Settings.System.DEFAULT_NOTIFICATION_URI) @@ -153,7 +156,7 @@ public class TimerService extends Service { unregisterReceiver(notificationPreferenceChangedReceiver); } - public synchronized void startTimer(long duration) { + public synchronized void startTimer(final long duration) { if(!isRunning) { initialDuration = duration; @@ -170,10 +173,11 @@ public class TimerService extends Service { sendBroadcast(broadcast); } } + } public synchronized void pauseTimer() { - if(isRunning) { + if (isRunning) { mTimer.cancel(); isRunning = false; @@ -192,7 +196,7 @@ public class TimerService extends Service { } public synchronized void resetTimer() { - if(isRunning) { + if (isRunning) { mTimer.cancel(); mTimer = createTimer(initialDuration); mTimer.start(); @@ -203,7 +207,7 @@ public class TimerService extends Service { } public synchronized void stopAndResetTimer() { - if(isRunning) mTimer.cancel(); + if (isRunning) mTimer.cancel(); isRunning = false; remainingDuration = initialDuration; @@ -263,7 +267,7 @@ public class TimerService extends Service { if (intent != null) { - String action = intent.getAction(); + final String action = intent.getAction(); if (ACTION_START_TIMER.equals(action)) handleRestartTimer(); else if (ACTION_PAUSE_TIMER.equals(action)) pauseTimer(); @@ -314,7 +318,7 @@ public class TimerService extends Service { builder.setPriority(NotificationCompat.PRIORITY_DEFAULT); builder.setWhen(0); builder.setProgress((int) initialDuration, (int) (initialDuration - remainingDuration), false); - builder.setSmallIcon(R.mipmap.ic_launcher); + builder.setSmallIcon(R.mipmap.ic_notification); builder.setOngoing(isRunning() || isPaused()); Intent intent = new Intent(this, TimerActivity.class); diff --git a/app/src/main/res/drawable/circle_black.xml b/app/src/main/res/drawable/circle_black.xml deleted file mode 100644 index 346fd35..0000000 --- a/app/src/main/res/drawable/circle_black.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/circle_white.xml b/app/src/main/res/drawable/circle_white.xml index 1e1234c..4fa0103 100644 --- a/app/src/main/res/drawable/circle_white.xml +++ b/app/src/main/res/drawable/circle_white.xml @@ -1,6 +1,8 @@ + xmlns:tools="http://schemas.android.com/tools" + android:shape="oval" + tools:keep="@drawable/circle_white"> diff --git a/app/src/main/res/drawable/drawer_header.png b/app/src/main/res/drawable/drawer_header.png deleted file mode 100644 index 1780dd42334dd3d8169552f3ba5b30f7b5c44d43..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2213 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 bp1y^V%bHd8&P4Hme^Y=d*21XV(1rRxg9}XO diff --git a/app/src/main/res/drawable/ic_info_black_24dp.xml b/app/src/main/res/drawable/ic_info_black_24dp.xml new file mode 100644 index 0000000..34b8202 --- /dev/null +++ b/app/src/main/res/drawable/ic_info_black_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/tutorial_clock.png b/app/src/main/res/drawable/tutorial_clock.png deleted file mode 100644 index d2bc80b55d4d9c42304dc855cda406c5cf4cc838..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9176 zcmX|{1yodDw8mlR7#TXGOX-x5keH#RQA!v?8Tv)%)iIc~Vk*SGPEEw5rmO57clT z+|B>~A@C6!{AX|RWc%xAzP#_wY*U-t*EEiMADu@FcfY;yoG8;?eCPk_VS`PjKHKH~ z?(Sko=%0*?jOkYoIplo^cN-qPPgtI?Oy-*x!=!WEQw}}d*_msRkdP=TDdEvfJ3cyU zZfTjEoD@2QK6>;>Na$6K*()_6D2sHIp=F!v^y?>9m!GfAV}72Vp3cn7+>3y?KY3#H z#zQIW?7(HRqRzJS>UeW`|o~juyuFe`IJc2 z8FsF=n|x!3>nSXsQ;!W!u!#$XvdY19jZI9dGo7%RSk*px@9%J5Uthx885AE3jE!j& z5jHmLZHBjyTaBI%>#g&|?P98{1+XqsQZ2>B#l7hqCKUJ8v*Eu_cdeMtmpVduP$~_( zGj-o8?!ScP8@KTvY)!wavwCAc+H?)eC@SKxca57ht>Z!^p!OEuzw!O0PeMY%6dW0O z4Wg!^tSs!`MNZ8f=#G4x&%ugn&xrVQtutx@E*h+Bo8}@SJ2SH>$G5M-}LlDX;P;jKYl!U@?`aC2DCsi*qE)`DknCG zxi=>_cVlA%%@aSZDs14tm3%juUsm=Hh>E49B{Z{DD=Io0jY`;ReF4JNW3IXU(fa@m z4UI;n4e=u7aO~YX>bvk*!||_Q84Iso*hVC!q)h5;cjKr1!9^3uh2aHWuJzN_7~Y!F zlBQx;RN;Q~F)TPV^shyW(`s0kpUEQ$f+qdPkIPzGS_%plr>adnmp*9IZ$-aDukUwW zYn&Nl;Yl-fR@4;tW>vr)tc$!Eahkp|?ZEKLr2g7Z$Fye(NJDDk}7_eyG2{ zggn~w&uiGm%1|x_Gm8 z;>68TkduSdjo+Zq-NR#VcQ^dsg}KE?mYz*z=2%?bF?Ft64xB3K9fVueI%5 z>gyw&D-9Se648Tw4+;vxt-;}Ny7jSOJ2bI}oSfY3*qGN?v8vkaE6a(A34Xm?!{*1@ zAnMd8U=-HU=jZ2>l?Ix)WpL$%1#3&eV&gCA9O+VuK5Kp5Z+k5ovHb%BEK*LCAB?rM zv?PN0tF-z?M%ZONSVw%3NY1Ouav}}i5AX?wJ)vr{b_U16 z=TCt2YiJOQ7!%b{Lt~a38^s?zS}fOnF~N<0f&>{F5)vZiJYs5R@E{eH#wu_8&d((> zGBR$jRZB(b4CJntSL4Tz5$^7_HGZX#aUi+f^YinIi;oPShCr50OEsXHnwn-x2vvt<(h4?U+mtlkwckkW>(g%yNz2kg+^$&!n z@2?TFi1k!s>|3xe6MP&T9IFZ+3?^W60@45QFZeK)gsOYtev$GcUt3XA%A~Y38F6v*w?5^Pt8p>^?VD!W?&hY& z!qQgp=7;dV40+E|Qc@&8g(stlD~PH)-@Xl2Q-g@mjIqL!EG;cTycY~y8o{NjtE&S7 z0&Hw-x~-X^MB(i6`?it)5RQch4A9F=AeC7W{y{X4R3tnW+M_8eG}GCW{X>_q^1(;E z@VgFQCf7@_;~Rglb0%w3BHauIcVB^ zx;RSaS5jL1^5x6&a_8*F3NtHJZb}lL%?Uoi!RQZIW*PU~oSYn|@FTbiyT{T87Y`41 z7>x5eF@23@7@Vu_v)dA=F;1{RYTJ)tho`3jK0aC3v^bw6et!NhINS=5in8XY0Podq zqM$0EZ6+2B&4^f7wcFSFzG2wR7&m@hsrQdB_4V~WBNiDVnATS5+fJZtcgN|AIPERG z6_@e(cxv<-#m&u~;qvO#MF`*j2T+-Eog8vX%4faOeX#rb`e}7_bzl>6h+65aQJR{) z&qb^TeqRVMW3~156Q)7+WdI+&fZmkJ&CTum4Yd^=U;FhdF(HBF=1rb=6$r>Y1vf0H zs;^H=P&ZLmIyg8OD5I#=>)K1^4^bLFwzpFTMSPnHU!aQVffG46@B+(K=qu5AcH8^s z0KK4Yw5~L8GUi0fR>cs^;Ng#6C=~ia%vRq~z$?k=>|ixV=ph5Uv4C<}MFj?fxi~-f zzO`hG$j-?rfAvZMiNh15pd%=z2d+mWmF0gw0=d9;#%~7+_I4P2F4Fe`Y^}DVOj)vq zU$${jw3hb|AY34U5^u0!C2#Iv`$tDPltQHGKw(t3@5WEFLg{|kwJe?MP%Lu?9N9;MS-gI6$qlo;yV$`RwgN@p)aX7 zGvfp=E5xnix4$;@e)&R7LIVEx`RQqTA>cpzSGr=q)>#FDgO&AMs`Aos1lI(IC*REy zFs|Y;+oE4^*T_QNYY6PXlj)kA*w{}E#!*q66(C#$d=F-K2}o`nZ;Y3M5)E>o)GU&O z1shO9{44O+NI~bnQ>&A$X%`2YsalH`hu*a7t3REavOd|lxo93Wj#7H^cyJD`443FE&{5$OBFnvIG8xP+f*yqi&$I&<9TEs?`q$H5#z(4Q({D}~< zFO7o7+9-Q0$c2W6&Qsnpd-b3|DfD&zD4wIUvzTQoIzoU%J@JNFf7n7*)$O=DtPO1T zj8Nf1MV?qm`Owqa#6%Ld>@b`fr{j-l7f>{>P8uTR6%-}~%M4*y)!ErLw}Fp{4Mz~MvJ)I1($fj(w;ae2!$w4!r9&D+Lax$4W2$+c& zMb`n^or%b+-yD{iU@@RO*j(=Hl=ki8W|8*y@lkuH>KNY+JT7p;n{rHk8)Nugy~~l; zse~lS2_$f5;J3?MiC0%w4cY7TAv6W=Gw5c7njbz*!ew1>ksk+d4x|1l@`4@6 zJ6a=4BYLTF`L*5Kp~fj{AvM%5?Pd>gUtw5yc=@6pk{XIdDk*hvsV5j(a6K2Zy}_tU za>(|0Ue2jW>I4{}$BR=j`1N-+yVJ8{*0M2Il@kMyQ>XoBa*58^|GaE-#J`Ivbaa*zeFt?{Rjd9W zH%k?h(E+dw)k7Stlx||y&5z02&X{{H(GFGPfnML`Y^LM(gamZP-gw&jsotP17etb} zWK(9`YW_ki&VF@u1+KOhd)Qbkr)xTl=k)R<{D<5$$cr)!N-y?j%zrTQz7+)p1+9K@ z2lFoSvDP+1fLRPEi3rSH_*(Ag^H^ItMGWjH(kRl@P_3$7 zaMvH}O3b?7)1$!`_+@U6IhvE+91o))Nrrci#J zx?5H^;gcL=*56bl!Y7DM#KFO#Iv%@{!55pva>rFGA|D!&UBg`b&}-p#lpOEFG(N4a zs?V}ZAH#(W7FtVlxM)s|3Wnu&&^t^^s7Pu}8zZ5)&o)oFJ!1>?eiqqL4<|rxW+)|{ z;GIWDJ9c=&SXuQ%W~1a_nT96BSw=+L2ctlOjflJniHQE4e)Am5&@w+u(VOn=bzW%q zW{q{h>)Zv+9O{WZ&fmCne<)WXc8h6cz`Kezuec0_#~tE&2+a?uLE??-P8;Xm^%uP3 z$SK18jHHYo29<;hUQ?!^fR7~_&sPXc8&K>Y8PP~KP#D4U=4(U#0EKUFZ*S^Z^xByC z5v0Z;>M7YG*)R&2DJ6a6q2kpi~c ztDq_dzuC6tIiy+Kb%0Y?_-V~~>;^41Q$`D@OIa9f*b(t7TV1*~kP0*@|E+t_navaS zUgYVH#>7ttveUdD$_G>#b+~h#N$7WC>EeoIRTge}nPJR|R|>INEjAC7^|rGwCF+S) zG0~Nkx6E|yx?+f?p5fCN*Q`?=nV>c1O@$f8hl=jm+S+oAiX|NlAISGp8O84jFoi zhgB`AkTf7SmG%-f4cm4j=dc5-RqxqtPnm z3IW4$I09i5Pk5lvmkKOF9Gi+Y(6j9yz3DCWw9>9qT6qmot{teLUTGaC10q2T$W@ci zqtfoP8UBf@3Ff_j*;rZEBCT?HEyXZHLwXT&CVG05aGobfO@46WGx#*^Tue+Z^3>ZK zA}U{0Mb1i3u+)pK>k|60+i`t)KbCIF!cxgiJR~Uk1zD^`z(HbJT?bV1$kf#nC`;PJ z4fUk$1>TS&O7#Z9Pqxg^>%gp#4*lZgTO zU1KHc)kHV@4#rQa1!CU^?i;6gHl{WI*_q3(Dfil)zvFr##X%Py0(HuL&=vJJflp0W zd)&0n(rib*1dstkHUej7=bGngDk^w)92@OE5rb%qp#>V{5*~$+9%F=;dNIXE`GE{> z{Xx0XA~&)LOjk|I{RxJf@eWFr|0%euK)zDwbBrX8&on58L-LL#1wok$`WKK|QW3sN z4cvT^lF0Sew9rg7HE3q0)FAm@Gr?IC3F~Y4SBx*z=M5QBP{m>Lc$UG0o z#~%^sb(?+tIYKcuph&^p_BeC|A)uYace;CWgE|$r@r=s#fpxD;Ms{&b;D=gO1 z*LNz2|OePd$<|Igd{d}!yN^^n=V8M;s2<3ccDCNb)Gb|5Cj1$&T2uj{cw|~gr>%&PXKTwwV|JjA3T7DZ<2Q}HKa=8bsIJrBQs zM)An2niIO;e8rGit5diQcBye>0m()h{T9@`M(tV&^5*CK_c4Y%#K3E31oS&X(p?@u zCd@IhfCP+lzEBkwe&Vjlp7FiKNqs}Ye(s(ql^dy|eGlo33gyGh>FrOiyRee#Mzc%+ z%gw+UM;`igOO8ll{ntlStbkv0D42h`H(O=IZCpl0jg$Ox^9~;KC=3Vqf02_ePvixNiep`)D zk`tw-7o*o$#LB^@K{<#~$A`BA#}#MmK#wI2w&5J^0(=cADaUWxltL^@5KgC*G(e8u zq&pd>2Yk*arK8t?KDrKY%ovFs)1KdYo`N#~-WHx36yrN60cd{rmf6p)!9m@^-W7S3 zWV~@NJ$Yc)MVVUNot(Z%9B@*BZs^5~gPaPZg@Q#n<&lCv-2DfN2~US?@oxdAPwB0wx;see9qK`=Id5!`*!- zlXsBdg4;HG>_f1x{6C2hS1m2le|pLg2t@83{x(u^g^BM|(%r}_#pN`vUn!??LQ|k$db-!Ra1fA8eK!g7XOFOC4NwDeL^Rjk@ zTPfm_DKsZ53#-x_zteLAhBzh(<{gAmt^%~=QofAC(0|i*S(#m2Sg-^#dqWFyYix9)8ais>eJj34H>y|v|| zCwU%CId0t%Vy3C-3=DuN!=Mo zc)`!9E{**0B^6Mmqp*4l72mgE=RRPFLQOg-)y-`s4QRChU>K4HHe^-z0DbCvDOXV{ zo+*L>?)u{50`u~vuO6Cl4CR#sWM*e?Z^YaAWs>`N6c_<)ZEt%ne=Gn?`V4x3jJ->% zJx`;4KFrgnlmLK$(SeDDO3K;sChd1yP`J+b@do%<8r|n4c@GC7b+uF$+avzH1C3h- zm-<=}nx_E;I4&66T>ROmy4Fk~Y>gQkGd$zBF_`HW!hHCk*nUe+V1_D@6m=WKExpi# zote6uIX~5H#-n3Mi~ z0FvXXh3QD`OCsL~T{I_hEIu>f?5DLyOpS&n45Eto*XQQy!YcB-s?4glgo3@yK&xP*k! z(ce)BB4)!|j`y4CdO9~2U(Du%myeI@Y-35c=Lq#}8c9h>FeTdG*%>+v>(ry8gKFvN z!MkM~2k2J2ZbJbEQ`6ME_2BJ(xZwYiP$-i)uDe?;FOY+bjvsiP=BB2@lM}NeW}D9l zf>Ul zuv?JQVEfxb7|?6;EXvBtK0Mog2Z_glqMacDuAm$I8P5?xuu=vFXIoR%JiBHW5QMI) zYt8%j?@LQdYuE*hqERZw##woJ7JpB7-!8N88lK@=(FsT2fBbOCoT$?Hk46?qIj4a( zF>61E&QPRXw67_%_CMbpZz5{O!-9wS`}gnm#s;f$m^ss1BU%6j99>-ID(>H$4#CSw zBE|*EpvG`BGY^_VDBfuc0Caui-b>*M|`Fd@;`)h$Ip5M6+$?t-tK z9l9%184^JTD3}aX8J4Jl0U+3Iz|U8+a&o52bs0@eCd2=pR`d2UsGnd}Ra#so`PJ1w zMH7%5g==G@j#MPVFOF5;l?}c4*>2Qnza; z977zk0XdlR$i8`T}Pg|0B*|9x9Y?@r_87C8}KxbRiKnfTe*fp!vp4G;(g zMG7FyAi& z^q|%pglSJtPj``<)hrf2FE7vQ6Sxmx<$JGNO;wbY!_LG3Wy|jXjZ0-&+1NyPIVqeV zLj#~|E_%Z9tpjJHj_WF*5geulFj-&QA%QzaHp8f_zLUVI+QWACH!B1ju zP;+b3()2ec%HKTsR?*FDMsD~F8y)=?OfvyUvvWTLKi`{j9Y}%KZE!`Pp9+C{V8pDa zo05j5OC^o_M8PN;*AeX}*$)8NlBLIb&|eMV9IHi7I-pN$2L_0f$%D&~Pv0cmvGw zjpOf@*kI4Qz!(Q3>v?0-w817E@D58cw%I8#RM`LaW)uJtWfrV__=WUzHHWJp%fa5F zLSH$6myHuZ`fkd&uUvJvugCbYXnqC8udf_OjgqvbILngZz>8 zSO8OBhn*vX0e_wnIj^mO%ux_Ll*r|sI+ z>^Ls~_2KqYcUJM40@G$N$pHjU#{?2N3`-^T8wNY9a`(oK8{nYgXrMDQ)Qc&_8=X@y*T6abDfbfU0F#qHbV#!42M%l9XIIbDOEHuB`mEwg$#; zZT{O2{3C|QpVNeHtgc44e}pH|paZVYeo&EWsqg=GD@5h8Dg@L5V+)3C65`_GQc~(^ z?*jLi5~(<_28?ypnkXO#C&2hCg`OfCR$?>At}eD4z{FWx1f%@OvIRi^<0vaDW0mvb zQPf$8v+Kb%Ugg))RlmweodOS0NcLPSh#AKAL^fq9U$PSUR5C;?I#SQw+_kKxq*-z~ZEYRsFkFJInt z$Lr=~iUmi`$Is7Atu7ktmVQYT0rgJkYy1C4D2jiAjuIGWDbOsGDViH}gq%cF(OPW+ zkM#I4@9R)7qXPlurX$nCxJw5WY9!ZvE_`@=Tnnz6%5q2WVZFPH3)!ovZIOE@DsR&o zQ!;$H9RTTvLA`nwoY}%}{1nau;kx0D15*JzMbSs^{J!^)t^M~dJvrI35!nT1p1%Ma z1Z!jltxcX3$u)tn<}R3#g0|oP^6aql>Vm@Kh8r#<`Io}|lmZmtGfh}3o+sfr>A_m$ b_1}B4Bi)|OZ4sK_X&gLlgg(4p4H@%4B?4}m diff --git a/app/src/main/res/drawable/tutorial_play_button.png b/app/src/main/res/drawable/tutorial_play_button.png deleted file mode 100644 index 2d71ee43a3a6bf390729014e967237447ae7a2a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5615 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 diff --git a/app/src/main/res/drawable/tutorial_spinner.png b/app/src/main/res/drawable/tutorial_spinner.png deleted file mode 100644 index 7341d4b399922602b29c217143aee486412a2b4d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14392 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 Q?T66UKCAUW!y)>A0W>G$EC2ui diff --git a/app/src/main/res/drawable/widget_preview.png b/app/src/main/res/drawable/widget_preview.png deleted file mode 100644 index 28dee830cc8b00961d1f78fab6a7fcd4803840e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22967 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%0Dp)TH;-M*&^Ux`rRZ7y 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 diff --git a/app/src/main/res/layout/tutorial_slide2.xml b/app/src/main/res/layout/tutorial_slide2.xml index 2a1870c..275dcd9 100644 --- a/app/src/main/res/layout/tutorial_slide2.xml +++ b/app/src/main/res/layout/tutorial_slide2.xml @@ -16,6 +16,8 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/slide2_heading" + android:textAlignment="center" + android:gravity="center" android:textColor="@android:color/white" android:textSize="@dimen/slide_title" android:textStyle="bold" /> diff --git a/app/src/main/res/layout/tutorial_slide3.xml b/app/src/main/res/layout/tutorial_slide3.xml index d7866f8..52f82d4 100644 --- a/app/src/main/res/layout/tutorial_slide3.xml +++ b/app/src/main/res/layout/tutorial_slide3.xml @@ -16,6 +16,8 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/slide3_heading" + android:textAlignment="center" + android:gravity="center" android:textColor="@android:color/white" android:textSize="@dimen/slide_title" android:textStyle="bold" /> diff --git a/app/src/main/res/layout/tutorial_slide4.xml b/app/src/main/res/layout/tutorial_slide4.xml new file mode 100644 index 0000000..70414ca --- /dev/null +++ b/app/src/main/res/layout/tutorial_slide4.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/tutorial_slide5.xml b/app/src/main/res/layout/tutorial_slide5.xml new file mode 100644 index 0000000..53227e8 --- /dev/null +++ b/app/src/main/res/layout/tutorial_slide5.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/tutorial_slide6.xml b/app/src/main/res/layout/tutorial_slide6.xml new file mode 100644 index 0000000..2a916a3 --- /dev/null +++ b/app/src/main/res/layout/tutorial_slide6.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-hdpi/ic_notification.png b/app/src/main/res/mipmap-hdpi/ic_notification.png new file mode 100644 index 0000000000000000000000000000000000000000..a6b68f2ff16be01fb682433cba02328f2ba29ac0 GIT binary patch literal 179 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbBsytmBLn2z=-dM5e{81%9p{GBhh`sAjZP4@Q=@*B$@`+iV9zT%Z->~z`07lrzH2UoseU*lTuyr13V zQScq+=Zofl)cM7GSnk4-d)(6(?SB;eCBBD|RV2UxnfPM9V(0Rb==r>nr++iLa~<1! UYclUwpeq7Fi*As(G?ukPh-b`Wq${C8`E zz?4TV9M8pUFK7wz)~c|m7Z)YX^(hW6nDf1{7Icw`%ATm;hNCx-1)Wp9f4Ldc)I$z JtaD0e0s!BoJSzYI literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xhdpi/ic_notification.png b/app/src/main/res/mipmap-xhdpi/ic_notification.png new file mode 100644 index 0000000000000000000000000000000000000000..dbf49204940f3a2b68b80b77ef3befbf46f41d71 GIT binary patch literal 198 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpUtUQZXtkc`H+H#c%NGl;kb3a)7q z^D1EP4iSqyDY{1H&{UZNfpZ>MHGXj5@OamH-_GKzK9})so)rytd&C3SW~&CY&(2@4 zi}?pbb%pQ+mf5lf?X#r~?l9JzjBYTy@ut!Aj!i>g0|O%y3x|M$0~SVuJd@o2C)M9( dUwy-G#rVK2=$ct=x*gDA44$rjF6*2UngDXaKeqq? literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxhdpi/ic_notification.png b/app/src/main/res/mipmap-xxhdpi/ic_notification.png new file mode 100644 index 0000000000000000000000000000000000000000..7f9a21721674d26d7f6b81de63e54e75c6d34168 GIT binary patch literal 308 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@ZgvM!zdcjW@r(^=-%7&ky$I?zY}hzyIyu z2mg+5Yu}$!#9edu=DuyVvUlq5eXA|_pMLvvyxC4xE)j=DCXE0FR;~pOj3OEhOsoM5 m7zR-A!f~dww6t&W-?+s#b*|yR&(~}QP=d3-BeIx*L9!Qw8P%_Eb7NrO z*y-uw7*cWT?cKmE<f7kMUfZ!U|w*El`Mnq$9I^TA14OSqm|UdV4Q)cSLGf4=cq zm$bgCF~^#0ZY{ROf$C?p#{XV#U)aO`KXUrFjDGCsg>vXW$w-mEoAusal*57CyRQCg zdU>>eD|__@?8yA{oBcde?0+`vy*Vg{747-fJpK3S*>y{7Z!}{?x4T9EXV0r!RhS|p z>3(b?m?}eJgM`51=aS6+%*+32&i|MtKK!JGQD2Yp;}c*4%C^`96ace>mptD8Px$P< zb(5f`%EFC?8wa*+=k)(!i@ORFWF**+H3F#{AOZ_pg1rnbj)Q&8uHfE>)vsRX@%1o2 zK44+M_Xb2j**(nGIM|O5Ak;wFa}MTw`|GxO{c4DnvQYOxD2O}pvk~6d>7TO9pYhLn z6NMy)BOu(+!6?`a#LP-;E<7OIAt7K0!dMhQ6m>{I6e%P@6g6}>f=$^z#dZI#+WoWT zSwZTst0mP&kdxvve{p!l*6vU4F)Xv^DpfMB<$AFFGAZtcc?`R|nU&hMi_Lr)%%IJ~ zAt7J@!U_ov2SB)?!4ZfV8JU^bK$r!n0EE#MF)}ujtw^yx-iP0PCZ6z_&-6pr z1QEET8HpAI*uxFGB3L{^qY19)jWPqoH^_naVFAdY3_oH`7$g!I4sb9x2(mHs7~tY4 z^MGUw4l#g~;pMnVfRrV)FoKlf=8?(K`0&~#33fAvBV`x#G-SENo}}e=F2zU ZNB@`Zx1RLi8?a@=;OXk;vd$@?2>`LInIr%J literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_notification.png b/app/src/main/res/mipmap-xxxhdpi/ic_notification.png new file mode 100644 index 0000000000000000000000000000000000000000..1a103cbef3b52b2316311eddc556ca97fa0f8d55 GIT binary patch literal 427 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>U@Y=^dqo{28y;#fFuYpJaEgIvuo`7y+_0SI{GTZckK3I8Ib%66 d&{Q(tvzMwaVdk`d{{$Eb44$rjF6*2UngFmumN@_b literal 0 HcmV?d00001 diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 28388fd..59c1032 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -1,6 +1,43 @@ - Break Reminder + Pausen-Tool + + + Willkommen + + Willkommen bei Privacy Friendly Pausen-Tool! + Diese App erinnert Sie daran, regelmäßig während der Arbeit Pausen einzulegen. + Zusätzlich können Sie sich Übungen aussuchen, mit denen Sie Ihre Pause aktiv gestalten können. + + + Übungsset erstellen + + Zuerst legen Sie fest, welche Art von Übungen Sie durchführen möchten. Dafür können Sie sich eigene „Übungssets“, also eigene Gruppen von Übungen, erstellen. + Um ein neues Übungsset zu erstellen, klicken Sie rechts unten auf das Plus-Symbol. Geben Sie dann einen Namen für das Set ein und klicken Sie auf „Speichern“. + + + Übungen hinzufügen + + Über den Editieren-Button unten rechts können Sie neue Übungen in das Set einfügen, indem Sie das Kästchen unter den bildlich dargestellten Übungen anklicken. + Jede Übung dauert 30 Sekunden, die Dauer kann über die App-Einstellungen angepasst werden. Über die im oberen Bildschirmbereich aufgeführten Kategorien können Sie die Übungen filtern. + + + Übungsset auswählen + Bei jedem Start der App wählen Sie über den Pfeil oben rechts das Übungsset aus, das Sie in den nächsten Pausen verwenden möchten. Wählen Sie danach aus, in welchem Abstand Sie Pausen einlegen möchten und wie lange die Pause jeweils dauern soll. Starten Sie danach den Timer über den Play-Button. + + Zeit für eine Pause + + Sobald es Zeit für die erste Pause ist, meldet sich das Privacy Friendly Pausen-Tool. + Tippen Sie auf die Benachrichtigung, um die Pause zu starten. Oben rechts sehen Sie, wie lange die Pause noch andauert. + + + Aktive Pause + + Um mit den Übungen zu beginnen, klicken Sie auf das Play-Symbol. Möchten Sie eine Übung überspringen, klicken Sie auf das „Weiter“-Symbol, mit dem „Zurück“-Symbol können Sie eine Übung wiederholen. + Mit dem ersten Symbol stellen Sie ein, dass die Übung automatisch mit Beginn der Pause startet, ohne dass Sie auf das Play-Symbol klicken müssen. Normalerweise werden so lange Übungen angezeigt, bis das Set einmal durchlaufen ist, auch wenn die Pause noch länger dauert. Durch Aktivieren des letzten Symbols wird das Übungsset so lange wiederholt, bis die Pause vorbei ist. + + + In Zusammenarbeit mit Die Autoren: Hinzufügen @@ -30,7 +67,6 @@ Starttbildschirm Einstellungsbildschirm 1. Klicken Sie auf die Fläche, um die Profile einzusehen und auszuwählen.\n2. Die Uhr zeigt die Zeit an und fungiert als Knopf, der die Zeit starten und stoppen kann.\n3. Der Knopf startet und stopt die Zeit.\n4. Der Knopf setzt die Zeit zurück. - Information Arbeitszeit DISCLAIMER Platzhalter Mehr Information finden Sie hier: @@ -43,14 +79,9 @@ Auswahl des Profils Zufall Profile bearbeiten - Benachrichtigungen - Lautlos Profil Name - Bildschirm bleibt an - Klingelton Beim Klicken auf das aktuell ausgewählte Profils (\'Zufall\'), werden alle verfügbare Profile angezeigt.\n Sie können ein neues Profil durch das Klicken auf \'Neues Profil…\' erstellen.\n Die verfügbaren Profile können Sie in den Einstellungen ändern.\nAm Anfang existieren 3 voreingestellte Profile Beim Klicken auf eins der beiden Symbole, startet die Uhr oder hält diese an - Verbleibende Zeit Vibration Profil Name Diese Applikation gehört der Gruppe von Privacy Friendly Apps, entwickelt von der Technische Universität Darmstadt. Quellcode lizenziert unter GPLv3. Bilder Copyright TU Darmstadt und Google Inc. @@ -75,27 +106,6 @@ Drücken Sie den Knopf, um die Uhr zurückzusetzen Typ - - Kopf - Nacken - Arme - Rumpf - Wirbelsäule - Becken - Beine - - - - Startbildschirm - Einstellungen - Übersicht - Einstellungen - Profile Settings - Einstellungen - Benachrichtigungen - Neues Profil Bildschirm - Pausenbildschirm - Haftungsausschluss - - - Neues Profil… Arme.Beine.Kopf.Nacken.Becken.Wirbelsäule.Rumpf. Über Hilfe öffnen @@ -150,7 +160,6 @@ Verbleibende Zeit: Dieses Übungsset enthält keine Übungen. Überspringen - Willkommen! Übungsset editieren Tutorial Bitte wählen Sie mindestens einen Eintrag zum Löschen aus. diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml deleted file mode 100644 index 21319d2..0000000 --- a/app/src/main/res/values-fr/strings.xml +++ /dev/null @@ -1,124 +0,0 @@ - - - Break Reminder - En Affiliation avec - Les auteurs: - Ajouter - Description: - Exécution de l\'exercice - Exécution - Description de l\'exercise - Annuler - Si cochée, il n\'y aura pas de possibilité de sauter la pause - DISCLAIMER ESPACE RÉSERVÉ - Voulez-vous prendre la pause? - Pause - Assurez-vous de sélectionner quelques exercices! Si rien est sélectionné, il n\'y aura pas d\'exercices dans la pause! - Répétition - Côté - Votre pause comprendra des exercices pour les sections suivantes: - Type d\'exercice - Aide - Écran: pause - Information - Temps de travail - Plus d\'informations peuvent être trouvées ici: - Nouveau profil... - Pause - Démarrer la pause automatiquement - Sélectionner - S\'il vous plaît entrer un nom pour le profil! - Entrez un autre nom, il existe déjà un profil avec le même nom! - Choisissez des exercices - Choisissez un profil - Hasard - Modifier les profils - Notifications - Silencieux - Nom du profil - Sonnerie - L\'écran reste allumé - Temps restant - Vibration - Cette application fait partie de la groupe Privacy Friendly Apps développé par Technische Universität Darmstadt. Le code de source est licensée avec GPLv3. Les images sont protégé par la TU Darmstadt et Google Inc. - Nom de profil - Sauvegarder - La valeur actuelle est $1 - Sélectionnez votre temps de pause - Sélectionnez votre temps de travail - Les changements ne pouvaient être appliquées car il existe déjà un profil avec le même nom! - Les changements ne pouvaient être appliquées parce que le nom du profil était vide! - La valeur actuelle est de $1 - Sélectionnez votre temps de travail - Minutes - Passer la pause - Prendre la pause - Paramètres - Démarrer/Arrêter l\'horloge - En appuyant sur l\'un d\'eux, l\'horloge démarre ou s\'arrête - ou - En cliquant sur le profil actuel (\'Hasard\'), vous pouvez voir tous les profils actuellement disponibles. \n Vous pouvez ajouter de nouveaux profils en cliquant sur \'Nouveaux profils ...\' et modifier les profils actuels dans les paramètres\nAu début, il y aura 4 profils prédéfinis - Sélectionnez le profil - Réinitialiser l\'horloge - Appuyez sur le bouton pour réinitialiser l\'horloge - Type - Écran principal - 1. Région du corps de l\'exercice actuel\n2. L\'horloge montre le temps restant de la pause. Si vous cliquez dessus, le temps démarre ou s\'arrête.\n3.Si \'pause\' s\'affiche à l\'écran, vous êtes dans une pause de 10sec. Si l\'écran affiche \'coté 1/2\' ou \'répétition 1/2\' il faut faire l\'exercice demandé.\n4.Expliquation de la pose initiale.\n5. Description de l\'exercice - Pour voir les images en pleine grandeur, cliquer sur les images. Pour retourner à la grandeur initial re-cliquer sur l\'image. - - - Tête - Nuque - Bras - Torse - Colonne vertébrale - Bassin - Jambes - - - - Ècran principal - Écran: paramètre - Aperçu - Écran: paramètre - Paramètres de profil - Écran: paramètre - Notification - Écran: Créer un nouveau profil - Écran: pause - Désistement - - - Hasard,90,5,false,Bras.Jambes.Tête.Nuque.Bassin.Colonne vertébrale.Torse.;HautDuCorps,90,15,true,Bras.Nuque.Tête.;Torse,30,5,true,Colonne vertébrale.Torse.;BasDuCorps,30,5,true,Jambes.Bassin.; - Bienvenue au Privacy Friendly Break Reminder - Jambes.Bras.Bassin.Colonne vertébrale.Torse.Nuque.Tête. - 1. Choisissez le nom du profil\n2. Choisissez la durée de votre travail\n3. Choisissez le temps de la pause de ce profil\n4. Appuyez sur ‘sélectionner’, si vous voulez entrer dans l\'écran d\'exercice pour sélectionner les groupes musculaires pour l’entrainement de votre profil. Ignorer la touche, si vous ne voulez pas d’entrainement sur ce profil.\n5. Cocher la case si vous voulez prendre les pauses directement. Décochez là, si vous voulez choisir à chaque fois si vous voulez prendre la pause. - Écran: Créer un nouveau profil - Écran: paramètre - 1. Ouvrez le tiroir de navigation et sélectionnez ‘Paramètres’\n2. Sélectionnez ‘Général’ pour entrer les paramètres du profil. Là, vous pouvez modifier le nom, le temps et les exercices du profil. \n3. Sélectionnez \'Notifications\' pour activer ou désactiver les notifications. - 1. Choisissez le profil pour changer\n2. Entrez le nouveau nom \n3. Modifiez le temps de travail \n4. Modifiez le temps de pause \n5. Vous pouvez choisir d\'activer le bouton \'continuellement\'. Dans ce cas, vous êtes obligé de prendre la pause. Si non, vous aurez l\'option de prendrela pause ou de passer directement aux exercises suivants.\n6. Choisissez les groupes musculaires que vous souhaitez entrainer durant les pauses. - 1. Sélectionnez une sonnerie.\n2. Choisissez si votre mobile doit vibrer lorsque l’horloge arrive à zéro. \n3. Choisissez si vous souhaitez des notifications sous forme de messages.\n4. Si le bouton est activé, l\'écran reste allumé quand vous êtes sur l\'écran principal. - 1. Zone pour sélectionner le profil \n2. L\'horloge affiche l\'heure et est cliquable. Elle commence et peut arrêter le temps.\n3. Ce bouton démarre et arrête le temps. \n4. Ce Bouton remet le temps - Sur - Voir l\'aide - D\'accord - Exercices créé avec succès! - Désistement - Sélectionnez les parties du corps pour l\'entrainement - %s et contributeurs - Vous pouvez faire de l\'entrainement dans les pauses, mais vous n\'etes pas forcé! Il suffit de créer un nouveau profil et de ne pas sélectionnez d\'exercices pour faire une pause simple sans exercise. - Le \'privacy friendly break reminder\' vous aide à faire des pauses plus régulièrement et se mettre en forme avec des exercise pour toute le corps! - Alternative, les profils et ces exercices peuvent être modifiés dans le paramètres du profils - Généralement - Autorisations - Le Privacy Friendly Break Reminder utilise seulement l\'autorisation de vibration - Politique de confidentialité - D\'autres études scientifiques ont montré que, après 70 minutes de travail la plupart des gens sont pas très productive pour 20 minutes. Pour couper de cet effet, essayez de faire une pause de 10 minutes au bout de 60 minutes de travail, pour être plus efficace. - Des études scientifiques ont montré que, après 30 minutes de travail, nous commençons à perdre la concentration. Pour optimiser votre flux de travail prenez une pause de 5 minutes toutes les 30 minutes! - Conseils - Pomodoro - Basic Rest Activity Circle - Manuel du propriétaire - Horloge interactive - En appuyant sur l\'horloge à chaque étape de cette application, l\'horloge peut être démarré et arrêté . - En cliquant sur le bouton \'next\', l\'application va choisir un nouvel exercice dans la région du corps actuel. Dans le même temps l\'horloge sera remise à zéro sur la minute d\'avant, que le temps sera dépenser pleinement sur les exercices. - Break Reminder - - \ No newline at end of file diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml deleted file mode 100644 index 729b57b..0000000 --- a/app/src/main/res/values-ru/strings.xml +++ /dev/null @@ -1,122 +0,0 @@ - - - Break Reminder - В сотрудничестве с - Авторы: - Добавить - Руки.Ноги.Голова.Шея.Таз.Позвоночник.Туловище. - Описание: - Исполнение упражнения - Описание упражнения - Исполнение - Отмена - DISCLAIMER Заполнитель - Вы хотите взять перерыв? - Если выбран, у вас не будет возможности пропустить перерыв - Перерыв - Убедитесь в том, что вы выбрали несколько упражнений! Если ничего не выбрано, то у вас не будет ни одного упражнения в перерыве! - Повторение - Сторона - Ваш перерыв будет содержать упражнения для следующих областей тела - Тип упражнения - Помощь - Перерыв экран - Создание нового профиля экран - Тип - Добро пожаловать в Privacy Friendly Break Reminder - или - Выберите профиль - Сбросить часы - Нажмите на кнопку, чтобы сбросить часы - Взять перерыв - Пропустить перерыв - Выберите длительность времени работы - Минут - Настройки - Запустить/Остановить часы - Случайный - Уведомления - Редактирование профилей - Случайный,90,5,false,Руки.Ноги.Голова.Шея.Таз.Позвоночник.Туловище.;Талия вверх,90,15,true,Руки.Шея.Голова.;Корпус,30,5,true,Позвоночник.Туловище.;Нижний Корпус,30,5,true,Ноги.Таз.; - Без звука - Имя профиля - Рингтон - Экран остается включенным - Вибрация - Это приложение принадлежит группе Privacy Friendly Apps, разработано в Technische Universität Darmstadt. Исходники кода лицензированны под GPLv3. Авторские права изображений TU Darmstadt и Google Inc. - Имя профиля - Интервал - Информация - Более подробную информацию можно найти здесь - Новый профиль... - Главный экран - Экран настроек - Перерыв - Введите другое имя, профиль с таким же именем уже существует! - Начать паузу автоматически - Выбрать - Выберите упражнения - Выберите профиль - Сохранить - Оставшееся время - Текущая величина $1 - Выберите длительность времени перерыва - Выберите длительность времени работы - Изменения не могут быть применены, так как уже существует профиль с таким же именем! - Изменения не могут быть применены, так как иия профиля было пусто! - Текущая величина $1 - Пожалуйста введите имя для профиля! - Нажимая на одну из них, часы начинаются или остановливаются - Для просмотра изображений в реальном размере просто нажмите на них. Чтобы вернуться назад, нажмите ище раз на изображение! - При нажатии на текущем профиле (\'Случайный\'), вы увидите все доступные профили. Нажав на \'Новый Профиль...\', вы можете добавить новый профиль, и изменить существующих в настойках.\nВ начале есть 4 предустановленных профилей. - 1. Область тела вашего текущего упражнения.\n2.Часы показывают время, оставшееся на перерыв. Если вы нажмете на них, они запускаются или останавливаются.\n3. Если показывает \'Перерыв\', тогда у вас в данный момент перерыв между упражнениями и вы видите изображение для следущего упражнения. Если показывает \'Сторона 1/2\', то вы должны выполнить упражнение, как показано на изображение. Если показывает \'Повторение 1/2\', то вы просто повторите текущее упражнение.\n4. Объяснение того, как следует выполнять упражнение.\n5. Описание текущего упражнения. - 1. Выберите имя профиля.\n2. Выберите длительность времени работы.\n3. Выберите длительность времени перерыва \n4. Нажмите на \'Выбрать\' чтобы выбрать упражнения для вас. Если вы не хотите упражнения в перерыве, игнорировайте эту кнопку \n5. Если выбрано, вы не можете пропустить перерыв. - 1. Откройте меню страницы в верхнем левом углу и выберите \'Настройки\'.\n2. Выберите \'Общие\', чтобы открыть настройки профиля\n3. Выберите \'Уведомления\' aus, чтобы включить или отключить уведомления. - 1. Выберите профиль.\n2. Введите новое имя.\n3. Выберите длительность времени работы.\n4. Выберите длительность времени перерыва.\n5. Выберите \'Беспрерывно\', если вы не хотите пропустить перерыв.\n6. Выберите участки тела, которые вы хотите тренировать в вашем перерыве. - 1. Выберите мелодию.\n2. Если выбрано, ваше устройство будет вибрировать.\n3. Если выбрано, уведомление будет показывать, сколько времени до перерыва осталось.\n4. Если выбрано, главный экран остается включенным. - 1. Нажмите на область для просмотра и выбора профиля.\n2. Часы показывают время и действует как кнопка, которая может запускать и останавливать время.\n3. Кнопка запускает и останавливает часы.\n4. Кнопка сбрасывает время. - - - Голова - Шея - Руки - Туловище - Позвоночник - Таз - Ноги - - О нас - Потверждаю - Упражнения созданы! - Просмотр помощи - - - Главный экран - Настройки - Обзор - Настройки - Профиль настройки - Настройки - Уведомления - Новый профиль экран - Перерыв экран - Дисклеймер - - Дисклеймер - Выберите части тела, которые вы хотите тренировать - %s и соучастники - Basic Rest Activity Circle - Рекомендация - Помодоро - Общий - Разрешения - Информация для защиты данных - Вы можете потренироваться во время перерывов, но вы не должны! Просто создайте новый профиль без упражнений, чтобы просто отдохнуть. - Privacy Friendly Break Reminder помогает вам принимать более регулярно перерывы и заниматься физическими упражнениями, чтобы получить хорошую физическую форму! - Альтернативно профили перева и ихнее упражнения могут быть изменены в настройках профиля - Privacy Friendly Break Reminder использует только разрешение для вибрации - Другие научные исследования показали, что после 70-й минуте работы у большинства людей есть время простоя 20 минут. Чтобы избежать этого, попробуйте сделать 10-минутный перерыв после 60-й минуте работы, чтобы быть более эффективным. - Научные исследования показали, что после 30-минутного рабочего времени, мы начинаем терять концентрацию. Чтобы оптимизировать рабочий процесс, возьмите 5 минут перерыв каждые 30 минут! - Инструкция - При нажатии на кнопку \'Next\', приложение будет выбрать новое упражнение в текущей области тела. В то же время часы будут сброшены на следующую полную минуту, чтобы провестить время полностью на упражнениях. - Интерактивные часы - При нажатии на часы возможно их запустить или остановить. - Break Reminder - \ No newline at end of file diff --git a/app/src/main/res/values-v14/dimens.xml b/app/src/main/res/values-v14/dimens.xml index 4db8c59..7f697aa 100644 --- a/app/src/main/res/values-v14/dimens.xml +++ b/app/src/main/res/values-v14/dimens.xml @@ -5,6 +5,5 @@ Refer to App Widget Documentation for margin information http://developer.android.com/guide/topics/appwidgets/index.html#CreatingLayout --> - 0dp \ No newline at end of file diff --git a/app/src/main/res/values-v21/styles.xml b/app/src/main/res/values-v21/styles.xml index 8cd2155..dfe5f66 100644 --- a/app/src/main/res/values-v21/styles.xml +++ b/app/src/main/res/values-v21/styles.xml @@ -27,9 +27,4 @@ @color/colorPrimary - - diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 3206875..82e2263 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -12,7 +12,6 @@ Refer to App Widget Documentation for margin information http://developer.android.com/guide/topics/appwidgets/index.html#CreatingLayout --> - 8dp 30dp 20dp diff --git a/app/src/main/res/values/drawables.xml b/app/src/main/res/values/drawables.xml index 3283e51..3505456 100644 --- a/app/src/main/res/values/drawables.xml +++ b/app/src/main/res/values/drawables.xml @@ -1,3 +1 @@ - - @android:drawable/ic_menu_manage - + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ddc46b2..f77a67f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -3,128 +3,32 @@ Open navigation drawer Close navigation drawer - - Settings - Information - Help + + Welcome to the Privacy Friendly Break Reminder! + This app reminds you to regularly take breaks during your work. Additionally, you can choose from a set of exercises, that can help you to spend your break more active. - - Notifications - Ringtone - Silent - Screen stays on - Time left - Vibration + Create Exercise Sets + + First you specify, what type of exercise you want to complete. + For that, you can create exercise sets, that contain a group of exercises. + To create a new exercise set, tap the plus icon on the lower right. + Then just specify a name for the set and tap "save". + - Add - Save - Cancel + Add Exercises + With the edit button in the lower right you can add new exercises to a set by tapping the checkboxes below the pictures of the exercises. Every exercise is set to be done 30 seconds. This duration can be changed in the settings. You can also filter the exercise list using the filter buttons at the top. - - About - Privacy Friendly Break Reminder - Version - Authors: - Christopher Beckmann, Sergej Alexeev,\nJannik Schildknecht - %s and contributors. - In affiliation with - More Information can be found on: - Github-Repo - SECUSO-Website + Choose Exercise Set + You can choose the exercise set you want to use during the breaks by tapping the little arrow icon in the top right corner. Select how long you want to work and how long your break should be. Start the timer by pressing the play button. + + Time For A Break + As soon as it\'s time for the break, the break reminder will notify you. Tap the notification to start the break. You can see how much time is left for the break in the top left corner. + + Active Break + To start with the exercises, tap the play button. If you want to skip an exercise, press the skip button. With the back button you can repeat an exercise or go back to one you have already done. If you activate the clock within the circular arrow button, the exercises will start to run automatically after the previous is completed. Normally the exercises are shown until every exercise has been done once. By activating the repeat button on the right, the exercise set will be repeated until the break is over. - - Main Screen - Settings Screen - Overview - Settings Screen - Profile Settings - Settings Screen - Notification - New Profile Screen - Break Screen - Disclaimer - - - - Description: - Execution: - - - 1. Spinner to select the profile \n2. Clock shows time and is clickable. Can starts and stop the time. \n3. Button starts and stops the time. \n4. Resets the time - Main Screen - 1. Open the drawer and select \'Settings\' \n2. Select \'General\' to enter the profile settings. There you can change name, time and exercises of the profile. \n3. Select \'Notifications\' to activate or deactivate notifications. - 1. Select a ringtone. \n2. Choose if the mobile phone should vibrate, when the countdown ends. \n3. Choose if you want message notifications.\n4. If the flag is set the screen will stay on, while on main screen. - 1. Choose the profile to change \n2. Enter the new name \n3. Alter the working time \n4. Alter the break time \n5. Choose if the \'Continuously\' flag is set or not. If it is, the break will start directly. If not, you can choose to take or to skip it. \n6. Choose the sections you want to train in the breaks. - Settings Screen - 1. Choose the name of the profile \n2. Choose your work-time\n3. Choose the break-time of this profile \n4. Press on \'Select\', if you want to enter the exercise screen to select the training region of your profile. Ignore it, if you don\'t want to train on this profile. \n5. Check it if you want to take the break directly. Uncheck it, if you want to decide every time if you\'ll take the break. - Create New Profile Screen - Break Screen - 1. Body section for your current exercise. \n2. Clock shows remaining time for the break. If you click on it, it starts or stops.\n3. If it shows \'Break\', it means you have currently break between the exercises and you see the image for the next exercise. If it shows \'Side left or Side right\' then you have to perform the exercise as shown in the picture. If it shows \'Repetition\' then you just repeat current exercise.\n4. Explanation of how the exercise should be performed.\n5. Description of current exercise. - To see the images in real size simply click on them. To return back to this view re-click on the image! - - - DISCLAIMER PLACEHOLDER - Disclaimer - - - Select profiles - Press the button to reset the clock - Reset the clock - By pressing one of them, the clock starts or stops - or - By clicking on the current profile (\'Random\'), you will see all the currently available profiles. \nYou can add new profiles by clicking on \'New Profiles…\' and edit the current ones in the settings\nIn the beginning there will be 4 predefined profiles - Start/Stop the clock - Welcome to the Privacy Friendly Break Reminder - 0 - View Help - - Legs.Arms.Pelvis.Spinal Column.Torso.Neck.Head. - Okay - Exercises successfully created! - General - The privacy friendly break reminder helps you to take more regularly breaks and to exercise and get fit! - You can work out during the breaks, but you don\'t have to! Just create a new profile without exercises to take a simple break. - Alternatively the break profiles and their exercises can be changed in the profile settings - Tips - Scientific studies have shown, that after a 30 minute work-time we start to lose concentration. To optimize your workflow take a 5 minute break every 30 minutes! - Other scientific studies have shown, that after 70 minute of work most people have a down time of 20 minutes. To cut of this effect, try to make a 10 minute break after 60 minute of work, to be more efficient. - Information for data protection - Permissions - The Privacy Friendly Break Reminder only uses the permission for vibration - Pomodoro - Basic Rest Activity Circle - Interactive clock - By pressing the clock in every stage of this app, the clock can be started and stopped. - By clicking on the \'next\' button, the app will choose a new exercise in the current body region. At the same time the clock will be reset on the next full minute, so the time will be spend fully on the exercises. - Instruction manual - This application belongs to the group of Privacy Friendly Apps developed by Technische Universität Darmstadt. Sourcecode licensed under GPLv3. Images copyright TU Darmstadt and Google Inc. - No exercise sets available. Please create a new one. - Exercise Sets - Edit Exercise Set - New Exercise Set - Add New Exercise Set - Break Reminder - Exercise Set Name - keep editing - discard - Are you sure you want to discard the changes? - Exercise - Tutorial - - Okay - Next - Skip - - - Welcome! - This App serves as a guideline to see the basic design of Privacy Friendly Apps. Here introduce your app in one or two sentences. - - Key Elements - Introduce key elements of your app. Do not introduce too many details. - - Github and Guide - The sourcecode of this app is available at GitHub. For further explanations have a look at the Privacy Friendly App Guide. - Edit Exercise Set - - Settings + Enter a name … Head Neck @@ -138,9 +42,6 @@ Help About Do you really want to cancel your break? - Yes - No - Exercise Time remaining: Select a work duration: Select a break duration: @@ -152,28 +53,52 @@ Description This set contains no exercises. Take a break now! Click here to do your chosen exercises. + Settings + No exercise sets available. Please create a new one. + Exercise Sets + Edit Exercise Set + Add New Exercise Set + Break Reminder + Exercise Set Name + Are you sure you want to discard the changes? + Tutorial - %02d + Exercise time (in Seconds) Keep screen on during exercise Exercise Settings schedule an exercise Enable exercise schedule Schedule time - What is Privacy Friendly Break Reminder? - Privacy Friendly Break Reminder is an app, that reminds you to take breaks during your work sessions. It allows you to select exercises, that are then shown during your break time. - Which permissions does the app require? - The app only requests permission to control the vibration of the device to make the break alarm more distinct. Schedule Times Exercise Settings - - New message notifications Continuous exercises Start the next timer automatically Choose days Only trigger on certain days No days selected. every day + + + About + Privacy Friendly Break Reminder + Version + Authors: + Christopher Beckmann, Sergej Alexeev,\nJannik Schildknecht + %s and contributors. + In affiliation with + More Information can be found on: + Github-Repo + SECUSO-Website + This application belongs to the group of Privacy Friendly Apps developed by Technische Universität Darmstadt. Sourcecode licensed under GPLv3. Images copyright TU Darmstadt and Google Inc. + + + What is Privacy Friendly Break Reminder? + Privacy Friendly Break Reminder is an app, that reminds you to take breaks during your work sessions. It allows you to select exercises, that are then shown during your break time. + Which permissions does the app require? + The app only requests permission to control the vibration of the device to make the break alarm more distinct. + + Pause Resume Stop @@ -181,6 +106,16 @@ Dismiss & don\'t restart Snooze Start Break + Okay + Next + Skip + Help + Save + Cancel + Yes + No + keep editing + discard diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 9648c27..7761f7c 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -16,11 +16,6 @@ @color/colorAccent - -