diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0de13de..c3ea625 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,7 +1,8 @@ - + + + + + \ No newline at end of file diff --git a/app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/AboutActivity.java b/app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/AboutActivity.java new file mode 100644 index 0000000..0804583 --- /dev/null +++ b/app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/AboutActivity.java @@ -0,0 +1,36 @@ +package orgprivacy_friendly_apps.secuso.privacyfriendlybreakreminder; + +import android.os.Bundle; +import android.support.v7.app.ActionBar; +import android.support.v7.app.AppCompatActivity; +import android.view.MenuItem; + +public class AboutActivity extends AppCompatActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.about); + setupActionBar(); + } + + private void setupActionBar() { + ActionBar actionBar = getSupportActionBar(); + actionBar.setTitle(R.string.about); + if (actionBar != null) { + // Show the Up button in the action bar. + actionBar.setDisplayHomeAsUpEnabled(true); + } + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + // Respond to the action bar's Up/Home button + case android.R.id.home: + finish(); + return true; + } + return super.onOptionsItemSelected(item); + } +} diff --git a/app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/BreakReminder.java b/app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/BreakReminder.java index 7905f6d..695b211 100644 --- a/app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/BreakReminder.java +++ b/app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/BreakReminder.java @@ -20,7 +20,6 @@ import android.support.v4.widget.DrawerLayout; import android.support.v7.app.ActionBarDrawerToggle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; -import android.view.Menu; import android.view.MenuItem; import android.view.WindowManager; import android.widget.AdapterView; @@ -38,6 +37,7 @@ public class BreakReminder extends AppCompatActivity private TextView ct_text; private CountDownTimer ct; private String stopTime = ""; + private int oldTime = 0; private Spinner profileSpinner; @@ -135,7 +135,6 @@ public class BreakReminder extends AppCompatActivity String currentProfile = sharedPrefs.getString("name_text", "") + "," + sharedPrefs.getInt("work_value", -1) + "," + sharedPrefs.getInt("break_value", -1); - System.out.println("Current PROFILE: " + currentProfile + " , PROFILE SELECTED: " + profileSelected); if (allProfiles.contains(currentProfile) && profileSelected.equals(sharedPrefs.getString("name_text", ""))) { System.out.println("Profile didn“t change"); } else { @@ -230,28 +229,6 @@ public class BreakReminder extends AppCompatActivity } } - @Override - public boolean onCreateOptionsMenu(Menu menu) { - // Inflate the menu; this adds items to the action bar if it is present. - getMenuInflater().inflate(R.menu.break_reminder, menu); - return true; - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - // Handle action bar item clicks here. The action bar will - // automatically handle clicks on the Home/Up button, so long - // as you specify a parent activity in AndroidManifest.xml. - int id = item.getItemId(); - - //noinspection SimplifiableIfStatement - if (id == R.id.action_settings) { - return true; - } - - return super.onOptionsItemSelected(item); - } - @SuppressWarnings("StatementWithEmptyBody") @Override public boolean onNavigationItemSelected(MenuItem item) { @@ -263,11 +240,17 @@ public class BreakReminder extends AppCompatActivity Intent intent = new Intent(this, SettingsActivity.class); this.startActivity(intent); } else if (id == R.id.nav_statistics) { - + // Show statistics + Intent intent = new Intent(this, StatisticsActivity.class); + this.startActivity(intent); } else if (id == R.id.nav_help) { - + // Show help + Intent intent = new Intent(this, HelpActivity.class); + this.startActivity(intent); } else if (id == R.id.nav_about) { - + // Show about page + Intent intent = new Intent(this, AboutActivity.class); + this.startActivity(intent); } DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); @@ -281,8 +264,13 @@ public class BreakReminder extends AppCompatActivity String bufferZeroMinute = ""; String bufferZeroSecond = ""; int time = mins * 60 * 1000; - time = 5000; - int oldTime = time; + + //FIXME Hardcoded for testing + //time = 5000; + + + stopTime = (String) ct_text.getText(); + oldTime = time; if (stopTime == "" && !isRunning) { if (time / 1000 / 60 < 10) @@ -398,6 +386,7 @@ public class BreakReminder extends AppCompatActivity case R.id.button_reset: if (ct != null) { //Reset clock + ct.cancel(); int interval = sharedPrefs.getInt("work_value", 1); bufferZeroMinute = ""; @@ -406,8 +395,9 @@ public class BreakReminder extends AppCompatActivity bufferZeroMinute = "0"; ct_text.setText(bufferZeroMinute + time / 1000 / 60 + ":00"); - - + stopTime = (String) ct_text.getText(); + isRunning = false; + break; } diff --git a/app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/HelpActivity.java b/app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/HelpActivity.java new file mode 100644 index 0000000..dae246d --- /dev/null +++ b/app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/HelpActivity.java @@ -0,0 +1,36 @@ +package orgprivacy_friendly_apps.secuso.privacyfriendlybreakreminder; + +import android.os.Bundle; +import android.support.v7.app.ActionBar; +import android.support.v7.app.AppCompatActivity; +import android.view.MenuItem; + +public class HelpActivity extends AppCompatActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.help); + setupActionBar(); + } + + private void setupActionBar() { + ActionBar actionBar = getSupportActionBar(); + actionBar.setTitle(R.string.help); + if (actionBar != null) { + // Show the Up button in the action bar. + actionBar.setDisplayHomeAsUpEnabled(true); + } + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + // Respond to the action bar's Up/Home button + case android.R.id.home: + finish(); + return true; + } + return super.onOptionsItemSelected(item); + } +} diff --git a/app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/ProfileActivity.java b/app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/ProfileActivity.java index 60bea63..473aad1 100644 --- a/app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/ProfileActivity.java +++ b/app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/ProfileActivity.java @@ -11,6 +11,7 @@ import android.widget.Button; import android.widget.EditText; import android.widget.SeekBar; import android.widget.TextView; +import android.widget.Toast; public class ProfileActivity extends AppCompatActivity implements View.OnClickListener { @@ -77,22 +78,30 @@ public class ProfileActivity extends AppCompatActivity implements View.OnClickLi public void onClick(View v) { switch (v.getId()) { case R.id.button_profile_save: - //Fixme Check names for doubles System.out.println("Save new profile!"); - - SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this); - SharedPreferences.Editor editor = sharedPrefs.edit(); EditText profileName = (EditText) findViewById(R.id.editProfileName); String name = profileName.getText().toString(); - editor.putString("name_text", name); - editor.putInt("work_value",interval_seekbar.getProgress()); - editor.putInt("break_value",break_seekbar.getProgress()); - editor.putString("profiles", sharedPrefs.getString("profiles", "") + name + "," + interval_seekbar.getProgress() + "," + break_seekbar.getProgress() + ";"); - editor.apply(); - finish(); - break; + if (name.equals("")) { + Toast.makeText(this, R.string.new_profile_emptyName, Toast.LENGTH_SHORT).show(); + return; + } else if (prefContainsName(name)) { + Toast.makeText(this, R.string.new_profile_doubleName, Toast.LENGTH_SHORT).show(); + return; + } else { + + // Add to preferences + SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this); + SharedPreferences.Editor editor = sharedPrefs.edit(); + editor.putString("name_text", name); + editor.putInt("work_value", interval_seekbar.getProgress()); + editor.putInt("break_value", break_seekbar.getProgress()); + editor.putString("profiles", sharedPrefs.getString("profiles", "") + name + "," + interval_seekbar.getProgress() + "," + break_seekbar.getProgress() + ";"); + editor.apply(); + finish(); + break; + } case R.id.button_profile_cancel: System.out.println("New profile canceled!"); finish(); @@ -106,6 +115,19 @@ public class ProfileActivity extends AppCompatActivity implements View.OnClickLi } + private boolean prefContainsName(String profileName) { + SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this); + String allProfiles = sharedPrefs.getString("profiles", ""); + String[] profiles = allProfiles.split(";"); + for (String profile : profiles) { + if (profile.split(",")[0].equalsIgnoreCase(profileName)) { + return true; + } + } + + return false; + } + private void createExerciseType() { Intent intent = new Intent(this, ExerciseTypeActivity.class); this.startActivity(intent); diff --git a/app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/SettingsActivity.java b/app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/SettingsActivity.java index 1997a49..0355e55 100644 --- a/app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/SettingsActivity.java +++ b/app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/SettingsActivity.java @@ -21,9 +21,8 @@ import android.preference.RingtonePreference; import android.text.TextUtils; import android.view.MenuItem; import android.support.v4.app.NavUtils; -import android.widget.TextView; +import android.widget.Toast; -import orgprivacy_friendly_apps.secuso.privacyfriendlybreakreminder.SeekBarPreference; import java.util.List; @@ -254,31 +253,62 @@ public class SettingsActivity extends AppCompatPreferenceActivity { String newProfileName = PreferenceManager.getDefaultSharedPreferences(this.getActivity()).getString("name_text", ""); String allProfiles = PreferenceManager.getDefaultSharedPreferences(this.getActivity()).getString("profiles", ""); - if (allProfiles.contains(newProfileName + "," + work_radius + "," + break_radius)) { + System.out.println("SETTINGS ACTIVITY0: " + newProfileName + "," + work_radius + "," + break_radius); + if (allProfiles.contains(newProfileName + "," + work_radius + "," + break_radius) && newProfileName.equals(currentProfile)) { //Nothing changes System.out.println("No changes for a profile in general settings"); } else { - //FIXME Check for doubles SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(this.getActivity()).edit(); - String[] profiles = allProfiles.split(";"); - for (int i = 0; i < profiles.length; i++) { - if (profiles[i].split(",")[0].equals(currentProfile)) { - profiles[i] = newProfileName + "," + work_radius + "," + break_radius; - break; + + System.out.println("SETTINGS ACTIVITY: " + newProfileName); + if (newProfileName.equals("")) { + // Profile name empty + System.out.println("EMPTY NAME IN SETTINGS ACTIVITY"); + Toast.makeText(this.getActivity(), R.string.settings_emptyName, Toast.LENGTH_SHORT).show(); + editor.putString("name_text", currentProfile); + editor.apply(); + + } else if (currentProfile != newProfileName && prefContainsName(newProfileName)) { + // Profile name exists already + Toast.makeText(this.getActivity(), R.string.settings_doubleName, Toast.LENGTH_SHORT).show(); + editor.putString("name_text", currentProfile); + editor.apply(); + + } else { + + String[] profiles = allProfiles.split(";"); + for (int i = 0; i < profiles.length; i++) { + if (profiles[i].split(",")[0].equals(currentProfile)) { + profiles[i] = newProfileName + "," + work_radius + "," + break_radius; + break; + } } + StringBuilder builder = new StringBuilder(); + for (String s : profiles) { + builder.append(s + ";"); + } + editor.putString("profiles", builder.toString()); + editor.apply(); } - StringBuilder builder = new StringBuilder(); - for (String s : profiles) { - builder.append(s + ";"); - } - editor.putString("profiles", builder.toString()); - editor.apply(); } super.onPause(); } + private boolean prefContainsName(String profileName) { + SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this.getActivity()); + String allProfiles = sharedPrefs.getString("profiles", ""); + String[] profiles = allProfiles.split(";"); + for (String profile : profiles) { + if (profile.split(",")[0].equalsIgnoreCase(profileName)) { + return true; + } + } + + return false; + } + @Override public void onResume() { getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(this); diff --git a/app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/StatisticsActivity.java b/app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/StatisticsActivity.java new file mode 100644 index 0000000..a2ceceb --- /dev/null +++ b/app/src/main/java/orgprivacy_friendly_apps/secuso/privacyfriendlybreakreminder/StatisticsActivity.java @@ -0,0 +1,37 @@ +package orgprivacy_friendly_apps.secuso.privacyfriendlybreakreminder; + + +import android.os.Bundle; +import android.support.v7.app.ActionBar; +import android.support.v7.app.AppCompatActivity; +import android.view.MenuItem; + +public class StatisticsActivity extends AppCompatActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.statistics); + setupActionBar(); + } + + private void setupActionBar() { + ActionBar actionBar = getSupportActionBar(); + actionBar.setTitle(R.string.statistics); + if (actionBar != null) { + // Show the Up button in the action bar. + actionBar.setDisplayHomeAsUpEnabled(true); + } + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + // Respond to the action bar's Up/Home button + case android.R.id.home: + finish(); + return true; + } + return super.onOptionsItemSelected(item); + } +} diff --git a/app/src/main/res/drawable/privacyfriendlyappslogo.png b/app/src/main/res/drawable/privacyfriendlyappslogo.png new file mode 100644 index 0000000..14f2748 Binary files /dev/null and b/app/src/main/res/drawable/privacyfriendlyappslogo.png differ diff --git a/app/src/main/res/drawable/secuso_logo_blau_blau.png b/app/src/main/res/drawable/secuso_logo_blau_blau.png new file mode 100644 index 0000000..9c82d7c Binary files /dev/null and b/app/src/main/res/drawable/secuso_logo_blau_blau.png differ diff --git a/app/src/main/res/layout/about.xml b/app/src/main/res/layout/about.xml new file mode 100644 index 0000000..17cd520 --- /dev/null +++ b/app/src/main/res/layout/about.xml @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_break.xml b/app/src/main/res/layout/activity_break.xml index cadc4a3..eca00b1 100644 --- a/app/src/main/res/layout/activity_break.xml +++ b/app/src/main/res/layout/activity_break.xml @@ -13,12 +13,12 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge" - android:text="10:00" + android:text="@string/_10_00" android:id="@+id/textViewBreak" android:clickable="true" android:enabled="true" android:textStyle="bold" - android:textSize="60dp" + android:textSize="60sp" android:textIsSelectable="false" android:layout_centerHorizontal="true" /> @@ -26,7 +26,7 @@ style="?android:attr/buttonStyleSmall" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:text="Play/Stop" + android:text="@string/break_play_stop" android:id="@+id/button_playStopBreak" android:layout_below="@+id/textViewBreak" android:layout_centerHorizontal="true" /> @@ -35,7 +35,7 @@ style="?android:attr/buttonStyleSmall" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:text="Cancel" + android:text="@string/break_cancel" android:id="@+id/button_cancel" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" /> @@ -61,7 +61,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceMedium" - android:text="name of the Exercise" + android:text="@string/name_of_the_exercise" android:id="@+id/textViewExercise" android:layout_above="@+id/horizontalScrollView2" android:layout_centerHorizontal="true" /> @@ -70,9 +70,10 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceMedium" - android:text="You have to train hard, you little bitch" + android:text="@string/break_explanation" android:id="@+id/textViewDescription" android:layout_below="@+id/horizontalScrollView2" - android:layout_centerHorizontal="true" /> + android:layout_centerHorizontal="true" + android:gravity="center" /> diff --git a/app/src/main/res/layout/activity_break_decider.xml b/app/src/main/res/layout/activity_break_decider.xml index 109f371..0aff464 100644 --- a/app/src/main/res/layout/activity_break_decider.xml +++ b/app/src/main/res/layout/activity_break_decider.xml @@ -13,7 +13,7 @@ style="?android:attr/buttonStyleSmall" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:text="Take the Break" + android:text="@string/take_the_break" android:id="@+id/button_break" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" @@ -24,7 +24,7 @@ style="?android:attr/buttonStyleSmall" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:text="Skip the Break" + android:text="@string/skip_the_break" android:id="@+id/button_skip" android:layout_alignTop="@+id/button_break" android:layout_alignParentRight="true" @@ -34,9 +34,9 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge" - android:text="Do you want to take the break?" + android:text="@string/do_you_want_to_take_the_break" android:id="@+id/textView2" - android:textSize="24dp" + android:textSize="24sp" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_marginTop="97dp" /> diff --git a/app/src/main/res/layout/content_break_reminder.xml b/app/src/main/res/layout/content_break_reminder.xml index 2cd6bd2..d38e1c1 100644 --- a/app/src/main/res/layout/content_break_reminder.xml +++ b/app/src/main/res/layout/content_break_reminder.xml @@ -34,7 +34,7 @@ android:layout_alignTop="@+id/button_reset" android:layout_toLeftOf="@+id/button_reset" android:layout_toStartOf="@+id/button_reset" - android:text="Play/Stop" /> + android:text="@string/play_stop" />