diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 245b6dd82..486990269 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -41,6 +41,15 @@
android:name="android.support.PARENT_ACTIVITY"
android:value="org.isoron.uhabits.MainActivity"/>
+
+
+
+
diff --git a/app/src/main/java/org/isoron/uhabits/MainActivity.java b/app/src/main/java/org/isoron/uhabits/MainActivity.java
index f974c0f44..989970c8c 100644
--- a/app/src/main/java/org/isoron/uhabits/MainActivity.java
+++ b/app/src/main/java/org/isoron/uhabits/MainActivity.java
@@ -3,6 +3,7 @@ package org.isoron.uhabits;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
+import android.preference.PreferenceManager;
import android.view.Menu;
import android.view.MenuItem;
@@ -22,6 +23,8 @@ public class MainActivity extends ReplayableActivity
super.onCreate(savedInstanceState);
setContentView(R.layout.list_habits_activity);
+ PreferenceManager.setDefaultValues(this, R.xml.preferences, false);
+
listHabitsFragment = (ListHabitsFragment) getFragmentManager().findFragmentById(
R.id.fragment1);
@@ -45,9 +48,11 @@ public class MainActivity extends ReplayableActivity
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
- switch(item.getItemId())
+ switch (item.getItemId())
{
case R.id.action_settings:
+ Intent intent = new Intent(this, SettingsActivity.class);
+ startActivity(intent);
return true;
default:
diff --git a/app/src/main/java/org/isoron/uhabits/ReminderAlarmReceiver.java b/app/src/main/java/org/isoron/uhabits/ReminderAlarmReceiver.java
index cec65f4bc..35e41bb20 100644
--- a/app/src/main/java/org/isoron/uhabits/ReminderAlarmReceiver.java
+++ b/app/src/main/java/org/isoron/uhabits/ReminderAlarmReceiver.java
@@ -8,9 +8,11 @@ import android.content.BroadcastReceiver;
import android.content.ContentUris;
import android.content.Context;
import android.content.Intent;
+import android.content.SharedPreferences;
import android.graphics.BitmapFactory;
import android.media.RingtoneManager;
import android.net.Uri;
+import android.preference.PreferenceManager;
import android.support.v4.app.NotificationCompat;
import android.util.Log;
@@ -43,7 +45,10 @@ public class ReminderAlarmReceiver extends BroadcastReceiver
private void snoozeHabit(Context context, Uri data)
{
- int delayMinutes = 60;
+
+ SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
+ long delayMinutes = Long.parseLong(prefs.getString("pref_snooze_interval", "15"));
+
Habit habit = Habit.get(ContentUris.parseId(data));
ReminderHelper.createReminderAlarm(context, habit,
new Date().getTime() + delayMinutes * 60 * 1000);
diff --git a/app/src/main/java/org/isoron/uhabits/SettingsActivity.java b/app/src/main/java/org/isoron/uhabits/SettingsActivity.java
new file mode 100644
index 000000000..c889afef5
--- /dev/null
+++ b/app/src/main/java/org/isoron/uhabits/SettingsActivity.java
@@ -0,0 +1,17 @@
+package org.isoron.uhabits;
+
+import android.app.Activity;
+import android.os.Bundle;
+
+import org.isoron.uhabits.dialogs.SettingsFragment;
+
+public class SettingsActivity extends Activity
+{
+ @Override
+ protected void onCreate(Bundle savedInstanceState)
+ {
+ super.onCreate(savedInstanceState);
+ getFragmentManager().beginTransaction().replace(android.R.id.content,
+ new SettingsFragment()).commit();
+ }
+}
diff --git a/app/src/main/java/org/isoron/uhabits/ShowHabitActivity.java b/app/src/main/java/org/isoron/uhabits/ShowHabitActivity.java
index e8cdb2b04..68fa2cbd1 100644
--- a/app/src/main/java/org/isoron/uhabits/ShowHabitActivity.java
+++ b/app/src/main/java/org/isoron/uhabits/ShowHabitActivity.java
@@ -5,6 +5,7 @@ import org.isoron.uhabits.models.Habit;
import android.app.Activity;
import android.content.ContentUris;
+import android.content.Intent;
import android.graphics.drawable.ColorDrawable;
import android.net.Uri;
import android.os.Bundle;
@@ -14,39 +15,43 @@ import android.view.MenuItem;
public class ShowHabitActivity extends ReplayableActivity
{
- public Habit habit;
+ public Habit habit;
@Override
- protected void onCreate(Bundle savedInstanceState)
- {
- super.onCreate(savedInstanceState);
+ protected void onCreate(Bundle savedInstanceState)
+ {
+ super.onCreate(savedInstanceState);
Uri data = getIntent().getData();
habit = Habit.get(ContentUris.parseId(data));
getActionBar().setTitle(habit.name);
if (android.os.Build.VERSION.SDK_INT >= 21)
+ {
getActionBar().setBackgroundDrawable(new ColorDrawable(habit.color));
+ }
- setContentView(R.layout.show_habit_activity);
- }
+ setContentView(R.layout.show_habit_activity);
+ }
- @Override
- public boolean onCreateOptionsMenu(Menu menu)
- {
- getMenuInflater().inflate(R.menu.show_habit_activity_menu, menu);
- return true;
- }
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu)
+ {
+ getMenuInflater().inflate(R.menu.show_habit_activity_menu, menu);
+ return true;
+ }
- @Override
- public boolean onOptionsItemSelected(MenuItem item)
- {
- switch(item.getItemId())
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item)
+ {
+ switch (item.getItemId())
{
case R.id.action_settings:
+ Intent intent = new Intent(this, SettingsActivity.class);
+ startActivity(intent);
return true;
}
- return super.onOptionsItemSelected(item);
- }
+ return super.onOptionsItemSelected(item);
+ }
}
diff --git a/app/src/main/java/org/isoron/uhabits/dialogs/ListHabitsFragment.java b/app/src/main/java/org/isoron/uhabits/dialogs/ListHabitsFragment.java
index 96c932a19..6b7936346 100644
--- a/app/src/main/java/org/isoron/uhabits/dialogs/ListHabitsFragment.java
+++ b/app/src/main/java/org/isoron/uhabits/dialogs/ListHabitsFragment.java
@@ -3,13 +3,14 @@ package org.isoron.uhabits.dialogs;
import android.app.Activity;
import android.app.Fragment;
import android.content.Context;
+import android.content.SharedPreferences;
import android.graphics.Color;
import android.graphics.Point;
import android.graphics.Typeface;
import android.os.Bundle;
import android.os.Vibrator;
+import android.preference.PreferenceManager;
import android.util.DisplayMetrics;
-import android.util.Log;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Display;
@@ -68,6 +69,7 @@ public class ListHabitsFragment extends Fragment
private View llEmpty;
private OnHabitClickListener habitClickListener;
+ private boolean short_toggle_enabled;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
@@ -123,6 +125,9 @@ public class ListHabitsFragment extends Fragment
{
super.onResume();
updateHeader();
+
+ SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(activity);
+ short_toggle_enabled = prefs.getBoolean("pref_short_toggle", false);
}
private void updateHeader()
@@ -265,15 +270,12 @@ public class ListHabitsFragment extends Fragment
case R.id.tvCheck:
{
lastLongClick = new Date().getTime();
- Habit habit = Habit.get((Long) v.getTag(R.string.habit_key));
- int offset = (Integer) v.getTag(R.string.offset_key);
- long timestamp = DateHelper.getStartOfDay(
- DateHelper.getLocalTime() - offset * DateHelper.millisecondsInOneDay);
-
- executeCommand(habit.new ToggleRepetitionCommand(timestamp));
-
- Vibrator vb = (Vibrator) getActivity().getSystemService(Context.VIBRATOR_SERVICE);
- vb.vibrate(100);
+ if(!short_toggle_enabled)
+ {
+ toggleCheck(v);
+ Vibrator vb = (Vibrator) getActivity().getSystemService(Context.VIBRATOR_SERVICE);
+ vb.vibrate(100);
+ }
return true;
}
@@ -282,6 +284,16 @@ public class ListHabitsFragment extends Fragment
return false;
}
+ private void toggleCheck(View v)
+ {
+ Habit habit = Habit.get((Long) v.getTag(R.string.habit_key));
+ int offset = (Integer) v.getTag(R.string.offset_key);
+ long timestamp = DateHelper.getStartOfDay(
+ DateHelper.getLocalTime() - offset * DateHelper.millisecondsInOneDay);
+
+ executeCommand(habit.new ToggleRepetitionCommand(timestamp));
+ }
+
private void executeCommand(Command c)
{
activity.executeCommand(c);
@@ -300,7 +312,10 @@ public class ListHabitsFragment extends Fragment
switch(v.getId())
{
case R.id.tvCheck:
- activity.showToast(R.string.long_press_to_toggle);
+ if(short_toggle_enabled)
+ toggleCheck(v);
+ else
+ activity.showToast(R.string.long_press_to_toggle);
return;
}
}
diff --git a/app/src/main/java/org/isoron/uhabits/dialogs/SettingsFragment.java b/app/src/main/java/org/isoron/uhabits/dialogs/SettingsFragment.java
new file mode 100644
index 000000000..1b0823e80
--- /dev/null
+++ b/app/src/main/java/org/isoron/uhabits/dialogs/SettingsFragment.java
@@ -0,0 +1,17 @@
+package org.isoron.uhabits.dialogs;
+
+
+import android.os.Bundle;
+import android.preference.PreferenceFragment;
+
+import org.isoron.uhabits.R;
+
+public class SettingsFragment extends PreferenceFragment
+{
+ @Override
+ public void onCreate(Bundle savedInstanceState)
+ {
+ super.onCreate(savedInstanceState);
+ addPreferencesFromResource(R.xml.preferences);
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/values-v21/styles.xml b/app/src/main/res/values-v21/styles.xml
index 5b301281e..c5903dc44 100644
--- a/app/src/main/res/values-v21/styles.xml
+++ b/app/src/main/res/values-v21/styles.xml
@@ -1,6 +1,6 @@
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml
index d207cb030..f052192f2 100644
--- a/app/src/main/res/values/dimens.xml
+++ b/app/src/main/res/values/dimens.xml
@@ -3,4 +3,24 @@
16dp
20dp
42dp
+
+
+ - 15 minutes
+ - 30 minutes
+ - 1 hour
+ - 2 hours
+ - 4 hours
+ - 8 hours
+
+
+
+ - 15
+ - 30
+ - 60
+ - 120
+ - 240
+ - 480
+
+
+ 15 minutes
\ No newline at end of file
diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml
new file mode 100644
index 000000000..f757d2164
--- /dev/null
+++ b/app/src/main/res/xml/preferences.xml
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file