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">