diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsController.java b/app/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsController.java
index d0b584d05..08be54b39 100644
--- a/app/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsController.java
+++ b/app/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsController.java
@@ -20,6 +20,7 @@
package org.isoron.uhabits.activities.habits.list;
import android.support.annotation.*;
+import android.util.*;
import org.isoron.uhabits.*;
import org.isoron.uhabits.activities.*;
@@ -166,7 +167,12 @@ public class ListHabitsController
@Override
public void onEdit(@NonNull Habit habit, long timestamp)
{
-
+ int oldValue = habit.getCheckmarks().getTodayValue();
+ screen.showNumberPicker(oldValue, newValue -> {
+ Log.d("ListHabitsController",
+ String.format("%s %d %d", habit.getName(), timestamp,
+ newValue));
+ });
}
diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.java b/app/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.java
index 045505a90..822964d7b 100644
--- a/app/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.java
+++ b/app/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.java
@@ -23,6 +23,9 @@ import android.app.*;
import android.content.*;
import android.net.*;
import android.support.annotation.*;
+import android.support.v7.app.AlertDialog;
+import android.view.*;
+import android.widget.*;
import org.isoron.uhabits.*;
import org.isoron.uhabits.activities.*;
@@ -41,25 +44,26 @@ import javax.inject.*;
import static android.os.Build.VERSION.*;
import static android.os.Build.VERSION_CODES.*;
+import static org.isoron.uhabits.utils.InterfaceUtils.*;
@ActivityScope
public class ListHabitsScreen extends BaseScreen
implements CommandRunner.Listener
{
- public static final int RESULT_IMPORT_DATA = 1;
+ public static final int REQUEST_OPEN_DOCUMENT = 6;
+
+ public static final int REQUEST_SETTINGS = 7;
+
+ public static final int RESULT_BUG_REPORT = 4;
public static final int RESULT_EXPORT_CSV = 2;
public static final int RESULT_EXPORT_DB = 3;
- public static final int RESULT_BUG_REPORT = 4;
+ public static final int RESULT_IMPORT_DATA = 1;
public static final int RESULT_REPAIR_DB = 5;
- public static final int REQUEST_OPEN_DOCUMENT = 6;
-
- public static final int REQUEST_SETTINGS = 7;
-
@Nullable
private ListHabitsController controller;
@@ -97,11 +101,16 @@ public class ListHabitsScreen extends BaseScreen
@NonNull ListHabitsRootView rootView,
@NonNull IntentFactory intentFactory,
@NonNull ThemeSwitcher themeSwitcher,
- @NonNull ConfirmDeleteDialogFactory confirmDeleteDialogFactory,
- @NonNull CreateHabitDialogFactory createHabitDialogFactory,
- @NonNull FilePickerDialogFactory filePickerDialogFactory,
- @NonNull ColorPickerDialogFactory colorPickerFactory,
- @NonNull EditHabitDialogFactory editHabitDialogFactory)
+ @NonNull
+ ConfirmDeleteDialogFactory confirmDeleteDialogFactory,
+ @NonNull
+ CreateHabitDialogFactory createHabitDialogFactory,
+ @NonNull
+ FilePickerDialogFactory filePickerDialogFactory,
+ @NonNull
+ ColorPickerDialogFactory colorPickerFactory,
+ @NonNull
+ EditHabitDialogFactory editHabitDialogFactory)
{
super(activity);
setRootView(rootView);
@@ -139,60 +148,7 @@ public class ListHabitsScreen extends BaseScreen
if (requestCode == REQUEST_OPEN_DOCUMENT)
onOpenDocumentResult(resultCode, data);
- if (requestCode == REQUEST_SETTINGS)
- onSettingsResult(resultCode);
- }
-
- private void onSettingsResult(int resultCode)
- {
- if (controller == null) return;
-
- switch (resultCode)
- {
- case RESULT_IMPORT_DATA:
- showImportScreen();
- break;
-
- case RESULT_EXPORT_CSV:
- controller.onExportCSV();
- break;
-
- case RESULT_EXPORT_DB:
- controller.onExportDB();
- break;
-
- case RESULT_BUG_REPORT:
- controller.onSendBugReport();
- break;
-
- case RESULT_REPAIR_DB:
- controller.onRepairDB();
- break;
- }
- }
-
- private void onOpenDocumentResult(int resultCode, Intent data)
- {
- if (controller == null) return;
- if (resultCode != Activity.RESULT_OK) return;
-
- try
- {
- Uri uri = data.getData();
- ContentResolver cr = activity.getContentResolver();
- InputStream is = cr.openInputStream(uri);
-
- File cacheDir = activity.getExternalCacheDir();
- File tempFile = File.createTempFile("import", "", cacheDir);
-
- FileUtils.copy(is, tempFile);
- controller.onImportData(tempFile, () -> tempFile.delete());
- }
- catch (IOException e)
- {
- showMessage(R.string.could_not_import);
- e.printStackTrace();
- }
+ if (requestCode == REQUEST_SETTINGS) onSettingsResult(resultCode);
}
public void setController(@Nullable ListHabitsController controller)
@@ -238,6 +194,36 @@ public class ListHabitsScreen extends BaseScreen
activity.showDialog(dialog, "editHabit");
}
+ public void showNumberPicker(int initialValue,
+ @NonNull NumberPickerCallback callback)
+ {
+ LayoutInflater inflater = activity.getLayoutInflater();
+ View view = inflater.inflate(R.layout.number_picker_dialog, null);
+
+ final NumberPicker picker =
+ (NumberPicker) view.findViewById(R.id.picker);
+
+ picker.setMinValue(0);
+ picker.setMaxValue(Integer.MAX_VALUE);
+ picker.setValue(initialValue);
+ picker.setWrapSelectorWheel(false);
+
+ AlertDialog.Builder builder = new AlertDialog.Builder(activity);
+ builder
+ .setView(view)
+ .setTitle(R.string.change_value)
+ .setPositiveButton(android.R.string.ok, (dialog, which) ->
+ {
+ callback.onNumberPicked(picker.getValue());
+ });
+
+ AlertDialog dialog = builder.create();
+ dialog.show();
+ int width = (int) dpToPixels(activity, 200);
+ int height = (int) dpToPixels(activity, 275);
+ dialog.getWindow().setLayout(width, height);
+ }
+
public void showFAQScreen()
{
Intent intent = intentFactory.viewFAQ(activity);
@@ -278,7 +264,9 @@ public class ListHabitsScreen extends BaseScreen
FilePickerDialog picker = filePickerDialogFactory.create(dir);
if (controller != null)
- picker.setListener(file -> controller.onImportData(file, () -> {}));
+ picker.setListener(file -> controller.onImportData(file, () ->
+ {
+ }));
activity.showDialog(picker.getDialog());
}
@@ -300,4 +288,61 @@ public class ListHabitsScreen extends BaseScreen
themeSwitcher.toggleNightMode();
activity.restartWithFade();
}
+
+ private void onOpenDocumentResult(int resultCode, Intent data)
+ {
+ if (controller == null) return;
+ if (resultCode != Activity.RESULT_OK) return;
+
+ try
+ {
+ Uri uri = data.getData();
+ ContentResolver cr = activity.getContentResolver();
+ InputStream is = cr.openInputStream(uri);
+
+ File cacheDir = activity.getExternalCacheDir();
+ File tempFile = File.createTempFile("import", "", cacheDir);
+
+ FileUtils.copy(is, tempFile);
+ controller.onImportData(tempFile, () -> tempFile.delete());
+ }
+ catch (IOException e)
+ {
+ showMessage(R.string.could_not_import);
+ e.printStackTrace();
+ }
+ }
+
+ private void onSettingsResult(int resultCode)
+ {
+ if (controller == null) return;
+
+ switch (resultCode)
+ {
+ case RESULT_IMPORT_DATA:
+ showImportScreen();
+ break;
+
+ case RESULT_EXPORT_CSV:
+ controller.onExportCSV();
+ break;
+
+ case RESULT_EXPORT_DB:
+ controller.onExportDB();
+ break;
+
+ case RESULT_BUG_REPORT:
+ controller.onSendBugReport();
+ break;
+
+ case RESULT_REPAIR_DB:
+ controller.onRepairDB();
+ break;
+ }
+ }
+
+ public interface NumberPickerCallback
+ {
+ void onNumberPicked(int newValue);
+ }
}
diff --git a/app/src/main/res/layout/number_picker_dialog.xml b/app/src/main/res/layout/number_picker_dialog.xml
new file mode 100644
index 000000000..396f9c819
--- /dev/null
+++ b/app/src/main/res/layout/number_picker_dialog.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index a28e7e576..0933fdf6f 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -206,4 +206,5 @@
Export
Press-and-hold to change the
value
+ Change value
\ No newline at end of file