From f6ed52152a98ce581038ad86201502f2b2a4767d Mon Sep 17 00:00:00 2001 From: Rechee Date: Tue, 1 May 2018 21:29:39 -0700 Subject: [PATCH] Fixed plurals problem with habit(s) deletion --- .../androidbase/activities/BaseScreen.java | 14 +++- .../habits/list/ListHabitsScreen.kt | 73 +++++++++++-------- .../src/main/res/values/strings.xml | 4 + .../habits/list/ListHabitsScreenTest.kt | 2 +- .../isoron/uhabits/core/commands/Command.java | 4 + .../core/commands/DeleteHabitsCommand.java | 5 ++ 6 files changed, 69 insertions(+), 33 deletions(-) diff --git a/android-base/src/main/java/org/isoron/androidbase/activities/BaseScreen.java b/android-base/src/main/java/org/isoron/androidbase/activities/BaseScreen.java index f135a6e62..24dbbb4ef 100644 --- a/android-base/src/main/java/org/isoron/androidbase/activities/BaseScreen.java +++ b/android-base/src/main/java/org/isoron/androidbase/activities/BaseScreen.java @@ -210,15 +210,23 @@ public class BaseScreen */ public void showMessage(@StringRes Integer stringId) { - if (stringId == null || rootView == null) return; + showMessage(activity.getString(stringId)); + } + + public void showMessage(@PluralsRes Integer stringId, int quantity){ + showMessage(activity.getResources().getQuantityString(stringId, quantity)); + } + + private void showMessage(String message) { + if (message == null || rootView == null) return; if (snackbar == null) { - snackbar = Snackbar.make(rootView, stringId, Snackbar.LENGTH_SHORT); + snackbar = Snackbar.make(rootView, message, Snackbar.LENGTH_SHORT); int tvId = android.support.design.R.id.snackbar_text; TextView tv = (TextView) snackbar.getView().findViewById(tvId); tv.setTextColor(Color.WHITE); } - else snackbar.setText(stringId); + else snackbar.setText(message); snackbar.show(); } diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.kt index bda22a46e..303f1f7ec 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.kt @@ -19,28 +19,39 @@ package org.isoron.uhabits.activities.habits.list -import android.app.* -import android.content.* -import android.support.annotation.* -import dagger.* -import org.isoron.androidbase.activities.* -import org.isoron.androidbase.utils.* -import org.isoron.uhabits.* -import org.isoron.uhabits.activities.common.dialogs.* -import org.isoron.uhabits.activities.habits.edit.* -import org.isoron.uhabits.activities.habits.list.views.* +import android.app.Activity +import android.app.AlertDialog +import android.content.Intent +import android.support.annotation.StringRes +import dagger.Lazy +import org.isoron.androidbase.activities.ActivityScope +import org.isoron.androidbase.activities.BaseActivity +import org.isoron.androidbase.activities.BaseScreen +import org.isoron.androidbase.utils.FileUtils +import org.isoron.uhabits.R +import org.isoron.uhabits.activities.common.dialogs.ColorPickerDialogFactory +import org.isoron.uhabits.activities.common.dialogs.ConfirmDeleteDialogFactory +import org.isoron.uhabits.activities.common.dialogs.NumberPickerFactory +import org.isoron.uhabits.activities.habits.edit.EditHabitDialogFactory +import org.isoron.uhabits.activities.habits.list.views.HabitCardListAdapter import org.isoron.uhabits.core.commands.* -import org.isoron.uhabits.core.models.* -import org.isoron.uhabits.core.preferences.* -import org.isoron.uhabits.core.tasks.* -import org.isoron.uhabits.core.ui.* -import org.isoron.uhabits.core.ui.callbacks.* -import org.isoron.uhabits.core.ui.screens.habits.list.* +import org.isoron.uhabits.core.models.Habit +import org.isoron.uhabits.core.preferences.Preferences +import org.isoron.uhabits.core.tasks.TaskRunner +import org.isoron.uhabits.core.ui.ThemeSwitcher +import org.isoron.uhabits.core.ui.callbacks.OnColorPickedCallback +import org.isoron.uhabits.core.ui.callbacks.OnConfirmedCallback +import org.isoron.uhabits.core.ui.screens.habits.list.ListHabitsBehavior import org.isoron.uhabits.core.ui.screens.habits.list.ListHabitsBehavior.Message.* -import org.isoron.uhabits.intents.* -import org.isoron.uhabits.tasks.* -import java.io.* -import javax.inject.* +import org.isoron.uhabits.core.ui.screens.habits.list.ListHabitsMenuBehavior +import org.isoron.uhabits.core.ui.screens.habits.list.ListHabitsSelectionMenuBehavior +import org.isoron.uhabits.intents.IntentFactory +import org.isoron.uhabits.tasks.ExportDBTaskFactory +import org.isoron.uhabits.tasks.ImportDataTask +import org.isoron.uhabits.tasks.ImportDataTaskFactory +import java.io.File +import java.io.IOException +import javax.inject.Inject const val RESULT_IMPORT_DATA = 1 const val RESULT_EXPORT_CSV = 2 @@ -92,7 +103,12 @@ class ListHabitsScreen override fun onCommandExecuted(command: Command, refreshKey: Long?) { if (command.isRemote) return - showMessage(getExecuteString(command)) + if(command is DeleteHabitsCommand){ + showMessage(R.plurals.toast_habits_deleted, command.quantityAffected) + } + else{ + showMessage(getExecuteString(command)) + } } override fun onResult(requestCode: Int, resultCode: Int, data: Intent?) { @@ -225,14 +241,13 @@ class ListHabitsScreen @StringRes private fun getExecuteString(command: Command): Int? { - when (command) { - is ArchiveHabitsCommand -> return R.string.toast_habit_archived - is ChangeHabitColorCommand -> return R.string.toast_habit_changed - is CreateHabitCommand -> return R.string.toast_habit_created - is DeleteHabitsCommand -> return R.string.toast_habit_deleted - is EditHabitCommand -> return R.string.toast_habit_changed - is UnarchiveHabitsCommand -> return R.string.toast_habit_unarchived - else -> return null + return when (command) { + is ArchiveHabitsCommand -> R.string.toast_habit_archived + is ChangeHabitColorCommand -> R.string.toast_habit_changed + is CreateHabitCommand -> R.string.toast_habit_created + is EditHabitCommand -> R.string.toast_habit_changed + is UnarchiveHabitsCommand -> R.string.toast_habit_unarchived + else -> null } } diff --git a/uhabits-android/src/main/res/values/strings.xml b/uhabits-android/src/main/res/values/strings.xml index 5c043b111..cdf996bc0 100644 --- a/uhabits-android/src/main/res/values/strings.xml +++ b/uhabits-android/src/main/res/values/strings.xml @@ -30,6 +30,10 @@ Change color Habit created + + Habit deleted + Habits deleted + Habits deleted Habits restored Nothing to undo diff --git a/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreenTest.kt b/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreenTest.kt index ea206264f..767601508 100644 --- a/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreenTest.kt +++ b/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreenTest.kt @@ -109,7 +109,7 @@ class ListHabitsScreenTest : BaseAndroidJVMTest() { fun testOnCommand() { val c = mock(DeleteHabitsCommand::class.java) screen.onCommandExecuted(c, null) - verify(screen).showMessage(R.string.toast_habit_deleted) + verify(screen).showMessage(R.plurals.toast_habits_deleted, c.quantityAffected) } @Test diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/Command.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/Command.java index 7d48754ba..16182488f 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/Command.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/Command.java @@ -84,4 +84,8 @@ public abstract class Command public abstract Object toRecord(); public abstract void undo(); + + public int getQuantityAffected() { + return 0; + } } diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/DeleteHabitsCommand.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/DeleteHabitsCommand.java index 1a99aa723..972ab9276 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/DeleteHabitsCommand.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/DeleteHabitsCommand.java @@ -102,4 +102,9 @@ public class DeleteHabitsCommand extends Command return command; } } + + @Override + public int getQuantityAffected() { + return selected.size(); + } }