From d75e33b2a6d2275f508f79728ffa819a75651df6 Mon Sep 17 00:00:00 2001 From: Sergej A Date: Thu, 11 Aug 2016 15:46:52 +0200 Subject: [PATCH] Fixed some issues Countdown timer and general settings are updated after selection/change/creation of a profile --- .../BreakActivity.java | 2 +- .../BreakReminder.java | 194 +++++++++++++----- .../ProfileActivity.java | 75 +++++-- .../SettingsActivity.java | 58 +++++- .../res/layout/content_break_reminder.xml | 54 +++-- app/src/main/res/layout/new_profile.xml | 177 +++++++++------- app/src/main/res/layout/spinner_layout.xml | 8 + app/src/main/res/values/profiles.xml | 9 - 8 files changed, 386 insertions(+), 191 deletions(-) create mode 100644 app/src/main/res/layout/spinner_layout.xml delete mode 100644 app/src/main/res/values/profiles.xml 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 5dfdd2a..f06e5d7 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 @@ -149,7 +149,7 @@ public class BreakActivity extends AppCompatActivity implements View.OnClickList r.play(); } - //FIXME Vibrate + //FIXME Test Vibration boolean vibrateChecked = sharedPrefs.getBoolean("notifications_new_message_vibrate", false); System.out.println("Vibrate is : " + vibrateChecked); if (vibrateChecked) { 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 44cdb49..7905f6d 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 @@ -1,13 +1,8 @@ package orgprivacy_friendly_apps.secuso.privacyfriendlybreakreminder; -import android.app.AlertDialog; -import android.app.Dialog; -import android.app.DialogFragment; -import android.app.FragmentManager; import android.app.Notification; import android.app.NotificationManager; import android.content.Context; -import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; import android.media.Ringtone; @@ -16,7 +11,6 @@ import android.net.Uri; import android.os.Bundle; import android.os.CountDownTimer; import android.os.Vibrator; -import android.preference.ListPreference; import android.preference.PreferenceManager; import android.support.v4.app.NotificationCompat; import android.view.View; @@ -35,6 +29,8 @@ import android.widget.Button; import android.widget.Spinner; import android.widget.TextView; +import java.util.Arrays; + public class BreakReminder extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener, View.OnClickListener { @@ -42,12 +38,14 @@ public class BreakReminder extends AppCompatActivity private TextView ct_text; private CountDownTimer ct; private String stopTime = ""; - private SeekBarPreference _seekBarWork; - private SeekBarPreference _seekBarBreak; + + private Spinner profileSpinner; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + setContentView(R.layout.activity_break_reminder); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); @@ -62,10 +60,20 @@ public class BreakReminder extends AppCompatActivity navigationView.setNavigationItemSelectedListener(this); SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this); + String allProfiles = sharedPrefs.getString("profiles", ""); + if (allProfiles.equals("")) { + System.out.println("Es gibt noch keine Profile!!"); + SharedPreferences.Editor editor = sharedPrefs.edit(); + editor.putString("profiles", "Sport,5,1;Exams,90,15;Pomodoro,30,5;"); + editor.apply(); + } + + System.out.println("Alle Profile: " + sharedPrefs.getString("profiles", "FAIL")); // If chosen, set screen to "stay on" boolean stayOn = sharedPrefs.getBoolean("notifications_stayOn", false); - if(stayOn) + + if (stayOn) getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); int mins = sharedPrefs.getInt("work_value", 50); @@ -74,7 +82,10 @@ public class BreakReminder extends AppCompatActivity if (mins < 10) bufferZeroMinute = "0"; - ct_text = (TextView) findViewById(R.id.textView); + ct_text = (TextView) + + findViewById(R.id.textView); + ct_text.setText(bufferZeroMinute + mins + ":00"); Button playStopButton = (Button) findViewById(R.id.button_playStop); @@ -83,26 +94,31 @@ public class BreakReminder extends AppCompatActivity resetButton.setOnClickListener(this); ct_text.setOnClickListener(this); - Button profileButton = (Button) findViewById(R.id.button_profile); - profileButton.setOnClickListener(this); + profileSpinner = (Spinner) findViewById(R.id.spinner); - Spinner profileSpinner = (Spinner) findViewById(R.id.spinner); - String[] some_array = getResources().getStringArray(R.array.profile_entries); + String[] profileNames = new String[allProfiles.split(";").length + 1]; + String[] fillProfileNames = allProfiles.split(";"); + for (int i = 0; i < profileNames.length - 1; i++) { + profileNames[i] = fillProfileNames[i].split(",")[0]; + } + profileNames[profileNames.length - 1] = "New Profile..."; ArrayAdapter adapter = new - ArrayAdapter(this, android.R.layout.simple_spinner_item, some_array); + ArrayAdapter(this, R.layout.spinner_layout, profileNames); profileSpinner.setAdapter(adapter); //Set the ClickListener for Spinner - profileSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + profileSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() + + { public void onItemSelected(AdapterView parent, View view, int position, long id) { System.out.println("Selected item: " + parent.getItemAtPosition(position) + " with id: " + id); - //TODO Match the work and break value to the assigned profile - switch ((String) parent.getItemAtPosition(position)){ - case "New Profile": - createNewProfile(); - break; + String profileSelected = (String) parent.getItemAtPosition(position); + if (profileSelected.equals("New Profile...")) { + createNewProfile(); + } else { + updatePreference(profileSelected); } } @@ -112,6 +128,98 @@ public class BreakReminder extends AppCompatActivity }); } + private void updatePreference(String profileSelected) { + SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this); + + String allProfiles = sharedPrefs.getString("profiles", ""); + + 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 { + String[] profileNames = allProfiles.split(";"); + for (int i = 0; i < profileNames.length; i++) { + String profileName = profileNames[i].split(",")[0]; + int interval = Integer.parseInt(profileNames[i].split(",")[1]); + int break_time = Integer.parseInt(profileNames[i].split(",")[2]); + if (profileName.equals(profileSelected)) { + SharedPreferences.Editor editor = sharedPrefs.edit(); + editor.putString("name_text", profileName); + editor.putInt("work_value", interval); + editor.putInt("break_value", break_time); + editor.apply(); + + //Update clock + String bufferZeroMinute = ""; + int time = interval * 60 * 1000; + if (time / 1000 / 60 < 10) + bufferZeroMinute = "0"; + + ct_text.setText(bufferZeroMinute + time / 1000 / 60 + ":00"); + break; + } + } + } + } + + private void fillProfiles() { + SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this); + String allProfiles = sharedPrefs.getString("profiles", ""); + + String[] profileNames = new String[allProfiles.split(";").length + 1]; + String[] fillProfileNames = allProfiles.split(";"); + for (int i = 0; i < profileNames.length - 1; i++) { + profileNames[i] = fillProfileNames[i].split(",")[0]; + } + profileNames[profileNames.length - 1] = "New Profile..."; + ArrayAdapter adapter = new + ArrayAdapter(this, R.layout.spinner_layout, profileNames); + profileSpinner.setAdapter(adapter); + + //Set Spinner on the current Profile + String currentProfile = sharedPrefs.getString("name_text", "Sport"); + int interval = sharedPrefs.getInt("work_value", 1); + profileSpinner.setSelection(Arrays.asList(profileNames).indexOf(currentProfile)); + + //Update clock + String bufferZeroMinute = ""; + int time = interval * 60 * 1000; + if (time / 1000 / 60 < 10) + bufferZeroMinute = "0"; + + ct_text.setText(bufferZeroMinute + time / 1000 / 60 + ":00"); + + //Set the ClickListener for Spinner + profileSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() + + { + + public void onItemSelected(AdapterView parent, View view, int position, long id) { + System.out.println("Selected item: " + parent.getItemAtPosition(position) + " with id: " + id); + + String profileSelected = (String) parent.getItemAtPosition(position); + if (profileSelected.equals("New Profile...")) { + createNewProfile(); + } else { + updatePreference(profileSelected); + } + } + + public void onNothingSelected(AdapterView parent) { + + } + }); + } + + @Override + public void onResume() { + super.onResume(); + fillProfiles(); + profileSpinner = (Spinner) findViewById(R.id.spinner); + } + @Override public void onBackPressed() { DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); @@ -204,15 +312,6 @@ public class BreakReminder extends AppCompatActivity switch (v.getId()) { - //FIXME - case R.id.button_profile: - FragmentManager fm = getFragmentManager(); - ProfileDialog pd = new ProfileDialog(); - pd.show(fm, "Profile Dialog"); - - //createNewProfile(); - break; - case R.id.textView: case R.id.button_playStop: if (isRunning) { @@ -267,7 +366,7 @@ public class BreakReminder extends AppCompatActivity // Play ringtone r.play(); } - //FIXME Vibrate + //FIXME Test Vibration boolean vibrateChecked = sharedPrefs.getBoolean("notifications_new_message_vibrate", false); System.out.println("Vibrate is : " + vibrateChecked); if (vibrateChecked) { @@ -297,8 +396,20 @@ public class BreakReminder extends AppCompatActivity case R.id.button_reset: - if (ct != null) - ct.cancel(); + if (ct != null) { + //Reset clock + int interval = sharedPrefs.getInt("work_value", 1); + + bufferZeroMinute = ""; + time = interval * 60 * 1000; + if (time / 1000 / 60 < 10) + bufferZeroMinute = "0"; + + ct_text.setText(bufferZeroMinute + time / 1000 / 60 + ":00"); + + + } + if (oldTime / 1000 / 60 < 10) bufferZeroMinute = "0"; @@ -331,21 +442,4 @@ public class BreakReminder extends AppCompatActivity } - public static class ProfileDialog extends DialogFragment { - - public Dialog onCreateDialog(Bundle savedInstanceState) { - AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); - - builder.setTitle("") - .setItems(R.array.profile_entries, new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int which) { - // The 'which' argument contains the index position - // of the selected item - - } - }); - return builder.create(); - } - } - } 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 6520f34..60bea63 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 @@ -4,28 +4,65 @@ package orgprivacy_friendly_apps.secuso.privacyfriendlybreakreminder; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; -import android.preference.ListPreference; -import android.preference.PreferenceFragment; import android.preference.PreferenceManager; import android.support.v7.app.AppCompatActivity; import android.view.View; -import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.EditText; -import android.widget.Spinner; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; +import android.widget.SeekBar; +import android.widget.TextView; public class ProfileActivity extends AppCompatActivity implements View.OnClickListener { + private SeekBar interval_seekbar, break_seekbar; + private TextView interval_text, break_text; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.new_profile); + interval_seekbar = (SeekBar) findViewById(R.id.new_profile_interval); + interval_seekbar.setProgress(1); + break_seekbar = (SeekBar) findViewById(R.id.new_profile_break); + break_seekbar.setProgress(1); + + interval_text = (TextView) findViewById(R.id.interval_text); + interval_text.setText("1 Minutes"); + break_text = (TextView) findViewById(R.id.break_text); + break_text.setText("1 Minutes"); + + interval_seekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { + @Override + public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { + interval_text.setText(progress + " Minutes"); + } + + @Override + public void onStartTrackingTouch(SeekBar seekBar) { + } + + @Override + public void onStopTrackingTouch(SeekBar seekBar) { + } + }); + + break_seekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { + @Override + public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { + break_text.setText(progress + " Minutes"); + } + + @Override + public void onStartTrackingTouch(SeekBar seekBar) { + } + + @Override + public void onStopTrackingTouch(SeekBar seekBar) { + } + }); + + Button cancelButton = (Button) findViewById(R.id.button_profile_cancel); cancelButton.setOnClickListener(this); @@ -40,18 +77,19 @@ public class ProfileActivity extends AppCompatActivity implements View.OnClickLi public void onClick(View v) { switch (v.getId()) { case R.id.button_profile_save: - //Fixme Add new Profile to the Array of Profiles (doesn´t work with xml because it is not possible to add values dynamically to any part of resources) + //Fixme Check names for doubles System.out.println("Save new profile!"); -// Spinner profileSpinner = (Spinner) findViewById(R.id.spinner); -// String[] array = getResources().getStringArray(R.array.profile_entries); -// List stringList = new ArrayList(Arrays.asList(array)); -// EditText profileName = -// (EditText) findViewById(R.id.editProfileName); -// stringList.add(4, profileName.getText().toString()); -// ArrayAdapter adapter = new -// ArrayAdapter(this, android.R.layout.simple_spinner_item, stringList); -// profileSpinner.setAdapter(adapter); + 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; @@ -73,4 +111,5 @@ public class ProfileActivity extends AppCompatActivity implements View.OnClickLi this.startActivity(intent); System.out.println("Exercise Type Activity!"); } + } 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 74f2c8a..1997a49 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 @@ -22,6 +22,7 @@ import android.text.TextUtils; import android.view.MenuItem; import android.support.v4.app.NavUtils; import android.widget.TextView; + import orgprivacy_friendly_apps.secuso.privacyfriendlybreakreminder.SeekBarPreference; import java.util.List; @@ -186,6 +187,8 @@ public class SettingsActivity extends AppCompatPreferenceActivity { private SeekBarPreference _seekBarWork; private SeekBarPreference _seekBarBreak; + private String currentProfile = ""; + @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -199,12 +202,15 @@ public class SettingsActivity extends AppCompatPreferenceActivity { // Set listener : getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this); + //Get profile name + currentProfile = PreferenceManager.getDefaultSharedPreferences(this.getActivity()).getString("name_text", ""); + // Set seekbar summary : int radius = PreferenceManager.getDefaultSharedPreferences(this.getActivity()).getInt("work_value", 50); - _seekBarWork.setSummary(this.getString(R.string.settings_summary).replace("$1", ""+radius)); + _seekBarWork.setSummary(this.getString(R.string.settings_summary).replace("$1", "" + radius)); radius = PreferenceManager.getDefaultSharedPreferences(this.getActivity()).getInt("break_value", 10); - _seekBarBreak.setSummary(this.getString(R.string.settings_summary).replace("$1", ""+radius)); + _seekBarBreak.setSummary(this.getString(R.string.settings_summary).replace("$1", "" + radius)); // Bind the summaries of EditText/List/Dialog/Ringtone preferences @@ -229,11 +235,55 @@ public class SettingsActivity extends AppCompatPreferenceActivity { @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { + // Set seekbar summary : int radius = PreferenceManager.getDefaultSharedPreferences(this.getActivity()).getInt("work_value", 50); - _seekBarWork.setSummary(this.getString(R.string.settings_summary).replace("$1", ""+radius)); + _seekBarWork.setSummary(this.getString(R.string.settings_summary).replace("$1", "" + radius)); radius = PreferenceManager.getDefaultSharedPreferences(this.getActivity()).getInt("break_value", 10); - _seekBarBreak.setSummary(this.getString(R.string.settings_summary).replace("$1", ""+radius)); + _seekBarBreak.setSummary(this.getString(R.string.settings_summary).replace("$1", "" + radius)); + + } + + + @Override + public void onPause() { + getPreferenceManager().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this); + + int work_radius = PreferenceManager.getDefaultSharedPreferences(this.getActivity()).getInt("work_value", 50); + int break_radius = PreferenceManager.getDefaultSharedPreferences(this.getActivity()).getInt("break_value", 10); + 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)) { + //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; + } + } + StringBuilder builder = new StringBuilder(); + for (String s : profiles) { + builder.append(s + ";"); + } + editor.putString("profiles", builder.toString()); + editor.apply(); + } + + + super.onPause(); + } + + @Override + public void onResume() { + getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(this); + currentProfile = PreferenceManager.getDefaultSharedPreferences(this.getActivity()).getString("name_text", ""); + super.onResume(); } } diff --git a/app/src/main/res/layout/content_break_reminder.xml b/app/src/main/res/layout/content_break_reminder.xml index 5ef7445..2cd6bd2 100644 --- a/app/src/main/res/layout/content_break_reminder.xml +++ b/app/src/main/res/layout/content_break_reminder.xml @@ -13,61 +13,53 @@ tools:showIn="@layout/app_bar_break_reminder"> - + android:layout_alignEnd="@+id/textView" + android:layout_alignLeft="@+id/button_playStop" + android:layout_alignParentTop="true" + android:layout_alignRight="@+id/textView" + android:layout_alignStart="@+id/button_playStop" + android:layout_marginTop="84dp" + android:popupBackground="@drawable/side_nav_bar" + android:spinnerMode="dropdown" />