diff --git a/app/src/main/assets/exercises.sqlite b/app/src/main/assets/exercises.sqlite new file mode 100644 index 0000000..d355fe8 Binary files /dev/null and b/app/src/main/assets/exercises.sqlite differ diff --git a/app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/BreakActivity.java b/app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/BreakActivity.java index f06e5d7..03e9211 100644 --- a/app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/BreakActivity.java +++ b/app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/BreakActivity.java @@ -4,7 +4,6 @@ import android.app.Notification; import android.app.NotificationManager; import android.content.Context; import android.content.SharedPreferences; -import android.media.MediaPlayer; import android.media.Ringtone; import android.media.RingtoneManager; import android.net.Uri; @@ -14,27 +13,32 @@ import android.preference.PreferenceManager; import android.support.v4.app.NotificationCompat; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; -import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.ImageView; -import android.widget.LinearLayout; import android.widget.TextView; +import java.util.List; + public class BreakActivity extends AppCompatActivity implements View.OnClickListener { private TextView ct_text; private CountDownTimer ct; private String stopTime = ""; private boolean isRunning = false; + private List exerciseList; + private SharedPreferences sharedPrefs; + private TextView description, side_repetition, break_exercise_type; + private int currentExercise, breakTime = 0; + private ImageView image, image_mid, image_right; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_break); - - SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this); + currentExercise = 0; + sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this); int mins = sharedPrefs.getInt("break_value", 5); String bufferZeroMinute = ""; @@ -44,23 +48,45 @@ public class BreakActivity extends AppCompatActivity implements View.OnClickList ct_text = (TextView) findViewById(R.id.textViewBreak); ct_text.setText(bufferZeroMinute + mins + ":00"); - Button playStopButton = (Button) findViewById(R.id.button_playStopBreak); - playStopButton.setOnClickListener(this); - Button resetButton = (Button) findViewById(R.id.button_cancel); - resetButton.setOnClickListener(this); + Button skipButton = (Button) findViewById(R.id.button_next); + skipButton.setOnClickListener(this); ct_text.setOnClickListener(this); - LinearLayout ll = (LinearLayout) findViewById(R.id.layout_break); - // TODO Do it dynamically - for (int i = 0; i < 20; i++) { - ImageView image = new ImageView(this); - image.setLayoutParams(new android.view.ViewGroup.LayoutParams(80, 60)); - image.setImageResource(R.drawable.statistic_logo); - ll.addView(image); +// LinearLayout ll = (LinearLayout) findViewById(R.id.layout_break); +// // TODO Do it dynamically +// for (int i = 0; i < 20; i++) { +// ImageView image = new ImageView(this); +// image.setLayoutParams(new android.view.ViewGroup.LayoutParams(80, 60)); +// image.setImageResource(R.drawable.statistic_logo); +// ll.addView(image); +// } + + DBHandler dbHandler = new DBHandler(this); + String[] allProfiles = sharedPrefs.getString("profiles", "").split(";"); + String currentProfile = sharedPrefs.getString("name_text", ""); + String[] exercises = new String[8]; + for (int i = 0; i < allProfiles.length; i++) { + if (allProfiles[i].split(",")[0].equals(currentProfile)) { + System.out.println("Hi: " + allProfiles[i].split(",")[4]); + exercises = allProfiles[i].split(",")[4].split("\\."); + } } + exerciseList = dbHandler.getExercisesFromSection(exercises[currentExercise]); + description = (TextView) findViewById(R.id.textViewDescription); + description.setText(exerciseList.get(currentExercise).getDescription()); + side_repetition = (TextView) findViewById(R.id.textSideRepetition); + side_repetition.setText("Break"); + break_exercise_type = (TextView) findViewById(R.id.break_exercise_type); + break_exercise_type.setText(exerciseList.get(currentExercise).getSection()); + + image = (ImageView) findViewById(R.id.imageView); + image_mid = (ImageView) findViewById(R.id.imageMid); + image_right = (ImageView) findViewById(R.id.imageRight); + image.setImageResource(R.drawable.train_left); + image_right.setImageResource(R.drawable.train_right); } public void onClick(View v) { @@ -101,7 +127,6 @@ public class BreakActivity extends AppCompatActivity implements View.OnClickList switch (v.getId()) { case R.id.textViewBreak: - case R.id.button_playStopBreak: if (isRunning) { ct.cancel(); stopTime = (String) ct_text.getText(); @@ -122,6 +147,9 @@ public class BreakActivity extends AppCompatActivity implements View.OnClickList ct_text.setText(bufferZeroMinute + (millisUntilFinished / 1000) / 60 + ":" + bufferZeroSecond + millisUntilFinished / 1000 % 60); + //FIXME 10 Sec break -> 10 + 10 exercise -> 10 sec break + update(); + //Show how much time is left timeLeft = sharedPrefs.getBoolean("notifications_new_message_timeLeft", false); if (timeLeft) { @@ -179,9 +207,67 @@ public class BreakActivity extends AppCompatActivity implements View.OnClickList } break; - case R.id.button_cancel: - finish(); + case R.id.button_next: + //TODO Update Timer + currentExercise++; + System.out.println("Current Ex#: " + currentExercise + " , All Ex#: " + exerciseList.size()); + side_repetition.setText("Break"); + if (currentExercise > exerciseList.size() - 1) + currentExercise = 0; + + switch (currentExercise % 3) { + case 0: + image.setImageResource(R.drawable.train_left); + image_mid.setImageResource(android.R.color.transparent); + image_right.setImageResource(R.drawable.train_right); + break; + + case 1: + image.setImageResource(android.R.color.transparent); + image_mid.setImageResource(R.drawable.train_left); + image_right.setImageResource(android.R.color.transparent); + break; + + case 2: + image.setImageResource(android.R.color.transparent); + image_mid.setImageResource(R.drawable.train_right); + image_right.setImageResource(android.R.color.transparent); + break; + } + + description.setText(exerciseList.get(currentExercise).getDescription()); + + //finish(); break; } } + + private void update() { + breakTime++; + + switch (breakTime) { + case 10: + System.out.println("Time for Exercise: Left!"); + image_mid.setImageResource(R.drawable.train_left); + image_right.setImageResource(android.R.color.transparent); + image.setImageResource(android.R.color.transparent); + side_repetition.setText("Side/Repetition 1"); + break; + case 20: + System.out.println("Time for Exercise: Right!"); + image_mid.setImageResource(R.drawable.train_right); + side_repetition.setText("Side/Repetition 2"); + break; + case 30: + System.out.println("Next Exercise!"); + image.setImageResource(R.drawable.train_left); + image_mid.setImageResource(android.R.color.transparent); + image_right.setImageResource(R.drawable.train_right); + breakTime = 0; + currentExercise++; + description.setText(exerciseList.get(currentExercise).getDescription()); + side_repetition.setText("Break"); + + } + } } 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 new file mode 100644 index 0000000..b3a405a --- /dev/null +++ b/app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/DBHandler.java @@ -0,0 +1,145 @@ +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.SQLiteException; +import android.database.sqlite.SQLiteOpenHelper; +import android.util.Log; + +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(); + System.out.println("Current Language: " + DEVICE_LANGUAGE); + //If Database exists open + if (checkDataBase()) { + openDataBase(); + } else { + try { + this.getReadableDatabase(); + copyDataBase(); + this.close(); + openDataBase(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + @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.getInt(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(); + if (DEVICE_LANGUAGE.equals("de")) + section = "nacken"; + + Cursor res = dataBase.rawQuery("SELECT * FROM EXERCISES_" + DEVICE_LANGUAGE + " WHERE " + EXERCISES_SECTION + " LIKE " + "\"%" + section + "%\"", null); + res.moveToFirst(); + while (!res.isAfterLast()) { + exercise = new Exercise(res.getInt(0), res.getString(1), res.getString(2), res.getInt(3), res.getString(4)); + exerciseList.add(exercise); + res.moveToNext(); + } + + res.close(); + return exerciseList; + } + + + private boolean checkDataBase() { + dataBase = null; + boolean exist = false; + try { + String dbPath = DATABASE_PATH + DATABASE_NAME; + dataBase = SQLiteDatabase.openDatabase(dbPath, null, + SQLiteDatabase.OPEN_READONLY); + } catch (SQLiteException e) { + Log.v("db log", "Database doesn't exist!!"); + } + + if (dataBase != null) { + exist = true; + closeDataBase(); + } + return exist; + } + + public void openDataBase() throws SQLException { + String dbPath = DATABASE_PATH + DATABASE_NAME; + dataBase = SQLiteDatabase.openDatabase(dbPath, null, SQLiteDatabase.OPEN_READWRITE); + } + + public void closeDataBase() { + if (dataBase != null) + dataBase.close(); + } + + 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/train_left.png b/app/src/main/res/drawable/train_left.png new file mode 100644 index 0000000..33142c7 Binary files /dev/null and b/app/src/main/res/drawable/train_left.png differ diff --git a/app/src/main/res/drawable/train_middle.png b/app/src/main/res/drawable/train_middle.png new file mode 100644 index 0000000..2d58f42 Binary files /dev/null and b/app/src/main/res/drawable/train_middle.png differ diff --git a/app/src/main/res/drawable/train_right.png b/app/src/main/res/drawable/train_right.png new file mode 100644 index 0000000..472a5d4 Binary files /dev/null and b/app/src/main/res/drawable/train_right.png differ diff --git a/app/src/main/res/layout/activity_break.xml b/app/src/main/res/layout/activity_break.xml index 9e9fa4c..2f7d576 100644 --- a/app/src/main/res/layout/activity_break.xml +++ b/app/src/main/res/layout/activity_break.xml @@ -3,6 +3,7 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" + android:layout_margin="15dp" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" @@ -10,72 +11,118 @@ tools:context="orgprivacy_friendly_apps.secuso.privacyfriendlybreakreminder.BreakActivity"> + + + android:textSize="50sp" + android:textStyle="bold" /> -