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 b1ee90d..bce08a5 100644
Binary files a/app/src/main/assets/exercises.sqlite and b/app/src/main/assets/exercises.sqlite differ
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 0000000..a84106b
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_add_black_48dp.png differ
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 0000000..4af4ae6
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_create_black_48dp.png differ
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 0000000..2e86cc2
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_home_black_48dp.png differ
diff --git a/app/src/main/res/drawable-hdpi/ic_pause_black_48dp.png b/app/src/main/res/drawable-hdpi/ic_pause_black_48dp.png
new file mode 100644
index 0000000..bb707ea
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_pause_black_48dp.png differ
diff --git a/app/src/main/res/drawable-hdpi/ic_pause_white_24dp.png b/app/src/main/res/drawable-hdpi/ic_pause_white_24dp.png
new file mode 100644
index 0000000..4d2ea05
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_pause_white_24dp.png differ
diff --git a/app/src/main/res/drawable-hdpi/ic_play_arrow_white_24dp.png b/app/src/main/res/drawable-hdpi/ic_play_arrow_white_24dp.png
new file mode 100644
index 0000000..57c9fa5
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_play_arrow_white_24dp.png differ
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 0000000..f8c7bc9
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_play_circle_filled_white_24dp.png differ
diff --git a/app/src/main/res/drawable-hdpi/ic_play_circle_outline_black_48dp.png b/app/src/main/res/drawable-hdpi/ic_play_circle_outline_black_48dp.png
new file mode 100644
index 0000000..c5e3f91
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_play_circle_outline_black_48dp.png differ
diff --git a/app/src/main/res/drawable-hdpi/ic_play_circle_outline_white_24dp.png b/app/src/main/res/drawable-hdpi/ic_play_circle_outline_white_24dp.png
new file mode 100644
index 0000000..1c01ac6
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_play_circle_outline_white_24dp.png differ
diff --git a/app/src/main/res/drawable-hdpi/ic_replay_black_48dp.png b/app/src/main/res/drawable-hdpi/ic_replay_black_48dp.png
new file mode 100644
index 0000000..c17a501
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_replay_black_48dp.png differ
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 0000000..5ef425a
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_replay_white_24dp.png differ
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 0000000..3023ff8
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_settings_black_48dp.png differ
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 0000000..16e8a40
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_skip_next_black_48dp.png differ
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 0000000..044b6b0
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_skip_next_white_24dp.png differ
diff --git a/app/src/main/res/drawable-hdpi/ic_skip_previous_black_48dp.png b/app/src/main/res/drawable-hdpi/ic_skip_previous_black_48dp.png
new file mode 100644
index 0000000..0aee25b
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_skip_previous_black_48dp.png differ
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 0000000..23faeeb
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_skip_previous_white_24dp.png differ
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 0000000..3191d52
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_add_black_48dp.png differ
diff --git a/app/src/main/res/drawable-mdpi/ic_create_black_48dp.png b/app/src/main/res/drawable-mdpi/ic_create_black_48dp.png
new file mode 100644
index 0000000..87f8de1
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_create_black_48dp.png differ
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 0000000..dcdcfc0
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_home_black_48dp.png differ
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 0000000..74068ea
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_pause_black_48dp.png differ
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 0000000..2272d47
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_pause_white_24dp.png differ
diff --git a/app/src/main/res/drawable-mdpi/ic_play_arrow_white_24dp.png b/app/src/main/res/drawable-mdpi/ic_play_arrow_white_24dp.png
new file mode 100644
index 0000000..c61e948
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_play_arrow_white_24dp.png differ
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 0000000..9681bf5
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_play_circle_filled_white_24dp.png differ
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 0000000..a9e0143
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_play_circle_outline_black_48dp.png differ
diff --git a/app/src/main/res/drawable-mdpi/ic_play_circle_outline_white_24dp.png b/app/src/main/res/drawable-mdpi/ic_play_circle_outline_white_24dp.png
new file mode 100644
index 0000000..d84427b
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_play_circle_outline_white_24dp.png differ
diff --git a/app/src/main/res/drawable-mdpi/ic_replay_black_48dp.png b/app/src/main/res/drawable-mdpi/ic_replay_black_48dp.png
new file mode 100644
index 0000000..c8ba8ec
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_replay_black_48dp.png differ
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 0000000..5a79970
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_replay_white_24dp.png differ
diff --git a/app/src/main/res/drawable-mdpi/ic_settings_black_48dp.png b/app/src/main/res/drawable-mdpi/ic_settings_black_48dp.png
new file mode 100644
index 0000000..e84e188
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_settings_black_48dp.png differ
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 0000000..97a05c3
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_skip_next_black_48dp.png differ
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 0000000..f9c60b7
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_skip_next_white_24dp.png differ
diff --git a/app/src/main/res/drawable-mdpi/ic_skip_previous_black_48dp.png b/app/src/main/res/drawable-mdpi/ic_skip_previous_black_48dp.png
new file mode 100644
index 0000000..b1bc9e3
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_skip_previous_black_48dp.png differ
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 0000000..dac3640
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_skip_previous_white_24dp.png differ
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 0000000..3cb1092
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_add_black_48dp.png differ
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 0000000..d6761ba
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_create_black_48dp.png differ
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 0000000..04e2b26
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_home_black_48dp.png differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_pause_black_48dp.png b/app/src/main/res/drawable-xhdpi/ic_pause_black_48dp.png
new file mode 100644
index 0000000..792104f
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_pause_black_48dp.png differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_pause_white_24dp.png b/app/src/main/res/drawable-xhdpi/ic_pause_white_24dp.png
new file mode 100644
index 0000000..f49aed7
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_pause_white_24dp.png differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_play_arrow_white_24dp.png b/app/src/main/res/drawable-xhdpi/ic_play_arrow_white_24dp.png
new file mode 100644
index 0000000..a3c80e7
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_play_arrow_white_24dp.png differ
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 0000000..5dcdf0d
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_play_circle_filled_white_24dp.png differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_play_circle_outline_black_48dp.png b/app/src/main/res/drawable-xhdpi/ic_play_circle_outline_black_48dp.png
new file mode 100644
index 0000000..ad7ebd2
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_play_circle_outline_black_48dp.png differ
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 0000000..615b80d
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_play_circle_outline_white_24dp.png differ
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 0000000..16567dc
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_replay_black_48dp.png differ
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 0000000..3b41913
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_replay_white_24dp.png differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_settings_black_48dp.png b/app/src/main/res/drawable-xhdpi/ic_settings_black_48dp.png
new file mode 100644
index 0000000..476d5c9
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_settings_black_48dp.png differ
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 0000000..ce88b61
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_skip_next_black_48dp.png differ
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 0000000..e722d10
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_skip_next_white_24dp.png differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_skip_previous_black_48dp.png b/app/src/main/res/drawable-xhdpi/ic_skip_previous_black_48dp.png
new file mode 100644
index 0000000..1ad0666
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_skip_previous_black_48dp.png differ
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 0000000..01dd12b
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_skip_previous_white_24dp.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_add_black_48dp.png b/app/src/main/res/drawable-xxhdpi/ic_add_black_48dp.png
new file mode 100644
index 0000000..60cbd9c
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_add_black_48dp.png differ
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 0000000..9160023
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_create_black_48dp.png differ
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 0000000..d66401c
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_home_black_48dp.png differ
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 0000000..dc63538
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_pause_black_48dp.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_pause_white_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_pause_white_24dp.png
new file mode 100644
index 0000000..7192ad4
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_pause_white_24dp.png differ
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 0000000..547ef30
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_play_arrow_white_24dp.png differ
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 0000000..30330cf
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_play_circle_filled_white_24dp.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_play_circle_outline_black_48dp.png b/app/src/main/res/drawable-xxhdpi/ic_play_circle_outline_black_48dp.png
new file mode 100644
index 0000000..8b4b318
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_play_circle_outline_black_48dp.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_play_circle_outline_white_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_play_circle_outline_white_24dp.png
new file mode 100644
index 0000000..6e1b578
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_play_circle_outline_white_24dp.png differ
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 0000000..13fc607
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_replay_black_48dp.png differ
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 0000000..fcddcf0
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_replay_white_24dp.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_settings_black_48dp.png b/app/src/main/res/drawable-xxhdpi/ic_settings_black_48dp.png
new file mode 100644
index 0000000..8f2a8bc
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_settings_black_48dp.png differ
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 0000000..809b93b
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_skip_next_black_48dp.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_skip_next_white_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_skip_next_white_24dp.png
new file mode 100644
index 0000000..3ee6d75
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_skip_next_white_24dp.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_skip_previous_black_48dp.png b/app/src/main/res/drawable-xxhdpi/ic_skip_previous_black_48dp.png
new file mode 100644
index 0000000..92bf52f
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_skip_previous_black_48dp.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_skip_previous_white_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_skip_previous_white_24dp.png
new file mode 100644
index 0000000..1181ec9
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_skip_previous_white_24dp.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_add_black_48dp.png b/app/src/main/res/drawable-xxxhdpi/ic_add_black_48dp.png
new file mode 100644
index 0000000..1e1e4d6
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_add_black_48dp.png differ
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 0000000..a09d362
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_create_black_48dp.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_home_black_48dp.png b/app/src/main/res/drawable-xxxhdpi/ic_home_black_48dp.png
new file mode 100644
index 0000000..8fac2c3
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_home_black_48dp.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_pause_black_48dp.png b/app/src/main/res/drawable-xxxhdpi/ic_pause_black_48dp.png
new file mode 100644
index 0000000..66178aa
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_pause_black_48dp.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_pause_white_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_pause_white_24dp.png
new file mode 100644
index 0000000..660ac65
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_pause_white_24dp.png differ
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 0000000..be5c062
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_play_arrow_white_24dp.png differ
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 0000000..9dc0825
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_play_circle_filled_white_24dp.png differ
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 0000000..86a407d
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_play_circle_outline_black_48dp.png differ
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 0000000..516f643
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_play_circle_outline_white_24dp.png differ
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 0000000..97d1d29
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_replay_black_48dp.png differ
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 0000000..1573fb1
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_replay_white_24dp.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_settings_black_48dp.png b/app/src/main/res/drawable-xxxhdpi/ic_settings_black_48dp.png
new file mode 100644
index 0000000..e4d24ea
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_settings_black_48dp.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_skip_next_black_48dp.png b/app/src/main/res/drawable-xxxhdpi/ic_skip_next_black_48dp.png
new file mode 100644
index 0000000..85dbce7
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_skip_next_black_48dp.png differ
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 0000000..19c4929
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_skip_next_white_24dp.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_skip_previous_black_48dp.png b/app/src/main/res/drawable-xxxhdpi/ic_skip_previous_black_48dp.png
new file mode 100644
index 0000000..036ddde
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_skip_previous_black_48dp.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_skip_previous_white_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_skip_previous_white_24dp.png
new file mode 100644
index 0000000..f9186c0
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_skip_previous_white_24dp.png differ
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">